diff --git a/karaf/gshell/gshell-admin/pom.xml b/karaf/gshell/gshell-admin/pom.xml
index e9bef99..644ea1e 100644
--- a/karaf/gshell/gshell-admin/pom.xml
+++ b/karaf/gshell/gshell-admin/pom.xml
@@ -161,6 +161,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-config/pom.xml b/karaf/gshell/gshell-config/pom.xml
index 9867abb..b240ba7 100644
--- a/karaf/gshell/gshell-config/pom.xml
+++ b/karaf/gshell/gshell-config/pom.xml
@@ -76,6 +76,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-features/pom.xml b/karaf/gshell/gshell-features/pom.xml
index 9f41944..4a4701e 100644
--- a/karaf/gshell/gshell-features/pom.xml
+++ b/karaf/gshell/gshell-features/pom.xml
@@ -92,9 +92,10 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
-                            org.apache.felix.karaf.gshell.core,
                             org.apache.geronimo.gshell.wisdom.registry,
+                            org.apache.felix.karaf.gshell.core,
                             org.springframework.beans.factory.config,
                             *
                         </Import-Package>
diff --git a/karaf/gshell/gshell-log/pom.xml b/karaf/gshell/gshell-log/pom.xml
index 54f765d..7434fdc 100644
--- a/karaf/gshell/gshell-log/pom.xml
+++ b/karaf/gshell/gshell-log/pom.xml
@@ -77,6 +77,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-obr/pom.xml b/karaf/gshell/gshell-obr/pom.xml
index 6ade759..f7e9e6b 100644
--- a/karaf/gshell/gshell-obr/pom.xml
+++ b/karaf/gshell/gshell-obr/pom.xml
@@ -68,8 +68,11 @@
                 <configuration>
                     <instructions>
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
-                        <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
+                        <Export-Package>
+                            ${pom.artifactId}*;version=${project.version}
+                        </Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-osgi/pom.xml b/karaf/gshell/gshell-osgi/pom.xml
index b0af3a7..8fe8173 100644
--- a/karaf/gshell/gshell-osgi/pom.xml
+++ b/karaf/gshell/gshell-osgi/pom.xml
@@ -70,6 +70,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-packages/pom.xml b/karaf/gshell/gshell-packages/pom.xml
index 8479242..617769d 100644
--- a/karaf/gshell/gshell-packages/pom.xml
+++ b/karaf/gshell/gshell-packages/pom.xml
@@ -71,6 +71,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/gshell/gshell-wrapper/pom.xml b/karaf/gshell/gshell-wrapper/pom.xml
index ef6cc5a..02b3456 100644
--- a/karaf/gshell/gshell-wrapper/pom.xml
+++ b/karaf/gshell/gshell-wrapper/pom.xml
@@ -99,6 +99,7 @@
                         <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}*;version=${project.version}</Export-Package>
                         <Import-Package>
+                            org.apache.geronimo.gshell.command,
                             org.apache.geronimo.gshell.wisdom.command,
                             org.apache.geronimo.gshell.wisdom.registry,
                             org.apache.felix.karaf.gshell.core,
diff --git a/karaf/itests/pom.xml b/karaf/itests/pom.xml
index 006b543..18828f4 100644
--- a/karaf/itests/pom.xml
+++ b/karaf/itests/pom.xml
@@ -89,35 +89,6 @@
             <version>4.5</version>
             <scope>test</scope>
         </dependency>
-
-        <dependency>
-            <groupId>org.ops4j.pax.runner.profiles</groupId>
-            <artifactId>log</artifactId>
-            <version>1.3.0</version>
-            <type>composite</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.runner.profiles</groupId>
-            <artifactId>felix.config</artifactId>
-            <version>1.0.10</version>
-            <type>composite</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.runner.profiles</groupId>
-            <artifactId>spring</artifactId>
-            <version>2.5.6</version>
-            <type>composite</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.ops4j.pax.runner.profiles</groupId>
-            <artifactId>spring.dm</artifactId>
-            <version>1.2.0-rc1</version>
-            <type>composite</type>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <repositories>
@@ -125,10 +96,6 @@
             <id>ops4j.releases</id>
             <url>http://repository.ops4j.org/maven2</url>
         </repository>
-        <repository>
-            <id>ops4j.profiles</id>
-            <url>http://scm.ops4j.org/repos/ops4j/projects/pax/runner-repository</url>
-        </repository>
     </repositories>
     <pluginRepositories>
         <pluginRepository>
diff --git a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/AbstractIntegrationTest.java b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/AbstractIntegrationTest.java
index 74e731a..3096f17 100644
--- a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/AbstractIntegrationTest.java
+++ b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/AbstractIntegrationTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.felix.karaf.gshell.itests;
 
+import java.util.Dictionary;
+
 import org.ops4j.pax.exam.CoreOptions;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
@@ -39,6 +41,7 @@
 import org.osgi.framework.Filter;
 import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
 import org.osgi.util.tracker.ServiceTracker;
 
 public abstract class AbstractIntegrationTest {
@@ -71,11 +74,23 @@
             }
             Filter osgiFilter = FrameworkUtil.createFilter(flt);
             tracker = new ServiceTracker(bundleContext, osgiFilter, null);
-            tracker.open();
+            tracker.open(true);
             // Note that the tracker is not closed to keep the reference
-            // This is buggy, has the service reference may change i think
+            // This is buggy, as the service reference may change i think
             Object svc = type.cast(tracker.waitForService(timeout));
             if (svc == null) {
+
+                Dictionary dic = bundleContext.getBundle().getHeaders();
+                System.err.println("Test bundle headers: " + dic);
+                ServiceReference[] refs = bundleContext.getAllServiceReferences(null, null);
+                for (ServiceReference ref : refs) {
+                    System.err.println("ServiceReference: " + ref);
+                }
+                refs = bundleContext.getAllServiceReferences(null, flt);
+                for (ServiceReference ref : refs) {
+                    System.err.println("Filtered ServiceReference: " + ref);
+                }
+
                 throw new RuntimeException("Gave up waiting for service " + flt);
             }
             return type.cast(svc);
@@ -104,50 +119,4 @@
         return CoreOptions.mavenBundle().groupId(groupId).artifactId(artifactId).versionAsInProject();
     }
 
-    @Configuration
-    public static Option[] configuration() {
-        Option[] options = options(
-            // install log service using pax runners profile abstraction (there are more profiles, like DS)
-            profile("log").version("1.3.0"),
-            profile("felix.config").version("1.0.10"),
-            profile("spring.dm").version("1.2.0-rc1"),
-
-            // this is how you set the default log level when using pax logging (logProfile)
-            systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
-            systemProperty("karaf.name").value("root"),
-            systemProperty("karaf.base").value("target/smx.base"),
-            systemProperty("karaf.startLocalConsole").value("false"),
-            systemProperty("karaf.startRemoteShell").value("false"),
-
-            // hack system packages
-            systemPackages("org.apache.felix.karaf.main.spi;version=1.0.0", "org.apache.felix.karaf.jaas.boot"),
-            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.boot")).afterFramework(),
-            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf", "org.apache.felix.karaf.main")).afterFramework(),
-
-            // Bundles
-            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jline"),
-            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-httpclient"),
-            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-jexl"),
-            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-vfs"),
-            mavenBundle("org.apache.mina", "mina-core"),
-            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.oro"),
-            mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.config"),
-            mavenBundle("org.apache.sshd", "sshd-core"),
-            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.core"),
-            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.osgi"),
-            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.log").noStart(),
-
-
-//            mavenBundle("org.apache.felix", "org.apache.felix.bundlerepository"),
-
-            scanFeatures(
-                    maven().groupId("org.apache.felix.karaf").artifactId("apache-felix-karaf").type("xml").classifier("features").versionAsInProject(),
-                    "obr", "wrapper"
-            ),
-
-            felix()
-        );
-        return options;
-    }
-
 }
diff --git a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/CoreTest.java b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/CoreTest.java
index e0cd93a..a29c6a4 100644
--- a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/CoreTest.java
+++ b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/CoreTest.java
@@ -19,27 +19,37 @@
 import org.apache.geronimo.gshell.commandline.CommandLineExecutionFailed;
 import org.apache.geronimo.gshell.registry.NoSuchCommandException;
 import org.apache.geronimo.gshell.shell.Shell;
+import org.apache.geronimo.gshell.command.Command;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Option;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.bootClasspathLibrary;
+import static org.ops4j.pax.exam.CoreOptions.felix;
 import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 import org.osgi.framework.Bundle;
 
 @RunWith(JUnit4TestRunner.class)
-public class CoreTest extends AbstractIntegrationTest{
+public class CoreTest extends AbstractIntegrationTest {
 
     @Test
     public void testHelp() throws Exception {
+        Thread.sleep(5000);
+
         Shell shell = getOsgiService(Shell.class);
         shell.execute("help");
     }
 
     @Test
     public void testInstallCommand() throws Exception {
+        Thread.sleep(5000);
+
         Shell shell = getOsgiService(Shell.class);
 
         try {
@@ -53,10 +63,14 @@
         Bundle b = getInstalledBundle("org.apache.felix.karaf.gshell.log");
         b.start();
 
+        Thread.sleep(1000);
+
         shell.execute("log/display");
 
         b.stop();
 
+        Thread.sleep(1000);
+
         try {
             shell.execute("log/display");
             fail("command should not exist");
@@ -68,6 +82,8 @@
 
     @Test
     public void testCommandGroup() throws Exception {
+        Thread.sleep(5000);
+
         Shell shell = getOsgiService(Shell.class);
         shell.execute("osgi");
         shell.execute("help");
@@ -78,6 +94,9 @@
     public void testCommandGroupAfterInstall() throws Exception {
         Bundle b = getInstalledBundle("org.apache.felix.karaf.gshell.log");
         b.start();
+
+        Thread.sleep(5000);
+
         Shell shell = getOsgiService(Shell.class);
         shell.execute("log");
         shell.execute("help");
@@ -86,7 +105,53 @@
 
     @Configuration
     public static Option[] configuration() {
-        return AbstractIntegrationTest.configuration();
+        Option[] options = options(
+            // this is how you set the default log level when using pax logging (logProfile)
+            systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
+            systemProperty("karaf.name").value("root"),
+            systemProperty("karaf.home").value("target/karaf.home"),
+            systemProperty("karaf.base").value("target/karaf.home"),
+            systemProperty("karaf.startLocalConsole").value("false"),
+            systemProperty("karaf.startRemoteShell").value("false"),
+
+            // hack system packages
+            systemPackages("org.apache.felix.karaf.main.spi;version=1.0.0", "org.apache.felix.karaf.jaas.boot;version=1.2.0"),
+            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.boot")).afterFramework(),
+            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf", "org.apache.felix.karaf.main")).afterFramework(),
+
+            // Log
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
+            // Felix Config Admin
+            mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
+            // Spring-DM
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.aopalliance"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.cglib"),
+            mavenBundle("org.springframework", "spring-aop"),
+            mavenBundle("org.springframework", "spring-beans"),
+            mavenBundle("org.springframework", "spring-context"),
+            mavenBundle("org.springframework", "spring-core"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-core"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-extender"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-io"),
+
+            // Bundles
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jline"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-httpclient"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-jexl"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-vfs"),
+            mavenBundle("org.apache.mina", "mina-core"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.oro"),
+            mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.config"),
+            mavenBundle("org.apache.sshd", "sshd-core"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.core"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.run"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.osgi"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.log").noStart(),
+
+            felix()
+        );
+        return options;
     }
 
 }
diff --git a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/FeaturesTest.java b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/FeaturesTest.java
index 2255846..0b84c73 100644
--- a/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/FeaturesTest.java
+++ b/karaf/itests/src/test/java/org/apache/felix/karaf/gshell/itests/FeaturesTest.java
@@ -16,10 +16,25 @@
  */
 package org.apache.felix.karaf.gshell.itests;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Properties;
+
 import org.apache.geronimo.gshell.shell.Shell;
+import org.apache.geronimo.gshell.command.Command;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Option;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.scanFeatures;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.vmOption;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.waitForRBCFor;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.bootClasspathLibrary;
+import static org.ops4j.pax.exam.CoreOptions.felix;
+import static org.ops4j.pax.exam.CoreOptions.maven;
 import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 
@@ -28,14 +43,69 @@
 
     @Test
     public void testFeatures() throws Exception {
+        Thread.sleep(5000);
+
         Shell shell = getOsgiService(Shell.class);
-        shell.execute("obr");
-        shell.execute("wrapper");
+        shell.execute("obr/listUrl");
+        shell.execute("wrapper/install --help");
     }
 
     @Configuration
     public static Option[] configuration() {
-        return AbstractIntegrationTest.configuration();
+        Option[] options = options(
+            // this is how you set the default log level when using pax logging (logProfile)
+            systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
+            systemProperty("karaf.name").value("root"),
+            systemProperty("karaf.home").value("target/karaf.home"),
+            systemProperty("karaf.base").value("target/karaf.home"),
+            systemProperty("karaf.startLocalConsole").value("false"),
+            systemProperty("karaf.startRemoteShell").value("false"),
+
+            // hack system packages
+            systemPackages("org.apache.felix.karaf.main.spi;version=1.0.0", "org.apache.felix.karaf.jaas.boot;version=1.2.0"),
+            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.boot")).afterFramework(),
+            bootClasspathLibrary(mavenBundle("org.apache.felix.karaf", "org.apache.felix.karaf.main")).afterFramework(),
+
+            // Log
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
+            mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
+            // Felix Config Admin
+            mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
+            // Felix Preferences Service
+            mavenBundle("org.apache.felix", "org.apache.felix.prefs"),
+            // Spring-DM
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.aopalliance"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.cglib"),
+            mavenBundle("org.springframework", "spring-aop"),
+            mavenBundle("org.springframework", "spring-beans"),
+            mavenBundle("org.springframework", "spring-context"),
+            mavenBundle("org.springframework", "spring-core"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-core"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-extender"),
+            mavenBundle("org.springframework.osgi", "spring-osgi-io"),
+
+            // Bundles
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.jline"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-httpclient"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-jexl"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.commons-vfs"),
+            mavenBundle("org.apache.mina", "mina-core"),
+            mavenBundle("org.apache.servicemix.bundles", "org.apache.servicemix.bundles.oro"),
+            mavenBundle("org.apache.felix.karaf.jaas", "org.apache.felix.karaf.jaas.config"),
+            mavenBundle("org.apache.sshd", "sshd-core"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.core"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.run"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.osgi"),
+            mavenBundle("org.apache.felix.karaf.gshell", "org.apache.felix.karaf.gshell.log").noStart(),
+
+            scanFeatures(
+                    maven().groupId("org.apache.felix.karaf").artifactId("apache-felix-karaf").type("xml").classifier("features").versionAsInProject(),
+                    "obr", "wrapper"
+            ),
+
+            felix()
+        );
+        return options;
     }
 
 }
