diff --git a/pom.xml b/pom.xml
index c4650a2..31c1f3a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,15 @@
                         <Bundle-Activator>
                             org.apache.sling.extensions.webconsolesecurityprovider.internal.Activator
                         </Bundle-Activator>
+                        <Import-Package>
+                            !org.apache.sling.auth.core,
+                            !org.apache.sling.api.resource,
+                            *
+                        </Import-Package>
+                        <DynamicImport-Package>
+                            org.apache.sling.api.resource;version="[2.3,3)",
+                            org.apache.sling.auth.core;version="[1.0,2)"
+                        </DynamicImport-Package>
                     </instructions>                
                 </configuration>
             </plugin>
diff --git a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.java b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.java
index fad370e..4dda83f 100644
--- a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.java
+++ b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/ServicesListener.java
@@ -41,6 +41,9 @@
  */
 public class ServicesListener {
 
+    private static final String AUTH_SUPPORT_CLASS = AuthenticationSupport.class.getName();
+    private static final String REPO_CLASS = Repository.class.getName();
+
     /** The bundle context. */
     private final BundleContext bundleContext;
 
@@ -50,10 +53,6 @@
     /** The listener for the authentication support. */
     private final Listener authSupportListener;
 
-    private final SlingWebConsoleSecurityProvider provider = new SlingWebConsoleSecurityProvider();
-
-    private final SlingWebConsoleSecurityProvider2 provider2 = new SlingWebConsoleSecurityProvider2();
-
     private enum State {
         NONE,
         PROVIDER,
@@ -69,14 +68,13 @@
     /** The registration for the provider2 */
     private ServiceRegistration provider2Reg;
 
-
     /**
      * Start listeners
      */
     public ServicesListener(final BundleContext bundleContext) {
         this.bundleContext = bundleContext;
-        this.authSupportListener = new Listener(AuthenticationSupport.class.getName());
-        this.repositoryListener = new Listener(Repository.class.getName());
+        this.authSupportListener = new Listener(AUTH_SUPPORT_CLASS);
+        this.repositoryListener = new Listener(REPO_CLASS);
         this.authSupportListener.start();
         this.repositoryListener.start();
     }
@@ -86,8 +84,8 @@
      */
     public synchronized void notifyChange() {
         // check if all services are available
-        final AuthenticationSupport authSupport = (AuthenticationSupport)this.authSupportListener.getService();
-        final Repository repository = (Repository)this.repositoryListener.getService();
+        final Object authSupport = this.authSupportListener.getService();
+        final Object repository = this.repositoryListener.getService();
         if ( registrationState == State.NONE ) {
             if ( authSupport != null ) {
                 registerProvider2(authSupport);
@@ -101,8 +99,6 @@
             } else if ( repository == null ) {
                 unregisterProvider();
                 this.registrationState = State.NONE;
-            } else {
-                this.provider.setService(repository);
             }
         } else {
             if ( authSupport == null ) {
@@ -112,8 +108,6 @@
                     this.registrationState = State.NONE;
                 }
                 unregisterProvider2();
-            } else {
-                this.provider2.setService(authSupport);
             }
         }
     }
@@ -123,7 +117,6 @@
             this.provider2Reg.unregister();
             this.provider2Reg = null;
         }
-        this.provider2.setService(null);
     }
 
     private void unregisterProvider() {
@@ -131,28 +124,25 @@
             this.providerReg.unregister();
             this.providerReg = null;
         }
-        this.provider.setService(null);
     }
 
-    private void registerProvider2(final AuthenticationSupport authSupport) {
-        this.provider2.setService(authSupport);
+    private void registerProvider2(final Object authSupport) {
         final Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put(Constants.SERVICE_PID, SlingWebConsoleSecurityProvider.class.getName());
         props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Web Console Security Provider 2");
         props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
         this.provider2Reg = this.bundleContext.registerService(
-            new String[] {ManagedService.class.getName(), WebConsoleSecurityProvider.class.getName()}, this.provider2, props);
+            new String[] {ManagedService.class.getName(), WebConsoleSecurityProvider.class.getName()}, new SlingWebConsoleSecurityProvider2(authSupport), props);
         this.registrationState = State.PROVIDER2;
     }
 
-    private void registerProvider(final Repository repository) {
-        this.provider.setService(repository);
+    private void registerProvider(final Object repository) {
         final Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put(Constants.SERVICE_PID, SlingWebConsoleSecurityProvider.class.getName());
         props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Web Console Security Provider");
         props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
         this.providerReg = this.bundleContext.registerService(
-            new String[] {ManagedService.class.getName(), WebConsoleSecurityProvider.class.getName()}, this.provider, props);
+            new String[] {ManagedService.class.getName(), WebConsoleSecurityProvider.class.getName()}, new SlingWebConsoleSecurityProvider(repository), props);
         this.registrationState = State.PROVIDER;
     }
 
diff --git a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider.java b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider.java
index 566da32..37454e2 100644
--- a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider.java
+++ b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider.java
@@ -72,9 +72,10 @@
 
     private Repository repository;
 
-    public void setService(final Repository repo) {
-        this.repository = repo;
+    public SlingWebConsoleSecurityProvider(final Object repository) {
+        this.repository = (Repository)repository;
     }
+
     // ---------- SCR integration
 
     /**
diff --git a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider2.java b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider2.java
index 8a8f1a2..7521fc9 100644
--- a/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider2.java
+++ b/src/main/java/org/apache/sling/extensions/webconsolesecurityprovider/internal/SlingWebConsoleSecurityProvider2.java
@@ -50,10 +50,10 @@
     extends AbstractWebConsoleSecurityProvider
     implements WebConsoleSecurityProvider2 {
 
-    private AuthenticationSupport authenticator;
+    private final AuthenticationSupport authenticator;
 
-    public void setService(final AuthenticationSupport support) {
-        this.authenticator = support;
+    public SlingWebConsoleSecurityProvider2(final Object support) {
+        this.authenticator = (AuthenticationSupport)support;
     }
 
     private void invokeAuthenticator(final HttpServletRequest request, final HttpServletResponse response) {
