FELIX-1107, FELIX-1109, FELIX-1110: refactor the deployer into its own module, add a blueprint deployer and extract the features deployer in its own module

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@770120 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/assembly/pom.xml b/karaf/assembly/pom.xml
index 936d36a..20c26c3 100644
--- a/karaf/assembly/pom.xml
+++ b/karaf/assembly/pom.xml
@@ -43,12 +43,20 @@
             <artifactId>org.apache.servicemix.kernel.client</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.spring</artifactId>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.spring</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.blueprint</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.features</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.kernel.gshell</groupId>
diff --git a/karaf/assembly/src/main/descriptors/unix-bin.xml b/karaf/assembly/src/main/descriptors/unix-bin.xml
index 3dd8246..f8490a7 100644
--- a/karaf/assembly/src/main/descriptors/unix-bin.xml
+++ b/karaf/assembly/src/main/descriptors/unix-bin.xml
@@ -218,8 +218,6 @@
             <useProjectArtifact>false</useProjectArtifact>
             <outputFileNameMapping>org/apache/servicemix/kernel/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
             <includes>
-                <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.filemonitor</include>
-                <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.spring</include>
                 <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.management</include>
             </includes>
         </dependencySet>
@@ -227,6 +225,18 @@
             <outputDirectory>/system</outputDirectory>
             <unpack>false</unpack>
             <useProjectArtifact>false</useProjectArtifact>
+            <outputFileNameMapping>org/apache/servicemix/kernel/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
+            <includes>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.filemonitor</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.spring</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.blueprint</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.features</include>
+            </includes>
+        </dependencySet>
+        <dependencySet>
+            <outputDirectory>/system</outputDirectory>
+            <unpack>false</unpack>
+            <useProjectArtifact>false</useProjectArtifact>
             <outputFileNameMapping>org/apache/servicemix/kernel/gshell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
             <includes>
                 <include>org.apache.servicemix.kernel.gshell:org.apache.servicemix.kernel.gshell.core</include>
diff --git a/karaf/assembly/src/main/descriptors/windows-bin.xml b/karaf/assembly/src/main/descriptors/windows-bin.xml
index 0901795..9509f54 100644
--- a/karaf/assembly/src/main/descriptors/windows-bin.xml
+++ b/karaf/assembly/src/main/descriptors/windows-bin.xml
@@ -210,8 +210,6 @@
             <useProjectArtifact>false</useProjectArtifact>
             <outputFileNameMapping>org/apache/servicemix/kernel/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
             <includes>
-                <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.filemonitor</include>
-                <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.spring</include>
                 <include>org.apache.servicemix.kernel:org.apache.servicemix.kernel.management</include>
             </includes>
         </dependencySet>
@@ -219,6 +217,18 @@
             <outputDirectory>/system</outputDirectory>
             <unpack>false</unpack>
             <useProjectArtifact>false</useProjectArtifact>
+            <outputFileNameMapping>org/apache/servicemix/kernel/deployer/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
+            <includes>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.filemonitor</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.spring</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.blueprint</include>
+                <include>org.apache.servicemix.kernel.deployer:org.apache.servicemix.kernel.deployer.features</include>
+            </includes>
+        </dependencySet>
+        <dependencySet>
+            <outputDirectory>/system</outputDirectory>
+            <unpack>false</unpack>
+            <useProjectArtifact>false</useProjectArtifact>
             <outputFileNameMapping>org/apache/servicemix/kernel/gshell/${artifact.artifactId}/${artifact.baseVersion}/${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
             <includes>
                 <include>org.apache.servicemix.kernel.gshell:org.apache.servicemix.kernel.gshell.core</include>
diff --git a/karaf/assembly/src/main/filtered-resources/etc/startup.properties b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
index 06519d6..fe1b9b8 100644
--- a/karaf/assembly/src/main/filtered-resources/etc/startup.properties
+++ b/karaf/assembly/src/main/filtered-resources/etc/startup.properties
@@ -34,7 +34,7 @@
 org/apache/felix/org.apache.felix.configadmin/${felix.configadmin.version}/org.apache.felix.configadmin-${felix.configadmin.version}.jar=10
 org/apache/geronimo/specs/geronimo-annotation_1.0_spec/${geronimo.annotation.version}/geronimo-annotation_1.0_spec-${geronimo.annotation.version}.jar=10
 org/apache/felix/org.apache.felix.prefs/${felix.prefs.version}/org.apache.felix.prefs-${felix.prefs.version}.jar=10
-org/apache/servicemix/kernel/org.apache.servicemix.kernel.filemonitor/${pom.version}/org.apache.servicemix.kernel.filemonitor-${pom.version}.jar=15
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.filemonitor/${pom.version}/org.apache.servicemix.kernel.deployer.filemonitor-${pom.version}.jar=15
 
 #
 # The rest of the services..
@@ -54,7 +54,9 @@
 org/springframework/osgi/spring-osgi-core/${spring.osgi.version}/spring-osgi-core-${spring.osgi.version}.jar=30
 org/springframework/osgi/spring-osgi-extender/${spring.osgi.version}/spring-osgi-extender-${spring.osgi.version}.jar=30
 org/springframework/osgi/spring-osgi-io/${spring.osgi.version}/spring-osgi-io-${spring.osgi.version}.jar=30
-org/apache/servicemix/kernel/org.apache.servicemix.kernel.spring/${pom.version}/org.apache.servicemix.kernel.spring-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.spring/${pom.version}/org.apache.servicemix.kernel.deployer.spring-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.blueprint/${pom.version}/org.apache.servicemix.kernel.deployer.blueprint-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.features/${pom.version}/org.apache.servicemix.kernel.deployer.features-${pom.version}.jar=30
 org/apache/servicemix/kernel/org.apache.servicemix.kernel.management/${pom.version}/org.apache.servicemix.kernel.management-${pom.version}.jar=30
 org/apache/servicemix/kernel/gshell/org.apache.servicemix.kernel.gshell.admin/${pom.version}/org.apache.servicemix.kernel.gshell.admin-${pom.version}.jar=30
 org/apache/servicemix/kernel/gshell/org.apache.servicemix.kernel.gshell.osgi/${pom.version}/org.apache.servicemix.kernel.gshell.osgi-${pom.version}.jar=30
diff --git a/karaf/spring/pom.xml b/karaf/deployer/blueprint/pom.xml
similarity index 79%
copy from karaf/spring/pom.xml
copy to karaf/deployer/blueprint/pom.xml
index 6eb7b2b..2b0bcf5 100644
--- a/karaf/spring/pom.xml
+++ b/karaf/deployer/blueprint/pom.xml
@@ -22,18 +22,18 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache.servicemix.kernel</groupId>
-        <artifactId>kernel</artifactId>
+        <groupId>org.apache.servicemix.kernel.deployer</groupId>
+        <artifactId>deployer</artifactId>
         <version>1.2.0-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.servicemix.kernel</groupId>
-    <artifactId>org.apache.servicemix.kernel.spring</artifactId>
+    <groupId>org.apache.servicemix.kernel.deployer</groupId>
+    <artifactId>org.apache.servicemix.kernel.deployer.blueprint</artifactId>
     <packaging>bundle</packaging>
     <version>1.2.0-SNAPSHOT</version>
-    <name>Apache ServiceMix Kernel :: Spring Deployer</name>
+    <name>Apache ServiceMix Kernel :: Blueprint Deployer</name>
 
-    <description>This deployer transforms a plain spring xml file to a deployable bundle</description>
+    <description>This deployer transforms a plain blueprint xml file to a deployable bundle</description>
 
     <dependencies>
         <dependency>
@@ -46,8 +46,8 @@
             <artifactId>spring-osgi-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
@@ -63,7 +63,7 @@
                 <configuration>
                     <instructions>
                         <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-                        <Private-Package>org.apache.servicemix.kernel.spring</Private-Package>
+                        <Private-Package>org.apache.servicemix.kernel.deployer.blueprint</Private-Package>
                         <Spring-Context>*;publish-context:=false;create-asynchronously:=false</Spring-Context>
                     </instructions>
                 </configuration>
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListener.java
similarity index 80%
copy from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java
copy to karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListener.java
index ce0c1e0..13ef072 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java
+++ b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListener.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.blueprint;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -27,16 +27,16 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.servicemix.kernel.filemonitor.DeploymentListener;
+import org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener;
 
 /**
  * A deployment listener that listens for spring xml applications
  * and creates bundles for these.
  */
-public class SpringDeploymentListener implements DeploymentListener {
+public class BlueprintDeploymentListener implements DeploymentListener {
 
 
-    private static final Log LOGGER = LogFactory.getLog(SpringDeploymentListener.class);
+    private static final Log LOGGER = LogFactory.getLog(BlueprintDeploymentListener.class);
 
     private DocumentBuilderFactory dbf;
 
@@ -46,7 +46,7 @@
                 Document doc = parse(artifact);
                 String name = doc.getDocumentElement().getLocalName();
                 String uri  = doc.getDocumentElement().getNamespaceURI();
-                if ("beans".equals(name) && "http://www.springframework.org/schema/beans".equals(uri)) {
+                if ("blueprint".equals(name) && "http://www.osgi.org/xmlns/blueprint/v1.0.0".equals(uri)) {
                     return true;
                 }
             }
@@ -60,11 +60,11 @@
         try {
             File destFile = new File(tmpDir, artifact.getName() + ".jar");
             FileOutputStream os = new FileOutputStream(destFile);
-            SpringTransformer.transform(artifact.toURL(), os);
+            BlueprintTransformer.transform(artifact.toURL(), os);
             os.close();
             return destFile;
         } catch (Exception e) {
-            LOGGER.error("Unable to build spring application bundle", e);
+            LOGGER.error("Unable to build blueprint application bundle", e);
             return null;
         }
     }
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintTransformer.java
similarity index 94%
copy from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java
copy to karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintTransformer.java
index 982fbc9..f466527 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java
+++ b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintTransformer.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.blueprint;
 
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
@@ -51,7 +51,7 @@
 
 import org.osgi.framework.Constants;
 
-public class SpringTransformer {
+public class BlueprintTransformer {
 
     static Transformer transformer;
     static DocumentBuilderFactory dbf;
@@ -74,7 +74,6 @@
         m.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
         m.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, str[0]);
         m.getMainAttributes().putValue(Constants.BUNDLE_VERSION, str[1]);
-        m.getMainAttributes().putValue("Spring-Context", "*;publish-context:=false;create-asynchronously:=true");
         String importPkgs = getImportPackages(analyze(new DOMSource(doc)));
         if (importPkgs != null && importPkgs.length() > 0) {
             m.getMainAttributes().putValue(Constants.IMPORT_PACKAGE, importPkgs);
@@ -103,12 +102,12 @@
         out.putNextEntry(e);
         m.write(out);
         out.closeEntry();
-        e = new ZipEntry("META-INF/");
+        e = new ZipEntry("OSGI-INF/");
         out.putNextEntry(e);
-        e = new ZipEntry("META-INF/spring/");
+        e = new ZipEntry("OSGI-INF/blueprint/");
         out.putNextEntry(e);
         out.closeEntry();
-        e = new ZipEntry("META-INF/spring/" + name);
+        e = new ZipEntry("OSGI-INF/blueprint/" + name);
         out.putNextEntry(e);
         // Copy the new DOM
         if (tf == null) {
@@ -185,7 +184,7 @@
             if (tf == null) {
                 tf = TransformerFactory.newInstance();
             }
-            Source s = new StreamSource(SpringTransformer.class.getResourceAsStream("extract.xsl"));
+            Source s = new StreamSource(BlueprintTransformer.class.getResourceAsStream("extract.xsl"));
             transformer = tf.newTransformer(s);
         }
 
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintURLHandler.java
similarity index 83%
copy from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java
copy to karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintURLHandler.java
index e9fedaf..a03ecae 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java
+++ b/karaf/deployer/blueprint/src/main/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintURLHandler.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.blueprint;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -34,13 +34,13 @@
  * A URL handler that will transform a JBI artifact to an OSGi bundle
  * on the fly.  Needs to be registered in the OSGi registry.
  */
-public class SpringURLHandler extends AbstractURLStreamHandlerService {
+public class BlueprintURLHandler extends AbstractURLStreamHandlerService {
 
-	private static Log logger = LogFactory.getLog(SpringURLHandler.class);
+	private static Log logger = LogFactory.getLog(BlueprintURLHandler.class);
 
-	private static String SYNTAX = "spring: spring-xml-uri";
+	private static String SYNTAX = "blueprint: bp-xml-uri";
 
-	private URL springXmlURL;
+	private URL blueprintXmlURL;
 
     /**
      * Open the connection for the given URL.
@@ -54,14 +54,14 @@
 		if (url.getPath() == null || url.getPath().trim().length() == 0) {
 			throw new MalformedURLException ("Path can not be null or empty. Syntax: " + SYNTAX );
 		}
-		springXmlURL = new URL(url.getPath());
+		blueprintXmlURL = new URL(url.getPath());
 
-		logger.debug("Spring xml URL is: [" + springXmlURL + "]");
+		logger.debug("Spring xml URL is: [" + blueprintXmlURL + "]");
 		return new Connection(url);
 	}
 	
-	public URL getSpringXmlURL() {
-		return springXmlURL;
+	public URL getBlueprintXmlURL() {
+		return blueprintXmlURL;
 	}
 
     public class Connection extends URLConnection {
@@ -79,7 +79,7 @@
             try {
                 final File f = File.createTempFile("smx", "xml");
                 FileOutputStream os = new FileOutputStream(f);
-                SpringTransformer.transform(springXmlURL, os);
+                BlueprintTransformer.transform(blueprintXmlURL, os);
                 os.close();
                 return new FileInputStream(f) {
                     public void close() throws IOException {
diff --git a/karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml b/karaf/deployer/blueprint/src/main/resources/META-INF/spring/blueprint-deployer.xml
similarity index 74%
copy from karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml
copy to karaf/deployer/blueprint/src/main/resources/META-INF/spring/blueprint-deployer.xml
index 779c2af..bb3e430 100644
--- a/karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml
+++ b/karaf/deployer/blueprint/src/main/resources/META-INF/spring/blueprint-deployer.xml
@@ -29,21 +29,21 @@
   http://www.springframework.org/schema/osgi
   http://www.springframework.org/schema/osgi/spring-osgi.xsd">
 
-    <bean id="springDeploymentListener" class="org.apache.servicemix.kernel.spring.SpringDeploymentListener">
+    <bean id="blueprintDeploymentListener" class="org.apache.servicemix.kernel.deployer.blueprint.BlueprintDeploymentListener">
 
     </bean>
 
-    <osgi:service ref="springDeploymentListener">
+    <osgi:service ref="blueprintDeploymentListener">
         <osgi:interfaces>
-            <value>org.apache.servicemix.kernel.filemonitor.DeploymentListener</value>
+            <value>org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener</value>
         </osgi:interfaces>
     </osgi:service>
 
-    <bean id="springHandler" class="org.apache.servicemix.kernel.spring.SpringURLHandler" />
+    <bean id="blueprintHandler" class="org.apache.servicemix.kernel.deployer.blueprint.BlueprintURLHandler" />
 
-    <osgi:service ref="springHandler" interface="org.osgi.service.url.URLStreamHandlerService">
+    <osgi:service ref="blueprintHandler" interface="org.osgi.service.url.URLStreamHandlerService">
     	<osgi:service-properties>
-            <entry key="url.handler.protocol" value="spring"/>
+            <entry key="url.handler.protocol" value="blueprint"/>
         </osgi:service-properties>
     </osgi:service>
 
diff --git a/karaf/deployer/blueprint/src/main/resources/org/apache/servicemix/kernel/deployer/blueprint/extract.xsl b/karaf/deployer/blueprint/src/main/resources/org/apache/servicemix/kernel/deployer/blueprint/extract.xsl
new file mode 100644
index 0000000..2c8c291
--- /dev/null
+++ b/karaf/deployer/blueprint/src/main/resources/org/apache/servicemix/kernel/deployer/blueprint/extract.xsl
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:bp="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+    <xsl:output method="text" />
+
+	<xsl:template match="/">
+
+		<!-- Match all attributes that holds a class or a comma delimited
+		     list of classes and print them -->
+
+		<xsl:for-each select="
+				//bp:*/@class
+			|	//bp:*/@type
+			|	//bp:*/@value-type
+			|	//bp:*/@key-type
+			|	//bp:*/bp:interfaces/bp:value/text()
+		">
+			<xsl:value-of select="." />
+			<xsl:text>
+			</xsl:text>
+		</xsl:for-each>
+
+		<!-- This seems some magic to get extra imports? -->
+
+	</xsl:template>
+
+
+</xsl:stylesheet>
+
diff --git a/karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java b/karaf/deployer/blueprint/src/test/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListenerTest.java
similarity index 81%
copy from karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java
copy to karaf/deployer/blueprint/src/test/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListenerTest.java
index 38a37bb..6ab2c33 100644
--- a/karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java
+++ b/karaf/deployer/blueprint/src/test/java/org/apache/servicemix/kernel/deployer/blueprint/BlueprintDeploymentListenerTest.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.blueprint;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -30,24 +30,24 @@
 
 import junit.framework.TestCase;
 
-public class SpringDeploymentListenerTest extends TestCase {
+public class BlueprintDeploymentListenerTest extends TestCase {
 
     public void testPackagesExtraction() throws Exception {
-        SpringDeploymentListener l = new SpringDeploymentListener();
-        File f = new File(getClass().getClassLoader().getResource("META-INF/spring/spring-deployer.xml").toURI());
-        Set<String> pkgs = SpringTransformer.analyze(new DOMSource(SpringTransformer.parse(f.toURL())));
+        BlueprintDeploymentListener l = new BlueprintDeploymentListener();
+        File f = new File(getClass().getClassLoader().getResource("test.xml").toURI());
+        Set<String> pkgs = BlueprintTransformer.analyze(new DOMSource(BlueprintTransformer.parse(f.toURL())));
         assertNotNull(pkgs);
         assertEquals(2, pkgs.size());
         Iterator<String> it = pkgs.iterator();
-        assertEquals("org.apache.servicemix.kernel.spring", it.next());
-        assertEquals("org.osgi.service.url", it.next());
+        assertEquals("java.lang", it.next());
+        assertEquals("org.apache.geronimo.blueprint.sample", it.next());
     }
 
     public void testCustomManifest() throws Exception {
         File f = File.createTempFile("smx", ".jar");
         try {
             OutputStream os = new FileOutputStream(f);
-            SpringTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os);
+            BlueprintTransformer.transform(getClass().getClassLoader().getResource("test.xml"), os);
             os.close();
             InputStream is = new FileInputStream(f);
             JarInputStream jar = new JarInputStream(is);
@@ -74,7 +74,7 @@
     }
 
     private void assertVersion(String s, String... expectedParts) {
-        String[] parts = SpringTransformer.extractNameVersionType(s);
+        String[] parts = BlueprintTransformer.extractNameVersionType(s);
         assertEquals(expectedParts.length, parts.length);
         for (int i = 0; i < expectedParts.length; i++) {
             assertEquals(expectedParts[i], parts[i]);
diff --git a/karaf/deployer/blueprint/src/test/resources/test.xml b/karaf/deployer/blueprint/src/test/resources/test.xml
new file mode 100644
index 0000000..3411d48
--- /dev/null
+++ b/karaf/deployer/blueprint/src/test/resources/test.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:cm="http://www.osgi.org/xmlns/blueprint-cm/v1.0.0"
+           default-availability="optional">
+
+    <type-converters>
+        <bean id="converter1" class="org.apache.geronimo.blueprint.sample.DateTypeConverter">
+            <property name="format" value="yyyy.MM.dd"/>
+        </bean>
+        <bean id="converter2" class="org.apache.geronimo.blueprint.sample.CurrencyTypeConverter"/>
+
+        <cm:property-placeholder id="property-placeholder" persistent-id="blueprint-sample">
+            <cm:default-properties>
+                <cm:property name="key.b" value="-1"/>
+            </cm:default-properties>
+        </cm:property-placeholder>
+    </type-converters>
+
+    <bean id="foo" class="org.apache.geronimo.blueprint.sample.Foo" init-method="init" destroy-method="destroy">
+        <property name="a" value="5" />
+        <property name="b" value="${key.b}" />
+        <property name="bar" ref="bar" />
+        <property name="currency">
+              <value>PLN</value>
+        </property>
+        <property name="date">
+              <value>2009.04.17</value>
+        </property>
+    </bean>
+
+    <bean id="bar" class="org.apache.geronimo.blueprint.sample.Bar">
+        <property name="value"><value>Hello FooBar</value></property>
+        <property name="context" ref="bundleContext"/>
+        <property name="list">
+            <list>
+                <value>a list element</value>
+                <value type = "java.lang.Integer">5</value>
+            </list>
+        </property>
+    </bean>
+
+    <service ref="foo" auto-export="all-classes">
+        <service-properties>
+            <entry key="key" value="value"/>
+        </service-properties>
+        <registration-listener ref="fooRegistrationListener"
+                               registration-method="serviceRegistered"
+                               unregistration-method="serviceUnregistered"/>
+    </service>
+
+    <bean id="fooRegistrationListener" class="org.apache.geronimo.blueprint.sample.FooRegistrationListener"/>
+
+    <reference id="ref" interface="org.apache.geronimo.blueprint.sample.Foo">
+    </reference>
+
+    <reference id="ref2" interface="org.apache.geronimo.blueprint.sample.InterfaceA" timeout="100">
+        <listener bind-method="bind" unbind-method="unbind" ref="bindingListener" />
+    </reference>
+
+    <bean id="bindingListener" class="org.apache.geronimo.blueprint.sample.BindingListener"/>
+
+    <ref-list id="ref-list" interface="org.apache.geronimo.blueprint.sample.InterfaceA">
+        <listener bind-method="bind" unbind-method="unbind" ref="listBindingListener" />
+    </ref-list>
+
+    <bean id="listBindingListener" class="org.apache.geronimo.blueprint.sample.BindingListener"/>
+
+</blueprint>
+
diff --git a/karaf/spring/pom.xml b/karaf/deployer/features/pom.xml
similarity index 75%
copy from karaf/spring/pom.xml
copy to karaf/deployer/features/pom.xml
index 6eb7b2b..738126e 100644
--- a/karaf/spring/pom.xml
+++ b/karaf/deployer/features/pom.xml
@@ -22,18 +22,18 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache.servicemix.kernel</groupId>
-        <artifactId>kernel</artifactId>
+        <groupId>org.apache.servicemix.kernel.deployer</groupId>
+        <artifactId>deployer</artifactId>
         <version>1.2.0-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.servicemix.kernel</groupId>
-    <artifactId>org.apache.servicemix.kernel.spring</artifactId>
+    <groupId>org.apache.servicemix.kernel.deployer</groupId>
+    <artifactId>org.apache.servicemix.kernel.deployer.features</artifactId>
     <packaging>bundle</packaging>
     <version>1.2.0-SNAPSHOT</version>
-    <name>Apache ServiceMix Kernel :: Spring Deployer</name>
+    <name>Apache ServiceMix Kernel :: Features Deployer</name>
 
-    <description>This deployer transforms a plain spring xml file to a deployable bundle</description>
+    <description>This deployer can deploy features descriptor on the fly</description>
 
     <dependencies>
         <dependency>
@@ -46,8 +46,12 @@
             <artifactId>spring-osgi-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+            <groupId>org.apache.servicemix.kernel.gshell</groupId>
+            <artifactId>org.apache.servicemix.kernel.gshell.features</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
@@ -63,7 +67,7 @@
                 <configuration>
                     <instructions>
                         <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-                        <Private-Package>org.apache.servicemix.kernel.spring</Private-Package>
+                        <Private-Package>org.apache.servicemix.kernel.deployer.blueprint</Private-Package>
                         <Spring-Context>*;publish-context:=false;create-asynchronously:=false</Spring-Context>
                     </instructions>
                 </configuration>
diff --git a/karaf/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/internal/FeatureDeploymentListener.java b/karaf/deployer/features/src/main/java/org/apache/servicemix/kernel/deployer/features/FeatureDeploymentListener.java
similarity index 87%
rename from karaf/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/internal/FeatureDeploymentListener.java
rename to karaf/deployer/features/src/main/java/org/apache/servicemix/kernel/deployer/features/FeatureDeploymentListener.java
index e4a036b..b26d548 100644
--- a/karaf/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/internal/FeatureDeploymentListener.java
+++ b/karaf/deployer/features/src/main/java/org/apache/servicemix/kernel/deployer/features/FeatureDeploymentListener.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.gshell.features.internal;
+package org.apache.servicemix.kernel.deployer.features;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -40,8 +40,10 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.servicemix.kernel.filemonitor.DeploymentListener;
 import org.apache.servicemix.kernel.gshell.features.Feature;
+import org.apache.servicemix.kernel.gshell.features.FeaturesService;
+import org.apache.servicemix.kernel.gshell.features.Repository;
+import org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
@@ -62,14 +64,14 @@
     private static final Log LOGGER = LogFactory.getLog(FeatureDeploymentListener.class);
 
     private DocumentBuilderFactory dbf;
-    private FeaturesServiceImpl featuresService;
+    private FeaturesService featuresService;
     private BundleContext bundleContext;
 
-    public void setFeaturesService(FeaturesServiceImpl featuresService) {
+    public void setFeaturesService(FeaturesService featuresService) {
         this.featuresService = featuresService;
     }
 
-    public FeaturesServiceImpl getFeaturesService() {
+    public FeaturesService getFeaturesService() {
         return featuresService;
     }
 
@@ -164,21 +166,29 @@
                 Enumeration featuresUrlEnumeration = bundle.findEntries("/META-INF/" + FEATURE_PATH + "/", "*.xml", false);
                 while (featuresUrlEnumeration != null && featuresUrlEnumeration.hasMoreElements()) {
                     URL url = (URL) featuresUrlEnumeration.nextElement();
-                    RepositoryImpl repo = featuresService.internalAddRepository(url.toURI());
-                    for (Feature f : repo.getFeatures()) {
-                        featuresService.installFeature(f.getName(), f.getVersion());
+                    featuresService.addRepository(url.toURI());
+                    for (Repository repo : featuresService.listRepositories()) {
+                        if (repo.getURI().equals(url.toURI())) {
+                            for (Feature f : repo.getFeatures()) {
+                                featuresService.installFeature(f.getName(), f.getVersion());
+                            }
+                        }
                     }
-                    featuresService.internalRemoveRepository(url.toURI());
+                    featuresService.removeRepository(url.toURI());
                 }
             } else if (bundleEvent.getType() == BundleEvent.UNINSTALLED) {
                 Enumeration featuresUrlEnumeration = bundle.findEntries("/META-INF/" + FEATURE_PATH + "/", "*.xml", false);
                 while (featuresUrlEnumeration != null && featuresUrlEnumeration.hasMoreElements()) {
                     URL url = (URL) featuresUrlEnumeration.nextElement();
-                    RepositoryImpl repo = featuresService.internalAddRepository(url.toURI());
-                    for (Feature f : repo.getFeatures()) {
-                        featuresService.uninstallFeature(f.getName(), f.getVersion());
+                    featuresService.addRepository(url.toURI());
+                    for (Repository repo : featuresService.listRepositories()) {
+                        if (repo.getURI().equals(url.toURI())) {
+                            for (Feature f : repo.getFeatures()) {
+                                featuresService.uninstallFeature(f.getName(), f.getVersion());
+                            }
+                        }
                     }
-                    featuresService.internalRemoveRepository(url.toURI());
+                    featuresService.removeRepository(url.toURI());
                 }
             }
         } catch (Exception e) {
diff --git a/karaf/deployer/features/src/main/resources/META-INF/spring/features-deployer.xml b/karaf/deployer/features/src/main/resources/META-INF/spring/features-deployer.xml
new file mode 100644
index 0000000..54b1913
--- /dev/null
+++ b/karaf/deployer/features/src/main/resources/META-INF/spring/features-deployer.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:ctx="http://www.springframework.org/schema/context"
+       xmlns:osgi="http://www.springframework.org/schema/osgi"
+       xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
+       xmlns:util="http://www.springframework.org/schema/util"
+       xmlns:gshell="http://servicemix.apache.org/schema/servicemix-gshell"
+       xsi:schemaLocation="
+  http://www.springframework.org/schema/beans
+  http://www.springframework.org/schema/beans/spring-beans.xsd
+  http://www.springframework.org/schema/context
+  http://www.springframework.org/schema/context/spring-context.xsd
+  http://www.springframework.org/schema/osgi
+  http://www.springframework.org/schema/osgi/spring-osgi.xsd
+  http://www.springframework.org/schema/osgi-compendium
+  http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
+  http://www.springframework.org/schema/util
+  http://www.springframework.org/schema/util/spring-util.xsd
+  http://servicemix.apache.org/schema/servicemix-gshell
+  http://servicemix.apache.org/schema/servicemix-gshell/servicemix-gshell.xsd">
+
+    <osgi:reference id="featuresService" interface="org.apache.servicemix.kernel.gshell.features.FeaturesService" cardinality="1..1"/>
+
+    <bean id="featureDeploymentListener" class="org.apache.servicemix.kernel.deployer.features.FeatureDeploymentListener">
+        <property name="featuresService" ref="featuresService" />
+    </bean>
+
+    <osgi:service ref="featureDeploymentListener" interface="org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener" />
+
+</beans>
\ No newline at end of file
diff --git a/karaf/filemonitor/pom.xml b/karaf/deployer/filemonitor/pom.xml
similarity index 91%
rename from karaf/filemonitor/pom.xml
rename to karaf/deployer/filemonitor/pom.xml
index 58468bf..7817bc2 100644
--- a/karaf/filemonitor/pom.xml
+++ b/karaf/deployer/filemonitor/pom.xml
@@ -22,13 +22,13 @@
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>org.apache.servicemix.kernel</groupId>
-        <artifactId>kernel</artifactId>
+        <groupId>org.apache.servicemix.kernel.deployer</groupId>
+        <artifactId>deployer</artifactId>
         <version>1.2.0-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.servicemix.kernel</groupId>
-    <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+    <groupId>org.apache.servicemix.kernel.deployer</groupId>
+    <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
     <packaging>bundle</packaging>
     <version>1.2.0-SNAPSHOT</version>
     <name>Apache ServiceMix Kernel :: File Monitor</name>
@@ -75,7 +75,7 @@
                     <instructions>
                         <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
                         <Export-Package>${pom.artifactId}</Export-Package>
-                        <Bundle-Activator>org.apache.servicemix.kernel.filemonitor.FileMonitorActivator
+                        <Bundle-Activator>org.apache.servicemix.kernel.deployer.filemonitor.FileMonitorActivator
                         </Bundle-Activator>
                     </instructions>
                 </configuration>
diff --git a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/DeploymentListener.java b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/DeploymentListener.java
similarity index 94%
rename from karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/DeploymentListener.java
rename to karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/DeploymentListener.java
index 6423561..18486c9 100644
--- a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/DeploymentListener.java
+++ b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/DeploymentListener.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.io.File;
 
diff --git a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitor.java b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitor.java
similarity index 99%
rename from karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitor.java
rename to karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitor.java
index c0bf235..2a08990 100644
--- a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitor.java
+++ b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitor.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.io.Closeable;
 import java.io.File;
diff --git a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitorActivator.java b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorActivator.java
similarity index 97%
rename from karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitorActivator.java
rename to karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorActivator.java
index 82dea71..a700523 100644
--- a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/FileMonitorActivator.java
+++ b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorActivator.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.util.Collection;
 import java.util.Dictionary;
@@ -94,7 +94,7 @@
     // ManagedServiceFactory interface
     // -------------------------------------------------------------------------
     public String getName() {
-        return "org.apache.servicemix.kernel.filemonitor.FileMonitor";
+        return "org.apache.servicemix.kernel.deployer.filemonitor.FileMonitor";
     }
 
     public void updated(String pid, Dictionary properties) throws ConfigurationException {
diff --git a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/JarUtil.java b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/JarUtil.java
similarity index 98%
rename from karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/JarUtil.java
rename to karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/JarUtil.java
index 98b6036..dff9e5c 100644
--- a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/JarUtil.java
+++ b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/JarUtil.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.io.BufferedOutputStream;
 import java.io.File;
diff --git a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/Scanner.java b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/Scanner.java
similarity index 99%
rename from karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/Scanner.java
rename to karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/Scanner.java
index 8b25226..239a1a8 100644
--- a/karaf/filemonitor/src/main/java/org/apache/servicemix/kernel/filemonitor/Scanner.java
+++ b/karaf/deployer/filemonitor/src/main/java/org/apache/servicemix/kernel/deployer/filemonitor/Scanner.java
@@ -12,7 +12,7 @@
 //See the License for the specific language governing permissions and
 //limitations under the License.
 //========================================================================
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.io.File;
 import java.io.FilenameFilter;
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/META-INF/LICENSE.txt b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/LICENSE.txt
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/META-INF/LICENSE.txt
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/LICENSE.txt
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/META-INF/MANIFEST.MF b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/MANIFEST.MF
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/META-INF/MANIFEST.MF
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/MANIFEST.MF
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/META-INF/NOTICE.txt b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/NOTICE.txt
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/META-INF/NOTICE.txt
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/NOTICE.txt
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/META-INF/spring/camel-context.xml b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/spring/camel-context.xml
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/META-INF/spring/camel-context.xml
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/META-INF/spring/camel-context.xml
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder$SomeBean.class b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder$SomeBean.class
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder$SomeBean.class
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder$SomeBean.class
Binary files differ
diff --git a/karaf/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder.class b/karaf/deployer/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder.class
similarity index 100%
rename from karaf/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder.class
rename to karaf/deployer/filemonitor/src/test/data/camel-example-spring/org/apache/camel/example/spring/MyRouteBuilder.class
Binary files differ
diff --git a/karaf/filemonitor/src/test/data/foo/META-INF/MANIFEST.MF b/karaf/deployer/filemonitor/src/test/data/foo/META-INF/MANIFEST.MF
similarity index 100%
rename from karaf/filemonitor/src/test/data/foo/META-INF/MANIFEST.MF
rename to karaf/deployer/filemonitor/src/test/data/foo/META-INF/MANIFEST.MF
diff --git a/karaf/filemonitor/src/test/data/foo/foo.txt b/karaf/deployer/filemonitor/src/test/data/foo/foo.txt
similarity index 100%
rename from karaf/filemonitor/src/test/data/foo/foo.txt
rename to karaf/deployer/filemonitor/src/test/data/foo/foo.txt
diff --git a/karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/BundlePackerTest.java b/karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/BundlePackerTest.java
similarity index 95%
rename from karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/BundlePackerTest.java
rename to karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/BundlePackerTest.java
index 78a9159..83109ed 100644
--- a/karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/BundlePackerTest.java
+++ b/karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/BundlePackerTest.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import java.io.File;
 
diff --git a/karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/FileMonitorTest.java b/karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorTest.java
similarity index 96%
rename from karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/FileMonitorTest.java
rename to karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorTest.java
index 5a99c96..998ca84 100644
--- a/karaf/filemonitor/src/test/java/org/apache/servicemix/kernel/filemonitor/FileMonitorTest.java
+++ b/karaf/deployer/filemonitor/src/test/java/org/apache/servicemix/kernel/deployer/filemonitor/FileMonitorTest.java
@@ -15,9 +15,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.filemonitor;
+package org.apache.servicemix.kernel.deployer.filemonitor;
 
 import junit.framework.TestCase;
+import org.apache.servicemix.kernel.deployer.filemonitor.FileMonitor;
 
 /**
  * FileMonitor Tester.
diff --git a/karaf/deployer/pom.xml b/karaf/deployer/pom.xml
new file mode 100644
index 0000000..7e2810f
--- /dev/null
+++ b/karaf/deployer/pom.xml
@@ -0,0 +1,43 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.servicemix.kernel</groupId>
+        <artifactId>kernel</artifactId>
+        <version>1.2.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.apache.servicemix.kernel.deployer</groupId>
+    <artifactId>deployer</artifactId>
+    <packaging>pom</packaging>
+    <version>1.2.0-SNAPSHOT</version>
+    <name>Apache ServiceMix Kernel :: Deployer</name>
+
+    <modules>
+        <module>filemonitor</module>
+        <module>spring</module>
+        <module>blueprint</module>
+        <module>features</module>
+    </modules>
+
+</project>
\ No newline at end of file
diff --git a/karaf/spring/pom.xml b/karaf/deployer/spring/pom.xml
similarity index 90%
rename from karaf/spring/pom.xml
rename to karaf/deployer/spring/pom.xml
index 6eb7b2b..31778a9 100644
--- a/karaf/spring/pom.xml
+++ b/karaf/deployer/spring/pom.xml
@@ -27,8 +27,8 @@
         <version>1.2.0-SNAPSHOT</version>
     </parent>
 
-    <groupId>org.apache.servicemix.kernel</groupId>
-    <artifactId>org.apache.servicemix.kernel.spring</artifactId>
+    <groupId>org.apache.servicemix.kernel.deployer</groupId>
+    <artifactId>org.apache.servicemix.kernel.deployer.spring</artifactId>
     <packaging>bundle</packaging>
     <version>1.2.0-SNAPSHOT</version>
     <name>Apache ServiceMix Kernel :: Spring Deployer</name>
@@ -46,8 +46,8 @@
             <artifactId>spring-osgi-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+            <groupId>org.apache.servicemix.kernel.deployer</groupId>
+            <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.servicemix.bundles</groupId>
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListener.java
similarity index 95%
rename from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java
rename to karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListener.java
index ce0c1e0..11c394f 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringDeploymentListener.java
+++ b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListener.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.spring;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -27,7 +27,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.servicemix.kernel.filemonitor.DeploymentListener;
+import org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener;
 
 /**
  * A deployment listener that listens for spring xml applications
@@ -35,7 +35,6 @@
  */
 public class SpringDeploymentListener implements DeploymentListener {
 
-
     private static final Log LOGGER = LogFactory.getLog(SpringDeploymentListener.class);
 
     private DocumentBuilderFactory dbf;
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringTransformer.java
similarity index 98%
rename from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java
rename to karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringTransformer.java
index 982fbc9..91d8b2a 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringTransformer.java
+++ b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringTransformer.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.spring;
 
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
diff --git a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringURLHandler.java
similarity index 97%
rename from karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java
rename to karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringURLHandler.java
index e9fedaf..fce7913 100644
--- a/karaf/spring/src/main/java/org/apache/servicemix/kernel/spring/SpringURLHandler.java
+++ b/karaf/deployer/spring/src/main/java/org/apache/servicemix/kernel/deployer/spring/SpringURLHandler.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.spring;
 
 import java.io.File;
 import java.io.FileInputStream;
diff --git a/karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml b/karaf/deployer/spring/src/main/resources/META-INF/spring/spring-deployer.xml
similarity index 91%
rename from karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml
rename to karaf/deployer/spring/src/main/resources/META-INF/spring/spring-deployer.xml
index 779c2af..af2921a 100644
--- a/karaf/spring/src/main/resources/META-INF/spring/spring-deployer.xml
+++ b/karaf/deployer/spring/src/main/resources/META-INF/spring/spring-deployer.xml
@@ -29,17 +29,17 @@
   http://www.springframework.org/schema/osgi
   http://www.springframework.org/schema/osgi/spring-osgi.xsd">
 
-    <bean id="springDeploymentListener" class="org.apache.servicemix.kernel.spring.SpringDeploymentListener">
+    <bean id="springDeploymentListener" class="org.apache.servicemix.kernel.deployer.spring.SpringDeploymentListener">
 
     </bean>
 
     <osgi:service ref="springDeploymentListener">
         <osgi:interfaces>
-            <value>org.apache.servicemix.kernel.filemonitor.DeploymentListener</value>
+            <value>org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener</value>
         </osgi:interfaces>
     </osgi:service>
 
-    <bean id="springHandler" class="org.apache.servicemix.kernel.spring.SpringURLHandler" />
+    <bean id="springHandler" class="org.apache.servicemix.kernel.deployer.spring.SpringURLHandler" />
 
     <osgi:service ref="springHandler" interface="org.osgi.service.url.URLStreamHandlerService">
     	<osgi:service-properties>
diff --git a/karaf/spring/src/main/resources/org/apache/servicemix/kernel/spring/extract.xsl b/karaf/deployer/spring/src/main/resources/org/apache/servicemix/kernel/deployer/spring/extract.xsl
similarity index 100%
rename from karaf/spring/src/main/resources/org/apache/servicemix/kernel/spring/extract.xsl
rename to karaf/deployer/spring/src/main/resources/org/apache/servicemix/kernel/deployer/spring/extract.xsl
diff --git a/karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java b/karaf/deployer/spring/src/test/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListenerTest.java
similarity index 91%
rename from karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java
rename to karaf/deployer/spring/src/test/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListenerTest.java
index 38a37bb..9a70dd0 100644
--- a/karaf/spring/src/test/java/org/apache/servicemix/kernel/spring/SpringDeploymentListenerTest.java
+++ b/karaf/deployer/spring/src/test/java/org/apache/servicemix/kernel/deployer/spring/SpringDeploymentListenerTest.java
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.spring;
+package org.apache.servicemix.kernel.deployer.spring;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -29,6 +29,8 @@
 import javax.xml.transform.dom.DOMSource;
 
 import junit.framework.TestCase;
+import org.apache.servicemix.kernel.deployer.spring.SpringDeploymentListener;
+import org.apache.servicemix.kernel.deployer.spring.SpringTransformer;
 
 public class SpringDeploymentListenerTest extends TestCase {
 
@@ -39,7 +41,7 @@
         assertNotNull(pkgs);
         assertEquals(2, pkgs.size());
         Iterator<String> it = pkgs.iterator();
-        assertEquals("org.apache.servicemix.kernel.spring", it.next());
+        assertEquals("org.apache.servicemix.kernel.deployer.spring", it.next());
         assertEquals("org.osgi.service.url", it.next());
     }
 
diff --git a/karaf/spring/src/test/resources/test.xml b/karaf/deployer/spring/src/test/resources/test.xml
similarity index 91%
rename from karaf/spring/src/test/resources/test.xml
rename to karaf/deployer/spring/src/test/resources/test.xml
index 7976cbb..31dca21 100644
--- a/karaf/spring/src/test/resources/test.xml
+++ b/karaf/deployer/spring/src/test/resources/test.xml
@@ -34,17 +34,17 @@
         Header=value
     </manifest>
 
-    <bean id="springDeploymentListener" class="org.apache.servicemix.kernel.spring.SpringDeploymentListener">
+    <bean id="springDeploymentListener" class="org.apache.servicemix.kernel.deployer.spring.SpringDeploymentListener">
 
     </bean>
 
     <osgi:service ref="springDeploymentListener">
         <osgi:interfaces>
-            <value>org.apache.servicemix.kernel.filemonitor.DeploymentListener</value>
+            <value>org.apache.servicemix.kernel.deployer.filemonitor.DeploymentListener</value>
         </osgi:interfaces>
     </osgi:service>
 
-    <bean id="springHandler" class="org.apache.servicemix.kernel.spring.SpringURLHandler" />
+    <bean id="springHandler" class="org.apache.servicemix.kernel.deployer.spring.SpringURLHandler" />
 
     <osgi:service ref="springHandler" interface="org.osgi.service.url.URLStreamHandlerService">
     	<osgi:service-properties>
diff --git a/karaf/gshell/gshell-admin/src/main/filtered-resources/org/apache/servicemix/kernel/gshell/admin/etc/startup.properties b/karaf/gshell/gshell-admin/src/main/filtered-resources/org/apache/servicemix/kernel/gshell/admin/etc/startup.properties
index f9689b1..fe1b9b8 100644
--- a/karaf/gshell/gshell-admin/src/main/filtered-resources/org/apache/servicemix/kernel/gshell/admin/etc/startup.properties
+++ b/karaf/gshell/gshell-admin/src/main/filtered-resources/org/apache/servicemix/kernel/gshell/admin/etc/startup.properties
@@ -25,6 +25,8 @@
 #
 org/ops4j/pax/url/pax-url-mvn/${pax.url.version}/pax-url-mvn-${pax.url.version}.jar=5
 org/ops4j/pax/url/pax-url-wrap/${pax.url.version}/pax-url-wrap-${pax.url.version}.jar=5
+org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar=8
+org/ops4j/pax/logging/pax-logging-service/${pax.logging.version}/pax-logging-service-${pax.logging.version}.jar=8
 org/apache/geronimo/specs/geronimo-servlet_2.5_spec/${geronimo.servlet.version}/geronimo-servlet_2.5_spec-${geronimo.servlet.version}.jar=10
 org/apache/servicemix/specs/org.apache.servicemix.specs.jaxp-api-1.4/${servicemix.specs.version}/org.apache.servicemix.specs.jaxp-api-1.4-${servicemix.specs.version}.jar=10
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.jaxp-ri/${jaxp.ri.version}/org.apache.servicemix.bundles.jaxp-ri-${jaxp.ri.version}.jar=10
@@ -32,9 +34,7 @@
 org/apache/felix/org.apache.felix.configadmin/${felix.configadmin.version}/org.apache.felix.configadmin-${felix.configadmin.version}.jar=10
 org/apache/geronimo/specs/geronimo-annotation_1.0_spec/${geronimo.annotation.version}/geronimo-annotation_1.0_spec-${geronimo.annotation.version}.jar=10
 org/apache/felix/org.apache.felix.prefs/${felix.prefs.version}/org.apache.felix.prefs-${felix.prefs.version}.jar=10
-org/apache/servicemix/kernel/org.apache.servicemix.kernel.filemonitor/${pom.version}/org.apache.servicemix.kernel.filemonitor-${pom.version}.jar=15
-org/ops4j/pax/logging/pax-logging-api/${pax.logging.version}/pax-logging-api-${pax.logging.version}.jar=20
-org/ops4j/pax/logging/pax-logging-service/${pax.logging.version}/pax-logging-service-${pax.logging.version}.jar=20
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.filemonitor/${pom.version}/org.apache.servicemix.kernel.deployer.filemonitor-${pom.version}.jar=15
 
 #
 # The rest of the services..
@@ -42,7 +42,6 @@
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.jline/${jline.version}/org.apache.servicemix.bundles.jline-${jline.version}.jar=30
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.aopalliance/${aopalliance.version}/org.apache.servicemix.bundles.aopalliance-${aopalliance.version}.jar=30
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.cglib/${cglib.version}/org.apache.servicemix.bundles.cglib-${cglib.version}.jar=30
-org/apache/servicemix/bundles/org.apache.servicemix.bundles.mina/${mina.version}/org.apache.servicemix.bundles.mina-${mina.version}.jar=30
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.oro/${oro.version}/org.apache.servicemix.bundles.oro-${oro.version}.jar=30
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.commons-codec/${commons.codec.version}/org.apache.servicemix.bundles.commons-codec-${commons.codec.version}.jar=30
 org/apache/servicemix/bundles/org.apache.servicemix.bundles.commons-httpclient/${commons.httpclient.version}/org.apache.servicemix.bundles.commons-httpclient-${commons.httpclient.version}.jar=30
@@ -55,7 +54,9 @@
 org/springframework/osgi/spring-osgi-core/${spring.osgi.version}/spring-osgi-core-${spring.osgi.version}.jar=30
 org/springframework/osgi/spring-osgi-extender/${spring.osgi.version}/spring-osgi-extender-${spring.osgi.version}.jar=30
 org/springframework/osgi/spring-osgi-io/${spring.osgi.version}/spring-osgi-io-${spring.osgi.version}.jar=30
-org/apache/servicemix/kernel/org.apache.servicemix.kernel.spring/${pom.version}/org.apache.servicemix.kernel.spring-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.spring/${pom.version}/org.apache.servicemix.kernel.deployer.spring-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.blueprint/${pom.version}/org.apache.servicemix.kernel.deployer.blueprint-${pom.version}.jar=30
+org/apache/servicemix/kernel/deployer/org.apache.servicemix.kernel.deployer.features/${pom.version}/org.apache.servicemix.kernel.deployer.features-${pom.version}.jar=30
 org/apache/servicemix/kernel/org.apache.servicemix.kernel.management/${pom.version}/org.apache.servicemix.kernel.management-${pom.version}.jar=30
 org/apache/servicemix/kernel/gshell/org.apache.servicemix.kernel.gshell.admin/${pom.version}/org.apache.servicemix.kernel.gshell.admin-${pom.version}.jar=30
 org/apache/servicemix/kernel/gshell/org.apache.servicemix.kernel.gshell.osgi/${pom.version}/org.apache.servicemix.kernel.gshell.osgi-${pom.version}.jar=30
@@ -65,7 +66,8 @@
 org/apache/servicemix/kernel/gshell/org.apache.servicemix.kernel.gshell.packages/${pom.version}/org.apache.servicemix.kernel.gshell.packages-${pom.version}.jar=30
 org/apache/servicemix/kernel/jaas/org.apache.servicemix.kernel.jaas.config/${pom.version}/org.apache.servicemix.kernel.jaas.config-${pom.version}.jar=30
 org/apache/servicemix/kernel/jaas/org.apache.servicemix.kernel.jaas.modules/${pom.version}/org.apache.servicemix.kernel.jaas.modules-${pom.version}.jar=30
-com/google/code/sshd/sshd/${sshd.version}/sshd-${sshd.version}.jar=30
+org/apache/mina/mina-core/${mina.version}/mina-core-${mina.version}.jar=30
+org/apache/sshd/sshd-core/${sshd.version}/sshd-core-${sshd.version}.jar=30
 org/osgi/jmx/${osgi.jmx.version}/jmx-${osgi.jmx.version}.jar=30
 com/oracle/osgi/jmx-impl/${osgi.jmx.version}/jmx-impl-${osgi.jmx.version}.jar=30
 
diff --git a/karaf/gshell/gshell-features/pom.xml b/karaf/gshell/gshell-features/pom.xml
index f53d9a8..1ebb64a 100644
--- a/karaf/gshell/gshell-features/pom.xml
+++ b/karaf/gshell/gshell-features/pom.xml
@@ -66,11 +66,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.servicemix.kernel</groupId>
-            <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
-        </dependency>
-        
-        <dependency>
             <groupId>org.springframework.osgi</groupId>
             <artifactId>spring-osgi-core</artifactId>
         </dependency>
diff --git a/karaf/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml b/karaf/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml
index d45b6be..3ad2736 100644
--- a/karaf/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml
+++ b/karaf/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml
@@ -85,10 +85,6 @@
         <property name="featuresServiceRegistry" ref="featureServiceRegistry" />
     </bean>
 
-    <bean id="featureDeploymentListener" class="org.apache.servicemix.kernel.gshell.features.internal.FeatureDeploymentListener">
-        <property name="featuresService" ref="featuresService" />
-    </bean>
-
     <bean id="namingStrategy" class="org.apache.servicemix.kernel.gshell.features.management.DefaultNamingStrategy">
         <property name="jmxDomainName" value="org.apache.servicemix" />
     </bean>
@@ -109,8 +105,6 @@
 
     <osgi:service ref="featuresService" interface="org.apache.servicemix.kernel.gshell.features.FeaturesService" />
 
-    <osgi:service ref="featureDeploymentListener" interface="org.apache.servicemix.kernel.filemonitor.DeploymentListener" />
-
     <osgix:cm-properties id="cmProps" persistent-id="org.apache.servicemix.features">
         <prop key="featuresRepositories"></prop>
         <prop key="featuresBoot"></prop>
diff --git a/karaf/pom.xml b/karaf/pom.xml
index e675001..0b5dec5 100644
--- a/karaf/pom.xml
+++ b/karaf/pom.xml
@@ -36,9 +36,8 @@
 
     <modules>
         <module>main</module>
-        <module>filemonitor</module>
+        <module>deployer</module>
         <module>gshell</module>
-        <module>spring</module>
         <module>jaas</module>
         <module>client</module>
         <module>management</module>
@@ -192,13 +191,23 @@
                 <version>${pom.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.servicemix.kernel</groupId>
-                <artifactId>org.apache.servicemix.kernel.filemonitor</artifactId>
+                <groupId>org.apache.servicemix.kernel.deployer</groupId>
+                <artifactId>org.apache.servicemix.kernel.deployer.filemonitor</artifactId>
                 <version>${pom.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.servicemix.kernel</groupId>
-                <artifactId>org.apache.servicemix.kernel.spring</artifactId>
+                <groupId>org.apache.servicemix.kernel.deployer</groupId>
+                <artifactId>org.apache.servicemix.kernel.deployer.spring</artifactId>
+                <version>${pom.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.servicemix.kernel.deployer</groupId>
+                <artifactId>org.apache.servicemix.kernel.deployer.blueprint</artifactId>
+                <version>${pom.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.servicemix.kernel.deployer</groupId>
+                <artifactId>org.apache.servicemix.kernel.deployer.features</artifactId>
                 <version>${pom.version}</version>
             </dependency>
             <dependency>