diff --git a/ipojo/arch-gogo/pom.xml b/ipojo/arch-gogo/pom.xml
index 85aa0db..8175225 100644
--- a/ipojo/arch-gogo/pom.xml
+++ b/ipojo/arch-gogo/pom.xml
@@ -41,7 +41,7 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.ipojo</artifactId>
-            <version>1.6.0</version>
+            <version>1.6.2</version>
         </dependency>
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -59,9 +59,9 @@
             <version>4.0.0</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.felix.gogo</groupId>
+            <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.gogo.runtime</artifactId>
-            <version>0.5.0-SNAPSHOT</version>
+            <version>0.7.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
     <build>
@@ -93,6 +93,9 @@
                         <Private-Package>org.apache.felix.ipojo.arch.gogo</Private-Package>
                         <Include-Resource> META-INF/LICENSE=LICENSE,
                             META-INF/NOTICE=NOTICE </Include-Resource>
+                            <Import-Package>
+                                org.apache.felix.service.command;version=0.6.0, *
+                            </Import-Package>
                     </instructions>
                 </configuration>
             </plugin>
diff --git a/ipojo/arch-gogo/src/main/java/org/apache/felix/ipojo/arch/gogo/Arch.java b/ipojo/arch-gogo/src/main/java/org/apache/felix/ipojo/arch/gogo/Arch.java
index 19352bb..ee75edd 100644
--- a/ipojo/arch-gogo/src/main/java/org/apache/felix/ipojo/arch/gogo/Arch.java
+++ b/ipojo/arch-gogo/src/main/java/org/apache/felix/ipojo/arch/gogo/Arch.java
@@ -30,8 +30,7 @@
 import org.apache.felix.ipojo.annotations.ServiceProperty;
 import org.apache.felix.ipojo.architecture.Architecture;
 import org.apache.felix.ipojo.architecture.InstanceDescription;
-import org.osgi.service.command.Descriptor;
-
+import org.apache.felix.service.command.Descriptor;
 /**
  * iPOJO Arch command giving information about the current
  * system architecture. This is a Gogo command.
@@ -45,13 +44,13 @@
     /**
      * Defines the command scope (ipojo).
      */
-    @ServiceProperty(name = "osgi.command.scope")
-    String m_scope = "ipojo";
+    @ServiceProperty(name = "osgi.command.scope", value = "ipojo")
+    String m_scope;
     
     /**
      * Defines the functions (commands). 
      */
-    @ServiceProperty(name = "osgi.command.function")
+    @ServiceProperty(name = "osgi.command.function", value = "{}")
     String[] m_function = new String[] {
         "instances",
         "instance",
@@ -81,7 +80,7 @@
     /**
      * Displays iPOJO instances.
      */
-    @Descriptor(description = "Display iPOJO instances")
+    @Descriptor("Display iPOJO instances")
     public void instances() {
         StringBuffer buffer = new StringBuffer();
         for (int i = 0; i < m_archs.length; i++) {
@@ -108,8 +107,8 @@
      * Displays the architecture of a specific instance.
      * @param instance the instance name
      */
-    @Descriptor(description = "Display the architecture of a specific instance")
-    public void instance(@Descriptor(description = "target instance name") String instance) {
+    @Descriptor("Display the architecture of a specific instance")
+    public void instance(@Descriptor("target instance name") String instance) {
         for (int i = 0; i < m_archs.length; i++) {
             InstanceDescription id = m_archs[i].getInstanceDescription();
             if (id.getName().equalsIgnoreCase(instance)) {
@@ -126,8 +125,8 @@
      * factories are displayed.
      * @param factory the factory name
      */
-    @Descriptor(description = "Display the information about a specific factory")
-    public void factory(@Descriptor(description = "target factory") String factory) {
+    @Descriptor("Display the information about a specific factory")
+    public void factory(@Descriptor("target factory") String factory) {
         boolean found = false;
         PrintStream out = System.out;
         
@@ -150,7 +149,7 @@
     /**
      * Displays the list of public iPOJO factories.
      */
-    @Descriptor(description = "Display iPOJO factories")
+    @Descriptor("Display iPOJO factories")
     public void factories() {
         StringBuffer buffer = new StringBuffer();
         for (int i = 0; i < m_factories.length; i++) {
@@ -171,7 +170,7 @@
     /**
      * Displays the list of available handlers.
      */
-    @Descriptor(description = "Display iPOJO handlers")
+    @Descriptor("Display iPOJO handlers")
     public void handlers() {
         PrintStream out = System.out;
         for (int i = 0; i < m_handlers.length; i++) {
