diff --git a/webconsole-plugins/gogo/pom.xml b/webconsole-plugins/gogo/pom.xml
index 30f9a5e..e155deb 100644
--- a/webconsole-plugins/gogo/pom.xml
+++ b/webconsole-plugins/gogo/pom.xml
@@ -58,38 +58,6 @@
 			</plugin>
             
             <plugin>
-                <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-                <version>1.7.2</version>
-                <!-- As QDox is trying to inspect/load the classes
-                     we have to add a slf4j implementation to the
-                     class path of the plugin - we usually use
-                     a static field for the logger and during class
-                     loading this field requires an slf4j implementation!
-                 -->
-                <dependencies>
-                    <dependency>
-                        <groupId>org.slf4j</groupId>
-                        <artifactId>slf4j-simple</artifactId>
-                        <version>1.5.2</version>
-                    </dependency>
-                </dependencies>
-                <executions>
-                    <execution>
-                        <id>generate-scr-scrdescriptor</id>
-                        <goals>
-                            <goal>scr</goal>
-                        </goals>
-                        <configuration>
-                            <properties>
-                                <service.vendor>The Apache Software Foundation</service.vendor>
-                            </properties>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            
-            <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
                     <source>1.5</source>
@@ -116,9 +84,11 @@
                         <Bundle-NativeCode>
                             META-INF/native/windows32/jansi.dll;osname=Win32;processor=x86,
                             META-INF/native/windows64/jansi.dll;osname=Win32;processor=x86-64,
+                            <!--
                             META-INF/native/linux32/libjansi.so;osname=Linux;processor=x86,
                             META-INF/native/linux64/libjansi.so;osname=Linux;processor=x86-64,
                             META-INF/native/osx/libjansi.jnilib;osname=MacOSX,
+                            -->
                             *
                         </Bundle-NativeCode>
 					</instructions>
@@ -147,12 +117,6 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.5.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.webconsole</artifactId>
             <version>3.0.0</version>
@@ -170,11 +134,5 @@
             <version>2.5</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <version>1.6.0</version>
-            <scope>provided</scope>
-        </dependency>
  	</dependencies>
 </project>
diff --git a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Activator.java b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Activator.java
index b8de725..59703ee 100644
--- a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Activator.java
+++ b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Activator.java
@@ -24,11 +24,21 @@
 
 public class Activator implements BundleActivator {
 
+    private GogoPlugin plugin;
+
     public void start(BundleContext context) throws Exception {
         AnsiConsole.systemInstall();
+
+        this.plugin = new GogoPlugin();
+        this.plugin.register(context);
     }
 
     public void stop(BundleContext context) throws Exception {
+        if (this.plugin != null) {
+            this.plugin.unregister();
+            this.plugin = null;
+        }
+
         AnsiConsole.systemUninstall();
     }
 
diff --git a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Console.java b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Console.java
index c9f37e2..42b3585 100644
--- a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Console.java
+++ b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/Console.java
@@ -45,8 +45,6 @@
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Converter;
 import org.fusesource.jansi.Ansi;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class Console implements Runnable {
 
@@ -62,8 +60,6 @@
 
     public static final String IGNORE_INTERRUPTS = "karaf.ignoreInterrupts";
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(Console.class);
-
     protected CommandSession session;
 
     private ConsoleReader reader;
@@ -160,7 +156,6 @@
                 }
                 session.execute(new String(w.toCharArray()));
             } catch (Exception e) {
-                LOGGER.debug("Error in initialization script", e);
                 System.err.println("Error in initialization script: " + e.getMessage());
             } finally {
                 if (r != null) {
@@ -216,7 +211,6 @@
                 break;
             } catch (Exception t) {
                 try {
-                    LOGGER.info("Exception caught while executing command", t);
                     session.put(LAST_EXCEPTION, t);
                     session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
                     session.getConsole().println(
diff --git a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/GogoPlugin.java b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/GogoPlugin.java
index 323bf49..70b57b2 100644
--- a/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/GogoPlugin.java
+++ b/webconsole-plugins/gogo/src/main/java/org/apache/felix/webconsole/plugins/gogo/impl/GogoPlugin.java
@@ -24,6 +24,7 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.InterruptedIOException;
 import java.io.PipedInputStream;
@@ -32,42 +33,29 @@
 import java.io.PrintWriter;
 import java.util.zip.GZIPOutputStream;
 
-import javax.servlet.Servlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.webconsole.SimpleWebConsolePlugin;
-import org.apache.felix.webconsole.WebConsoleConstants;
 import org.osgi.framework.BundleContext;
 
 /**
  * The <code>GogoPlugin</code>
  */
-@Component
-@Service(Servlet.class)
 public class GogoPlugin extends SimpleWebConsolePlugin {
 
     /** Pseudo class version ID to keep the IDE quite. */
     private static final long serialVersionUID = 1L;
 
-    @Property(name=WebConsoleConstants.PLUGIN_LABEL)
     public static final String LABEL = "gogo";
 
-    @Property(name=WebConsoleConstants.PLUGIN_TITLE)
     public static final String TITLE = "Gogo";
 
     public static final int TERM_WIDTH = 120;
     public static final int TERM_HEIGHT = 39;
 
-    @Reference
     private CommandProcessor commandProcessor;
 
     public GogoPlugin() {
@@ -75,14 +63,18 @@
     }
 
     @Override
-    @Activate
     public void activate(BundleContext bundleContext) {
         super.activate(bundleContext);
+        this.commandProcessor = new CommandProcessor() {
+            public CommandSession createSession(InputStream in, PrintStream out, PrintStream err) {
+                return ((CommandProcessor) getService(CommandProcessor.class.getName())).createSession(in, out, err);
+            }
+        };
     }
 
     @Override
-    @Deactivate
     public void deactivate() {
+        this.commandProcessor = null;
         super.deactivate();
     }
 
