diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
index 0626667..20b27ea 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
@@ -65,6 +65,16 @@
     public static final String GET_RESOURCE_METHOD_NAME = "getResource";
 
     /**
+     * The header fragment read from the templates/main_header.html file
+     */
+    private static String HEADER;
+
+    /**
+     * The footer fragment read from the templates/main_footer.html file
+     */
+    private static String FOOTER;
+
+    /**
      * The reference to the getResource method provided by the
      * {@link #getResourceProvider()}. This is <code>null</code> if there is
      * none or before the first check if there is one.
@@ -646,53 +656,49 @@
         //  8 branding product image (BrandingPlugin.getProductImage())
         //  9 additional HTML code to be inserted into the <head> section
         //    (for example plugin provided CSS links)
-
-        final String header = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"
-
-        + "<html xmlns=\"http://www.w3.org/1999/xhtml\">"
-        + "  <head>"
-        + "    <meta http-equiv=\"Content-Type\" content=\"text/html; utf-8\">"
-        + "    <link rel=\"icon\" href=\"{4}\">"
-        + "    <title>{0} - {1}</title>"
-
-        + "    <link href=\"{2}/res/ui/admin.css\" rel=\"stylesheet\" type=\"text/css\">"
-        + "    <link href=\"{5}\" rel=\"stylesheet\" type=\"text/css\">"
-        + "    {9}"
-
-        + "    <script language=\"JavaScript\">"
-        + "      appRoot = \"{2}\";"
-        + "      pluginRoot = \"{2}/{3}\";"
-        + "    </script>"
-
-        + "    <script src=\"{2}/res/ui/jquery-1.3.2.min.js\" language=\"JavaScript\"></script>"
-        + "    <script src=\"{2}/res/ui/jquery.cookies-2.1.0.min.js\" language=\"JavaScript\"></script>"
-        + "    <script src=\"{2}/res/ui/jquery.tablesorter-2.0.3.min.js\" language=\"JavaScript\"></script>"
-
-        + "    <script src=\"{2}/res/ui/admin.js\" language=\"JavaScript\"></script>"
-        + "    <script src=\"{2}/res/ui/ui.js\" language=\"JavaScript\"></script>"
-
-        + "  </head>"
-        + "  <body>"
-        + "    <div id=\"main\">"
-        + "      <div id=\"lead\">"
-        + "        <h1>"
-        + "          {0}<br>{1}"
-        + "        </h1>"
-        + "        <p>"
-        + "          <a target=\"_blank\" href=\"{6}\" title=\"{7}\"><img src=\"{8}\" border=\"0\"></a>"
-        + "        </p>"
-        + "      </div>";
-        return header;
+        if ( HEADER == null )
+        {
+            HEADER = readTemplateFile( "/templates/main_header.html" );
+        }
+        return HEADER;
     }
 
 
     private final String getFooter()
     {
-        // close <div id="main">, body and html
-        final String footer = "    </div>"
-            + "  </body>"
-            + "</html>";
-        return footer;
+        if ( FOOTER == null )
+        {
+            FOOTER = readTemplateFile( "/templates/main_footer.html" );
+        }
+        return FOOTER;
+    }
+
+
+    /**
+     * Reads the <code>templateFile</code> as a resource through the class
+     * loader of this class converting the binary data into a string using
+     * UTF-8 encoding.
+     * <p>
+     * If the template file cannot read into a string and an exception is
+     * caused, the exception is logged and an empty string returned.
+     *
+     * @param templateFile The absolute path to the template file to read.
+     * @return The contents of the template file as a string or and empty
+     * string if the template file fails to be read.
+     */
+    private final String readTemplateFile( final String templateFile )
+    {
+        try
+        {
+            return IOUtils.toString( getClass().getResourceAsStream( templateFile ), "UTF-8" );
+        }
+        catch ( IOException e )
+        {
+            log( "readTemplateFile: Error loading " + templateFile, e );
+        }
+
+        // fall back to empty contents to prevent NPE
+        return "";
     }
 
 
diff --git a/webconsole/src/main/resources/templates/main_footer.html b/webconsole/src/main/resources/templates/main_footer.html
new file mode 100644
index 0000000..afb7967
--- /dev/null
+++ b/webconsole/src/main/resources/templates/main_footer.html
@@ -0,0 +1,3 @@
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/webconsole/src/main/resources/templates/main_header.html b/webconsole/src/main/resources/templates/main_header.html
new file mode 100644
index 0000000..aee2d16
--- /dev/null
+++ b/webconsole/src/main/resources/templates/main_header.html
@@ -0,0 +1,42 @@
+﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<meta http-equiv="Content-Type" content="text/html; utf-8" />
+	<link rel="icon" href="{4}" />
+	<title>{0} - {1}</title>
+
+	<link href="{2}/res/lib/reset-min.css" rel="stylesheet" type="text/css" />
+	<link href="{2}/res/lib/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
+	<link href="{5}" rel="stylesheet" type="text/css" />
+	{9}
+
+	<script type="text/javascript">
+	// <![CDATA[
+		appRoot = "{2}";
+		pluginRoot = "{2}/{3}";
+	// ]]>
+	</script>
+
+	<script src="{2}/res/lib/jquery-1.3.2.js" type="text/javascript"></script>
+	<script src="{2}/res/lib/jquery-ui-1.7.2.js" type="text/javascript"></script>
+	<script src="{2}/res/lib/jquery-ui-i18n-1.7.2.js" type="text/javascript"></script>
+	<script src="{2}/res/lib/jquery.cookies-2.2.0.js" type="text/javascript"></script>
+	<script src="{2}/res/lib/jquery.tablesorter-2.0.3.js" type="text/javascript"></script>
+	<script src="{2}/res/lib/support.js" type="text/javascript"></script>
+
+	<!-- temporary here - for compatibility untill all plugins are refactored -->
+	<script src="{2}/res/ui/admin.js" type="text/javascript"></script>
+</head>
+
+<body class="ui-widget">
+	<div id="main">
+		<div id="lead"><!-- header: title and logo -->
+			<h1>
+				{0}<br/>{1}
+			</h1>
+			<p>
+				<a rel="external" href="{6}" title="{7}"><img src="{8}" alt="Logo" /></a>
+			</p>
+		</div>
+		<div class="ui-helper-clearfix" style="height:0px">&nbsp;</div>
+		
\ No newline at end of file
