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 8fc50ad..d620ae3 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
@@ -343,7 +343,7 @@
 
     private String getStatusLine(final Bundle[] bundles)
     {
-        int active = 0, installed = 0, resolved = 0;
+        int active = 0, installed = 0, resolved = 0, fragments = 0;
         for ( int i = 0; i < bundles.length; i++ )
         {
             switch ( bundles[i].getState() )
@@ -355,14 +355,21 @@
                     installed++;
                     break;
                 case Bundle.RESOLVED:
-                    resolved++;
+                    if ( bundles[i].getHeaders().get(Constants.FRAGMENT_HOST) != null )
+                    {
+                        fragments++;
+                    }
+                    else
+                    {
+                        resolved++;
+                    }
                     break;
             }
         }
         final StringBuffer buffer = new StringBuffer();
         buffer.append("Bundle information: ");
         appendBundleInfoCount(buffer, "in total", bundles.length);
-        if ( active == bundles.length )
+        if ( active == bundles.length || active + fragments == bundles.length )
         {
             buffer.append(" - all ");
             appendBundleInfoCount(buffer, "active.", bundles.length);
@@ -374,6 +381,11 @@
                 buffer.append(", ");
                 appendBundleInfoCount(buffer, "active", active);
             }
+            if ( fragments != 0 )
+            {
+                buffer.append(", ");
+                appendBundleInfoCount(buffer, "active fragments", fragments);
+            }
             if ( resolved != 0 )
             {
                 buffer.append(", ");
@@ -397,7 +409,7 @@
         jw.key( "name" );
         jw.value( Util.getName( bundle ) );
         jw.key( "state" );
-        jw.value( toStateString( bundle.getState() ) );
+        jw.value( toStateString( bundle ) );
 
         jw.key( "actions" );
         jw.array();
@@ -432,13 +444,17 @@
     }
 
 
-    private String toStateString( int bundleState )
+    private String toStateString( final Bundle bundle )
     {
-        switch ( bundleState )
+        switch ( bundle.getState() )
         {
             case Bundle.INSTALLED:
                 return "Installed";
             case Bundle.RESOLVED:
+                if ( bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null )
+                {
+                    return "Fragment";
+                }
                 return "Resolved";
             case Bundle.STARTING:
                 return "Starting";
@@ -449,7 +465,7 @@
             case Bundle.UNINSTALLED:
                 return "Uninstalled";
             default:
-                return "Unknown: " + bundleState;
+                return "Unknown: " + bundle.getState();
         }
     }
 
@@ -467,12 +483,20 @@
 
     private boolean hasStart( Bundle bundle )
     {
+        if ( bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null )
+        {
+            return false;
+        }
         return bundle.getState() == Bundle.INSTALLED || bundle.getState() == Bundle.RESOLVED;
     }
 
 
     private boolean hasStop( Bundle bundle )
     {
+        if ( bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null )
+        {
+            return false;
+        }
         return bundle.getState() == Bundle.ACTIVE;
     }
 
diff --git a/webconsole/src/main/resources/res/ui/bundles.js b/webconsole/src/main/resources/res/ui/bundles.js
index b9bf12d..30d11dc 100644
--- a/webconsole/src/main/resources/res/ui/bundles.js
+++ b/webconsole/src/main/resources/res/ui/bundles.js
@@ -55,6 +55,9 @@
 }
 
 function actionButton( /* Element */ parent, /* string */ id, /* Obj */ action ) {
+	if ( !action.enabled ) {
+		return;
+	}
 	var enabled = action.enabled;
 	var op = action.link;
 	var opLabel = action.name;
