diff --git a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationAdminExporter.java b/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationAdminExporter.java
deleted file mode 100644
index fffecb1..0000000
--- a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationAdminExporter.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2010 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-
-package org.eclipse.virgo.nano.config.internal;
-
-import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-
-import javax.management.JMException;
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
-
-import org.osgi.service.cm.Configuration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.cm.ConfigurationEvent;
-import org.osgi.service.cm.ConfigurationListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-// TODO Remove alien calls made while holding this.monitor 
-public class ConfigurationAdminExporter implements ConfigurationListener {
-
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    private final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
-
-    private static final String OBJECT_NAME_PATTERN = "%s:type=Configuration,name=%s";
-
-    private final Map<String, ObjectInstance> configurationInfos = new HashMap<String, ObjectInstance>();
-
-    private final Object monitor = new Object();
-
-    private final String managementDomain;
-
-    private final ConfigurationAdmin configurationAdmin;
-
-    public ConfigurationAdminExporter(String managementDomain, ConfigurationAdmin configurationAdmin) {
-        this.managementDomain = managementDomain;
-        this.configurationAdmin = configurationAdmin;
-    }
-
-    public void init() {
-        synchronized (this.monitor) {
-            try {
-                for (Configuration configuration : configurationAdmin.listConfigurations(null)) {
-                    exportConfiguration(configuration.getPid());
-                }
-            } catch (Exception e) {
-                logger.warn("Could not enumerate existing configurations");
-            }
-        }
-    }
-
-    public void configurationEvent(ConfigurationEvent configurationEvent) {
-        String pid = configurationEvent.getPid();
-        if (ConfigurationEvent.CM_UPDATED == configurationEvent.getType()) {
-            exportConfiguration(pid);
-        } else if (ConfigurationEvent.CM_DELETED == configurationEvent.getType()) {
-            unexportConfiguration(pid);
-        }
-    }
-
-    private ObjectName getObjectName(String pid) throws MalformedObjectNameException, NullPointerException {
-        return new ObjectName(String.format(OBJECT_NAME_PATTERN, this.managementDomain, pid));
-    }
-
-    private void exportConfiguration(String pid) {
-        synchronized (this.monitor) {
-            if (!configurationInfos.containsKey(pid)) {
-                try {
-                    ConfigurationInfo configurationInfo = new ConfigurationAdminConfigurationInfo(this.configurationAdmin, pid);
-                    ObjectInstance objectInstance = server.registerMBean(configurationInfo, getObjectName(pid));
-                    this.configurationInfos.put(pid, objectInstance);
-                } catch (JMException e) {
-                    logger.warn("Unable to register MBean for configuration '{}'", pid);
-                }
-            }
-        }
-    }
-
-    private void unexportConfiguration(String pid) {
-        ObjectName objectName = null;
-        
-        synchronized (this.monitor) {
-            if (configurationInfos.containsKey(pid)) {
-                objectName = configurationInfos.remove(pid).getObjectName();
-            }
-        }
-        
-        if (objectName != null) {
-            try {
-                this.server.unregisterMBean(objectName);
-            } catch (JMException e) {
-                this.logger.warn("Unable to unregister MBean for configuration '{}'", pid);
-            }
-        }
-    }
-
-    /**
-     * 
-     */
-    public void stop() {
-        List<ObjectName> objectNames = new ArrayList<ObjectName>();
-        
-        synchronized (this.monitor) {
-            Set<Entry<String, ObjectInstance>> entries = this.configurationInfos.entrySet();
-            for (Entry<String, ObjectInstance> entry : entries) {
-                objectNames.add(entry.getValue().getObjectName());
-            }
-            this.configurationInfos.clear();
-        }
-        
-        for (ObjectName objectName : objectNames) {
-            try {
-                this.server.unregisterMBean(objectName);
-            } catch (JMException jme) {
-                logger.warn("Unable to unregister MBean '{}' during stop", objectName);
-            }
-        }   
-    }
-}
diff --git a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationInitialiser.java b/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationInitialiser.java
index 372c786..2ed925c 100644
--- a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationInitialiser.java
+++ b/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConfigurationInitialiser.java
@@ -13,16 +13,14 @@
 
 import java.io.IOException;
 
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.cm.ConfigurationListener;
-
 import org.eclipse.virgo.medic.dump.DumpContributor;
 import org.eclipse.virgo.medic.eventlog.EventLogger;
 import org.eclipse.virgo.nano.config.internal.commandline.CommandLinePropertiesSource;
 import org.eclipse.virgo.nano.config.internal.ovf.OvfPropertiesSource;
 import org.eclipse.virgo.util.osgi.ServiceRegistrationTracker;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.ConfigurationAdmin;
 
 /**
  * ConfigurationInitialiser
@@ -35,9 +33,7 @@
 public final class ConfigurationInitialiser {
 
     private final ServiceRegistrationTracker tracker = new ServiceRegistrationTracker();
-    
-    private volatile ConfigurationAdminExporter configAdminExporter;
-    
+        
     private ConsoleConfigurationConvertor consoleConfigurationConvertor;
 
     public KernelConfiguration start(BundleContext context, EventLogger eventLogger) throws IOException {
@@ -58,7 +54,6 @@
         KernelConfiguration configuration = new KernelConfiguration(context);
 
         publishConfiguration(context, eventLogger, configuration, configAdmin);
-        this.configAdminExporter = initializeConfigAdminExporter(context, configuration, configAdmin);
         initializeDumpContributor(context, configAdmin);
         initializeConsoleConfigurationConvertor(context, configAdmin);
         return configuration;
@@ -79,13 +74,6 @@
         ConfigurationAdminDumpContributor dumpContributor = new ConfigurationAdminDumpContributor(configAdmin);
         this.tracker.track(context.registerService(DumpContributor.class.getName(), dumpContributor, null));
     }
-
-    private ConfigurationAdminExporter initializeConfigAdminExporter(BundleContext context, KernelConfiguration configuration, ConfigurationAdmin configAdmin) {
-        ConfigurationAdminExporter exporter = new ConfigurationAdminExporter(configuration.getDomain(), configAdmin);
-        this.tracker.track(context.registerService(ConfigurationListener.class.getName(), exporter, null));
-        exporter.init();
-        return exporter;
-    }
     
     private void initializeConsoleConfigurationConvertor(BundleContext context, ConfigurationAdmin configAdmin) {
         consoleConfigurationConvertor = new ConsoleConfigurationConvertor(context, configAdmin);
@@ -95,12 +83,5 @@
     public void stop() {
         this.tracker.unregisterAll();
         consoleConfigurationConvertor.stop();
-        
-        ConfigurationAdminExporter local = this.configAdminExporter;
-        
-        if (local != null) {
-            this.configAdminExporter = null;
-            local.stop();
-        }
     }
 }
diff --git a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConsoleConfigurationConvertor.java b/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConsoleConfigurationConvertor.java
index ec02c83..5a22fb4 100644
--- a/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConsoleConfigurationConvertor.java
+++ b/org.eclipse.virgo.nano.core/src/main/java/org/eclipse/virgo/nano/config/internal/ConsoleConfigurationConvertor.java
@@ -3,12 +3,9 @@
 
 import java.io.IOException;
 import java.net.BindException;
-import java.net.InetAddress;
 import java.net.ServerSocket;
-import java.net.UnknownHostException;
 import java.util.Dictionary;
 import java.util.Hashtable;
-import java.util.Properties;
 
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -150,9 +147,10 @@
 
     class ConsoleConfigurator implements ManagedService {
 
-        private Dictionary properties;
+        private Dictionary<String,String> properties;
 
-        @Override
+        @SuppressWarnings("unchecked")
+		@Override
         public void updated(Dictionary props) throws ConfigurationException {
             if (props != null) {
                 this.properties = props;
@@ -164,14 +162,14 @@
                 ConsoleConfigurationConvertor.this.configuratorRegistration.setProperties(this.properties);
             }
 
-            String telnetHost = (String) this.properties.get(TELNET_HOST);
-            String telnetPort = (String) this.properties.get(TELNET_PORT);
-            String telnetEnabled = (String) this.properties.get(TELNET_ENABLED);
+            String telnetHost = this.properties.get(TELNET_HOST);
+            String telnetPort = this.properties.get(TELNET_PORT);
+            String telnetEnabled = this.properties.get(TELNET_ENABLED);
             updateConfiguration(TELNET_PID, telnetHost, telnetPort, telnetEnabled);
 
-            String sshHost = (String) this.properties.get(SSH_HOST);
-            String sshPort = (String) this.properties.get(SSH_PORT);
-            String sshEnabled = (String) this.properties.get(SSH_ENABLED);
+            String sshHost = this.properties.get(SSH_HOST);
+            String sshPort = this.properties.get(SSH_PORT);
+            String sshEnabled = this.properties.get(SSH_ENABLED);
             updateConfiguration(SSH_PID, sshHost, sshPort, sshEnabled);
         }
     }
diff --git a/org.eclipse.virgo.nano.core/src/test/java/org/eclipse/virgo/nano/config/internal/ConfigurationPublisherTests.java b/org.eclipse.virgo.nano.core/src/test/java/org/eclipse/virgo/nano/config/internal/ConfigurationPublisherTests.java
index 7a78556..3efb93c 100644
--- a/org.eclipse.virgo.nano.core/src/test/java/org/eclipse/virgo/nano/config/internal/ConfigurationPublisherTests.java
+++ b/org.eclipse.virgo.nano.core/src/test/java/org/eclipse/virgo/nano/config/internal/ConfigurationPublisherTests.java
@@ -12,7 +12,6 @@
 package org.eclipse.virgo.nano.config.internal;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 import java.io.File;
 import java.io.IOException;
@@ -23,8 +22,6 @@
 import java.util.TreeMap;
 
 import org.eclipse.virgo.test.stubs.service.cm.StubConfigurationAdmin;
-import org.eclipse.virgo.nano.config.internal.ConfigurationPublisher;
-import org.eclipse.virgo.nano.config.internal.PropertiesSource;
 import org.junit.Test;
 import org.osgi.service.cm.Configuration;
 
diff --git a/org.eclipse.virgo.nano.war.deployer/.classpath b/org.eclipse.virgo.nano.war.deployer/.classpath
index 0d4eb5e..a53a603 100644
--- a/org.eclipse.virgo.nano.war.deployer/.classpath
+++ b/org.eclipse.virgo.nano.war.deployer/.classpath
@@ -25,7 +25,7 @@
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.mirrored/org.eclipse.osgi/3.8.0.v20120508-2119/org.eclipse.osgi-3.8.0.v20120508-2119.jar" sourcepath="/NANO_IVY_CACHE/org.eclipse.osgi/org.eclipse.osgi/3.7.1.R37x_v20110808-1106/org.eclipse.osgi-sources-3.7.1.R37x_v20110808-1106.jar"/>
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.medic/org.eclipse.virgo.medic/3.6.0.D-20120820125756/org.eclipse.virgo.medic-3.6.0.D-20120820125756.jar" sourcepath="/NANO_IVY_CACHE/org.eclipse.virgo.medic/org.eclipse.virgo.medic/3.1.0.D-20111205152504/org.eclipse.virgo.medic-sources-3.1.0.D-20111205152504.jar"/>
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.medic/org.eclipse.virgo.medic.core/3.6.0.D-20120820125756/org.eclipse.virgo.medic.core-3.6.0.D-20120820125756.jar"/>
-	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.gemini/org.eclipse.gemini.web.core/2.1.0.RELEASE/org.eclipse.gemini.web.core-2.1.0.RELEASE.jar" sourcepath="/NANO_IVY_CACHE/org.eclipse.gemini.web/org.eclipse.gemini.web.core/2.1.0.BUILD-20120525195844/org.eclipse.gemini.web.core-sources-2.1.0.BUILD-20120525195844.jar"/>
+	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.gemini/org.eclipse.gemini.web.core/2.2.0.BUILD-20120820064721/org.eclipse.gemini.web.core-2.2.0.BUILD-20120820064721.jar" sourcepath="/NANO_IVY_CACHE/org.eclipse.gemini.web/org.eclipse.gemini.web.core/2.1.0.BUILD-20120525195844/org.eclipse.gemini.web.core-sources-2.1.0.BUILD-20120525195844.jar"/>
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.mirrored/org.eclipse.equinox.simpleconfigurator.manipulator/2.0.0.v20110808-1657/org.eclipse.equinox.simpleconfigurator.manipulator-2.0.0.v20110808-1657.jar"/>
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.mirrored/org.eclipse.equinox.simpleconfigurator/1.0.300.v20110815-1744/org.eclipse.equinox.simpleconfigurator-1.0.300.v20110815-1744.jar" sourcepath="/NANO_IVY_CACHE/org.eclipse.osgi/org.eclipse.equinox.simpleconfigurator/1.0.300.v20110815-1744/org.eclipse.equinox.simpleconfigurator-sources-1.0.300.v20110815-1744.jar"/>
 	<classpathentry kind="var" path="NANO_IVY_CACHE/org.eclipse.virgo.mirrored/org.slf4j.api/1.6.4.v20120130-2120/org.slf4j.api-1.6.4.v20120130-2120.jar" sourcepath="/NANO_IVY_CACHE/org.slf4j/com.springsource.slf4j.api/1.6.1/com.springsource.slf4j.api-sources-1.6.1.jar"/>
