diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java
index 77a2977..6b83f1b 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/OsgiManagerActivator.java
@@ -24,15 +24,15 @@
 
 public class OsgiManagerActivator implements BundleActivator {
 
-    private OsgiManager slingManager;
+    private OsgiManager osgiManager;
     
     public void start(BundleContext bundleContext) {
-        slingManager = new OsgiManager(bundleContext);
+        osgiManager = new OsgiManager(bundleContext);
     }
 
     public void stop(BundleContext arg0) {
-        if (slingManager != null) {
-            slingManager.dispose();
+        if (osgiManager != null) {
+            osgiManager.dispose();
         }
     }
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java
index ef2446c..ee8d885 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/Util.java
@@ -85,16 +85,16 @@
         + "</p>" + "</div>";
 
     /** The name of the request attribute containig the map of FileItems from the POST request */
-    public static final String ATTR_FILEUPLOAD = "org.apache.sling.webmanager.fileupload";
+    public static final String ATTR_FILEUPLOAD = "org.apache.felix.webconsole.fileupload";
 
     public static PrintWriter startHtml(HttpServletResponse resp, String pageTitle) throws IOException {
         resp.setContentType("text/html; utf-8");
 
         PrintWriter pw = resp.getWriter();
 
-        String adminTitle = "Sling Management Console"; // ServletEngine.VERSION.getFullProductName();
-        String productName = "Sling"; // ServletEngine.VERSION.getShortProductName();
-        String productWeb = "http://incubator.apache.org/sling";
+        String adminTitle = "OSGi Management Console"; // ServletEngine.VERSION.getFullProductName();
+        String productName = "Felix"; // ServletEngine.VERSION.getShortProductName();
+        String productWeb = "http://felix.apache.org";
         String vendorName = "http://www.apache.org"; // ServletEngine.VERSION.getVendorWeb();
         String vendorWeb = "http://www.apache.org"; // ServletEngine.VERSION.getVendorWeb();
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/AjaxConfigManagerAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/AjaxConfigManagerAction.java
index dd845b9..d80cf6f 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/AjaxConfigManagerAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/AjaxConfigManagerAction.java
@@ -61,12 +61,6 @@
         return NAME;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest,
-     *      javax.servlet.http.HttpServletResponse)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) throws IOException {
 
@@ -176,11 +170,7 @@
 
         if (ocd != null) {
 
-            String name = ocd.getName();
-            if (props.get("sling.context") != null) {
-                name += " (" + props.get("sling.context") + ")";
-            }
-            json.put("title", name);
+            json.put("title", ocd.getName());
 
             if (ocd.getDescription() != null) {
                 json.put("description", ocd.getDescription());
@@ -307,17 +297,6 @@
             // we should actually also display that one !
             Configuration config = ca.createFactoryConfiguration(pid, null);
 
-            // add sling context into the configuration
-            if (request.getParameter("sling.context") != null) {
-                Dictionary props = config.getProperties();
-                if (props == null) {
-                    props = new Hashtable();
-                }
-                props.put("sling.context",
-                    request.getParameter("sling.context"));
-                config.update(props);
-            }
-
             // request.setAttribute(ATTR_REDIRECT_PARAMETERS, "pid=" +
             // config.getPid());
             return true;
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
index 1fe3ddb..006558c 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/compendium/ConfigManager.java
@@ -106,18 +106,12 @@
                 Object factoryPid = refs[i].getProperty(Constants.SERVICE_PID);
                 if (factoryPid instanceof String) {
                     String pid = (String) factoryPid;
-                    Object slingContext = refs[i].getProperty("sling.context");
                     String name;
                     ObjectClassDefinition ocd = this.getObjectClassDefinition(
                         refs[i].getBundle(), pid, locale);
                     if (ocd != null) {
                         name = ocd.getName() + " (";
-                        if (slingContext != null) {
-                            name += slingContext + ", ";
-                        }
                         name += pid + ")";
-                    } else if (slingContext != null) {
-                        name = pid + " (" + slingContext + ")";
                     } else {
                         name = pid;
                     }
@@ -141,9 +135,6 @@
                 }
 
                 Dictionary props = cfgs[i].getProperties();
-                Object slingContext = (props != null)
-                        ? props.get("sling.context")
-                        : null;
 
                 // insert and entry for the pid
                 ObjectClassDefinition ocd = this.getObjectClassDefinition(
@@ -151,16 +142,11 @@
                 String name;
                 if (ocd != null) {
                     name = ocd.getName() + " (";
-                    if (slingContext != null) {
-                        name += slingContext + ", ";
-                    }
                     name += pid + ")";
 
                     // remove from the list of known pids
                     metaDataPids.remove(pid);
 
-                } else if (slingContext != null) {
-                    name = pid + " (" + slingContext + ")";
                 } else {
                     name = pid;
                 }
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/AjaxBundleDetailsAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/AjaxBundleDetailsAction.java
index a82e303..663c659 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/AjaxBundleDetailsAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/AjaxBundleDetailsAction.java
@@ -94,11 +94,6 @@
         return NAME;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) throws IOException {
         JSONObject result = null;
@@ -342,7 +337,6 @@
             StringBuffer val = new StringBuffer();
 
             appendProperty(val, refs[i], Constants.OBJECTCLASS, "Types");
-            appendProperty(val, refs[i], "sling.context", "Sling Context");
             appendProperty(val, refs[i], Constants.SERVICE_PID, "PID");
             appendProperty(val, refs[i], ConfigurationAdmin.SERVICE_FACTORYPID,
                 "Factory PID");
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleListRender.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleListRender.java
index 3b7b36a..a8c041d 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleListRender.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/BundleListRender.java
@@ -64,30 +64,14 @@
     // }
     // }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.sling.manager.web.internal.Render#getName()
-     */
     public String getName() {
         return NAME;
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.sling.manager.web.internal.Render#getLabel()
-     */
     public String getLabel() {
         return LABEL;
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.sling.manager.web.internal.internal.Render#render(javax.servlet.http.HttpServletRequest,
-     *      javax.servlet.http.HttpServletResponse)
-     */
     public void render(HttpServletRequest request, HttpServletResponse response)
             throws IOException {
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallAction.java
index f6520cd..1f1f6c4 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/InstallAction.java
@@ -58,11 +58,6 @@
         return LABEL;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) {
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/RefreshPackagesAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/RefreshPackagesAction.java
index ccb20e6..d4675c0 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/RefreshPackagesAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/RefreshPackagesAction.java
@@ -36,12 +36,6 @@
         return LABEL;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest,
-     *      javax.servlet.http.HttpServletResponse)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) {
 
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 be76c8a..eea01a2 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
@@ -40,11 +40,6 @@
         return LABEL;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.sling.manager.web.internal.Action#performAction(javax.servlet.http.HttpServletRequest)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) {
 
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateAction.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateAction.java
index 352fcf4..8499afe 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateAction.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/core/UpdateAction.java
@@ -54,11 +54,6 @@
         return LABEL;
     }
 
-    /*
-     * (non-Javadoc)
-     *
-     * @see org.apache.sling.manager.web.internal.internal.Action#performAction(javax.servlet.http.HttpServletRequest)
-     */
     public boolean performAction(HttpServletRequest request,
             HttpServletResponse response) {
 
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 e6ae743..fe1b0be 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
@@ -96,8 +96,6 @@
         pw.println();
 
         this.printSystemProperties(pw);
-        this.printRawFrameworkProperties(pw);
-        this.printAssemblies(pw);
         this.printBundles(pw);
         this.printServices(pw);
         this.printPreferences(pw);
@@ -151,57 +149,36 @@
         pw.println();
     }
 
-    private void printRawFrameworkProperties(PrintWriter pw) {
-        pw.println("*** Raw Framework properties:");
-
-        File file = new File(getBundleContext().getProperty("sling.home"),
-            "sling.properties");
-        if (file.exists()) {
-            Properties props = new Properties();
-            InputStream ins = null;
-            try {
-                ins = new FileInputStream(file);
-                props.load(ins);
-            } catch (IOException ioe) {
-                // handle or ignore
-            } finally {
-                IOUtils.closeQuietly(ins);
-            }
-
-            SortedSet keys = new TreeSet(props.keySet());
-            for (Iterator ki = keys.iterator(); ki.hasNext();) {
-                Object key = ki.next();
-                this.infoLine(pw, null, (String) key, props.get(key));
-            }
-
-        } else {
-            pw.println("  No Framework properties in " + file);
-        }
-
-        pw.println();
-    }
-
-    private void printAssemblies(PrintWriter pw) {
-        pw.println("*** Assemblies:");
-
-        Bundle[] bundles = getBundleContext().getBundles();
-        SortedSet keys = new TreeSet();
-        for (int i = 0; i < bundles.length; i++) {
-            if (bundles[i].getHeaders().get("Assembly-Bundles") != null) {
-                keys.add(this.getBundleString(bundles[i], false));
-            }
-        }
-
-        if (keys.isEmpty()) {
-            pw.println("  No Assemblies installed");
-        } else {
-            for (Iterator ki = keys.iterator(); ki.hasNext();) {
-                this.infoLine(pw, null, null, ki.next());
-            }
-        }
-
-        pw.println();
-    }
+    // This is Sling stuff, we comment it out for now
+//    private void printRawFrameworkProperties(PrintWriter pw) {
+//        pw.println("*** Raw Framework properties:");
+//
+//        File file = new File(getBundleContext().getProperty("sling.home"),
+//            "sling.properties");
+//        if (file.exists()) {
+//            Properties props = new Properties();
+//            InputStream ins = null;
+//            try {
+//                ins = new FileInputStream(file);
+//                props.load(ins);
+//            } catch (IOException ioe) {
+//                // handle or ignore
+//            } finally {
+//                IOUtils.closeQuietly(ins);
+//            }
+//
+//            SortedSet keys = new TreeSet(props.keySet());
+//            for (Iterator ki = keys.iterator(); ki.hasNext();) {
+//                Object key = ki.next();
+//                this.infoLine(pw, null, (String) key, props.get(key));
+//            }
+//
+//        } else {
+//            pw.println("  No Framework properties in " + file);
+//        }
+//
+//        pw.println();
+//    }
 
     private void printBundles(PrintWriter pw) {
         pw.println("*** Bundles:");
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/AbstractObrPlugin.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/AbstractObrPlugin.java
index fcf348b..479ccbf 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/AbstractObrPlugin.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/obr/AbstractObrPlugin.java
@@ -18,8 +18,6 @@
  */
 package org.apache.felix.webconsole.internal.obr;
 
-//import org.apache.sling.osgi.assembly.installer.BundleRepositoryAdmin;
-//import org.apache.sling.osgi.assembly.installer.InstallerService;
 import org.apache.felix.webconsole.internal.BaseManagementPlugin;
 import org.osgi.framework.BundleContext;
 import org.osgi.util.tracker.ServiceTracker;
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java
index f069a9c..172ebbb 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/ConfigurationListener.java
@@ -27,26 +27,26 @@
 
 class ConfigurationListener implements ManagedService {
 
-    private final OsgiManager slingManager;
+    private final OsgiManager osgiManager;
 
-    static ServiceRegistration create(OsgiManager slingManager) {
-        ConfigurationListener cl = new ConfigurationListener(slingManager);
+    static ServiceRegistration create(OsgiManager osgiManager) {
+        ConfigurationListener cl = new ConfigurationListener(osgiManager);
 
         Dictionary props = new Hashtable();
         props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
         props.put(Constants.SERVICE_DESCRIPTION,
-            "Sling Management Console Configuration Receiver");
-        props.put(Constants.SERVICE_PID, slingManager.getClass().getName());
+            "OSGi Management Console Configuration Receiver");
+        props.put(Constants.SERVICE_PID, osgiManager.getClass().getName());
 
-        return slingManager.getBundleContext().registerService(
+        return osgiManager.getBundleContext().registerService(
             ManagedService.class.getName(), cl, props);
     }
 
-    private ConfigurationListener(OsgiManager slingManager) {
-        this.slingManager = slingManager;
+    private ConfigurationListener(OsgiManager osgiManager) {
+        this.osgiManager = osgiManager;
     }
 
     public void updated(Dictionary config) {
-        slingManager.updateConfiguration(config);
+        osgiManager.updateConfiguration(config);
     }
 }
\ No newline at end of file
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 8b55601..d5b33e4 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
@@ -71,7 +71,7 @@
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
- * The <code>Sling Manager</code> TODO
+ * The <code>OSGi Manager</code> TODO
  *
  * @scr.component ds="no" label="%manager.name"
  *                description="%manager.description"
@@ -99,7 +99,7 @@
     private static final String PROP_DEFAULT_RENDER = "default.render";
 
     /**
-     * @scr.property value="Sling Management Console"
+     * @scr.property value="OSGi Management Console"
      */
     private static final String PROP_REALM = "realm";
 
@@ -390,25 +390,25 @@
 
     private static class HttpServiceTracker extends ServiceTracker {
 
-        private final OsgiManager slingManager;
+        private final OsgiManager osgiManager;
 
-        HttpServiceTracker(OsgiManager slingManager) {
-            super(slingManager.getBundleContext(), HttpService.class.getName(),
+        HttpServiceTracker(OsgiManager osgiManager) {
+            super(osgiManager.getBundleContext(), HttpService.class.getName(),
                 null);
-            this.slingManager = slingManager;
+            this.osgiManager = osgiManager;
         }
 
         public Object addingService(ServiceReference reference) {
             Object operation = super.addingService(reference);
             if (operation instanceof HttpService) {
-                slingManager.bindHttpService((HttpService) operation);
+                osgiManager.bindHttpService((HttpService) operation);
             }
             return operation;
         }
 
         public void removedService(ServiceReference reference, Object service) {
             if (service instanceof HttpService) {
-                slingManager.unbindHttpService((HttpService) service);
+                osgiManager.unbindHttpService((HttpService) service);
             }
 
             super.removedService(reference, service);
@@ -417,24 +417,24 @@
 
     private static class OperationServiceTracker extends ServiceTracker {
 
-        private final OsgiManager slingManager;
+        private final OsgiManager osgiManager;
 
-        OperationServiceTracker(OsgiManager slingManager) {
-            super(slingManager.getBundleContext(), Action.SERVICE, null);
-            this.slingManager = slingManager;
+        OperationServiceTracker(OsgiManager osgiManager) {
+            super(osgiManager.getBundleContext(), Action.SERVICE, null);
+            this.osgiManager = osgiManager;
         }
 
         public Object addingService(ServiceReference reference) {
             Object operation = super.addingService(reference);
             if (operation instanceof Action) {
-                slingManager.bindOperation((Action) operation);
+                osgiManager.bindOperation((Action) operation);
             }
             return operation;
         }
 
         public void removedService(ServiceReference reference, Object service) {
             if (service instanceof Action) {
-                slingManager.bindOperation((Action) service);
+                osgiManager.bindOperation((Action) service);
             }
 
             super.removedService(reference, service);
@@ -443,24 +443,24 @@
 
     private static class RenderServiceTracker extends ServiceTracker {
 
-        private final OsgiManager slingManager;
+        private final OsgiManager osgiManager;
 
-        RenderServiceTracker(OsgiManager slingManager) {
-            super(slingManager.getBundleContext(), Render.SERVICE, null);
-            this.slingManager = slingManager;
+        RenderServiceTracker(OsgiManager osgiManager) {
+            super(osgiManager.getBundleContext(), Render.SERVICE, null);
+            this.osgiManager = osgiManager;
         }
 
         public Object addingService(ServiceReference reference) {
             Object operation = super.addingService(reference);
             if (operation instanceof Render) {
-                slingManager.bindRender((Render) operation);
+                osgiManager.bindRender((Render) operation);
             }
             return operation;
         }
 
         public void removedService(ServiceReference reference, Object service) {
             if (service instanceof Render) {
-                slingManager.bindRender((Render) service);
+                osgiManager.bindRender((Render) service);
             }
 
             super.removedService(reference, service);
@@ -472,7 +472,7 @@
 
         // get authentication details
         String realm = this.getProperty(config, PROP_REALM,
-            "Sling Management Console");
+            "OSGi Management Console");
         String userId = this.getProperty(config, PROP_USER_NAME, null);
         String password = this.getProperty(config, PROP_PASSWORD, null);
 
@@ -483,7 +483,6 @@
 
             Dictionary servletConfig = toStringConfig(config);
 
-            // rest of sling
             httpService.registerServlet(this.webManagerRoot, this,
                 servletConfig, httpContext);
             httpService.registerResources(this.webManagerRoot + "/res", "/res",
diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
index 1240735..fe705c9 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContext.java
@@ -74,7 +74,7 @@
     /**
      * Checks the <code>Authorization</code> header of the request for Basic
      * authentication user name and password. If contained, the credentials are
-     * compared to the user name and password set for the Sling Console.
+     * compared to the user name and password set for the OSGi Console.
      * <p>
      * If no user name is set, the <code>Authorization</code> header is
      * ignored and the client is assumed to be authenticated.
diff --git a/webconsole/src/main/resources/OSGI-INF/metatype/metatype.properties b/webconsole/src/main/resources/OSGI-INF/metatype/metatype.properties
index 5384d8f..a57af88 100644
--- a/webconsole/src/main/resources/OSGI-INF/metatype/metatype.properties
+++ b/webconsole/src/main/resources/OSGI-INF/metatype/metatype.properties
@@ -20,25 +20,25 @@
 #
 # This file contains localization strings for configuration labels and
 # descriptions as used in the metatype.xml descriptor generated by the
-# the Sling SCR plugin
+# the Felix SCR plugin
 
 manager.name = OSGi Management Console
 manager.description = Configuration of the OSGi Management Console.
 
 manager.root.name = Root URI
-manager.root.description = The root path to the Sling Management Console.
+manager.root.description = The root path to the OSGi Management Console.
 
 realm.name = Realm
 realm.description = The name of the HTTP Authentication Realm.
 
 username.name = User Name
-username.description = The name of the user allowed to access the Sling \
+username.description = The name of the user allowed to access the OSGi \
  Management Console. To disable authentication clear this value.
 
 password.name = Password
-password.description = The password for the user allowed to access the Sling \
+password.description = The password for the user allowed to access the OSGi \
  Management Console.
  
 default.render.name = Default Page
 default.render.name.description = The name of the default configuration page \
- when invoking the Sling Management console.
\ No newline at end of file
+ when invoking the OSGi Management console.
\ No newline at end of file
diff --git a/webconsole/src/main/resources/res/ui/configmanager.js b/webconsole/src/main/resources/res/ui/configmanager.js
index d15aa17..e0e0027 100644
--- a/webconsole/src/main/resources/res/ui/configmanager.js
+++ b/webconsole/src/main/resources/res/ui/configmanager.js
@@ -62,8 +62,7 @@
     innerHtml += '<input type="submit" class="submit" name="delete" value="Delete" onClick="return confirmDelete();"/>';
     if (obj.isFactory) {
         innerHtml += '&nbsp;&nbsp;&nbsp;';
-        innerHtml += '<input type="submit" class="submit" name="create" value="Create Configuration" onClick="return promptContext(this);" />';
-        innerHtml += '<input type="hidden" name="sling.context" value="" />';
+        innerHtml += '<input type="submit" class="submit" name="create" value="Create Configuration"/>';
     }
     innerHtml += '</td></tr>';
     innerHtml += '</table>';
@@ -214,16 +213,3 @@
 function confirmDelete() {
     return confirm("Are you sure to delete this configuration ?");
 }
-
-function promptContext(form) {
-    var result = prompt("Please give a Sling Context for the new configuration");
-    // alert("You entered: [" + result + "] for form [" + form + "/" + form.form + "]");
-    
-    // set the hidden sling.context input field with the value
-    if (result != null) {
-        form.form["sling.context"].value = result;
-        return true;
-    }
-    
-    return false;
-}
\ No newline at end of file
