diff --git a/org.eclipse.gemini.management/META-INF/MANIFEST.MF b/org.eclipse.gemini.management/META-INF/MANIFEST.MF
index 3d558fa..1a89800 100644
--- a/org.eclipse.gemini.management/META-INF/MANIFEST.MF
+++ b/org.eclipse.gemini.management/META-INF/MANIFEST.MF
@@ -18,6 +18,7 @@
  org.osgi.jmx.service.cm;version="1.3",
  org.osgi.jmx.service.useradmin;version="1.1.1",
  org.osgi.service.cm,
+ org.osgi.service.log,
  org.osgi.service.packageadmin,
  org.osgi.service.permissionadmin,
  org.osgi.service.provisioning,
diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
index 1d3a2e8..3427eee 100644
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/Activator.java
@@ -19,8 +19,6 @@
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import javax.management.InstanceAlreadyExistsException;
 import javax.management.InstanceNotFoundException;
@@ -53,6 +51,7 @@
 import org.osgi.jmx.service.provisioning.ProvisioningServiceMBean;
 import org.osgi.jmx.service.useradmin.UserAdminMBean;
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
 import org.osgi.service.permissionadmin.PermissionAdmin;
 import org.osgi.service.provisioning.ProvisioningService;
 import org.osgi.service.useradmin.UserAdmin;
@@ -66,8 +65,6 @@
  */
 @SuppressWarnings("deprecation")
 public class Activator implements BundleActivator {
-
-	private static final Logger LOGGER = Logger.getLogger(Activator.class.getCanonicalName());
 	
 	private final List<MBeanServer> mbeanServers = new CopyOnWriteArrayList<MBeanServer>();
 	
@@ -114,6 +111,22 @@
 	private ServiceTracker<ProvisioningService, ?> provisioningServiceTracker;
 	
 	private ServiceTracker<UserAdmin, ?> userAdminTracker;
+	
+	private ServiceTracker<LogService, ?> logServiceTracker;
+	
+	private LogService logger;
+	
+	private void log (int level, String message) {
+		if (logger != null) {
+			logger.log(level, message);
+		}
+	}
+	
+	private void log (int level, String message, Throwable t) {
+		if (logger != null) {
+			logger.log(level, message, t);
+		}
+	}
 
 	private void createObjectNames() {
 		try {
@@ -135,12 +148,14 @@
 	 * {@inheritDoc}
 	 */
 	public void start(BundleContext bundleContext) throws Exception {
-        objectNameTranslator = DefaultObjectNameTranslator.initialiseObjectNameTranslator(bundleContext);
+		logServiceTracker = new ServiceTracker<LogService, Object>(bundleContext, LogService.class, new LogServiceTracker());
+		logServiceTracker.open();
+        objectNameTranslator = DefaultObjectNameTranslator.initialiseObjectNameTranslator(bundleContext, logger);
         createObjectNames();
 		this.bundleContext = bundleContext;
 		registerDefaultMBeanServer();
 		this.mbeanServiceTracker = new ServiceTracker<MBeanServer, Object>(this.bundleContext, MBeanServer.class, new MBeanServiceTracker());
-		LOGGER.fine("Awaiting initial MBeanServer service registration");
+		log(LogService.LOG_INFO, "Awaiting initial MBeanServer service registration");
 		this.mbeanServiceTracker.open();
 	}
 	
@@ -180,97 +195,97 @@
 		if (!servicesRegistered.get()) {
 			return;
 		}
-		LOGGER.fine("Deregistering framework with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering framework with MBeanServer: " + mbeanServer);
 		try {
 			mbeanServer.unregisterMBean(frameworkName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINE, "FrameworkMBean not found on deregistration", e);
+			log(LogService.LOG_INFO, "FrameworkMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "FrameworkMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "FrameworkMBean deregistration problem", e);
 		}
 		framework = null;
 
-		LOGGER.fine("Deregistering bundle state with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering bundle state with MBeanServer: " + mbeanServer);
 		try {
 			mbeanServer.unregisterMBean(bundleStateName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi BundleStateMBean not found on deregistration", e);
+			log(LogService.LOG_INFO, "OSGi BundleStateMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi BundleStateMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi BundleStateMBean deregistration problem", e);
 		}
 		bundleState = null;
 
-		LOGGER.fine("Deregistering bundle wiring state with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering bundle wiring state with MBeanServer: " + mbeanServer);
 		try {
 			mbeanServer.unregisterMBean(bundleWiringStateName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi BundleWiringStateMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi BundleWiringStateMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi BundleWiringStateMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi BundleWiringStateMBean deregistration problem", e);
 		}
 		bundleWiringState = null;
 		
-		LOGGER.fine("Deregistering services monitor with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering services monitor with MBeanServer: " + mbeanServer);
 		try {
 			mbeanServer.unregisterMBean(serviceStateName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi ServiceStateMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi ServiceStateMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi ServiceStateMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi ServiceStateMBean deregistration problem", e);
 		}
 		serviceState = null;
 
-		LOGGER.fine("Deregistering packages monitor with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering packages monitor with MBeanServer: " + mbeanServer);
 		try {
 			mbeanServer.unregisterMBean(packageStateName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi PackageStateMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi PackageStateMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi PackageStateMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi PackageStateMBean deregistration problem", e);
 		}
 		packageState = null;
 
-		LOGGER.fine("Deregistering config admin with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering config admin with MBeanServer: " + mbeanServer);
 		configAdminTracker.close();
 		try {
 			mbeanServer.unregisterMBean(configAdminName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi ConfigAdminMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi ConfigAdminMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi ConfigAdminMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi ConfigAdminMBean deregistration problem", e);
 		}
 		configAdminTracker = null;
 
-		LOGGER.fine("Deregistering permission admin with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering permission admin with MBeanServer: " + mbeanServer);
 		permissionAdminTracker.close();
 		try {
 			mbeanServer.unregisterMBean(permissionAdminName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi PermissionAdminMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi PermissionAdminMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi PermissionAdminMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi PermissionAdminMBean deregistration problem", e);
 		}
 		permissionAdminTracker = null;
 
-		LOGGER.fine("Deregistering provisioning service admin with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering provisioning service admin with MBeanServer: " + mbeanServer);
 		provisioningServiceTracker.close();
 		try {
 			mbeanServer.unregisterMBean(provisioningServiceName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi ProvisioningServiceMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi ProvisioningServiceMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi ProvisioningServiceMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi ProvisioningServiceMBean deregistration problem", e);
 		}
 		provisioningServiceTracker = null;
 
-		LOGGER.fine("Deregistering user admin with MBeanServer: " + mbeanServer);
+		log(LogService.LOG_INFO, "Deregistering user admin with MBeanServer: " + mbeanServer);
 		userAdminTracker.close();
 		try {
 			mbeanServer.unregisterMBean(userAdminName);
 		} catch (InstanceNotFoundException e) {
-			LOGGER.log(Level.FINEST, "OSGi UserAdminMBean not found on deregistration", e);
+			log(LogService.LOG_DEBUG, "OSGi UserAdminMBean not found on deregistration", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.FINE, "OSGi UserAdminMBean deregistration problem", e);
+			log(LogService.LOG_INFO, "OSGi UserAdminMBean deregistration problem", e);
 		}
 		userAdminTracker = null;
 		servicesRegistered.set(false);
@@ -285,87 +300,87 @@
 		try {
 			framework = new StandardMBean(new Framework(bundleContext), FrameworkMBean.class);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for Framework", e);
+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for Framework", e);
 			return;
 		}
 		try {
 			bundleState = new StandardMBean(new BundleState(bundleContext), BundleStateMBean.class);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for BundleState", e);
+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for BundleState", e);
 			return;
 		}
 		try {
 			bundleWiringState = new StandardMBean(new BundleWiringState(bundleContext), BundleWiringStateMBean.class);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for BundleWiringState", e);
+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for BundleWiringState", e);
 			return;
 		}
 		try {
 			serviceState = new StandardMBean(new ServiceState(bundleContext), CustomServiceStateMBean.class);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for ServiceState", e);
+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for ServiceState", e);
 			return;
 		}
 		try {
 			packageState = new StandardMBean(new PackageState(bundleContext), PackageStateMBean.class);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Unable to create StandardMBean for PackageState", e);
+			log(LogService.LOG_ERROR, "Unable to create StandardMBean for PackageState", e);
 			return;
 		}
 
-		LOGGER.fine("Registering Framework with MBeanServer: " + mbeanServer + " with name: " + frameworkName);
+		log(LogService.LOG_INFO, "Registering Framework with MBeanServer: " + mbeanServer + " with name: " + frameworkName);
 		try {
 			mbeanServer.registerMBean(framework, frameworkName);
 		} catch (InstanceAlreadyExistsException e) {
-			LOGGER.log(Level.FINE, "Cannot register OSGi framework MBean", e);
+			log(LogService.LOG_INFO, "Cannot register OSGi framework MBean", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi framework MBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi framework MBean", e);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi framework MBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi framework MBean", e);
 		}
 
-		LOGGER.fine("Registering bundle state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);
+		log(LogService.LOG_INFO, "Registering bundle state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);
 		try {
 			mbeanServer.registerMBean(bundleState, bundleStateName);
 		} catch (InstanceAlreadyExistsException e) {
-			LOGGER.log(Level.FINE, "Cannot register OSGi BundleStateMBean", e);
+			log(LogService.LOG_INFO, "Cannot register OSGi BundleStateMBean", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleStateMBean", e);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleStateMBean", e);
 		}
 
-		LOGGER.fine("Registering bundle wiring state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);
+		log(LogService.LOG_INFO, "Registering bundle wiring state with MBeanServer: " + mbeanServer + " with name: " + bundleStateName);
 		try {
 			mbeanServer.registerMBean(bundleWiringState, bundleWiringStateName);
 		} catch (InstanceAlreadyExistsException e) {
-			LOGGER.log(Level.FINE, "Cannot register OSGi BundleWiringStateMBean", e);
+			log(LogService.LOG_INFO, "Cannot register OSGi BundleWiringStateMBean", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleWiringStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleWiringStateMBean", e);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi BundleWiringStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi BundleWiringStateMBean", e);
 		}
 
-		LOGGER.fine("Registering services monitor with MBeanServer: " + mbeanServer + " with name: " + serviceStateName);
+		log(LogService.LOG_INFO, "Registering services monitor with MBeanServer: " + mbeanServer + " with name: " + serviceStateName);
 		try {
 			mbeanServer.registerMBean(serviceState, serviceStateName);
 		} catch (InstanceAlreadyExistsException e) {
-			LOGGER.log(Level.FINE, "Cannot register OSGi ServiceStateMBean", e);
+			log(LogService.LOG_INFO, "Cannot register OSGi ServiceStateMBean", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi ServiceStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi ServiceStateMBean", e);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi ServiceStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi ServiceStateMBean", e);
 		}
 
-		LOGGER.fine("Registering packages monitor with MBeanServer: " + mbeanServer + " with name: " + packageStateName);
+		log(LogService.LOG_INFO, "Registering packages monitor with MBeanServer: " + mbeanServer + " with name: " + packageStateName);
 		try {
 			mbeanServer.registerMBean(packageState, packageStateName);
 		} catch (InstanceAlreadyExistsException e) {
-			LOGGER.log(Level.FINE, "Cannot register OSGi PackageStateMBean", e);
+			log(LogService.LOG_INFO, "Cannot register OSGi PackageStateMBean", e);
 		} catch (MBeanRegistrationException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi PackageStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi PackageStateMBean", e);
 		} catch (NotCompliantMBeanException e) {
-			LOGGER.log(Level.SEVERE, "Cannot register OSGi PackageStateMBean", e);
+			log(LogService.LOG_ERROR, "Cannot register OSGi PackageStateMBean", e);
 		}
 
         configAdminTracker = new ServiceTracker<ConfigurationAdmin, Object>(bundleContext, "org.osgi.service.cm.ConfigurationAdmin",
@@ -391,7 +406,7 @@
 		 */
 		public MBeanServer addingService(ServiceReference<MBeanServer> servicereference) {
 			try {
-				LOGGER.fine("Adding MBeanServer: " + servicereference);
+				log(LogService.LOG_INFO, "Adding MBeanServer: " + servicereference);
 				final MBeanServer mbeanServer = bundleContext.getService(servicereference);
 				mbeanServers.add(mbeanServer);
 				Runnable registration = new Runnable() {
@@ -406,7 +421,7 @@
 
 				return mbeanServer;
 			} catch (RuntimeException e) {
-				LOGGER.log(Level.SEVERE, "uncaught exception in addingService", e);
+				log(LogService.LOG_ERROR, "uncaught exception in addingService", e);
 				throw e;
 			}
 		}
@@ -422,7 +437,7 @@
 		 */
 		public void removedService(ServiceReference<MBeanServer> servicereference, Object obj) {
 			try {
-				LOGGER.fine("Removing MBeanServer: " + servicereference);
+				log(LogService.LOG_INFO, "Removing MBeanServer: " + servicereference);
 				final MBeanServer mbeanServer = bundleContext.getService(servicereference);
 				mbeanServers.remove(mbeanServer);
 				Runnable deregister = new Runnable() {
@@ -436,7 +451,7 @@
 				deregisterThread.start();
 
 			} catch (Throwable e) {
-				LOGGER.log(Level.FINE, "uncaught exception in removedService", e);
+				log(LogService.LOG_INFO, "uncaught exception in removedService", e);
 			}
 		}
 	}
@@ -455,27 +470,27 @@
 			try {
 				admin = bundleContext.getService(reference);
 			} catch (ClassCastException e) {
-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Configuration Admin Manager", e);
+				log(LogService.LOG_ERROR, "Incompatible class version for the Configuration Admin Manager", e);
 				return bundleContext.getService(reference);
 			}
 
 			try {
-				manager = new StandardMBean(new ConfigAdminManager(admin), ConfigurationAdminMBean.class);
+				manager = new StandardMBean(new ConfigAdminManager(admin, logger), ConfigurationAdminMBean.class);
 			} catch (NotCompliantMBeanException e) {
-				LOGGER.log(Level.SEVERE, "Unable to create Configuration Admin Manager", e);
+				log(LogService.LOG_ERROR, "Unable to create Configuration Admin Manager", e);
 				return admin;
 			}
 			
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("Registering configuration admin with MBeanServer: " + mbeanServer + " with name: " + configAdminName);
+				log(LogService.LOG_INFO, "Registering configuration admin with MBeanServer: " + mbeanServer + " with name: " + configAdminName);
 				try {
 					mbeanServer.registerMBean(manager, configAdminName);
 				} catch (InstanceAlreadyExistsException e) {
-					LOGGER.log(Level.FINE, "Cannot register Configuration Manager MBean", e);
+					log(LogService.LOG_INFO, "Cannot register Configuration Manager MBean", e);
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Configuration Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Configuration Manager MBean", e);
 				} catch (NotCompliantMBeanException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Configuration Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Configuration Manager MBean", e);
 				}
 			}
 			
@@ -494,13 +509,13 @@
 		public void removedService(ServiceReference<ConfigurationAdmin> reference, Object service) {
 
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("deregistering configuration admin from: " + mbeanServer + " with name: " + configAdminName);
+				log(LogService.LOG_INFO, "deregistering configuration admin from: " + mbeanServer + " with name: " + configAdminName);
 				try {
 					mbeanServer.unregisterMBean(configAdminName);
 				} catch (InstanceNotFoundException e) {
-					LOGGER.fine("Configuration Manager MBean was never registered");
+					log(LogService.LOG_INFO, "Configuration Manager MBean was never registered");
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot deregister Configuration Manager MBean", e);
+					log(LogService.LOG_INFO, "Cannot deregister Configuration Manager MBean", e);
 				}
 			}
 		}
@@ -520,25 +535,25 @@
 			try {
 				admin = bundleContext.getService(reference);
 			} catch (ClassCastException e) {
-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Permission Admin Manager", e);
+				log(LogService.LOG_ERROR, "Incompatible class version for the Permission Admin Manager", e);
 				return bundleContext.getService(reference);
 			}
 			try {
 				manager = new StandardMBean(new PermissionManager(admin), PermissionAdminMBean.class);
 			} catch (NotCompliantMBeanException e) {
-				LOGGER.log(Level.SEVERE, "Unable to create Permission Admin Manager", e);
+				log(LogService.LOG_ERROR, "Unable to create Permission Admin Manager", e);
 				return admin;
 			}
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("Registering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);
+				log(LogService.LOG_INFO, "Registering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);
 				try {
 					mbeanServer.registerMBean(manager, permissionAdminName);
 				} catch (InstanceAlreadyExistsException e) {
-					LOGGER.log(Level.FINE, "Cannot register Permission Manager MBean", e);
+					log(LogService.LOG_INFO, "Cannot register Permission Manager MBean", e);
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Permission Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Permission Manager MBean", e);
 				} catch (NotCompliantMBeanException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Permission Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Permission Manager MBean", e);
 				}
 			}
 			return admin;
@@ -555,13 +570,13 @@
 		 */
 		public void removedService(ServiceReference<PermissionAdmin> reference, Object service) {
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("deregistering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);
+				log(LogService.LOG_INFO, "deregistering permission admin with MBeanServer: " + mbeanServer + " with name: " + permissionAdminName);
 				try {
 					mbeanServer.unregisterMBean(permissionAdminName);
 				} catch (InstanceNotFoundException e) {
-					LOGGER.fine("Permission Manager MBean was never registered");
+					log(LogService.LOG_INFO, "Permission Manager MBean was never registered");
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot deregister Permission Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot deregister Permission Manager MBean", e);
 				}
 			}
 		}
@@ -582,27 +597,27 @@
 			try {
 				service = bundleContext.getService(reference);
 			} catch (ClassCastException e) {
-				LOGGER.log(Level.SEVERE, "Incompatible class version for the Provisioning service", e);
+				log(LogService.LOG_ERROR, "Incompatible class version for the Provisioning service", e);
 				return bundleContext.getService(reference);
 			}
 			
 			try {
 				provisioning = new StandardMBean(new Provisioning(service), ProvisioningServiceMBean.class);
 			} catch (NotCompliantMBeanException e) {
-				LOGGER.log(Level.SEVERE, "Unable to create Provisioning Service Manager", e);
+				log(LogService.LOG_ERROR, "Unable to create Provisioning Service Manager", e);
 				return service;
 			}
 			
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("Registering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);
+				log(LogService.LOG_INFO, "Registering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);
 				try {
 					mbeanServer.registerMBean(provisioning, provisioningServiceName);
 				} catch (InstanceAlreadyExistsException e) {
-					LOGGER.log(Level.FINE, "Cannot register Provisioning Service MBean", e);
+					log(LogService.LOG_INFO, "Cannot register Provisioning Service MBean", e);
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Provisioning Service MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Provisioning Service MBean", e);
 				} catch (NotCompliantMBeanException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register Provisioning Service MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register Provisioning Service MBean", e);
 				}
 			}
 			return service;
@@ -619,13 +634,13 @@
 		 */
 		public void removedService(ServiceReference<ProvisioningService> reference, Object service) {
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("deregistering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);
+				log(LogService.LOG_INFO, "deregistering provisioning service with MBeanServer: " + mbeanServer + " with name: " + provisioningServiceName);
 				try {
 					mbeanServer.unregisterMBean(provisioningServiceName);
 				} catch (InstanceNotFoundException e) {
-					LOGGER.fine("Provisioning Service MBean was never registered");
+					log(LogService.LOG_INFO, "Provisioning Service MBean was never registered");
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot deregister Provisioning Service MBean", e);
+					log(LogService.LOG_ERROR, "Cannot deregister Provisioning Service MBean", e);
 				}
 			}
 		}
@@ -645,27 +660,27 @@
 			try {
 				admin = bundleContext.getService(reference);
 			} catch (ClassCastException e) {
-				LOGGER.log(Level.SEVERE, "Incompatible class version for the User Admin manager", e);
+				log(LogService.LOG_ERROR, "Incompatible class version for the User Admin manager", e);
 				return bundleContext.getService(reference);
 			}
 			
 			try {
 				manager = new StandardMBean(new UserManager(admin), UserAdminMBean.class);
 			} catch (NotCompliantMBeanException e1) {
-				LOGGER.log(Level.SEVERE, "Unable to create User Admin Manager");
+				log(LogService.LOG_ERROR, "Unable to create User Admin Manager");
 				return admin;
 			}
 			
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("Registering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);
+				log(LogService.LOG_INFO, "Registering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);
 				try {
 					mbeanServer.registerMBean(manager, userAdminName);
 				} catch (InstanceAlreadyExistsException e) {
-					LOGGER.log(Level.FINE, "Cannot register User Manager MBean", e);
+					log(LogService.LOG_INFO, "Cannot register User Manager MBean", e);
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register User Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register User Manager MBean", e);
 				} catch (NotCompliantMBeanException e) {
-					LOGGER.log(Level.SEVERE, "Cannot register User Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot register User Manager MBean", e);
 				}
 			}
 			return admin;
@@ -682,16 +697,38 @@
 		 */
 		public void removedService(ServiceReference<UserAdmin> reference, Object service) {
 			for (MBeanServer mbeanServer : mbeanServers) {
-				LOGGER.fine("Deregistering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);
+				log(LogService.LOG_INFO, "Deregistering user admin with MBeanServer: " + mbeanServer + " with name: " + userAdminName);
 				try {
 					mbeanServer.unregisterMBean(userAdminName);
 				} catch (InstanceNotFoundException e) {
-					LOGGER.fine("User Manager MBean was never registered");
+					log(LogService.LOG_INFO, "User Manager MBean was never registered");
 				} catch (MBeanRegistrationException e) {
-					LOGGER.log(Level.SEVERE, "Cannot deregister User Manager MBean", e);
+					log(LogService.LOG_ERROR, "Cannot deregister User Manager MBean", e);
 				}
 			}
 		}
 	}
 	
+	private class LogServiceTracker implements ServiceTrackerCustomizer<LogService, Object> {
+
+		@Override
+		public Object addingService(ServiceReference<LogService> reference) {
+			logger = bundleContext.getService(reference);
+			return logger;
+		}
+
+		@Override
+		public void modifiedService(ServiceReference<LogService> reference,
+				Object service) {
+			// no op
+		}
+
+		@Override
+		public void removedService(ServiceReference<LogService> reference,
+				Object service) {
+			logger = null;
+		}
+		
+	}
+	
 }
diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
index 8683e90..a324e83 100755
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/DefaultObjectNameTranslator.java
@@ -21,6 +21,7 @@
 import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.service.log.LogService;
 
 /**
  * {@link DefaultObjectNameTranslator} is a default implementation of {@link ObjectNameTranslator} which maps each
@@ -32,7 +33,7 @@
  */
 final class DefaultObjectNameTranslator implements ObjectNameTranslator {
 
-	private static final Logger LOGGER = Logger.getLogger(DefaultObjectNameTranslator.class.getCanonicalName());
+//	private static final Logger LOGGER = Logger.getLogger(DefaultObjectNameTranslator.class.getCanonicalName());
 	
     /**
      * {@inheritDoc}
@@ -52,7 +53,7 @@
      * @throws InstantiationException if the configured class cannot be instantiated
      * @throws IllegalAccessException if the configured class or its default constructor is not accessible
      */
-    static ObjectNameTranslator initialiseObjectNameTranslator(BundleContext bundleContext) throws ClassNotFoundException, InstantiationException,
+    static ObjectNameTranslator initialiseObjectNameTranslator(BundleContext bundleContext, LogService logger) throws ClassNotFoundException, InstantiationException,
         IllegalAccessException {
         Bundle bundle = bundleContext.getBundle();
 		BundleWiring wiring = bundle.adapt(BundleWiring.class);
@@ -66,10 +67,14 @@
 			        try {
 						return (ObjectNameTranslator) objectNameTranslatorClass.getConstructor(BundleContext.class).newInstance(bundleContext);
 					} catch (Exception e) {
-						LOGGER.warning(String.format("Unable to create ObjectNameTranslator from fragment %d '%s'", fragment.getBundleId(), e.getMessage()));
+						if (logger != null) {
+							logger.log(LogService.LOG_WARNING, String.format("Unable to create ObjectNameTranslator from fragment %d '%s'", fragment.getBundleId(), e.getMessage()));
+						}
 					} 
 		        } else {
-					LOGGER.warning(String.format("Unable to create ObjectNameTranslator as specified class '%s' is not an assignable to '%s'", objectNameTranslator, ObjectNameTranslator.class.getName()));
+		        	if (logger != null) {
+		        		logger.log(LogService.LOG_WARNING, String.format("Unable to create ObjectNameTranslator as specified class '%s' is not an assignable to '%s'", objectNameTranslator, ObjectNameTranslator.class.getName()));
+		        	}
 		        }
 			}
 		}
diff --git a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
index 03ef2f9..dd8b22c 100644
--- a/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
+++ b/org.eclipse.gemini.management/src/main/java/org/eclipse/gemini/management/configurationadmin/ConfigAdminManager.java
@@ -30,6 +30,7 @@
 import org.osgi.jmx.service.cm.ConfigurationAdminMBean;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
 
 /** 
  * 
@@ -38,10 +39,17 @@
 
 	private final ConfigurationAdmin admin;
 	
-	private static final Logger log = Logger.getLogger(ConfigAdminManager.class.getCanonicalName());
+	private final LogService logger;
 
-	public ConfigAdminManager(ConfigurationAdmin admin) {
+	public ConfigAdminManager(ConfigurationAdmin admin, LogService logger) {
 		this.admin = admin;
+		this.logger = logger;
+	}
+	
+	private void log(int level, String message, Throwable t) {
+		if (logger != null) {
+			logger.log(level, message, t);
+		}
 	}
 
 	/**
@@ -96,7 +104,7 @@
 		try {
 			confs = admin.listConfigurations(filter);
 		} catch (InvalidSyntaxException e) {
-			log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);
+			log(LogService.LOG_ERROR, "Invalid filter argument: " + filter, e);
 			throw new IOException("Invalid filter: " + e);
 		}
 		if (confs != null) {
@@ -169,7 +177,7 @@
 		try {
 			configurations = admin.listConfigurations(filter);
 		} catch (InvalidSyntaxException e) {
-			log.log(Level.SEVERE, "Invalid filter argument: " + filter, e);
+			log(LogService.LOG_ERROR, "Invalid filter argument: " + filter, e);
 			throw new IOException("Invalid filter: " + e);
 		}
 		if (configurations != null) {
