diff --git a/dependencymanager/shell/pom.xml b/dependencymanager/shell/pom.xml
index 9e120d1..43bf3cb 100644
--- a/dependencymanager/shell/pom.xml
+++ b/dependencymanager/shell/pom.xml
@@ -55,6 +55,11 @@
       <artifactId>osgi</artifactId>
       <version>3.1.1</version>
     </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>org.apache.felix.gogo.runtime</artifactId>
+      <version>0.6.0</version>
+    </dependency>
   </dependencies>
   <build>
     <plugins>
@@ -72,7 +77,12 @@
             <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
             <Export-Package></Export-Package>
             <Private-Package>org.apache.felix.dm.shell</Private-Package>
-            <Import-Package>org.apache.felix.dm.management;version="[3.0.0,4.0.0)",org.apache.felix.shell;version="1.0";resolution:=optional,org.osgi.framework;version="1.3",org.eclipse.osgi.framework.console;resolution:=optional</Import-Package>
+            <Import-Package>org.apache.felix.dm.management;version="[3.0.0,4.0.0)",
+            				org.apache.felix.shell;version="1.0";resolution:=optional,
+            				org.osgi.framework;version="1.3",
+            				org.eclipse.osgi.framework.console;resolution:=optional,
+            				org.apache.felix.service.command;resolution:=optional
+          	</Import-Package>
           </instructions>
         </configuration>
       </plugin>
diff --git a/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/Activator.java b/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/Activator.java
index df992db..8446daf 100644
--- a/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/Activator.java
+++ b/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/Activator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.felix.dm.shell;
 
+import java.util.Hashtable;
+
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
@@ -28,18 +30,30 @@
  */
 public class Activator implements BundleActivator {
     public void start(BundleContext context) throws Exception {
+        // Provide DependencyManager shell commands for the old Felix Shell.
         try {
             context.registerService("org.apache.felix.shell.Command", new FelixDMCommand(context), null);
         }
         catch (Throwable t) {
         }
+        // Provide DependencyManager shell commands for the Equinox Shell.
         try {
             context.registerService("org.eclipse.osgi.framework.console.CommandProvider", new EquinoxDMCommand(context), null);
         }
         catch (Throwable t) {
         }
+        // Provide DependencyManager shell commands for the Gogo Shell.
+        try {
+            Hashtable props = new Hashtable();
+            props.put(org.apache.felix.service.command.CommandProcessor.COMMAND_SCOPE, "dependencymanager");
+            props.put(org.apache.felix.service.command.CommandProcessor.COMMAND_FUNCTION, 
+                      new String[] { "dmhelp", "dm", "dmnodeps", "dmnotavail", "dmcompact" });
+            context.registerService(GogoDMCommand.class.getName(), new GogoDMCommand(context), props);
+        }
+        catch (Throwable t) {            
+        }
     }
 
     public void stop(BundleContext context) throws Exception {
-    }
+    }    
 }
diff --git a/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/GogoDMCommand.java b/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/GogoDMCommand.java
new file mode 100644
index 0000000..64d4163
--- /dev/null
+++ b/dependencymanager/shell/src/main/java/org/apache/felix/dm/shell/GogoDMCommand.java
@@ -0,0 +1,81 @@
+package org.apache.felix.dm.shell;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.PrintStream;
+
+import org.osgi.framework.BundleContext;
+
+/**
+ * This class provides DependencyManager commands for the Gogo shell.
+ */
+public class GogoDMCommand extends DMCommand
+{
+    public GogoDMCommand(BundleContext context)
+    {
+        super(context);
+    }
+    
+    public void dmhelp() {
+        System.out.println("dependencymanager:dm -> list DM component diagnostics.");
+        System.out.println("dependencymanager:dm bundleId -> list DM component diagnostics for a given bundle.");
+        System.out.println("dependencymanager:dmnotavail -> list unavailable DM components.");
+        System.out.println("dependencymanager:dmnotavail bundleId -> list unavailable DM components for a given bundle.");
+        System.out.println("dependencymanager:dmnodeps -> list DM component diagnostics without dependencies.");
+        System.out.println("dependencymanager:dmnodeps bundleId-> list DM component diagnostics without dependencies for a given bundle.");
+        System.out.println("dependencymanager:dmcompact -> list DM component compact diagnostics.");
+        System.out.println("dependencymanager:dmcompact bundleId -> list DM component compact diagnostics for a given bundle.");
+    }
+    
+    public void dm() {
+        execute("dm", new String[0]);
+    }
+
+    public void dm(int bundleId) {
+        execute("dm", new String[] { String.valueOf(bundleId) });
+    }
+
+    public void dmnodeps() {
+        execute("dm nodeps", new String[0]);
+    }
+    
+    public void dmnodeps(int bundleId) {
+        execute("dm nodeps", new String[] { String.valueOf(bundleId) });
+    }
+    
+    public void dmnotavail() {
+        execute("dm notavail", new String[0]);
+    }
+   
+   public void dmnotavail(int bundleId) {
+       execute("dm notavail", new String[] { String.valueOf(bundleId) });
+   }
+
+   public void dmcompact() {
+       execute("dm compact", new String[0]);
+   }    
+
+   public void dmcompact(int bundleId) {
+        execute("dm compact", new String[] { String.valueOf(bundleId) });
+   }    
+        
+   private void execute(String line, String[] args) {
+       ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+       ByteArrayOutputStream errorBytes = new ByteArrayOutputStream();
+       PrintStream out = new PrintStream(bytes);
+       PrintStream err = new PrintStream(errorBytes);
+        
+       if (args != null && args.length > 0) {
+           line += " " + args[0]; // Add bundle Id
+       }
+        
+       super.execute(line.toString(), out, err);
+       if (bytes.size() > 0) {
+           System.out.println(new String(bytes.toByteArray()));
+       }
+       if (errorBytes.size() > 0) {
+           System.out.print("Error:\n");
+           System.out.println(new String(errorBytes.toByteArray()));
+       }
+    }
+}
