diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleContextUtil.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleContextUtil.java
new file mode 100644
index 0000000..f76581a
--- /dev/null
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleContextUtil.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.felix.webconsole.internal.core;
+
+
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * The <code>BundleContextUtil</code> class.
+ */
+public class BundleContextUtil
+{
+    /**
+     * If this property is specified (regardless of it's value), the system bundle is used
+     * as a working bundle context. Otherwise the web console bundle context is used.
+     */
+    public static final String FWK_PROP_USE_SYSTEM_BUNDLE = "webconsole.use.systembundle";
+
+    /**
+     * Get the working bundle context: the bundle context to lookup bundles and
+     * services.
+     */
+    public static BundleContext getWorkingBundleContext( final BundleContext bc)
+    {
+        if ( bc.getProperty(FWK_PROP_USE_SYSTEM_BUNDLE) != null )
+        {
+            return bc.getBundle(0).getBundleContext();
+        }
+        return bc;
+    }
+}
\ No newline at end of file
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
index b7cd16c..d96d72c 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundlesConfigurationPrinter.java
@@ -19,10 +19,14 @@
 
 import java.io.PrintWriter;
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.felix.webconsole.internal.AbstractConfigurationPrinter;
-import org.osgi.framework.*;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.service.packageadmin.PackageAdmin;
 import org.osgi.util.tracker.ServiceTracker;
 
@@ -101,7 +105,7 @@
      */
     public void printConfiguration( final PrintWriter pw )
     {
-        final Bundle[] bundles = this.getBundleContext().getBundles();
+        final Bundle[] bundles = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getBundles();
         // create a map for sorting first
         final TreeMap bundlesMap = new TreeMap();
         int active = 0, installed = 0, resolved = 0, fragments = 0;
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 7b60b9f..605fb09 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
@@ -474,7 +474,7 @@
             final long bundleId = Long.parseLong( pathInfo );
             if ( bundleId >= 0 )
             {
-                return getBundleContext().getBundle( bundleId );
+                return BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getBundle( bundleId );
             }
         }
         catch ( NumberFormatException nfe )
@@ -492,7 +492,7 @@
             }
 
             // search
-            final Bundle[] bundles = getBundleContext().getBundles();
+            final Bundle[] bundles = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getBundles();
             for(int i=0; i<bundles.length; i++)
             {
                 final Bundle bundle = bundles[i];
@@ -751,7 +751,7 @@
 
     private final Bundle[] getBundles()
     {
-        return getBundleContext().getBundles();
+        return BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getBundles();
     }
 
 
@@ -1672,7 +1672,7 @@
             }
             else
             {
-                Bundle[] bundles = getBundleContext().getBundles();
+                Bundle[] bundles = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getBundles();
                 for ( int i = 0; i < bundles.length; i++ )
                 {
                     if ( ( bundles[i].getLocation() != null && bundles[i].getLocation().equals( location ) )
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesConfigurationPrinter.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesConfigurationPrinter.java
index be41582..7c3d160 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesConfigurationPrinter.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/ServicesConfigurationPrinter.java
@@ -30,10 +30,9 @@
 import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.ExportedPackage;
 
 /**
- * ServicesConfigurationPrinter provides a configuration printer for inspecting the 
+ * ServicesConfigurationPrinter provides a configuration printer for inspecting the
  * registered services.
  */
 public class ServicesConfigurationPrinter extends AbstractConfigurationPrinter implements Constants
@@ -131,7 +130,7 @@
         ServiceReference[] refs = null;
         try
         {
-            refs = getBundleContext().getAllServiceReferences(null, null);
+            refs = BundleContextUtil.getWorkingBundleContext(getBundleContext()).getAllServiceReferences(null, null);
         }
         catch (InvalidSyntaxException e)
         {
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 146381d..e6efe0a 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
@@ -152,7 +152,7 @@
         String filterStr = filter.toString();
         try
         {
-            ServiceReference[] refs = getBundleContext().getAllServiceReferences( null, filterStr );
+            ServiceReference[] refs = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences( null, filterStr );
             if ( refs == null || refs.length != 1 )
             {
                 return null;
@@ -176,7 +176,7 @@
         }
         try
         {
-            final ServiceReference[] refs = getBundleContext().getAllServiceReferences( null, filter );
+            final ServiceReference[] refs = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferences( null, filter );
             if ( refs != null )
             {
                 return refs;
@@ -420,5 +420,4 @@
 
         response.getWriter().print( TEMPLATE );
     }
-
 }
