diff --git a/karaf/admin/pom.xml b/karaf/admin/pom.xml
new file mode 100644
index 0000000..8861242
--- /dev/null
+++ b/karaf/admin/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf.webconsole</groupId>
+        <artifactId>karaf</artifactId>
+        <version>0.3.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.karaf.webconsole.karaf</groupId>
+    <artifactId>org.apache.karaf.webconsole.karaf.admin</artifactId>
+    <name>Apache Karaf :: WebConsole :: Karaf :: Admin</name>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.webconsole</groupId>
+            <artifactId>org.apache.karaf.webconsole.core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.karaf.admin</groupId>
+            <artifactId>org.apache.karaf.admin.core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>2.3.5</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Import-Package>
+                            !org.apache.karaf.webconsole.karaf.admin*,
+                            *,
+                            <!-- transient dependencies -->
+                            org.ops4j.pax.wicket.api,
+                            org.ops4j.pax.wicket.util,
+                            org.ops4j.pax.wicket.util.proxy,
+                            <!-- karaf -->
+                            org.apache.karaf.admin
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java
new file mode 100644
index 0000000..d699b75
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminPage.java
@@ -0,0 +1,16 @@
+package org.apache.karaf.webconsole.karaf.admin;
+
+import org.apache.karaf.admin.AdminService;
+import org.apache.karaf.webconsole.core.page.SidebarPage;
+import org.ops4j.pax.wicket.api.PaxWicketBean;
+
+public class AdminPage extends SidebarPage {
+
+    @PaxWicketBean(name = "adminService")
+    protected AdminService admin;
+
+    public AdminPage() {
+        setSidebarProvider(new AdminSidebarProvider());
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminSidebarProvider.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminSidebarProvider.java
new file mode 100644
index 0000000..4077324
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/AdminSidebarProvider.java
@@ -0,0 +1,33 @@
+package org.apache.karaf.webconsole.karaf.admin;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
+import org.apache.karaf.webconsole.core.widget.WidgetProvider;
+import org.apache.karaf.webconsole.karaf.admin.create.CreateInstancePage;
+import org.apache.karaf.webconsole.karaf.admin.list.InstancesPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class AdminSidebarProvider implements SidebarProvider {
+
+    @SuppressWarnings("unchecked")
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        return Arrays.asList(
+            createPageLink(componentId, labelId, "Create instance", CreateInstancePage.class)
+        );
+    }
+
+    public Link<Page> getMasterPageLink(String linkId, String labelId) {
+        return createPageLink(linkId, labelId, "Instances", InstancesPage.class);
+    }
+
+    public List<WidgetProvider> getWidgetProviders() {
+        return Collections.emptyList();
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java
new file mode 100644
index 0000000..e02005f
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.java
@@ -0,0 +1,46 @@
+package org.apache.karaf.webconsole.karaf.admin.create;
+
+import static org.apache.wicket.model.Model.of;
+
+import org.apache.karaf.webconsole.karaf.admin.AdminPage;
+import org.apache.karaf.webconsole.karaf.admin.model.InstanceSettingsExt;
+import org.apache.karaf.webconsole.karaf.admin.model.KarafInstance;
+import org.apache.karaf.webconsole.karaf.admin.settings.InstanceSettingsPanel;
+import org.apache.wicket.Session;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
+
+@PaxWicketMountPoint(mountPoint = "/karaf/admin/create")
+public class CreateInstancePage extends AdminPage {
+
+    public CreateInstancePage() {
+        KarafInstance instance = new KarafInstance();
+        instance.setSettings(new InstanceSettingsExt());
+
+        CompoundPropertyModel<KarafInstance> model = new CompoundPropertyModel<KarafInstance>(instance);
+
+        Form<KarafInstance> form = new Form<KarafInstance>("instance", model);
+        form.add(new TextField<String>("name"));
+        form.add(new InstanceSettingsPanel("settings", of(new InstanceSettingsExt())));
+
+        form.add(new Button("submit") {
+            @Override
+            public void onSubmit() {
+                try {
+                    KarafInstance instance = (KarafInstance) getForm().getModelObject();
+                    admin.createInstance(instance.getName(), instance.getSettings());
+                } catch (Exception e) {
+                    e.printStackTrace();
+
+                    Session.get().error("Cannot create instance");
+                }
+            }
+        });
+
+        add(form);
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java
new file mode 100644
index 0000000..d466b0e
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstanceActionsPanel.java
@@ -0,0 +1,79 @@
+package org.apache.karaf.webconsole.karaf.admin.list;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.karaf.admin.Instance;
+import org.apache.karaf.webconsole.core.table.ActionsPanel;
+import org.apache.wicket.Session;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.model.IModel;
+
+public class InstanceActionsPanel extends ActionsPanel<Instance> {
+
+    public InstanceActionsPanel(String id, IModel<Instance> model) {
+        super(id, model);
+    }
+
+    @Override
+    protected List<Link> getLinks(Instance object, String id) {
+        List<Link> links = new ArrayList<Link>();
+
+        try {
+            if (Instance.STOPPED.equals(object.getState())) {
+                links.add(new Link(id) {
+                    {
+                        add(new Label("label", "Start"));
+                    }
+                    @Override
+                    public void onClick() {
+                        Instance instance = (Instance) InstanceActionsPanel.this.getDefaultModelObject();
+   
+                        try {
+                            instance.start("");
+                        } catch (Exception e) {
+                            Session.get().error("Cannot start instance " + instance.getName());
+                        }
+                    }
+                });
+            } else {
+                links.add(new Link(id) {
+                    {
+                        add(new Label("label", "Stop"));
+                    }
+                    @Override
+                    public void onClick() {
+                        Instance instance = (Instance) InstanceActionsPanel.this.getDefaultModelObject();
+   
+                        try {
+                            instance.stop();
+                        } catch (Exception e) {
+                            Session.get().error("Cannot stop instance " + instance.getName());
+                        }
+                    }
+                });
+            }
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        links.add(new Link(id) {
+            {
+                add(new Label("label", "Destroy"));
+            }
+            @Override
+            public void onClick() {
+                Instance instance = (Instance) InstanceActionsPanel.this.getDefaultModelObject();
+
+                try {
+                    instance.destroy();
+                } catch (Exception e) {
+                    Session.get().error("Cannot destroy instance " + instance.getName());
+                }
+            }
+        });
+
+        return links;
+    }
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.java
new file mode 100644
index 0000000..ac36785
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.java
@@ -0,0 +1,39 @@
+package org.apache.karaf.webconsole.karaf.admin.list;
+
+import static org.apache.wicket.model.Model.of;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.karaf.admin.Instance;
+import org.apache.karaf.webconsole.core.table.OrdinalColumn;
+import org.apache.karaf.webconsole.core.table.PropertyColumnExt;
+import org.apache.karaf.webconsole.karaf.admin.AdminPage;
+import org.apache.karaf.webconsole.karaf.admin.model.InstancesDataProvider;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+
+public class InstancesPage extends AdminPage {
+
+    public InstancesPage() {
+        List<IColumn<Instance>> columns = new ArrayList<IColumn<Instance>>();
+        columns.add(new OrdinalColumn<Instance>());
+        columns.add(new PropertyColumnExt<Instance>("PID", "pid"));
+        columns.add(new PropertyColumnExt<Instance>("Name", "name"));
+        columns.add(new PropertyColumnExt<Instance>("Root", "root"));
+        columns.add(new PropertyColumnExt<Instance>("State", "state"));
+        columns.add(new PropertyColumnExt<Instance>("Location", "location"));
+        columns.add(new AbstractColumn<Instance>(of("Actions")) {
+            public void populateItem(Item<ICellPopulator<Instance>> cellItem, String componentId, IModel<Instance> rowModel) {
+                cellItem.add(new InstanceActionsPanel(componentId, rowModel));
+            }
+        });
+
+        add(new DefaultDataTable<Instance>("instances", columns, new InstancesDataProvider(admin), 20));
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceModel.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceModel.java
new file mode 100644
index 0000000..2e776fa
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceModel.java
@@ -0,0 +1,23 @@
+package org.apache.karaf.webconsole.karaf.admin.model;
+
+import org.apache.karaf.admin.AdminService;
+import org.apache.karaf.admin.Instance;
+import org.apache.wicket.model.LoadableDetachableModel;
+
+public class InstanceModel extends LoadableDetachableModel<Instance> {
+
+    private AdminService admin;
+    private String name;
+
+    public InstanceModel(AdminService admin, Instance object) {
+        super(object);
+        this.admin = admin;
+        this.name = object.getName();
+    }
+
+    @Override
+    protected Instance load() {
+        return admin.getInstance(name);
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceSettingsExt.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceSettingsExt.java
new file mode 100644
index 0000000..9398988
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstanceSettingsExt.java
@@ -0,0 +1,13 @@
+package org.apache.karaf.webconsole.karaf.admin.model;
+
+import java.io.Serializable;
+
+import org.apache.karaf.admin.InstanceSettings;
+
+public class InstanceSettingsExt extends InstanceSettings implements Serializable {
+
+    public InstanceSettingsExt() {
+        super(0, 0, 0, "", "", null, null);
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstancesDataProvider.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstancesDataProvider.java
new file mode 100644
index 0000000..0d9b92f
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/InstancesDataProvider.java
@@ -0,0 +1,35 @@
+package org.apache.karaf.webconsole.karaf.admin.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.karaf.admin.AdminService;
+import org.apache.karaf.admin.Instance;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
+import org.apache.wicket.model.IModel;
+
+public class InstancesDataProvider extends SortableDataProvider<Instance> {
+
+    private AdminService admin;
+
+    public InstancesDataProvider(AdminService admin) {
+        this.admin = admin;
+    }
+
+    public Iterator<? extends Instance> iterator(int first, int count) {
+        List<Instance> list = new ArrayList<Instance>();
+        Collections.addAll(list, admin.getInstances());
+        return list.subList(first, count).iterator();
+    }
+
+    public int size() {
+        return admin.getInstances().length;
+    }
+
+    public IModel<Instance> model(Instance object) {
+        return new InstanceModel(admin, object);
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/KarafInstance.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/KarafInstance.java
new file mode 100644
index 0000000..db9ff47
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/model/KarafInstance.java
@@ -0,0 +1,27 @@
+package org.apache.karaf.webconsole.karaf.admin.model;
+
+import java.io.Serializable;
+
+public class KarafInstance implements Serializable {
+
+    private String name;
+
+    private InstanceSettingsExt settings;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public InstanceSettingsExt getSettings() {
+        return settings;
+    }
+
+    public void setSettings(InstanceSettingsExt settings) {
+        this.settings = settings;
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/navigation/AdminNavigationProvider.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/navigation/AdminNavigationProvider.java
new file mode 100644
index 0000000..79094c3
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/navigation/AdminNavigationProvider.java
@@ -0,0 +1,21 @@
+package org.apache.karaf.webconsole.karaf.admin.navigation;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.NavigationProvider;
+import org.apache.karaf.webconsole.karaf.admin.list.InstancesPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class AdminNavigationProvider implements NavigationProvider {
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        List<Link<Page>> links = new ArrayList<Link<Page>>();
+        links.add(createPageLink(componentId, labelId, "Instances", InstancesPage.class));
+        return links;
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsForm.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsForm.java
new file mode 100644
index 0000000..95b48cd
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsForm.java
@@ -0,0 +1,27 @@
+package org.apache.karaf.webconsole.karaf.admin.settings;
+
+import org.apache.karaf.webconsole.karaf.admin.model.InstanceSettingsExt;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+public class InstanceSettingsForm extends Form<InstanceSettingsExt> {
+
+    public InstanceSettingsForm(String id, IModel<InstanceSettingsExt> model) {
+        super(id, new CompoundPropertyModel<InstanceSettingsExt>(model));
+
+        add(new TextField<Integer>("sshPort"));
+        add(new TextField<Integer>("rmiRegistryPort"));
+        add(new TextField<Integer>("rmiServerPort"));
+
+        add(new TextArea<String>("javaOpts"));
+        add(new TextField<String>("location"));
+
+        // we need additional checks here
+        //add(new TextArea<String>("features"));
+        //add(new TextArea<String>("featureURLs"));
+    }
+
+}
diff --git a/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.java b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.java
new file mode 100644
index 0000000..4fb73de
--- /dev/null
+++ b/karaf/admin/src/main/java/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.java
@@ -0,0 +1,15 @@
+package org.apache.karaf.webconsole.karaf.admin.settings;
+
+import org.apache.karaf.webconsole.karaf.admin.model.InstanceSettingsExt;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+public class InstanceSettingsPanel extends Panel {
+
+    public InstanceSettingsPanel(String id, IModel<InstanceSettingsExt> model) {
+        super(id, model);
+
+        add(new InstanceSettingsForm("settings", model));
+    }
+
+}
diff --git a/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml b/karaf/admin/src/main/resources/OSGI-INF/blueprint/admin.xml
similarity index 60%
copy from karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
copy to karaf/admin/src/main/resources/OSGI-INF/blueprint/admin.xml
index 614ffd6..80f9b58 100644
--- a/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
+++ b/karaf/admin/src/main/resources/OSGI-INF/blueprint/admin.xml
@@ -17,22 +17,13 @@
 -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
 
-    <service interface="org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider">
-        <bean class="org.apache.karaf.webconsole.karaf.internal.navigation.KarafConsoleTabProvider" />
-    </service>
-
-    <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
-
-    <service ref="widgetProvider" interface="org.apache.karaf.webconsole.core.widget.WidgetProvider">
+    <service interface="org.apache.karaf.webconsole.core.navigation.NavigationProvider">
         <service-properties>
-            <entry key="intention" value="dashboard" />
+            <entry key="extends" value="karaf" />
         </service-properties>
+        <bean class="org.apache.karaf.webconsole.karaf.admin.navigation.AdminNavigationProvider" />
     </service>
 
-    <bean id="widgetProvider" class="org.apache.karaf.webconsole.karaf.internal.widget.KarafFeaturesWidgetProvider">
-        <argument ref="featuresService" />
-    </bean>
-
-    <bean id="featuresSidebar" class="org.apache.karaf.webconsole.karaf.internal.sidebar.KarafFeaturesSidebar" />
+    <reference id="adminService" interface="org.apache.karaf.admin.AdminService"/>
 
 </blueprint>
diff --git a/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.html b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.html
new file mode 100644
index 0000000..9dd9b38
--- /dev/null
+++ b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/create/CreateInstancePage.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
+    <wicket:head>
+        <title>Karaf WebConsole</title>
+    </wicket:head>
+
+    <body>
+        <wicket:extend>
+            <h1>Create new instance</h1>
+
+            <form wicket:id="instance">
+                Name<br />
+                <input type="text" wicket:id="name" />
+
+                <div wicket:id="settings"></div>
+
+                <input wicket:id="submit" type="submit" />
+            </form>
+        </wicket:extend>
+    </body>
+</html>
diff --git a/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.html b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.html
new file mode 100644
index 0000000..00e8cf8
--- /dev/null
+++ b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/list/InstancesPage.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
+    <wicket:head>
+        <title>Karaf WebConsole</title>
+    </wicket:head>
+
+    <body>
+        <wicket:extend>
+            <h1>Instances</h1>
+
+            <table wicket:id="instances" class="dataview" />
+
+        </wicket:extend>
+    </body>
+</html>
diff --git a/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.html b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.html
new file mode 100644
index 0000000..44d71a9
--- /dev/null
+++ b/karaf/admin/src/main/resources/org/apache/karaf/webconsole/karaf/admin/settings/InstanceSettingsPanel.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
+    <wicket:head>
+        <title>Karaf WebConsole</title>
+    </wicket:head>
+
+    <wicket:panel>
+        <form wicket:id="settings">
+            SSH port<br />
+            <input type="text" wicket:id="sshPort" />
+
+            <h2>RMI Connector</h2>
+            Registry port<br />
+            <input type="text" wicket:id="rmiRegistryPort" />
+            Server port<br />
+            <input type="text" wicket:id="rmiServerPort" />
+
+            <h2>Runtime</h2>
+            Java process options<br />
+            <textarea wicket:id="javaOpts"></textarea>
+
+            <h2>Read only properties</h2>
+            Instance location<br />
+            <input type="text" wicket:id="location" />
+        </form>
+    </wicket:panel>
+</html>
diff --git a/karaf/core/pom.xml b/karaf/core/pom.xml
new file mode 100644
index 0000000..cf4580f
--- /dev/null
+++ b/karaf/core/pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf.webconsole</groupId>
+        <artifactId>karaf</artifactId>
+        <version>0.3.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.karaf.webconsole.karaf</groupId>
+    <artifactId>org.apache.karaf.webconsole.karaf.core</artifactId>
+    <name>Apache Karaf :: WebConsole :: Karaf :: Core</name>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.webconsole</groupId>
+            <artifactId>org.apache.karaf.webconsole.core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>2.3.5</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Import-Package>
+                            !org.apache.karaf.webconsole.karaf.features*,
+                            *,
+                            <!-- transient dependencies -->
+                            org.ops4j.pax.wicket.api,
+                            org.ops4j.pax.wicket.util,
+                            org.ops4j.pax.wicket.util.proxy,
+                            <!-- karaf -->
+                            org.apache.karaf.features
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java
new file mode 100644
index 0000000..1e81495
--- /dev/null
+++ b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.java
@@ -0,0 +1,26 @@
+package org.apache.karaf.webconsole.karaf.core;
+
+import org.apache.karaf.webconsole.core.page.SecuredPage;
+import org.apache.karaf.webconsole.karaf.core.model.Karaf;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
+
+@PaxWicketMountPoint(mountPoint = "/karaf")
+public class KarafOverviewPage extends SecuredPage {
+
+    public KarafOverviewPage() {
+        setDefaultModel(new CompoundPropertyModel<Karaf>(new Karaf()));
+
+        add(new Label("version"));
+
+        add(new Label("home"));
+        add(new Label("base"));
+        add(new Label("data"));
+        add(new Label("instances"));
+
+        add(new Label("localConsole"));
+        add(new Label("remoteShell"));
+    }
+
+}
diff --git a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/Karaf.java b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/Karaf.java
new file mode 100644
index 0000000..f01a280
--- /dev/null
+++ b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/model/Karaf.java
@@ -0,0 +1,35 @@
+package org.apache.karaf.webconsole.karaf.core.model;
+
+import java.io.Serializable;
+
+public class Karaf implements Serializable {
+
+    public String getVersion() {
+        return System.getProperty("karaf.version");
+    }
+
+    public String getHome() {
+        return System.getProperty("karaf.home");
+    }
+
+    public String getBase() {
+        return System.getProperty("karaf.base");
+    }
+
+    public String getData() {
+        return System.getProperty("karaf.data");
+    }
+
+    public String getInstances() {
+        return System.getProperty("karaf.instances");
+    }
+
+    public Boolean isLocalConsole() {
+        return Boolean.getBoolean("karaf.startLocalConsole");
+    }
+
+    public Boolean isRemoteShell() {
+        return Boolean.getBoolean("karaf.startRemoteShell");
+    }
+
+}
diff --git a/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/navigation/KarafConsoleTabProvider.java b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/navigation/KarafConsoleTabProvider.java
new file mode 100644
index 0000000..4e2f241
--- /dev/null
+++ b/karaf/core/src/main/java/org/apache/karaf/webconsole/karaf/core/navigation/KarafConsoleTabProvider.java
@@ -0,0 +1,23 @@
+package org.apache.karaf.webconsole.karaf.core.navigation;
+
+import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider;
+import org.apache.karaf.webconsole.karaf.core.KarafOverviewPage;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.link.Link;
+
+public class KarafConsoleTabProvider implements ConsoleTabProvider {
+
+    public List<Link<Page>> getItems(String componentId, String labelId) {
+        return Collections.emptyList();
+    }
+
+    public Link<Page> getModuleLink(String componentId, String labelId) {
+        return createPageLink(componentId, labelId, "Karaf", KarafOverviewPage.class);
+    }
+
+}
diff --git a/karaf/core/src/main/resources/OSGI-INF/blueprint/core.xml b/karaf/core/src/main/resources/OSGI-INF/blueprint/core.xml
new file mode 100644
index 0000000..bc8d037
--- /dev/null
+++ b/karaf/core/src/main/resources/OSGI-INF/blueprint/core.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+   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.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="
+        http://www.osgi.org/xmlns/blueprint/v1.0.0
+        http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
+    ">
+
+    <service interface="org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider">
+        <bean class="org.apache.karaf.webconsole.core.navigation.ExtendableConsoleTabProvider">
+            <argument>
+                <bean class="org.apache.karaf.webconsole.karaf.core.navigation.KarafConsoleTabProvider" />
+            </argument>
+            <property name="extensions">
+                <reference-list interface="org.apache.karaf.webconsole.core.navigation.NavigationProvider"
+                    availability="optional" filter="(extends=karaf)" />
+            </property>
+        </bean>
+    </service>
+
+</blueprint>
diff --git a/karaf/core/src/main/resources/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.html b/karaf/core/src/main/resources/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.html
new file mode 100644
index 0000000..107736a
--- /dev/null
+++ b/karaf/core/src/main/resources/org/apache/karaf/webconsole/karaf/core/KarafOverviewPage.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" >
+    <wicket:head>
+        <title>Karaf WebConsole</title>
+    </wicket:head>
+
+    <body>
+        <wicket:extend>
+            <h1>Karaf overview</h1>
+            <p>
+                You run Karaf in version <span wicket:id="version">2.2.3</span>
+            </p>
+
+            <h2>Directories</h2>
+            <ul>
+                <li>
+                    Karaf home <span wicket:id="home">/opt/karaf/2.2.3</span>
+                </li>
+                <li>
+                    Karaf base <span wicket:id="base">/opt/karaf/2.2.3</span>
+                </li>
+                <li>
+                    Karaf data directory <span wicket:id="data">/opt/karaf/2.2.3/data</span>
+                </li>
+                <li>
+                    Karaf instances directory <span wicket:id="instances">/opt/karaf/2.2.3/instances</span>
+                </li>
+            </ul>
+
+            <h2>Consoles</h2>
+            <ul>
+                <li>
+                    Local console is enabled: <span wicket:id="localConsole" />
+                </li>
+                <li>
+                    Remote shell is enabled: <span wicket:id="remoteShell" />
+                </li>
+            </ul>
+        </wicket:extend>
+    </body>
+</html>
\ No newline at end of file
diff --git a/karaf/features/pom.xml b/karaf/features/pom.xml
new file mode 100644
index 0000000..ce757d1
--- /dev/null
+++ b/karaf/features/pom.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.karaf.webconsole</groupId>
+        <artifactId>karaf</artifactId>
+        <version>0.3.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.karaf.webconsole.karaf</groupId>
+    <artifactId>org.apache.karaf.webconsole.karaf.features</artifactId>
+    <name>Apache Karaf :: WebConsole :: Karaf :: Features</name>
+    <packaging>bundle</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.karaf.webconsole</groupId>
+            <artifactId>org.apache.karaf.webconsole.core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.karaf.features</groupId>
+            <artifactId>org.apache.karaf.features.core</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <version>2.3.5</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+                        <Import-Package>
+                            !org.apache.karaf.webconsole.karaf.features*,
+                            *,
+                            <!-- transient dependencies -->
+                            org.ops4j.pax.wicket.api,
+                            org.ops4j.pax.wicket.util,
+                            org.ops4j.pax.wicket.util.proxy,
+                            <!-- karaf -->
+                            org.apache.karaf.features
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeatureModel.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeatureModel.java
similarity index 96%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeatureModel.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeatureModel.java
index ea51ad3..f0202fa 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeatureModel.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeatureModel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal;
+package org.apache.karaf.webconsole.karaf.features;
 
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeaturesProvider.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeaturesProvider.java
similarity index 97%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeaturesProvider.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeaturesProvider.java
index 8b50302..a864ef7 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/FeaturesProvider.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/FeaturesProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal;
+package org.apache.karaf.webconsole.karaf.features;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/KarafFeaturesPage.java
similarity index 90%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/KarafFeaturesPage.java
index ce474a5..f330639 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/KarafFeaturesPage.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/KarafFeaturesPage.java
@@ -1,4 +1,4 @@
-package org.apache.karaf.webconsole.karaf.internal;
+package org.apache.karaf.webconsole.karaf.features;
 
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/MissingFeatureException.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/MissingFeatureException.java
similarity index 94%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/MissingFeatureException.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/MissingFeatureException.java
index 73d85d6..464b478 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/MissingFeatureException.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/MissingFeatureException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal;
+package org.apache.karaf.webconsole.karaf.features;
 
 public class MissingFeatureException extends RuntimeException {
 
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/RepositoriesProvider.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/RepositoriesProvider.java
similarity index 93%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/RepositoriesProvider.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/RepositoriesProvider.java
index 3b685d2..86f640f 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/RepositoriesProvider.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/RepositoriesProvider.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal;
+package org.apache.karaf.webconsole.karaf.features;
 
 import java.util.Arrays;
 import java.util.Iterator;
 
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.Repository;
-import org.apache.karaf.webconsole.karaf.internal.model.RepositoryModel;
+import org.apache.karaf.webconsole.karaf.features.model.RepositoryModel;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesActionsPanel.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesActionsPanel.java
similarity index 97%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesActionsPanel.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesActionsPanel.java
index 8d8f660..e5fa414 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesActionsPanel.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesActionsPanel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.feature;
+package org.apache.karaf.webconsole.karaf.features.feature;
 
 import java.util.Arrays;
 import java.util.List;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.java
similarity index 95%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.java
index cb21c00..0f24ae4 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.feature;
+package org.apache.karaf.webconsole.karaf.features.feature;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -23,8 +23,8 @@
 
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.Repository;
-import org.apache.karaf.webconsole.karaf.internal.FeaturesProvider;
-import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.FeaturesProvider;
+import org.apache.karaf.webconsole.karaf.features.KarafFeaturesPage;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryModel.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryModel.java
similarity index 96%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryModel.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryModel.java
index 17d8762..f1741fb 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryModel.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryModel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.model;
+package org.apache.karaf.webconsole.karaf.features.model;
 
 import java.net.URI;
 
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryNotFoundException.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryNotFoundException.java
similarity index 94%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryNotFoundException.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryNotFoundException.java
index 6548f08..7f5b7bd 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/model/RepositoryNotFoundException.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/model/RepositoryNotFoundException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.model;
+package org.apache.karaf.webconsole.karaf.features.model;
 
 import java.net.URI;
 
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/navigation/KarafConsoleTabProvider.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/navigation/FeaturesNavigationProvider.java
similarity index 71%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/navigation/KarafConsoleTabProvider.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/navigation/FeaturesNavigationProvider.java
index cda7601..bb36469 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/navigation/KarafConsoleTabProvider.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/navigation/FeaturesNavigationProvider.java
@@ -14,30 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.navigation;
+package org.apache.karaf.webconsole.karaf.features.navigation;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider;
-import org.apache.karaf.webconsole.karaf.internal.feature.FeaturesPage;
-import org.apache.karaf.webconsole.karaf.internal.repository.RepositoriesPage;
+import org.apache.karaf.webconsole.core.navigation.NavigationProvider;
+import org.apache.karaf.webconsole.karaf.features.feature.FeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.repository.RepositoriesPage;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.ResourceModel;
 
-public class KarafConsoleTabProvider implements ConsoleTabProvider {
-
-    public Link<Page> getModuleLink(String componentId, String labelId) {
-        return createFeaturesLink(componentId, labelId);
-    }
+public class FeaturesNavigationProvider implements NavigationProvider {
 
     public List<Link<Page>> getItems(String componentId, String labelId) {
         List<Link<Page>> items = new ArrayList<Link<Page>>();
 
-        Link<Page> link = createFeaturesLink(componentId, labelId);
+        Link<Page> link = new BookmarkablePageLink<Page>(componentId, FeaturesPage.class);
+        link.add(new Label(labelId, new ResourceModel("features", "Features")));
+        items.add(link);
 
         link = new BookmarkablePageLink<Page>(componentId, RepositoriesPage.class);
         link.add(new Label(labelId, new ResourceModel("repositories", "Repositories")));
@@ -46,11 +44,5 @@
         return items;
     }
 
-    private Link<Page> createFeaturesLink(String componentId, String labelId) {
-        Link<Page> link = new BookmarkablePageLink<Page>(componentId, FeaturesPage.class);
-        link.add(new Label(labelId, new ResourceModel("features", "Features")));
-
-        return link;
-    }
 
 }
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryForm.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryForm.java
similarity index 97%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryForm.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryForm.java
index 5f1a89f..2653ccc 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryForm.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryForm.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.repository;
+package org.apache.karaf.webconsole.karaf.features.repository;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryPage.java
similarity index 89%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryPage.java
index 31c5a5e..9b1c77b 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryPage.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.repository;
+package org.apache.karaf.webconsole.karaf.features.repository;
 
-import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.KarafFeaturesPage;
 import org.ops4j.pax.wicket.api.PaxWicketMountPoint;
 
 @PaxWicketMountPoint(mountPoint = "/karaf/repositories/add")
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesActionPanel.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesActionPanel.java
similarity index 96%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesActionPanel.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesActionPanel.java
index 888f141..ccbd00f 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesActionPanel.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesActionPanel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.repository;
+package org.apache.karaf.webconsole.karaf.features.repository;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesPage.java
similarity index 92%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesPage.java
index 7b84008..970d836 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesPage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.repository;
+package org.apache.karaf.webconsole.karaf.features.repository;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -23,8 +23,8 @@
 import org.apache.karaf.features.Repository;
 import org.apache.karaf.webconsole.core.page.SidebarPage;
 import org.apache.karaf.webconsole.core.table.OrdinalColumn;
-import org.apache.karaf.webconsole.karaf.internal.KarafFeaturesPage;
-import org.apache.karaf.webconsole.karaf.internal.RepositoriesProvider;
+import org.apache.karaf.webconsole.karaf.features.KarafFeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.RepositoriesProvider;
 import org.apache.wicket.Page;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/sidebar/KarafFeaturesSidebar.java
similarity index 88%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/sidebar/KarafFeaturesSidebar.java
index 7fad1e5..f21f32c 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/sidebar/KarafFeaturesSidebar.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/sidebar/KarafFeaturesSidebar.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.sidebar;
+package org.apache.karaf.webconsole.karaf.features.sidebar;
 
 import static org.apache.karaf.webconsole.core.util.LinkUtils.createPageLink;
 
@@ -24,9 +24,9 @@
 
 import org.apache.karaf.webconsole.core.navigation.SidebarProvider;
 import org.apache.karaf.webconsole.core.widget.WidgetProvider;
-import org.apache.karaf.webconsole.karaf.internal.feature.FeaturesPage;
-import org.apache.karaf.webconsole.karaf.internal.repository.AddRepositoryPage;
-import org.apache.karaf.webconsole.karaf.internal.repository.RepositoriesPage;
+import org.apache.karaf.webconsole.karaf.features.feature.FeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.repository.AddRepositoryPage;
+import org.apache.karaf.webconsole.karaf.features.repository.RepositoriesPage;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.link.Link;
 
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/FeaturesWidgetPanel.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/FeaturesWidgetPanel.java
similarity index 90%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/FeaturesWidgetPanel.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/FeaturesWidgetPanel.java
index ba9aae1..f196cf3 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/FeaturesWidgetPanel.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/FeaturesWidgetPanel.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.widget;
+package org.apache.karaf.webconsole.karaf.features.widget;
 
 import org.apache.karaf.features.Feature;
 import org.apache.karaf.features.FeaturesService;
-import org.apache.karaf.webconsole.karaf.internal.feature.FeaturesPage;
-import org.apache.karaf.webconsole.karaf.internal.repository.RepositoriesPage;
+import org.apache.karaf.webconsole.karaf.features.feature.FeaturesPage;
+import org.apache.karaf.webconsole.karaf.features.repository.RepositoriesPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.panel.Panel;
diff --git a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/KarafFeaturesWidgetProvider.java b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/KarafFeaturesWidgetProvider.java
similarity index 95%
rename from karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/KarafFeaturesWidgetProvider.java
rename to karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/KarafFeaturesWidgetProvider.java
index 756e0ea..4fc4cb0 100644
--- a/karaf/src/main/java/org/apache/karaf/webconsole/karaf/internal/widget/KarafFeaturesWidgetProvider.java
+++ b/karaf/features/src/main/java/org/apache/karaf/webconsole/karaf/features/widget/KarafFeaturesWidgetProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.karaf.webconsole.karaf.internal.widget;
+package org.apache.karaf.webconsole.karaf.features.widget;
 
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.webconsole.core.widget.WidgetProvider;
diff --git a/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml b/karaf/features/src/main/resources/OSGI-INF/blueprint/features.xml
similarity index 80%
rename from karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
rename to karaf/features/src/main/resources/OSGI-INF/blueprint/features.xml
index 614ffd6..781c5f4 100644
--- a/karaf/src/main/resources/OSGI-INF/blueprint/karaf.xml
+++ b/karaf/features/src/main/resources/OSGI-INF/blueprint/features.xml
@@ -17,8 +17,11 @@
 -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
 
-    <service interface="org.apache.karaf.webconsole.core.navigation.ConsoleTabProvider">
-        <bean class="org.apache.karaf.webconsole.karaf.internal.navigation.KarafConsoleTabProvider" />
+    <service interface="org.apache.karaf.webconsole.core.navigation.NavigationProvider">
+        <service-properties>
+            <entry key="extends" value="karaf" />
+        </service-properties>
+        <bean class="org.apache.karaf.webconsole.karaf.features.navigation.FeaturesNavigationProvider" />
     </service>
 
     <reference id="featuresService" interface="org.apache.karaf.features.FeaturesService"/>
@@ -29,10 +32,10 @@
         </service-properties>
     </service>
 
-    <bean id="widgetProvider" class="org.apache.karaf.webconsole.karaf.internal.widget.KarafFeaturesWidgetProvider">
+    <bean id="widgetProvider" class="org.apache.karaf.webconsole.karaf.features.widget.KarafFeaturesWidgetProvider">
         <argument ref="featuresService" />
     </bean>
 
-    <bean id="featuresSidebar" class="org.apache.karaf.webconsole.karaf.internal.sidebar.KarafFeaturesSidebar" />
+    <bean id="featuresSidebar" class="org.apache.karaf.webconsole.karaf.features.sidebar.KarafFeaturesSidebar" />
 
 </blueprint>
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.html b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.html
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.html
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.html
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.properties b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.properties
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage.properties
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage.properties
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage_de.properties b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage_de.properties
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage_de.properties
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage_de.properties
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage_fr.properties b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage_fr.properties
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/FeaturesPage_fr.properties
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/FeaturesPage_fr.properties
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/features.css b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/features.css
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/features.css
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/features.css
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/images/feature_install.png b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/images/feature_install.png
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/images/feature_install.png
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/images/feature_install.png
Binary files differ
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/images/feature_uninstall.png b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/images/feature_uninstall.png
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/feature/images/feature_uninstall.png
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/feature/images/feature_uninstall.png
Binary files differ
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/navigation/package_fr.properties b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/navigation/package_fr.properties
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/navigation/package_fr.properties
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/navigation/package_fr.properties
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.html b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryPage.html
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/repository/AddRepositoryPage.html
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/repository/AddRepositoryPage.html
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.html b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesPage.html
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/repository/RepositoriesPage.html
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/repository/RepositoriesPage.html
diff --git a/karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/widget/FeaturesWidgetPanel.html b/karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/widget/FeaturesWidgetPanel.html
similarity index 100%
rename from karaf/src/main/resources/org/apache/karaf/webconsole/karaf/internal/widget/FeaturesWidgetPanel.html
rename to karaf/features/src/main/resources/org/apache/karaf/webconsole/karaf/features/widget/FeaturesWidgetPanel.html
diff --git a/karaf/pom.xml b/karaf/pom.xml
index 4f130da..05c5020 100644
--- a/karaf/pom.xml
+++ b/karaf/pom.xml
@@ -26,47 +26,34 @@
     </parent>
 
     <groupId>org.apache.karaf.webconsole</groupId>
-    <artifactId>org.apache.karaf.webconsole.karaf</artifactId>
-    <name>Apache Karaf :: WebConsole :: Karaf extension</name>
-    <packaging>bundle</packaging>
+    <artifactId>karaf</artifactId>
+    <name>Apache Karaf :: WebConsole :: Karaf</name>
+    <packaging>pom</packaging>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.karaf.webconsole</groupId>
-            <artifactId>org.apache.karaf.webconsole.core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
+    <modules>
+        <module>core</module>
+        <module>admin</module>
+        <module>features</module>
+    </modules>
 
-        <dependency>
-            <groupId>org.apache.karaf.features</groupId>
-            <artifactId>org.apache.karaf.features.core</artifactId>
-            <version>${karaf.version}</version>
-        </dependency>
-    </dependencies>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.karaf.webconsole</groupId>
+                <artifactId>org.apache.karaf.webconsole.core</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.karaf.features</groupId>
+                <artifactId>org.apache.karaf.features.core</artifactId>
+                <version>${karaf.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.karaf.admin</groupId>
+                <artifactId>org.apache.karaf.admin.core</artifactId>
+                <version>${karaf.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-bundle-plugin</artifactId>
-                <version>2.3.5</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <instructions>
-                        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
-                        <Import-Package>
-                            !org.apache.karaf.webconsole.karaf*,
-                            *,
-                            <!-- transient dependencies -->
-                            org.ops4j.pax.wicket.api,
-                            org.ops4j.pax.wicket.util,
-                            org.ops4j.pax.wicket.util.proxy,
-                            <!-- karaf -->
-                            org.apache.karaf.features
-                        </Import-Package>
-                    </instructions>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-</project>
+</project>
\ No newline at end of file
