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 722ccb8..7f8a027 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
@@ -552,6 +552,8 @@
         }
 
         listServices( jw, bundle );
+        
+        listHeaders( jw, bundle );
 
         jw.endArray();
     }
@@ -797,13 +799,13 @@
         {
             return;
         }
-
+        
         for ( int i = 0; i < refs.length; i++ )
         {
             String key = "Service ID " + refs[i].getProperty( Constants.SERVICE_ID );
-
+            
             JSONArray val = new JSONArray();
-
+            
             appendProperty( val, refs[i], Constants.OBJECTCLASS, "Types" );
             appendProperty( val, refs[i], Constants.SERVICE_PID, "PID" );
             appendProperty( val, refs[i], ConfigurationAdmin.SERVICE_FACTORYPID, "Factory PID" );
@@ -812,10 +814,30 @@
             appendProperty( val, refs[i], ComponentConstants.COMPONENT_FACTORY, "Component Factory" );
             appendProperty( val, refs[i], Constants.SERVICE_DESCRIPTION, "Description" );
             appendProperty( val, refs[i], Constants.SERVICE_VENDOR, "Vendor" );
-
+            
             keyVal( jw, key, val);
         }
     }
+    
+    
+    private void listHeaders( JSONWriter jw, Bundle bundle ) throws JSONException
+    {
+        JSONArray val = new JSONArray();
+
+        Dictionary headers = bundle.getHeaders();
+        Enumeration he = headers.keys();
+        while ( he.hasMoreElements() )
+        {
+            Object header = he.nextElement();
+            String value = String.valueOf(headers.get( header ));
+            // Package headers may be long, support line breaking by
+            // ensuring blanks after comma and semicolon.
+            value = value.replaceAll( "([;,])", "$1 " );
+            val.put( header + ": " + value );
+        }
+
+        keyVal( jw, "Manifest Headers", val );
+    }
 
 
     private void appendProperty( JSONArray array, ServiceReference ref, String name, String label )
