diff --git a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderMBeanImpl.java b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderMBeanImpl.java
index 2db387d..2f56e75 100644
--- a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderMBeanImpl.java
+++ b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderMBeanImpl.java
@@ -29,21 +29,44 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.sling.commons.classloader.ClassLoaderWriter;
 import org.apache.sling.commons.fsclassloader.FSClassLoaderMBean;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of the FSClassLoaderMBean interface
  */
+@Component(
+	configurationPid = FSClassLoaderProvider.SHARED_CONFIGURATION_PID,
+	property = {
+		Constants.SERVICE_DESCRIPTION + "=Apache Sling FSClassLoader Controller Service",
+		Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+		"jmx.objectname=org.apache.sling.classloader:name=FSClassLoader,type=ClassLoader"
+	}
+)
 public class FSClassLoaderMBeanImpl implements FSClassLoaderMBean {
-	private final File root;
-	private final FSClassLoaderProvider fsClassLoaderProvider;
+	private volatile File root;
 	private static final Logger log = LoggerFactory.getLogger(FSClassLoaderMBeanImpl.class);
 
-	public FSClassLoaderMBeanImpl(final FSClassLoaderProvider fsClassLoaderProvider, final File root) {
-		this.fsClassLoaderProvider = fsClassLoaderProvider;
-		this.root = root;
+	@Reference(target = "(component.name=org.apache.sling.commons.fsclassloader.impl.FSClassLoaderProvider)")
+	private ClassLoaderWriter classLoaderWriter;
+
+	/**
+	 * Activate this component. Create the root directory.
+	 *
+	 * @param componentContext
+	 *            the component context
+	 */
+	@Activate
+	protected void activate(final ComponentContext componentContext, final FSClassLoaderComponentConfig config) {
+		// get the file root
+		this.root = CacheLocationUtils.getRootDir(componentContext.getBundleContext(), config);
 	}
 
 	/*
@@ -93,7 +116,7 @@
 	 */
 	@Override
 	public void clearCache() {
-		fsClassLoaderProvider.delete("");
+		classLoaderWriter.delete("");
 	}
 
 	/*
diff --git a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
index 83e2270..50da643 100644
--- a/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
+++ b/src/main/java/org/apache/sling/commons/fsclassloader/impl/FSClassLoaderProvider.java
@@ -29,24 +29,18 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
 
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
 import org.apache.sling.commons.classloader.ClassLoaderWriterListener;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
-import org.apache.sling.commons.fsclassloader.FSClassLoaderMBean;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
@@ -96,19 +90,16 @@
 	/** The bundle asking for this service instance */
 	private Bundle callerBundle;
 
-	private static ServiceRegistration<?> mbeanRegistration;
-
 	/**
 	 * Activate this component. Create the root directory.
 	 *
 	 * @param componentContext
 	 * @throws MalformedURLException
 	 * @throws InvalidSyntaxException
-	 * @throws MalformedObjectNameException
 	 */
 	@Activate
 	protected void activate(final ComponentContext componentContext, final FSClassLoaderComponentConfig config)
-			throws MalformedURLException, InvalidSyntaxException, MalformedObjectNameException {
+			throws MalformedURLException, InvalidSyntaxException {
 		// get the file root
 		this.root = CacheLocationUtils.getRootDir(componentContext.getBundleContext(), config);
 		this.root.mkdirs();
@@ -137,22 +128,6 @@
 			}
 		};
 		componentContext.getBundleContext().addServiceListener(classLoaderWriterServiceListener, LISTENER_FILTER);
-
-		// handle the MBean Installation
-		if (mbeanRegistration != null) {
-			mbeanRegistration.unregister();
-			mbeanRegistration = null;
-		}
-		Hashtable<String, String> jmxProps = new Hashtable<String, String>();
-		jmxProps.put("type", "ClassLoader");
-		jmxProps.put("name", "FSClassLoader");
-
-		final Hashtable<String, Object> mbeanProps = new Hashtable<String, Object>();
-		mbeanProps.put(Constants.SERVICE_DESCRIPTION, "Apache Sling FSClassLoader Controller Service");
-		mbeanProps.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
-		mbeanProps.put("jmx.objectname", new ObjectName("org.apache.sling.classloader", jmxProps));
-		mbeanRegistration = componentContext.getBundleContext().registerService(FSClassLoaderMBean.class.getName(),
-				new FSClassLoaderMBeanImpl(this, this.root), mbeanProps);
 	}
 
 	/**
@@ -166,10 +141,6 @@
 		if (classLoaderWriterServiceListener != null) {
 			componentContext.getBundleContext().removeServiceListener(classLoaderWriterServiceListener);
 		}
-		if (mbeanRegistration != null) {
-			mbeanRegistration.unregister();
-			mbeanRegistration = null;
-		}
 	}
 
 	private void destroyClassLoader() {
