diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/EventAdminServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/EventAdminServlet.java
index 3c7b3ae..00f8789 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/EventAdminServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/EventAdminServlet.java
@@ -236,6 +236,8 @@
         final String appRoot = ( String ) request.getAttribute( OsgiManager.ATTR_APP_ROOT );
         Util.script(pw, appRoot, "events.js");
 
+        pw.println( "<div id='plugin_content'/>");
+
         Util.startScript( pw );
         pw.println( "renderEvents( );" );
         Util.endScript( pw );
diff --git a/webconsole/src/main/resources/res/ui/bundles.js b/webconsole/src/main/resources/res/ui/bundles.js
index 7a274df..b9bf12d 100644
--- a/webconsole/src/main/resources/res/ui/bundles.js
+++ b/webconsole/src/main/resources/res/ui/bundles.js
@@ -18,10 +18,10 @@
 	$("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
 }
 
-function renderView( /* Array of String */ columns, /* Array of String */ buttons ) {
+function renderView( /* Array of String */ columns, /* String */ buttons ) {
     renderStatusLine();
     renderButtons(buttons);
-    var txt = "<div class='table'><table id='bundles' class='tablelayout'><thead><tr>";
+    var txt = "<div class='table'><table id='plugin_table' class='tablelayout'><thead><tr>";
     for ( var name in columns ) {
     	txt = txt + "<th class='col_" + columns[name] + "'>" + columns[name] + "</th>";
     }
@@ -38,11 +38,11 @@
 
 function renderData( eventData )  {
 	$(".statusline").empty().append(eventData.status);
-	$("#bundles > tbody > tr").remove();
+	$("#plugin_table > tbody > tr").remove();
     for ( var idx in eventData.data ) {
         entry( eventData.data[idx] );
     }
-    $("#bundles").trigger("update");
+    $("#plugin_table").trigger("update");
     if ( drawDetails ) {
 	    renderDetails(eventData);
     }
@@ -51,7 +51,7 @@
 function entry( /* Object */ dataEntry ) {
     var trElement = tr( null, { id: "entry" + dataEntry.id } );
     entryInternal( trElement,  dataEntry );
-	$("#bundles > tbody").append(trElement);	
+	$("#plugin_table > tbody").append(trElement);	
 }
 
 function actionButton( /* Element */ parent, /* string */ id, /* Obj */ action ) {
@@ -225,7 +225,7 @@
             }
             return node.innerHTML;
         };
-        $("#bundles").tablesorter({
+        $("#plugin_table").tablesorter({
             headers: {
         	    0: { sorter:"digit"},
                 3: { sorter: false }
diff --git a/webconsole/src/main/resources/res/ui/events.js b/webconsole/src/main/resources/res/ui/events.js
index 993a112..e234a57 100644
--- a/webconsole/src/main/resources/res/ui/events.js
+++ b/webconsole/src/main/resources/res/ui/events.js
@@ -15,53 +15,40 @@
  * limitations under the License.
  */
 function renderStatusLine() {
-    document.write( "<div class='fullwidth'>");
-    document.write( "<div class='statusline'></div>" );
-    document.write( "</div>" );
+	$("#plugin_content").append( "<div class='fullwidth'><div class='statusline'/></div>" );
 }
 
-function renderView( /* Array of String */ columns, /* Array of String */ buttons ) {
+function renderView( /* Array of String */ columns, /* String */ buttons ) {
     renderStatusLine();
     renderButtons(buttons);
-	document.write( "<div class='table'>");
-    document.write( "<table id='events' class='tablelayout'>" );
-
-    document.write( "<thead><tr>" );
+    var txt = "<div class='table'><table id='plugin_table' class='tablelayout'><thead><tr>";
     for ( var name in columns ) {
-        document.write( "<th>" + columns[name] + "</th>" );
+    	txt = txt + "<th class='col_" + columns[name] + "'>" + columns[name] + "</th>";
     }
-    document.write( "</tr></thead><tbody>" );
-    document.write( "</tbody></table>" );
-    document.write( "</div>");
+    txt = txt + "</tr></thead><tbody></tbody></table></div>";
+    $("#plugin_content").append( txt );
     renderButtons(buttons);
     renderStatusLine();	
 }
 
 function renderButtons( buttons ) {
-	document.write( "<div class='fullwidth'>");
-    document.write( "<div class='buttons'>" );
-    for( var b in buttons ) {
-    	document.write( "<div class='button'>");
-    	document.write(buttons[b]);
-    	document.write( "</div>");
-    }
-    document.write( "</div>" );
-    document.write( "</div>" );
+	$("#plugin_content").append( "<form method='post' enctype='multipart/form-data'><div class='fullwidth'><div class='buttons'>" +
+	                             buttons + "</div></div></form>" );
 }
 
 function renderData( eventData )  {
 	$(".statusline").empty().append(eventData.status);
-	$("#events > tbody > tr").remove();	
+	$("#plugin_table > tbody > tr").remove();	
     for ( var idx in eventData.data ) {
         entry( eventData.data[idx] );
     }
-    $("#events").trigger("update");
+    $("#plugin_table").trigger("update");
 }
 
 function entry( /* Object */ dataEntry ) {
     var trElement = tr( null, { id: "entry" + dataEntry.id } );
     entryInternal( trElement,  dataEntry );
-	$("#events > tbody").append(trElement);	
+	$("#plugin_table > tbody").append(trElement);	
 }
 
 
@@ -107,18 +94,19 @@
 }
 
 function renderEvents() {
-    renderView( ["Received", "Topic", "Properties"],
-    		["<button class='clearButton' type='button' name='clear'>Clear List</button>",
-    		 "<button class='reloadButton' type='button' name='reload'>Reload</button>"]);
-	
-    loadData();
-    
-    $("#events").tablesorter();
-    $(".reloadButton").click(loadData);
-    $(".clearButton").click(function () {
-    	$("#events > tbody > tr").remove();
-    	$.post(pluginRoot, { "action":"clear" }, function(data) {
-    	    renderData(data);
-    	}, "json");
-    });
+	$(document).ready(function(){
+	    renderView( ["Received", "Topic", "Properties"],
+	    		 "<button class='clearButton' type='button' name='clear'>Clear List</button>" +
+	    		 "<button class='reloadButton' type='button' name='reload'>Reload</button>");
+	    loadData();
+	    
+	    $("#plugin_table").tablesorter();
+	    $(".reloadButton").click(loadData);
+	    $(".clearButton").click(function () {
+	    	$("#plugin_table > tbody > tr").remove();
+	    	$.post(pluginRoot, { "action":"clear" }, function(data) {
+	    	    renderData(data);
+	    	}, "json");
+	    });
+	});
 }
