diff --git a/jaas/pom.xml b/jaas/pom.xml
index e6c5fe0..3496aa7 100644
--- a/jaas/pom.xml
+++ b/jaas/pom.xml
@@ -94,10 +94,10 @@
                         <Bundle-Activator>
                             org.apache.felix.jaas.internal.Activator
                         </Bundle-Activator>
-                        <Import-Package>
-                          javax.servlet.*;resolution:=optional,
-                          *
-                        </Import-Package>
+                        <DynamicImport-Package>
+                          javax.servlet,
+                          javax.servlet.http
+                        </DynamicImport-Package>
                         <_removeheaders>
                             Embed-Dependency,Private-Package,Include-Resource
                         </_removeheaders>
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/Activator.java b/jaas/src/main/java/org/apache/felix/jaas/internal/Activator.java
index cca5ff2..c881000 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/Activator.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/Activator.java
@@ -19,9 +19,14 @@
 
 package org.apache.felix.jaas.internal;
 
+import java.util.Properties;
+
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
-import org.osgi.service.log.LogService;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceRegistration;
 
 public class Activator implements BundleActivator
 {
@@ -66,11 +71,27 @@
     }
 
     private void registerWebConsolePlugin(BundleContext context){
-        try{
-            webConsolePlugin = new JaasWebConsolePlugin(context, configSpi,loginModuleCreator);
-        }catch(NoClassDefFoundError t){
-            //Servlet API is not present. This is an optional requirement
-            logger.log(LogService.LOG_INFO,"HTTP support not found. JAAS WebConsole Plugin would not be registered");
+        Properties props = new Properties();
+        props.put(Constants.SERVICE_VENDOR, "Apache Software Foundation");
+        props.put(Constants.SERVICE_DESCRIPTION, "JAAS Web Console Plugin");
+        props.put("felix.webconsole.label", "jaas");
+        props.put("felix.webconsole.title", "JAAS");
+        props.put("felix.webconsole.configprinter.modes", "always");
+
+        //Registering a ServiceFactory to avoid dependency on Servlet API
+        context.registerService("" +
+                ".Servlet", new PluginServiceFactory(), props);
+    }
+
+    private class PluginServiceFactory implements ServiceFactory {
+
+        @Override
+        public Object getService(Bundle bundle, ServiceRegistration registration) {
+            return new JaasWebConsolePlugin(configSpi,loginModuleCreator);
+        }
+
+        @Override
+        public void ungetService(Bundle bundle, ServiceRegistration registration, Object service) {
         }
     }
 
diff --git a/jaas/src/main/java/org/apache/felix/jaas/internal/JaasWebConsolePlugin.java b/jaas/src/main/java/org/apache/felix/jaas/internal/JaasWebConsolePlugin.java
index 03321da..31c391e 100644
--- a/jaas/src/main/java/org/apache/felix/jaas/internal/JaasWebConsolePlugin.java
+++ b/jaas/src/main/java/org/apache/felix/jaas/internal/JaasWebConsolePlugin.java
@@ -1,3 +1,4 @@
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -25,17 +26,14 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
 
-import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 
@@ -46,18 +44,10 @@
 
     private final BundleLoginModuleCreator loginModuleCreator;
 
-    public JaasWebConsolePlugin(BundleContext context, ConfigSpiOsgi configSpi, BundleLoginModuleCreator loginModuleCreator)
+    public JaasWebConsolePlugin(ConfigSpiOsgi configSpi, BundleLoginModuleCreator loginModuleCreator)
     {
         this.configSpi = configSpi;
         this.loginModuleCreator = loginModuleCreator;
-
-        Properties props = new Properties();
-        props.put(Constants.SERVICE_VENDOR, "Apache Software Foundation");
-        props.put(Constants.SERVICE_DESCRIPTION, "JAAS Web Console Plugin");
-        props.put("felix.webconsole.label", "jaas");
-        props.put("felix.webconsole.title", "JAAS");
-        props.put("felix.webconsole.configprinter.modes", "always");
-        context.registerService(Servlet.class.getName(), this, props);
     }
 
     @Override
