diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/DefaultBrandingPlugin.java b/webconsole/src/main/java/org/apache/felix/webconsole/DefaultBrandingPlugin.java
index 4429c24..a326d59 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/DefaultBrandingPlugin.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/DefaultBrandingPlugin.java
@@ -23,6 +23,8 @@
 import java.io.InputStream;
 import java.util.Properties;
 
+import org.apache.commons.io.IOUtils;
+
 
 /**
  * The <code>DefaultBrandingPlugin</code> class is the default implementation
@@ -129,17 +131,11 @@
                 props.load( ins );
             }
             catch ( IOException ignore )
-            {
+            { /* ignore - will use defaults */
             }
             finally
             {
-                try
-                {
-                    ins.close();
-                }
-                catch ( IOException ignore )
-                {
-                }
+                IOUtils.closeQuietly( ins );
             }
         }
 
@@ -156,6 +152,11 @@
     }
 
 
+    /**
+     * Retrieves the shared instance
+     * 
+     * @return the singleton instance of the object
+     */
     public static DefaultBrandingPlugin getInstance()
     {
         if ( instance == null )
@@ -166,54 +167,81 @@
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getBrandName()
+     */
     public String getBrandName()
     {
         return brandName;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getProductName()
+     */
     public String getProductName()
     {
         return productName;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getProductURL()
+     */
     public String getProductURL()
     {
         return productURL;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getProductImage()
+     */
     public String getProductImage()
     {
         return productImage;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getVendorName()
+     */
     public String getVendorName()
     {
         return vendorName;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getVendorURL()
+     */
     public String getVendorURL()
     {
         return vendorURL;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getVendorImage()
+     */
     public String getVendorImage()
     {
         return vendorImage;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getFavIcon()
+     */
     public String getFavIcon()
     {
         return favIcon;
     }
 
 
+    /**
+     * @see org.apache.felix.webconsole.BrandingPlugin#getMainStyleSheet()
+     */
     public String getMainStyleSheet()
     {
         return mainStyleSheet;
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
index 20636a2..f6ef5c4 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ComponentsServlet.java
@@ -34,6 +34,7 @@
 import org.apache.felix.scr.Reference;
 import org.apache.felix.scr.ScrService;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.json.JSONArray;
@@ -416,21 +417,13 @@
 
     private void keyVal( JSONWriter jw, String key, Object value )
     {
-        if ( key != null && value != null )
+        try
         {
-            try
-            {
-                jw.object();
-                jw.key( "key" );
-                jw.value( key );
-                jw.key( "value" );
-                jw.value( value );
-                jw.endObject();
-            }
-            catch ( JSONException je )
-            {
-                // don't care
-            }
+            WebConsoleUtil.keyVal( jw, key, value );
+        }
+        catch ( JSONException je )
+        {
+            // don't care
         }
     }
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
index 98bb6ce..f53dfe6 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/LogServlet.java
@@ -26,6 +26,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.json.JSONException;
@@ -63,11 +64,12 @@
 
     protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
     {
-        final String minLevel = getParameter( req, "minLevel" );
+        final int minLevel = WebConsoleUtil.getParameterInt( req, "minLevel", LogService.LOG_DEBUG );
+
         resp.setContentType( "application/json" );
         resp.setCharacterEncoding( "utf-8" );
 
-        renderJSON( resp.getWriter(), extractLogLevel( minLevel ) );
+        renderJSON( resp.getWriter(), minLevel );
     }
 
 
@@ -125,28 +127,10 @@
     }
 
 
-    private int extractLogLevel( String minLevel )
-    {
-        if ( minLevel == null )
-            return LogService.LOG_DEBUG;
-
-        int minLogLevel = LogService.LOG_DEBUG;;
-        try
-        {
-            minLogLevel = Integer.parseInt( minLevel );
-        }
-        catch ( Throwable t )
-        {
-            minLogLevel = LogService.LOG_DEBUG;
-        }
-        return minLogLevel;
-    }
-
-
     protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException,
         IOException
     {
-        final String minLevel = getParameter( request, "minLevel" );
+        final int minLevel = WebConsoleUtil.getParameterInt( request, "minLevel", LogService.LOG_DEBUG );
         final String info = request.getPathInfo();
         if ( info.endsWith( ".json" ) )
         {
@@ -154,7 +138,7 @@
             response.setCharacterEncoding( "UTF-8" );
 
             PrintWriter pw = response.getWriter();
-            this.renderJSON( pw, extractLogLevel( minLevel ) );
+            this.renderJSON( pw, minLevel );
             return;
         }
         super.doGet( request, response );
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java
index 152fce7..c0687e6 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BaseUpdateInstallHelper.java
@@ -24,6 +24,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.felix.webconsole.internal.Logger;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
@@ -80,16 +81,7 @@
         }
         finally
         {
-            if ( bundleStream != null )
-            {
-                try
-                {
-                    bundleStream.close();
-                }
-                catch ( IOException ignore )
-                {
-                }
-            }
+            IOUtils.closeQuietly( bundleStream );
         }
 
     }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
index 79cfa25..007a6e6 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesServlet.java
@@ -28,6 +28,7 @@
 import org.apache.felix.bundlerepository.*;
 import org.apache.felix.webconsole.ConfigurationPrinter;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.*;
 import org.apache.felix.webconsole.internal.Logger;
 import org.apache.felix.webconsole.internal.Util;
@@ -661,24 +662,24 @@
 
         jw.key( "props" );
         jw.array();
-        keyVal( jw, "Symbolic Name", bundle.getSymbolicName() );
-        keyVal( jw, "Version", headers.get( Constants.BUNDLE_VERSION ) );
-        keyVal( jw, "Bundle Location", bundle.getLocation() );
-        keyVal( jw, "Last Modification", new Date( bundle.getLastModified() ) );
+        WebConsoleUtil.keyVal( jw, "Symbolic Name", bundle.getSymbolicName() );
+        WebConsoleUtil.keyVal( jw, "Version", headers.get( Constants.BUNDLE_VERSION ) );
+        WebConsoleUtil.keyVal( jw, "Bundle Location", bundle.getLocation() );
+        WebConsoleUtil.keyVal( jw, "Last Modification", new Date( bundle.getLastModified() ) );
 
         String docUrl = ( String ) headers.get( Constants.BUNDLE_DOCURL );
         if ( docUrl != null )
         {
-            keyVal( jw, "Bundle Documentation", docUrl );
+            WebConsoleUtil.keyVal( jw, "Bundle Documentation", docUrl );
         }
 
-        keyVal( jw, "Vendor", headers.get( Constants.BUNDLE_VENDOR ) );
-        keyVal( jw, "Copyright", headers.get( Constants.BUNDLE_COPYRIGHT ) );
-        keyVal( jw, "Description", headers.get( Constants.BUNDLE_DESCRIPTION ) );
+        WebConsoleUtil.keyVal( jw, "Vendor", headers.get( Constants.BUNDLE_VENDOR ) );
+        WebConsoleUtil.keyVal( jw, "Copyright", headers.get( Constants.BUNDLE_COPYRIGHT ) );
+        WebConsoleUtil.keyVal( jw, "Description", headers.get( Constants.BUNDLE_DESCRIPTION ) );
 
-        keyVal( jw, "Start Level", getStartLevel( bundle ) );
+        WebConsoleUtil.keyVal( jw, "Start Level", getStartLevel( bundle ) );
 
-        keyVal( jw, "Bundle Classpath", headers.get( Constants.BUNDLE_CLASSPATH ) );
+        WebConsoleUtil.keyVal( jw, "Bundle Classpath", headers.get( Constants.BUNDLE_CLASSPATH ) );
 
         listFragmentInfo( jw, bundle, pluginRoot );
 
@@ -749,11 +750,11 @@
                     }
                 }
             }
-            keyVal( jw, "Exported Packages", val );
+            WebConsoleUtil.keyVal( jw, "Exported Packages", val );
         }
         else
         {
-            keyVal( jw, "Exported Packages", "None" );
+            WebConsoleUtil.keyVal( jw, "Exported Packages", "None" );
         }
 
         exports = packageAdmin.getExportedPackages( ( Bundle ) null );
@@ -807,7 +808,7 @@
                 val.put( "None" );
             }
 
-            keyVal( jw, "Imported Packages", val );
+            WebConsoleUtil.keyVal( jw, "Imported Packages", val );
         }
 
         if ( !usingBundles.isEmpty() )
@@ -818,7 +819,7 @@
                 Bundle usingBundle = ( Bundle ) ui.next();
                 val.put( getBundleDescriptor( usingBundle, pluginRoot ) );
             }
-            keyVal( jw, "Importing Bundles", val );
+            WebConsoleUtil.keyVal( jw, "Importing Bundles", val );
         }
     }
 
@@ -854,11 +855,11 @@
                     R4Export export = new R4Export( pkgs[i] );
                     collectExport( val, export.getName(), export.getVersion() );
                 }
-                keyVal( jw, "Exported Packages", val );
+                WebConsoleUtil.keyVal( jw, "Exported Packages", val );
             }
             else
             {
-                keyVal( jw, "Exported Packages", "None" );
+                WebConsoleUtil.keyVal( jw, "Exported Packages", "None" );
             }
         }
 
@@ -926,7 +927,7 @@
                     val.put( "None" );
                 }
 
-                keyVal( jw, "Imported Packages", val );
+                WebConsoleUtil.keyVal( jw, "Imported Packages", val );
             }
         }
     }
@@ -972,7 +973,7 @@
             appendProperty( val, refs[i], Constants.SERVICE_DESCRIPTION, "Description" );
             appendProperty( val, refs[i], Constants.SERVICE_VENDOR, "Vendor" );
 
-            keyVal( jw, key, val);
+            WebConsoleUtil.keyVal( jw, key, val);
         }
     }
 
@@ -993,7 +994,7 @@
             val.put( header + ": " + value );
         }
 
-        keyVal( jw, "Manifest Headers", val );
+        WebConsoleUtil.keyVal( jw, "Manifest Headers", val );
     }
 
     private static final String enableLineWrapping(final String value)
@@ -1028,7 +1029,7 @@
                 {
                     val.put( getBundleDescriptor( hostBundles[i], pluginRoot ) );
                 }
-                keyVal( jw, "Host Bundles", val );
+                WebConsoleUtil.keyVal( jw, "Host Bundles", val );
             }
         }
         else
@@ -1041,7 +1042,7 @@
                 {
                     val.put( getBundleDescriptor( fragmentBundles[i], pluginRoot ) );
                 }
-                keyVal( jw, "Fragments Attached", val );
+                WebConsoleUtil.keyVal( jw, "Fragments Attached", val );
             }
         }
 
@@ -1072,20 +1073,6 @@
     }
 
 
-    private void keyVal( JSONWriter jw, String key, Object value ) throws JSONException
-    {
-        if ( key != null && value != null )
-        {
-            jw.object();
-            jw.key( "key" );
-            jw.value( key );
-            jw.key( "value" );
-            jw.value( value );
-            jw.endObject();
-        }
-    }
-
-
     private void collectExport( JSONArray array, String name, Version version )
     {
         StringBuffer val = new StringBuffer();
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
index 7250306..07179ea 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesServlet.java
@@ -31,6 +31,7 @@
 
 import org.apache.felix.webconsole.ConfigurationPrinter;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.json.JSONArray;
@@ -280,20 +281,6 @@
     }
 
 
-    private void keyVal( JSONWriter jw, String key, Object value ) throws JSONException
-    {
-        if ( key != null && value != null )
-        {
-            jw.object();
-            jw.key( "key" );
-            jw.value( key );
-            jw.key( "value" );
-            jw.value( value );
-            jw.endObject();
-        }
-    }
-
-
     private String propertyAsString( ServiceReference ref, String name )
     {
         Object value = ref.getProperty( name );
@@ -343,19 +330,19 @@
             String key = keys[i];
             if ( Constants.SERVICE_PID.equals( key ) )
             {
-                keyVal( jw, "Service PID", service.getProperty( key ) );
+                WebConsoleUtil.keyVal( jw, "Service PID", service.getProperty( key ) );
             }
             else if ( Constants.SERVICE_DESCRIPTION.equals( key ) )
             {
-                keyVal( jw, "Service Description", service.getProperty( key ) );
+                WebConsoleUtil.keyVal( jw, "Service Description", service.getProperty( key ) );
             }
             else if ( Constants.SERVICE_VENDOR.equals( key ) )
             {
-                keyVal( jw, "Service Vendor", service.getProperty( key ) );
+                WebConsoleUtil.keyVal( jw, "Service Vendor", service.getProperty( key ) );
             }
             else if ( !Constants.OBJECTCLASS.equals( key ) && !Constants.SERVICE_ID.equals( key ) )
             {
-                keyVal( jw, key, service.getProperty( key ) );
+                WebConsoleUtil.keyVal( jw, key, service.getProperty( key ) );
             }
 
         }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/SetStartLevelAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/SetStartLevelAction.java
index 5fb9681..d8046ae 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/SetStartLevelAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/SetStartLevelAction.java
@@ -21,6 +21,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.felix.webconsole.Action;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.BaseManagementPlugin;
 import org.osgi.service.startlevel.StartLevel;
 
@@ -54,13 +55,13 @@
         StartLevel sl = getStartLevel();
         if ( sl != null )
         {
-            int bundleSL = this.getParameterInt( request, "bundleStartLevel" );
+            int bundleSL = WebConsoleUtil.getParameterInt( request, "bundleStartLevel", -1 );
             if ( bundleSL > 0 && bundleSL != sl.getInitialBundleStartLevel() )
             {
                 sl.setInitialBundleStartLevel( bundleSL );
             }
 
-            int systemSL = this.getParameterInt( request, "systemStartLevel" );
+            int systemSL = WebConsoleUtil.getParameterInt( request, "systemStartLevel", -1 );
             if ( systemSL > 0 && systemSL != sl.getStartLevel() )
             {
                 sl.setStartLevel( systemSL );
@@ -71,18 +72,4 @@
     }
 
 
-    private int getParameterInt( HttpServletRequest request, String name )
-    {
-        try
-        {
-            return Integer.parseInt( request.getParameter( name ) );
-        }
-        catch ( NumberFormatException nfe )
-        {
-            // don't care
-        }
-
-        return -1;
-    }
-
 }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java
index 8980e09..73d7d74 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateHelper.java
@@ -23,6 +23,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+
+import org.apache.commons.io.IOUtils;
 import org.apache.felix.webconsole.internal.obr.DeployerThread;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
@@ -116,16 +118,7 @@
         }
         finally
         {
-            if ( input != null )
-            {
-                try
-                {
-                    input.close();
-                }
-                catch ( IOException ignore )
-                {
-                }
-            }
+            IOUtils.closeQuietly( input );
         }
 
         // not installed from the bundle location
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
index 599f301..19c1041 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/deppack/DepPackServlet.java
@@ -28,6 +28,7 @@
 import org.apache.commons.fileupload.FileItem;
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.BaseWebConsolePlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.json.JSONException;
@@ -79,7 +80,7 @@
     protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
     {
         // get the uploaded data
-        final String action = getParameter( req, Util.PARAM_ACTION );
+        final String action = WebConsoleUtil.getParameter( req, Util.PARAM_ACTION );
         if ( ACTION_DEPLOY.equals( action ) )
         {
             Map params = ( Map ) req.getAttribute( AbstractWebConsolePlugin.ATTR_FILEUPLOAD );
@@ -232,8 +233,8 @@
 
         jw.key( "props" );
         jw.array();
-        keyVal( jw, "Package Name", pack.getName() );
-        keyVal( jw, "Version", pack.getVersion() );
+        WebConsoleUtil.keyVal( jw, "Package Name", pack.getName() );
+        WebConsoleUtil.keyVal( jw, "Version", pack.getVersion() );
 
         final StringBuffer buffer = new StringBuffer();
         for ( int i = 0; i < pack.getBundleInfos().length; i++ )
@@ -243,24 +244,11 @@
             buffer.append( pack.getBundleInfos()[i].getVersion() );
             buffer.append( "<br/>" );
         }
-        keyVal( jw, "Bundles", buffer.toString() );
+        WebConsoleUtil.keyVal( jw, "Bundles", buffer.toString() );
 
         jw.endArray();
 
         jw.endObject();
     }
 
-
-    private void keyVal( JSONWriter jw, String key, Object value ) throws JSONException
-    {
-        if ( key != null && value != null )
-        {
-            jw.object();
-            jw.key( "key" );
-            jw.value( key );
-            jw.key( "value" );
-            jw.value( value );
-            jw.endObject();
-        }
-    }
 }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/i18n/ConsolePropertyResourceBundle.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/i18n/ConsolePropertyResourceBundle.java
index e73d482..f70b07e 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/i18n/ConsolePropertyResourceBundle.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/i18n/ConsolePropertyResourceBundle.java
@@ -26,6 +26,8 @@
 import java.util.Properties;
 import java.util.ResourceBundle;
 
+import org.apache.commons.io.IOUtils;
+
 
 class ConsolePropertyResourceBundle extends ResourceBundle
 {
@@ -47,20 +49,11 @@
                 props.load( ins );
             }
             catch ( IOException ignore )
-            {
+            { /* ignore */
             }
             finally
             {
-                if ( ins != null )
-                {
-                    try
-                    {
-                        ins.close();
-                    }
-                    catch ( IOException ignore )
-                    {
-                    }
-                }
+                IOUtils.closeQuietly( ins );
             }
 
         }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
index af63df6..27b3ea3 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
@@ -522,31 +522,10 @@
 
 
         // helper method filter the string for "<" before writing
-        private void writeFiltered( final String string )
+        private void writeFiltered( String string )
         {
-            if ( string.indexOf( '<' ) >= 0 )
-            {
-                // TODO: replace with WebConsoleUtil.escapeHtml()
-                // this "convoluted" code replaces "<" by "&lt;"
-                final StringTokenizer tokener = new StringTokenizer( string, "<", true );
-                while ( tokener.hasMoreElements() )
-                {
-                    final String token = tokener.nextToken();
-                    if ( "<".equals( token ) )
-                    {
-                        super.write( "&lt;" );
-                    }
-                    else
-                    {
-                        super.write( token );
-                    }
-                }
-            }
-            else
-            {
-                // no filtering needed write as is
-                super.write( string, 0, string.length() );
-            }
+            string = WebConsoleUtil.escapeHtml(string); // filtering
+            super.write( string, 0, string.length() );
         }
     }
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
index cc6f15b..ef819bd 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/LicenseServlet.java
@@ -33,6 +33,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
@@ -221,16 +222,7 @@
                 }
                 finally
                 {
-                    if ( ins != null )
-                    {
-                        try
-                        {
-                            ins.close();
-                        }
-                        catch ( IOException ignore )
-                        {
-                        }
-                    }
+                    IOUtils.closeQuietly( ins );
                 }
 
                 jw.endArray();
@@ -262,32 +254,16 @@
 
     private String readResource( InputStream resource ) throws IOException
     {
-        Reader r = null;
-        StringBuffer buffer = new StringBuffer();
         try
         {
-            char[] buf = new char[1024];
-            r = new InputStreamReader( resource, "ISO-8859-1" );
-            int num;
-            while ( ( num = r.read( buf ) ) >= 0 )
-            {
-                buffer.append( buf, 0, num );
-            }
+            // return new String(IOUtils.toCharArray(resource, "ISO-8859-1"));
+            // the method below is faster that the one above
+            return new String(IOUtils.toByteArray(resource), "ISO-8859-1");
         }
         finally
         {
-            if ( r != null )
-            {
-                try
-                {
-                    r.close();
-                }
-                catch ( IOException ignore )
-                {
-                }
-            }
+            IOUtils.closeQuietly(resource);
         }
-        return buffer.toString();
     }
 
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ShellServlet.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ShellServlet.java
index 77de81a..36d5bad 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ShellServlet.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ShellServlet.java
@@ -32,6 +32,7 @@
 import org.apache.felix.shell.ShellService;
 import org.apache.felix.webconsole.AbstractWebConsolePlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.apache.felix.webconsole.internal.Util;
 import org.osgi.framework.BundleContext;
@@ -71,7 +72,7 @@
             String command = request.getParameter( "command" );
 
             pw.print( "<span class=\"consolecommand\">-&gt; " );
-            pw.print( command == null ? "" : escapeHtml( command ) );
+            pw.print( command == null ? "" : WebConsoleUtil.escapeHtml( command ) );
             pw.println( "</span><br />" );
 
             if ( command != null && !"".equals( command ) )
@@ -86,12 +87,12 @@
                         true ) );
                     if ( baosOut.size() > 0 )
                     {
-                        pw.print( escapeHtml( new String( baosOut.toByteArray() ) ) );
+                        pw.print( WebConsoleUtil.escapeHtml( new String( baosOut.toByteArray() ) ) );
                     }
                     if ( baosErr.size() > 0 )
                     {
                         pw.print( "<span class=\"error\">" );
-                        pw.print( escapeHtml( new String( baosErr.toByteArray() ) ) );
+                        pw.print( WebConsoleUtil.escapeHtml( new String( baosErr.toByteArray() ) ) );
                         pw.println( "</span>" );
                     }
                 }
@@ -108,7 +109,7 @@
             pw.print( "<span class=\"error\">" );
             StringWriter out = new StringWriter();
             t.printStackTrace( new PrintWriter( out, true ) );
-            pw.print( escapeHtml( out.toString() ) );
+            pw.print( WebConsoleUtil.escapeHtml( out.toString() ) );
             pw.println( "</span>" );
         }
     }
@@ -182,42 +183,4 @@
         super.deactivate();
     }
 
-
-    protected String escapeHtml( String text )
-    {
-        StringBuffer sb = new StringBuffer();
-        for ( int i = 0; i < text.length(); i++ )
-        {
-            char ch = text.charAt( i );
-            if ( ch == '<' )
-            {
-                sb.append( "&lt;" );
-            }
-            else if ( ch == '>' )
-            {
-                sb.append( "&gt;" );
-            }
-            else if ( ch == '&' )
-            {
-                sb.append( "&amp;" );
-            }
-            else if ( ch == ' ' )
-            {
-                sb.append( "&nbsp;" );
-            }
-            else if ( ch == '\r' )
-            {
-            }
-            else if ( ch == '\n' )
-            {
-                sb.append( "<br />\r\n" );
-            }
-            else
-            {
-                sb.append( ch );
-            }
-        }
-
-        return ( sb.toString() );
-    }
 }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index 6e54ad3..8a64a14 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -42,6 +42,7 @@
 import org.apache.felix.webconsole.Action;
 import org.apache.felix.webconsole.BrandingPlugin;
 import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.felix.webconsole.WebConsoleUtil;
 import org.apache.felix.webconsole.internal.Logger;
 import org.apache.felix.webconsole.internal.OsgiManagerPlugin;
 import org.apache.felix.webconsole.internal.Util;
@@ -428,7 +429,7 @@
     protected boolean handleAction( HttpServletRequest req, HttpServletResponse resp ) throws IOException, ServletException
     {
         // check action
-        String actionName = AbstractWebConsolePlugin.getParameter( req, Util.PARAM_ACTION );
+        String actionName = WebConsoleUtil.getParameter( req, Util.PARAM_ACTION );
         if ( actionName != null )
         {
             Action action = ( Action ) this.operations.get( actionName );
@@ -449,7 +450,7 @@
                 }
 
                 // maybe overwrite redirect
-                if ( PARAM_NO_REDIRECT_AFTER_ACTION.equals( AbstractWebConsolePlugin.getParameter( req,
+                if ( PARAM_NO_REDIRECT_AFTER_ACTION.equals( WebConsoleUtil.getParameter( req,
                     PARAM_NO_REDIRECT_AFTER_ACTION ) ) )
                 {
                     resp.setStatus( HttpServletResponse.SC_OK );
