diff --git a/Felix/bundle-dev/MathHubWorker-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/MathHubWorker-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index d58ddccf8d9a26c3567e247eaac358985d8df939..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/MathHubWorker-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/MathHubWorker/target/MathHubWorker-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/MathHubWorker-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/MathHubWorker-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..ee7352349fd6f1b54b564a162d96dd774b57ee92
--- /dev/null
+++ b/Felix/bundle-dev/MathHubWorker-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/MathHubWorker/target/MathHubWorker-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/activemq-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/activemq-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index 77e95c62d2b66e7b519f075541a9ad0ba5c29160..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/activemq-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/activemq/target/activemq-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/activemq-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/activemq-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..c97824cab4b005a8ce99ea68f19b77ea4369ad3a
--- /dev/null
+++ b/Felix/bundle-dev/activemq-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/activemq/target/activemq-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/core-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/core-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index 9e0e66cf225c51e6b2b2c5404520daf1c425f8a6..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/core-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/core/target/core-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/core-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/core-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..2a1744a4970de76a4752205830e0f24f7bdd1a20
--- /dev/null
+++ b/Felix/bundle-dev/core-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/core/target/core-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/docmanager-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/docmanager-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index 8bb6d2b49e95ce34d304e6287bb2f5bb5c83fe9d..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/docmanager-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/docmanager/target/docmanager-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/docmanager-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/docmanager-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..d8768cd05f6af74ba78d795ad1b2c57241c84fcc
--- /dev/null
+++ b/Felix/bundle-dev/docmanager-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/docmanager/target/docmanager-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/planetary-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/planetary-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index b7fe0b2a297e9e16d426815aa6a552feb2c8d012..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/planetary-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/planetary/target/planetary-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/planetary-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/planetary-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..d8950be370f487f99fadd4a1e961330f6449f748
--- /dev/null
+++ b/Felix/bundle-dev/planetary-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/planetary/target/planetary-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/servlet-0.0.2-SNAPSHOT.jar b/Felix/bundle-dev/servlet-0.0.2-SNAPSHOT.jar
deleted file mode 120000
index a6cfa41908d777e94d5fd57ed65fa1850f9fb8ae..0000000000000000000000000000000000000000
--- a/Felix/bundle-dev/servlet-0.0.2-SNAPSHOT.jar
+++ /dev/null
@@ -1 +0,0 @@
-/home/costea/workspace_sally4/sally4.git/servlet/target/servlet-0.0.2-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/servlet-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/servlet-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..f685055a6cfb526d01a7ed1f6d8be0a67d4a3617
--- /dev/null
+++ b/Felix/bundle-dev/servlet-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/servlet/target/servlet-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle-dev/utils-0.0.3-SNAPSHOT.jar b/Felix/bundle-dev/utils-0.0.3-SNAPSHOT.jar
new file mode 120000
index 0000000000000000000000000000000000000000..0077bcc811937965614c5ff9b263d5736a634485
--- /dev/null
+++ b/Felix/bundle-dev/utils-0.0.3-SNAPSHOT.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/utils/target/utils-0.0.3-SNAPSHOT.jar
\ No newline at end of file
diff --git a/Felix/bundle/org.apache.felix.ipojo.webconsole-1.7.0.jar b/Felix/bundle/org.apache.felix.ipojo.webconsole-1.7.0.jar
new file mode 120000
index 0000000000000000000000000000000000000000..9dc72c38ac7548229c58b8e7787420c72ce0f583
--- /dev/null
+++ b/Felix/bundle/org.apache.felix.ipojo.webconsole-1.7.0.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/Felix/bundle/web/org.apache.felix.ipojo.webconsole-1.7.0.jar
\ No newline at end of file
diff --git a/Felix/bundle/org.apache.felix.webconsole-4.2.2-all.jar b/Felix/bundle/org.apache.felix.webconsole-4.2.2-all.jar
new file mode 120000
index 0000000000000000000000000000000000000000..e47f38c91335ba387100838c0f1756b8acb0a15a
--- /dev/null
+++ b/Felix/bundle/org.apache.felix.webconsole-4.2.2-all.jar
@@ -0,0 +1 @@
+/home/costea/workspace_sally4/sally4.git/Felix/bundle/web/org.apache.felix.webconsole-4.2.2-all.jar
\ No newline at end of file
diff --git a/Felix/bundle/web/org.apache.felix.ipojo.webconsole-1.7.0.jar b/Felix/bundle/web/org.apache.felix.ipojo.webconsole-1.7.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..c4e54f7b268d1b92d3337d81fd506e6f57d3091a
Binary files /dev/null and b/Felix/bundle/web/org.apache.felix.ipojo.webconsole-1.7.0.jar differ
diff --git a/Felix/bundle/web/org.apache.felix.webconsole-4.2.2-all.jar b/Felix/bundle/web/org.apache.felix.webconsole-4.2.2-all.jar
new file mode 100644
index 0000000000000000000000000000000000000000..8738d0c5cf3fa86b2bd3854df3ffb49dedbad244
Binary files /dev/null and b/Felix/bundle/web/org.apache.felix.webconsole-4.2.2-all.jar differ
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..34f9c6b52836cc139c71cc8aceed2ee843a8726e
--- /dev/null
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/PlanetaryClient.java
@@ -0,0 +1,9 @@
+package info.kwarc.sally4.mathhubworker;
+
+import info.kwarc.sally.comm.planetaryclient.NewService;
+import info.kwarc.sally.comm.planetaryclient.RemoveService;
+
+public interface PlanetaryClient {
+	void newService(NewService service);
+	void stopService(RemoveService service);	
+}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/factories/MathHubFactory.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/factories/MathHubFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9abc9f371401e0eb5dd77ea6e2f944ce2f1dd78a
--- /dev/null
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/factories/MathHubFactory.java
@@ -0,0 +1,63 @@
+package info.kwarc.sally4.mathhubworker.factories;
+
+import info.kwarc.sally4.docmanager.SallyDoc;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.InstanceStateListener;
+import org.apache.felix.ipojo.MissingHandlerException;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
+import org.apache.felix.ipojo.annotations.Bind;
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Instantiate;
+import org.apache.felix.ipojo.annotations.Requires;
+
+@Component
+@Instantiate
+public class MathHubFactory {
+	@Requires(filter="(factory.name=LMHWorkflowInstance)")
+	Factory lmhWorkflow;
+
+	@Requires(filter="(factory.name=PlanetaryWorkflowInstance)")
+	Factory planetaryWorkflow;
+
+	void createInstance(Factory factory, String name, String docQueue) throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+	    Dictionary<String, Object> configuration = new Hashtable<String, Object>();
+	    Dictionary<String, Object> filters = new Hashtable<String, Object>();
+	    
+	    filters.put("docQueue", "(docQueue="+docQueue+")");
+
+	    configuration.put("requires.filters", filters);
+	    
+	    configuration.put("instance.name", name+" for doc:"+docQueue);
+
+		ComponentInstance inst = factory.createComponentInstance(configuration);
+		inst.addInstanceStateListener(new InstanceStateListener() {
+			
+			@Override
+			public void stateChanged(ComponentInstance arg0, int arg1) {
+				if (arg1 == ComponentInstance.INVALID) {
+					arg0.dispose();
+				}
+			}
+		});		
+	}
+	
+	@Bind(aggregate=true)
+	void newSallyDoc(SallyDoc newDoc) throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+		for (String iface : newDoc.getInterfaces()) {
+			if ("planetaryclient".equals(iface)) {
+				createInstance(planetaryWorkflow, "PlanetaryClient", newDoc.getDocQueue());
+				return;
+			}
+			if ("lmhworker".equals(iface)) {
+				createInstance(lmhWorkflow, "LMHWorker ", newDoc.getDocQueue());
+				return;
+			}
+		}
+	}
+}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java
deleted file mode 100644
index 2d0ddc9672aa86eb933e1f98fdd4e636834a52fe..0000000000000000000000000000000000000000
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package info.kwarc.sally4.mathhubworker.impl;
-
-import info.kwarc.sally4.core.CamelContextProvider;
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
-import info.kwarc.sally4.mathhubworker.MathHubWorkerManager;
-import info.kwarc.sally4.mathhubworker.routes.LMHWorkflowInstance;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Provides;
-import org.apache.felix.ipojo.annotations.Requires;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Component
-@Instantiate
-@Provides
-public class LMHWorkflow implements IDocWorkflow {
-	@Requires
-	CamelContextProvider camelContextProvider;
-
-	@Requires
-	MathHubWorkerManager workerManager;
-	
-	Logger log;
-
-	public LMHWorkflow() {
-		log = LoggerFactory.getLogger(getClass());
-	}
-	
-	@Override
-	public String[] getInterfaceRequirements() {
-		return new String[]{"lmhworker"};
-	}
-
-	@Override
-	public String[] getHandlingNamespaces() {
-		return new String[] {"http://kwarc.info/sally/comm/mathhubworker"};
-	}
-
-	@Override
-	public IDocWorkflowInstance createDocumentInstance(AlexRoute route) {
-		CamelContext context = new DefaultCamelContext();
-		LMHWorkflowInstance lmhWorkflowInstance = new LMHWorkflowInstance(route, this);
-		try {
-			context.addRoutes(lmhWorkflowInstance);
-			context.start();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return lmhWorkflowInstance;
-	}
-
-}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java
new file mode 100644
index 0000000000000000000000000000000000000000..463f918d051065c2eee284e0a1d13f7aa81120e8
--- /dev/null
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflowInstance.java
@@ -0,0 +1,52 @@
+package info.kwarc.sally4.mathhubworker.impl;
+
+import info.kwarc.sally4.core.CamelContextProvider;
+import info.kwarc.sally4.core.SallyInteraction;
+import info.kwarc.sally4.docmanager.SallyDoc;
+import info.kwarc.sally4.marshalling.CommUtils;
+import info.kwarc.sally4.planetary.PlanetaryConnection;
+import info.kwarc.sally4.servlet.SallyServlet;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spi.DataFormat;
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.annotations.Validate;
+
+@Component(name="LMHWorkflowInstance")
+public class LMHWorkflowInstance extends RouteBuilder {
+	String planetaryClientNamespace = "http://kwarc.info/sally/comm/planetaryclient";
+
+	@Requires
+	SallyServlet t;
+	
+	@Requires(id="docQueue", filter="(filterThatWillNeverSucceed=1)")
+	SallyDoc route;
+
+	@Requires
+	PlanetaryConnection conn;
+	
+	@Requires
+	SallyInteraction interact;
+
+	@Requires
+	CamelContextProvider camelContextProvider;
+	
+	@Validate
+	void doStart() {
+		log.info(">>>> doing lmh workflow for "+route.getDocQueue());
+	}
+	
+	public LMHWorkflowInstance() {		
+	}	
+	
+	@Override
+	public void configure() throws Exception {
+		DataFormat worker = CommUtils.getDataFormat("mathhubworker", getClass().getClassLoader());
+		getContext().addComponent("alex", route.getAlexComponent());
+		
+		from("direct:start")
+			.to("direct:requestAuthKey");
+	}
+
+}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImpl.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
similarity index 66%
rename from MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImpl.java
rename to MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
index a03931763f0faa386c817a2d6813c94285bfe11a..39bc99086b0d280192c5068edf4237b6ca2c57c5 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImpl.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerSelectorService.java
@@ -1,8 +1,9 @@
 package info.kwarc.sally4.mathhubworker.impl;
 
+import info.kwarc.sally.comm.planetaryclient.NewService;
+import info.kwarc.sally.comm.planetaryclient.RemoveService;
 import info.kwarc.sally4.core.CamelContextProvider;
-import info.kwarc.sally4.docmanager.DocumentManager;
-import info.kwarc.sally4.mathhubworker.MathHubWorkerManager;
+import info.kwarc.sally4.mathhubworker.PlanetaryClient;
 import info.kwarc.sally4.processors.FileServeProcessor;
 import info.kwarc.sally4.servlet.utils.QueryParser;
 
@@ -13,32 +14,48 @@ import org.apache.camel.Header;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.freemarker.FreemarkerComponent;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.felix.ipojo.annotations.Bind;
 import org.apache.felix.ipojo.annotations.Component;
 import org.apache.felix.ipojo.annotations.Instantiate;
 import org.apache.felix.ipojo.annotations.Invalidate;
-import org.apache.felix.ipojo.annotations.Provides;
 import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.annotations.Unbind;
 import org.apache.felix.ipojo.annotations.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 @Component
 @Instantiate
-@Provides
-public class MathHubWorkerManagerImpl extends RouteBuilder implements MathHubWorkerManager {
+public class MathHubWorkerSelectorService extends RouteBuilder {
 	Logger log;
 	
 	@Requires
 	CamelContextProvider camelContextProvider;
 	
 	@Requires
-	DocumentManager docManager;
+	PlanetaryClient [] planetaryClients;
 	
-	MathHubManagerModel model;
+	@Bind(aggregate=true)
+	public void addPlanetaryClient(PlanetaryClient planetaryClients) {
+		NewService serv = new NewService();
+		String host = "http://localhost:8181/sally";
+		serv.setIcon(host+"/planetary/libs/mhwsettings.png");
+		serv.setId("mhwsettings");
+		serv.setName("Math Hub Worker Settings");
+		serv.setType("toolbar");
+		serv.setUrl(host+"/planetary/mhwsettings?id=123");//+route.getDocQueue());
+		planetaryClients.newService(serv);
+	}
+
+	@Unbind(aggregate=true)
+	public void removePlanetaryClient(PlanetaryClient planetaryClients) {
+		
+	}
+
 	
 	HashMap<String, MathHubEnvironment> environments;
 	
-	public MathHubWorkerManagerImpl() {
+	public MathHubWorkerSelectorService() {
 		log = LoggerFactory.getLogger(getClass());
 		environments = new HashMap<String, MathHubEnvironment>();
 	}
@@ -46,7 +63,8 @@ public class MathHubWorkerManagerImpl extends RouteBuilder implements MathHubWor
 	
 	public HashMap<String, Object> getSettings(@Header(QueryParser.QueryMapHeader) HashMap<String, String> query) {
 		HashMap<String, Object> data = new HashMap<String, Object>();
-		data.put("env", model.getAvailableWorkersForRoute(query.get("id")));
+		String id = query.get("id");
+		//data.put("env", model.getAvailableWorkersForRoute());
 		return data;
 	}
 	
@@ -55,7 +73,6 @@ public class MathHubWorkerManagerImpl extends RouteBuilder implements MathHubWor
 	@Validate
 	public void start() {
 		resourceContext = new DefaultCamelContext();
-		model = new MathHubManagerModel(docManager);
 		resourceContext.addComponent("sallyservlet", camelContextProvider.getComponent("sallyservlet"));
 		try {
 			resourceContext.addRoutes(this);
@@ -69,6 +86,11 @@ public class MathHubWorkerManagerImpl extends RouteBuilder implements MathHubWor
 	public void stop() {
 		try {
 			resourceContext.stop();
+			for (PlanetaryClient client : planetaryClients) {
+				RemoveService rm = new RemoveService();
+				rm.setId("mhwsettings");
+				client.stopService(rm);
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java
deleted file mode 100644
index e1a3cf5e06845380ea2f63d6f0cad838d53b9517..0000000000000000000000000000000000000000
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package info.kwarc.sally4.mathhubworker.impl;
-
-import info.kwarc.sally4.core.CamelContextProvider;
-import info.kwarc.sally4.core.SallyInteraction;
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
-import info.kwarc.sally4.mathhubworker.routes.PlanetaryClientWorkflowInstance;
-import info.kwarc.sally4.planetary.PlanetaryConnection;
-import info.kwarc.sally4.servlet.SallyServlet;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.felix.ipojo.annotations.Component;
-import org.apache.felix.ipojo.annotations.Instantiate;
-import org.apache.felix.ipojo.annotations.Invalidate;
-import org.apache.felix.ipojo.annotations.Provides;
-import org.apache.felix.ipojo.annotations.Requires;
-import org.apache.felix.ipojo.annotations.Validate;
-
-@Component
-@Instantiate
-@Provides
-public class PlanetaryClientWorkflow implements IDocWorkflow {
-	String planetaryClientNamespace = "http://kwarc.info/sally/comm/planetaryclient";
-	
-	@Requires
-	PlanetaryConnection conn;
-	
-	@Requires
-	SallyInteraction interact;
-
-	@Requires
-	CamelContextProvider camelContextProvider;
-	
-	@Requires
-	SallyServlet t;
-	
-	@Validate
-	public void start() {		
-	}
-	
-	@Invalidate
-	public void stop() {
-	}
-	
-	public String[] getInterfaceRequirements() {
-		return new String[]{"planetaryclient"};
-	}
-
-	public String[] getHandlingNamespaces() {
-		return new String[] { planetaryClientNamespace };
-	}
-
-	@Override
-	public IDocWorkflowInstance createDocumentInstance(AlexRoute route) {
-		CamelContext context = new DefaultCamelContext();
-		
-		PlanetaryClientWorkflowInstance planetaryWorkflowInstance = new PlanetaryClientWorkflowInstance(
-				camelContextProvider.getComponent("activemq"), 
-				camelContextProvider.getComponent("planetary"),
-				interact,
-				this,
-				route);
-		
-		try {
-			context.addRoutes(planetaryWorkflowInstance);
-			context.start();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return planetaryWorkflowInstance;
-	}
-}
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientWorkflowInstance.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
similarity index 52%
rename from MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientWorkflowInstance.java
rename to MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
index 276408ae1b3fc8e5ec59f37638f58fb8c698e477..3e6b71921a7e08dfa39a3ae668af341157df5845 100644
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientWorkflowInstance.java
+++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflowInstance.java
@@ -1,14 +1,14 @@
-package info.kwarc.sally4.mathhubworker.routes;
+package info.kwarc.sally4.mathhubworker.impl;
 
 import info.kwarc.sally.comm.planetaryclient.GetSessionIDRequest;
 import info.kwarc.sally.comm.planetaryclient.GetSessionIDResponse;
 import info.kwarc.sally.comm.planetaryclient.NewService;
+import info.kwarc.sally.comm.planetaryclient.RemoveService;
+import info.kwarc.sally4.core.CamelContextProvider;
 import info.kwarc.sally4.core.SallyInteraction;
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
+import info.kwarc.sally4.docmanager.SallyDoc;
 import info.kwarc.sally4.marshalling.CommUtils;
-import info.kwarc.sally4.marshalling.MarshallUtils;
+import info.kwarc.sally4.mathhubworker.PlanetaryClient;
 import info.kwarc.sally4.mathhubworker.internal.comm.GetLMHWorkers;
 
 import java.util.ArrayList;
@@ -16,30 +16,52 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 
-import org.apache.camel.Component;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Property;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.DataFormat;
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Invalidate;
+import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.annotations.Validate;
 
-public class PlanetaryClientWorkflowInstance extends RouteBuilder implements IDocWorkflowInstance {
+@Component(name="PlanetaryWorkflowInstance")
+@Provides(specifications=PlanetaryClient.class)
+public class PlanetaryClientWorkflowInstance extends RouteBuilder implements PlanetaryClient{
 
+
+	@Requires(id="docQueue", filter="(filterThatWillNeverSucceed=1)")
+	SallyDoc route;
+	
+	@Requires
 	SallyInteraction interact;
-	Component activemqComponent;
-	Component alexComponent;
-	Component planetaryComponent;
-	IDocWorkflow workflow;
-	AlexRoute route;
+
+	@Requires
+	CamelContextProvider camelContextProvider;
+
+	CamelContext context;
+	
+	@Validate
+	void start() throws Exception {
+		context = new DefaultCamelContext();
+		context.addComponent("activemq", camelContextProvider.getComponent("activemq"));
+		context.addComponent("alex", route.getAlexComponent());
+		context.addComponent("planetary", camelContextProvider.getComponent("planetary"));
+		context.addRoutes(this);
+		context.start();
+	}
 	
-	public PlanetaryClientWorkflowInstance(Component activemqComponent, Component planetaryComponent, SallyInteraction interact, IDocWorkflow workflow, AlexRoute route) {
-		this.interact = interact;
-		this.activemqComponent = activemqComponent;
-		this.alexComponent = route.getAlexComponent();
-		this.planetaryComponent = planetaryComponent;
-		this.workflow = workflow;
-		this.route = route;
+	@Invalidate
+	void stop() throws Exception {
+		context.stop();
+	}
+	
+	public PlanetaryClientWorkflowInstance() {
 	}
 
 	public String getSessionID(GetSessionIDResponse response) {
@@ -73,15 +95,11 @@ public class PlanetaryClientWorkflowInstance extends RouteBuilder implements IDo
 	@Override
 	public void configure() throws Exception {
 		DataFormat planetaryClient = CommUtils.getDataFormat("planetaryclient", getClass().getClassLoader());
-		getContext().addComponent("activemq", activemqComponent);
-		getContext().addComponent("alex", alexComponent);
-		getContext().addComponent("planetary", planetaryComponent);
+	
 
 		from("direct:start")
 		.to("direct:requestSessionID")
-		.to("direct:getPlanetaryUser")
-		.to("direct:assignMHW");
-
+		.to("direct:getPlanetaryUser");
 
 		from("direct:requestSessionID")
 		.setBody(constant(new GetSessionIDRequest()))
@@ -107,61 +125,19 @@ public class PlanetaryClientWorkflowInstance extends RouteBuilder implements IDo
 		.stop()
 		.endChoice();
 
-		from("direct:assignMHW")
-		.inOut("planetary:select 'key' from mhw_assignment where uid=#?outputType=SelectOne")
-		.choice()
-		.when(simple("${body} == null"))
-		//					.to("direct:getNewMHW")
-		.endChoice();
-
-		/*
-		from("direct:getNewMHW")
-		// get already taken keys
-			.inOut("planetary:select 'key' from mhw_assignment")
-		// compute list of free and available keys
-			.bean(thisWorkflow, "getFreeAvailableKeys")
-		// choose one key based on user info
-			.bean(thisWorkflow, "getNewMHW")
-			.choice()
-			.when(simple("${body} == null"))
-				.end()
-			.endChoice()
-		 */
-	}
-
-	@Override
-	public boolean handleMessage(AlexRoute route, String namespace,
-			String type, Exchange exchange) {
-
-		if (type.equals("GetServices")) {
-			NewService serv = new NewService();
-			String host = "http://localhost:8181/sally";
-			serv.setIcon(host+"/planetary/libs/mhwsettings.png");
-			serv.setId("mhwsettings");
-			serv.setName("Math Hub Worker Settings");
-			serv.setType("toolbar");
-			serv.setUrl(host+"/planetary/mhwsettings?id="+route.getDocQueue());
-			String xml = MarshallUtils.marshallToXML("planetaryclient", serv, getClass().getClassLoader());
-			log.info("sending back"+xml);
-			exchange.getIn().setBody(xml);
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public void stop() {
-
+		from("direct:sendToPlanetaryClient")
+		.marshal(planetaryClient)
+		.to("alex:defaultOut");
 	}
 
 	@Override
-	public IDocWorkflow getDocumentWorkflow() {
-		return workflow;
+	public void newService(NewService service) {
+		context.createProducerTemplate().sendBody("direct:sendToPlanetaryClient", service);
 	}
 
 	@Override
-	public AlexRoute getRoute() {
-		return route;
+	public void stopService(RemoveService service) {
+		context.createProducerTemplate().sendBody("direct:sendToPlanetaryClient", service);		
 	}
 
 }
diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHWorkflowInstance.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHWorkflowInstance.java
deleted file mode 100644
index 7e0b81cfe67928a2794021e3dfbdb0024f4946e3..0000000000000000000000000000000000000000
--- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHWorkflowInstance.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package info.kwarc.sally4.mathhubworker.routes;
-
-import info.kwarc.sally.comm.mathhubworker.GetAuthKeyRequest;
-import info.kwarc.sally.comm.mathhubworker.GetAuthKeyResponse;
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
-import info.kwarc.sally4.marshalling.CommUtils;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeTimedOutException;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.spi.DataFormat;
-
-public class LMHWorkflowInstance extends RouteBuilder implements IDocWorkflowInstance {
-
-	AlexRoute route;
-	IDocWorkflow workflow;
-	
-	public LMHWorkflowInstance(AlexRoute route, IDocWorkflow workflow) {		
-		this.route = route;
-		this.workflow = workflow;
-	}
-	
-	public void setWorkerKey(GetAuthKeyResponse response) {
-//		thisWorklow.setWorkerKey(route.getID(), response.getAuthkey());
-	}
-	
-	
-	@Override
-	public void configure() throws Exception {
-		DataFormat worker = CommUtils.getDataFormat("mathhubworker", getClass().getClassLoader());
-		getContext().addComponent("alex", route.getAlexComponent());
-		
-		from("direct:start")
-			.to("direct:requestAuthKey");
-		
-
-	}
-
-	@Override
-	public boolean handleMessage(AlexRoute route, String namespace,
-			String type, Exchange exchange) {
-		return false;
-	}
-
-	@Override
-	public void stop() {
-		// TODO Auto-generated method stub
-		
-	}
-
-	@Override
-	public IDocWorkflow getDocumentWorkflow() {
-		return workflow;
-	}
-
-	@Override
-	public AlexRoute getRoute() {
-		return route;
-	}
-
-}
diff --git a/MathHubWorker/src/test/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImplTest.java b/MathHubWorker/src/test/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImplTest.java
index c67ae36cbb970e9a79e08bb5e2f5e4f0b1ad856a..947cfcaaa63f0fdfbaca12d815168385dcefb3c8 100644
--- a/MathHubWorker/src/test/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImplTest.java
+++ b/MathHubWorker/src/test/java/info/kwarc/sally4/mathhubworker/impl/MathHubWorkerManagerImplTest.java
@@ -1,7 +1,8 @@
 package info.kwarc.sally4.mathhubworker.impl;
+/*
 
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.impl.AlexRouteImpl;
+import info.kwarc.sally4.docmanager.SallyDoc;
+import info.kwarc.sally4.docmanager.impl.SallyDocImpl;
 import info.kwarc.sally4.docmanager.mocks.MockDocumentManager;
 import info.kwarc.sally4.docmanager.mocks.MockGlobalContextProvider;
 import info.kwarc.sally4.mathhubworker.routes.LMHWorkflowInstance;
@@ -13,7 +14,6 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-
 public class MathHubWorkerManagerImplTest extends CamelTestSupport{
 	MockDocumentManager man;
 	MathHubWorkerManagerImpl workerManager;
@@ -31,7 +31,7 @@ public class MathHubWorkerManagerImplTest extends CamelTestSupport{
 	public void test() throws Exception {
 		LMHWorkflow lmhWorkflow = new LMHWorkflow();
 		
-		AlexRoute alexRoute = new AlexRouteImpl("lmhqueue", "e1", "u1", new String[]{"lmhworker"});
+		SallyDoc alexRoute = new SallyDocImpl("lmhqueue", "e1", "u1", "", new String[]{"lmhworker"});
 		LMHWorkflowInstance lmhInstance = new LMHWorkflowInstance(alexRoute, lmhWorkflow);
 		man.addWorkflowInstances(lmhInstance);
 		
@@ -44,7 +44,7 @@ public class MathHubWorkerManagerImplTest extends CamelTestSupport{
 	@Test
 	public void test2() throws Exception {
 		LMHWorkflow lmhWorkflow = new LMHWorkflow();
-		AlexRoute alexRoute = new AlexRouteImpl("q1", "e1", "u1", new String[]{"lmhworker"});
+		SallyDoc alexRoute = new SallyDocImpl("q1", "e1", "u1", "", new String[]{"lmhworker"});
 		LMHWorkflowInstance lmhInstance = new LMHWorkflowInstance(alexRoute, lmhWorkflow);
 		man.addWorkflowInstances(lmhInstance);
 		starter.sendBody("");
@@ -60,3 +60,4 @@ public class MathHubWorkerManagerImplTest extends CamelTestSupport{
 		return workerManager.getContext();
 	}
 }
+*/
\ No newline at end of file
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java
index 1e485415ecafb92b8f645fb6c423062e20eb800a..2b5a247560849c7221f120cbd7ca83e91d9f4c06 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java
@@ -1,7 +1,12 @@
 package info.kwarc.sally4.docmanager;
 
 import info.kwarc.sally.comm.core.Registerdocument;
+import info.kwarc.sally.comm.core.Registerdocumentresponse;
+
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.MissingHandlerException;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
 
 public interface DocumentManager {
-	AlexRoute registerDocument(Registerdocument doc);
+	Registerdocumentresponse  registerDocument(Registerdocument doc) throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException;
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java
index df32659eb70670ff15b4ba8b5a724e256e5ab009..a726369838da1f57422e459046667b1bf9e2011d 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java
@@ -5,5 +5,5 @@ public interface IDocWorkflow {
 	String [] getInterfaceRequirements();
 	String [] getHandlingNamespaces();
 	
-	IDocWorkflowInstance createDocumentInstance(AlexRoute route);
+	IDocWorkflowInstance createDocumentInstance(SallyDoc route);
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflowInstance.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflowInstance.java
index 4719e4a8161b5a2516d26c86e98dd9d2cbb9d818..9891c09b94c35cc8b7551b5266d7557951ab8c56 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflowInstance.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflowInstance.java
@@ -3,9 +3,6 @@ package info.kwarc.sally4.docmanager;
 import org.apache.camel.Exchange;
 
 public interface IDocWorkflowInstance {
-	boolean handleMessage(AlexRoute route, String namespace, String type, Exchange exchange);
-	IDocWorkflow getDocumentWorkflow();
-	AlexRoute getRoute();
-	
-	void stop();
+	boolean handleMessage(SallyDoc route, String namespace, String type, Exchange exchange);
+	SallyDoc getRoute();
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/SallyDoc.java
similarity index 87%
rename from docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java
rename to docmanager/src/main/java/info/kwarc/sally4/docmanager/SallyDoc.java
index 5ba51ffdef4697f6cd70538a016041dbeb12b975..54f39e0c1ec5342b03b2903b68cfc22f20796404 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/SallyDoc.java
@@ -5,13 +5,13 @@ import info.kwarc.sally4.processors.TypedCallback;
 import info.kwarc.sally4.processors.XMLMessageWithTypeInfo;
 
 
-public interface AlexRoute {
+public interface SallyDoc {
 	public String getDocStateQueue();
 	public String getDocQueue();
 	public String getEnvironmentID();
 	public String getUserID();
 	public ProducerConsumerSplitterComponent getAlexComponent();
+	public String[] getInterfaces();
 	
-	public void addOnStopHandler(Runnable r);
 	public void setMessageHandler(TypedCallback<XMLMessageWithTypeInfo> callback);
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapter.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapter.java
index 3b9c5ba211f8cd8ab42d11882335fe496d61cc33..bdedc85598ead15ee6225d19c7be587a9ddbec95 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapter.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapter.java
@@ -5,26 +5,30 @@ import info.kwarc.sally.comm.core.Registerdocumentresponse;
 import info.kwarc.sally4.activemq.ActiveMQService;
 import info.kwarc.sally4.components.TemplatingComponent;
 import info.kwarc.sally4.core.CamelContextProvider;
-import info.kwarc.sally4.docmanager.AlexRoute;
 import info.kwarc.sally4.docmanager.DocumentManager;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
+import info.kwarc.sally4.docmanager.SallyDoc;
 import info.kwarc.sally4.marshalling.CommUtils;
 import info.kwarc.sally4.servlet.SallyServlet;
 
+import java.util.Dictionary;
 import java.util.HashMap;
+import java.util.Hashtable;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.DataFormat;
+import org.apache.felix.ipojo.ComponentInstance;
+import org.apache.felix.ipojo.ConfigurationException;
 import org.apache.felix.ipojo.Factory;
-import org.apache.felix.ipojo.annotations.Bind;
+import org.apache.felix.ipojo.InstanceStateListener;
+import org.apache.felix.ipojo.MissingHandlerException;
+import org.apache.felix.ipojo.UnacceptableConfiguration;
 import org.apache.felix.ipojo.annotations.Component;
 import org.apache.felix.ipojo.annotations.Instantiate;
 import org.apache.felix.ipojo.annotations.Invalidate;
 import org.apache.felix.ipojo.annotations.Provides;
 import org.apache.felix.ipojo.annotations.Requires;
-import org.apache.felix.ipojo.annotations.Unbind;
 import org.apache.felix.ipojo.annotations.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -40,14 +44,15 @@ import org.slf4j.LoggerFactory;
 public class DocumentManagerAdapter extends RouteBuilder implements DocumentManager  {
 	public static final String sallyRegisterQueue = "sally_register";
 
+	@Requires(filter="(factory.name=SallyDocFactory)")
+	private Factory factory;
+    
 	@Requires(optional=true)
-	IDocWorkflow[] workflows;
+	SallyDoc[] docs;
 	
 	@Requires 	SallyServlet servlet;
 	@Requires 	ActiveMQService activeMQ;
 
-	DocumentManagerModel model;
-
 	@Requires
 	CamelContextProvider camelContextProvider;
 
@@ -56,37 +61,10 @@ public class DocumentManagerAdapter extends RouteBuilder implements DocumentMana
 
 	public HashMap<String, Object> prepareDocManagement() {
 		HashMap<String, Object> result = new HashMap<String, Object>();
-		result.put("routes", model.getRoutes());
+		result.put("routes", docs);
 		return result;
 	}
 
-	public Registerdocumentresponse createRouteContext(AlexRouteImpl route) throws Exception {
-		final CamelContext alexRouteContext = new DefaultCamelContext();
-		alexRouteContext.addComponent("activemq", camelContextProvider.getComponent("activemq"));
-		alexRouteContext.addComponent("alex", route.getAlexComponent());
-
-		alexRouteContext.addRoutes(route);
-		alexRouteContext.getShutdownStrategy().setTimeout(10);
-		alexRouteContext.start();
-
-		/*
-		route.addOnStopHandler(new Runnable() {
-
-			public void run() {
-				try {
-					alexRouteContext.stop();
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			}
-		});
-		*/
-		
-		Registerdocumentresponse response = new Registerdocumentresponse();
-		response.setSallyqueue(route.getDocStateQueue());
-		return response;
-	}
-
 	@Override
 	public void configure() throws Exception {
 		DataFormat core = CommUtils.getDataFormat("core", getClass().getClassLoader());
@@ -100,26 +78,16 @@ public class DocumentManagerAdapter extends RouteBuilder implements DocumentMana
 		from("activemq:queue:"+sallyRegisterQueue)
 		.unmarshal(core)
 		.bean(method(this, "registerDocument"))			
-		.setProperty("route", body())
-		.bean(method(this, "createRouteContext"))
 		.marshal(core);
 	}
 
 	public DocumentManagerAdapter() {
 		log = LoggerFactory.getLogger(getClass());	
-		model  = new DocumentManagerModel();
-	}
-
-	@Bind(aggregate=true, optional=true)
-	public void bindWorkflow(IDocWorkflow workflow) 
-	{
-		model.addWorkflow(workflow);
 	}
 
-	@Unbind(aggregate=true, optional=true)
-	private void unbindWorkflow(IDocWorkflow workflow) 
-	{ 
-		model.removeWorkflow(workflow);
+	String generateUUID(String doc_queue) {
+		//"/queue/sally_doc_"+UUID.randomUUID().toString()
+		return "sally_doc_"+doc_queue;
 	}
 
 
@@ -135,19 +103,31 @@ public class DocumentManagerAdapter extends RouteBuilder implements DocumentMana
 	@Invalidate
 	public void stop() throws Exception {
 		camelContext.stop();
-		model.stopAllRoutes();
 	}
 
 	@Override
-	public AlexRoute registerDocument(Registerdocument doc) {
-		final AlexRoute route =  model.addDocument(doc.getDocumentqueue(), doc.getEnvironmentid(), doc.getUserid(), doc.getInterfaces().toArray(new String[0]));
-		route.addOnStopHandler(new Runnable() {
-
+	public Registerdocumentresponse registerDocument(Registerdocument doc) throws UnacceptableConfiguration, MissingHandlerException, ConfigurationException {
+	    Dictionary<String, Object> configuration = new Hashtable<String, Object>();
+	    String docQueue = generateUUID(doc.getDocumentqueue());
+	    configuration.put("docQueue", doc.getDocumentqueue());
+	    configuration.put("environmentid", doc.getEnvironmentid());
+	    configuration.put("userid", "0");
+	    configuration.put("docStateQueue", docQueue);
+	    configuration.put("interfaces", doc.getInterfaces().toArray(new String[0]));
+	    configuration.put("instance.name", "doc:"+doc.getDocumentqueue());
+	    ComponentInstance inst = factory.createComponentInstance(configuration);
+	    inst.addInstanceStateListener(new InstanceStateListener() {
+			
 			@Override
-			public void run() {
-				model.removeDocument(route.getDocQueue());
+			public void stateChanged(ComponentInstance arg0, int state) {
+				if (state == ComponentInstance.INVALID) {
+					arg0.dispose();
+				}
 			}
 		});
-		return route;
+	    
+	    Registerdocumentresponse response = new Registerdocumentresponse();
+		response.setSallyqueue(docQueue);
+		return response;
 	}
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModel.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModel.java
deleted file mode 100644
index 32b40c5cf3eaebc5e5199ae4156141b83b56b777..0000000000000000000000000000000000000000
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModel.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package info.kwarc.sally4.docmanager.impl;
-
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
-import info.kwarc.sally4.processors.TypedCallback;
-import info.kwarc.sally4.processors.XMLMessageWithTypeInfo;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-public class DocumentManagerModel {
-	Map<String, AlexRouteImpl> documents;
-	HashSet<IDocWorkflow> workflows;
-
-	HashMap<String, HashMap<IDocWorkflow, IDocWorkflowInstance>> workflowDocInstances;
-
-	public DocumentManagerModel() {
-		documents = new HashMap<String, AlexRouteImpl>();
-		workflows = new HashSet<IDocWorkflow>();
-
-		workflowDocInstances = new HashMap<String, HashMap<IDocWorkflow,IDocWorkflowInstance>>();
-	}
-
-	// N^2 algo but the strings list are small so will be faster
-	public boolean containsAll(String[] required, String[]  available) {
-		boolean ok;
-		for (String req : required) {
-			ok = false;
-			for (String avail : available) {
-				if (req.equals(avail)) {
-					ok = true;
-					break;
-				}
-			}
-			if (!ok)
-				return false;
-		}
-		return true;
-	}
-
-	public AlexRoute addDocument(String docQueue, String environment, String userid, String[] interfaces) {
-		if (documents.containsKey(docQueue))
-			return documents.get(docQueue);
-
-		final AlexRouteImpl route = new AlexRouteImpl(docQueue, environment, userid, interfaces);
-		documents.put(docQueue, route);
-		route.setMessageHandler(new TypedCallback<XMLMessageWithTypeInfo>() {
-
-			@Override
-			public void run(XMLMessageWithTypeInfo obj) {
-				forwardMessage(route, obj);
-			}
-		});
-
-		HashMap<IDocWorkflow,IDocWorkflowInstance> workflowInstances = new HashMap<IDocWorkflow, IDocWorkflowInstance>();
-		for (IDocWorkflow workflow : workflows) {
-			if (containsAll(workflow.getInterfaceRequirements(), interfaces)) {
-				IDocWorkflowInstance instance = workflow.createDocumentInstance(route);
-				workflowInstances.put(workflow, instance);
-			}
-		}
-		workflowDocInstances.put(docQueue, workflowInstances);
-		return route;
-	}
-
-	public void removeDocument(String docQueue) {
-		if (!documents.containsKey(docQueue))
-			return;
-		documents.remove(docQueue);
-		for (IDocWorkflowInstance instances : workflowDocInstances.get(docQueue).values()) {
-			instances.stop();
-		}
-		workflowDocInstances.remove(docQueue);
-	}
-
-	public void addWorkflow(IDocWorkflow workflow) {
-		workflows.add(workflow);
-
-		for (AlexRouteImpl route : getRoutes()) {
-			if (containsAll(workflow.getInterfaceRequirements(), route.getInterfaces())) {
-				workflowDocInstances.get(route.getDocQueue()).put(workflow,  workflow.createDocumentInstance(route));
-			}
-		}
-	}
-
-	public void removeWorkflow(IDocWorkflow workflow) {
-		workflows.remove(workflow);
-		for (AlexRouteImpl route : getRoutes()) {
-			final HashMap<IDocWorkflow, IDocWorkflowInstance> instanceMap = workflowDocInstances.get(route.getDocQueue());
-
-			IDocWorkflowInstance t = instanceMap.get(workflow);
-			if (t == null)
-				continue;
-			t.stop();
-			instanceMap.remove(workflow);
-		}
-	}	
-
-
-	public void forwardMessage(AlexRoute r, XMLMessageWithTypeInfo info) {
-		final HashMap<IDocWorkflow, IDocWorkflowInstance> workflows = workflowDocInstances.get(r.getDocQueue());
-		for (Entry<IDocWorkflow, IDocWorkflowInstance> work : workflows.entrySet()) {
-			if (containsAll(new String[] {info.getXmlMessageNamespace()}, work.getKey().getHandlingNamespaces())) {
-				if (work.getValue().handleMessage(r, info.getXmlMessageNamespace(), info.getXmlMessageType(), info.getExchange())) {
-					return;
-				}
-			}
-		}
-	}
-
-	public Collection<AlexRouteImpl> getRoutes() {
-		return documents.values();
-	}
-
-	public Collection<IDocWorkflowInstance>  getDocWorkflowInstances(String []requiredInterfaces) {
-		ArrayList<IDocWorkflowInstance> result = new ArrayList<IDocWorkflowInstance>();
-		List<IDocWorkflow> validWorkflows = new ArrayList<IDocWorkflow>();
-		for (IDocWorkflow workflow : workflows) {
-			if (containsAll(requiredInterfaces, workflow.getInterfaceRequirements())) {
-				validWorkflows.add(workflow);
-			}
-		}
-
-		for (final HashMap<IDocWorkflow, IDocWorkflowInstance> instancesForRoute : workflowDocInstances.values()) {
-			for (IDocWorkflow validWorkflow : validWorkflows) {
-				if (instancesForRoute.containsKey(validWorkflow)) {
-					result.add(instancesForRoute.get(validWorkflow));
-				}
-			}
-		}
-		return result;		
-	}
-
-	public void stopAllRoutes() {
-		for (String routeID : workflowDocInstances.keySet()) {
-			for (IDocWorkflow workflow : workflowDocInstances.get(routeID).keySet()) {
-				workflowDocInstances.get(routeID).get(workflow).stop();
-			}
-			try {
-				documents.get(routeID).getContext().stop();
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-			workflowDocInstances.get(routeID).clear();
-		}
-		workflowDocInstances.clear();
-		documents.clear();
-	}
-}
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/SallyDocImpl.java
similarity index 63%
rename from docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java
rename to docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/SallyDocImpl.java
index 9b132fb7b226181908a676c1049ea6d35e9fc5fc..07c51d4d89ef543cbd0c79947d2339c9321737ff 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/SallyDocImpl.java
@@ -2,44 +2,56 @@ package info.kwarc.sally4.docmanager.impl;
 
 import info.kwarc.sally.comm.core.Heartbeatrequest;
 import info.kwarc.sally4.components.ProducerConsumerSplitterComponent;
-import info.kwarc.sally4.docmanager.AlexRoute;
+import info.kwarc.sally4.core.CamelContextProvider;
+import info.kwarc.sally4.docmanager.SallyDoc;
 import info.kwarc.sally4.marshalling.CommUtils;
 import info.kwarc.sally4.processors.EnrichMessageProperties;
 import info.kwarc.sally4.processors.TypedCallback;
 import info.kwarc.sally4.processors.XMLMessageWithTypeInfo;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.spi.DataFormat;
 import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.annotations.Controller;
+import org.apache.felix.ipojo.annotations.Invalidate;
+import org.apache.felix.ipojo.annotations.Property;
 import org.apache.felix.ipojo.annotations.Provides;
+import org.apache.felix.ipojo.annotations.Requires;
+import org.apache.felix.ipojo.annotations.Validate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
-@Component
-@Provides(specifications=AlexRoute.class)
-public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
+@Component(name="SallyDocFactory")
+@Provides(specifications=SallyDoc.class)
+public class SallyDocImpl extends RouteBuilder  implements SallyDoc {
 
+	@Property 
 	String docQueue;
+	@Property 
 	String environmentid;
+	@Property 
 	String userid;
-	
+	@Property 
 	String docStateQueue;
-
+	@Property 
 	String[] interfaces;
-	List<Runnable> stopHandlers;
+	
+	@Requires
+	CamelContextProvider camelContextProvider;
+	
+    @Controller
+    private boolean m_state = true;
+	
+	CamelContext camelContext;
+	
 	TypedCallback<XMLMessageWithTypeInfo> messageHandler;
 	Logger log;
-	
-	String generateUUID(String doc_queue) {
-		//"/queue/sally_doc_"+UUID.randomUUID().toString()
-		return "sally_doc_"+doc_queue;
-	}
+
 
 	public String getEnvironmentid() {
 		return environmentid;
@@ -48,16 +60,18 @@ public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
 	public String getUserid() {
 		return userid;
 	}
+
+	public SallyDocImpl() {
+		log = LoggerFactory.getLogger(getClass());		
+	}
 	
-	public AlexRouteImpl(String alexQueue, String environmentid, String userid, String[] interfaces) {
+	public SallyDocImpl(String docQueue, String environmentid, String userid, String docStateQueue, String[] interfaces) {
 		log = LoggerFactory.getLogger(getClass());
-		this.docQueue = alexQueue;
+		this.docQueue = docQueue;
 		this.environmentid = environmentid;
 		this.userid = userid;
-		
 		this.interfaces = interfaces;
-		this.docStateQueue = generateUUID(alexQueue);
-		stopHandlers = new ArrayList<Runnable>();
+		this.docStateQueue = docStateQueue;
 	}	
 	
 	public Heartbeatrequest generateHeartbeat() {
@@ -72,32 +86,13 @@ public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
 		return docQueue;
 	}
 
-	public void addOnStopHandler(Runnable stopHandler) {
-		stopHandlers.add(stopHandler);
-	}
-
 	public String[] getInterfaces() {
 		return interfaces;
 	}
 	
-	public void notifyStop() {
-		for (Runnable r : stopHandlers) {
-			try {
-				r.run();
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-		try {
-			getContext().stopRoute("timer");
-			getContext().stop();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
 	@Override
 	public ProducerConsumerSplitterComponent getAlexComponent() {
+		log.info("will start on queue "+docStateQueue);
 		return new ProducerConsumerSplitterComponent("activemq:queue:"+docStateQueue, "activemq:queue:"+docQueue);
 	}
 
@@ -110,7 +105,12 @@ public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
 	public String getUserID() {
 		return userid;
 	}
-		
+	
+	public void notifyStop() throws Exception {
+		m_state = false;
+		getContext().removeRoute("timer");
+	}
+	
 	@Override
 	public void configure() throws Exception {
 		DataFormat core = CommUtils.getDataFormat("core", getClass().getClassLoader());
@@ -138,6 +138,22 @@ public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
 			.to("log:willsend");
 	}
 
+	@Validate
+	public void start() throws Exception {
+		camelContext = new DefaultCamelContext();
+		camelContext.addComponent("activemq", camelContextProvider.getComponent("activemq"));
+		camelContext.addComponent("sallyservlet", camelContextProvider.getComponent("sallyservlet"));
+		camelContext.addComponent("alex", getAlexComponent());
+		camelContext.addRoutes(this);
+		camelContext.getShutdownStrategy().setTimeout(10);
+		camelContext.start();
+	}
+
+	@Invalidate
+	public void stop() throws Exception {
+		camelContext.stop();
+	}
+
 	@Override
 	public void setMessageHandler(TypedCallback<XMLMessageWithTypeInfo> callback) {
 		messageHandler = callback;
@@ -151,4 +167,5 @@ public class AlexRouteImpl extends RouteBuilder  implements AlexRoute {
 		}
 		return exchange.getIn().getBody(String.class);
 	}
+
 }
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockAbstractWorkflow.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockAbstractWorkflow.java
index 253044a12bc796fcd7afe2ef7ad771332311e3bf..7b6dc4f25ef18614a9f06f915d9cc3cf1e94196d 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockAbstractWorkflow.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockAbstractWorkflow.java
@@ -1,6 +1,6 @@
 package info.kwarc.sally4.docmanager.mocks;
 
-import info.kwarc.sally4.docmanager.AlexRoute;
+import info.kwarc.sally4.docmanager.SallyDoc;
 import info.kwarc.sally4.docmanager.IDocWorkflow;
 import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
 
@@ -25,7 +25,7 @@ public class MockAbstractWorkflow implements IDocWorkflow {
 	}
 
 	@Override
-	public IDocWorkflowInstance createDocumentInstance(AlexRoute route) {
+	public IDocWorkflowInstance createDocumentInstance(SallyDoc route) {
 		return null;
 	}
 
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockCountingWorkflow.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockCountingWorkflow.java
deleted file mode 100644
index f25eaf108197c81d2996de8268a3c8172fb3d5d1..0000000000000000000000000000000000000000
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockCountingWorkflow.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package info.kwarc.sally4.docmanager.mocks;
-
-import org.apache.camel.Exchange;
-
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.IDocWorkflow;
-import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
-
-public class MockCountingWorkflow implements IDocWorkflow {
-	String [] ifaces;
-	String [] namespaces;
-	int instances;
-	
-	public MockCountingWorkflow(String [] ifaces, String [] namespaces) {
-		this.ifaces = ifaces;
-		this.namespaces = namespaces;
-		instances = 0;
-	}
-	
-	@Override
-	public String[] getInterfaceRequirements() {
-		return ifaces;
-	}
-
-	@Override
-	public String[] getHandlingNamespaces() {
-		return namespaces;
-	}
-	
-	public int getInstances() {
-		return instances;
-	}
-
-	@Override
-	public IDocWorkflowInstance createDocumentInstance(final AlexRoute route) {
-		instances++;
-		final IDocWorkflow workflow = this;
-		return new IDocWorkflowInstance() {
-			
-			@Override
-			public void stop() {
-				instances--;
-			}
-			
-			@Override
-			public boolean handleMessage(AlexRoute route, String namespace,
-					String type, Exchange exchange) {
-				return false;
-			}
-
-			@Override
-			public IDocWorkflow getDocumentWorkflow() {
-				return workflow;
-			}
-
-			@Override
-			public AlexRoute getRoute() {
-				return route;
-			}
-		};
-	}
-
-}
diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockDocumentManager.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockDocumentManager.java
index c082c0524f13e4d34fcd0838cf21858056333662..b88de62182b3b4f9b401381195dd02b71595cdbb 100644
--- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockDocumentManager.java
+++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/mocks/MockDocumentManager.java
@@ -1,7 +1,7 @@
 package info.kwarc.sally4.docmanager.mocks;
 
 import info.kwarc.sally.comm.core.Registerdocument;
-import info.kwarc.sally4.docmanager.AlexRoute;
+import info.kwarc.sally.comm.core.Registerdocumentresponse;
 import info.kwarc.sally4.docmanager.DocumentManager;
 import info.kwarc.sally4.docmanager.IDocWorkflowInstance;
 
@@ -11,7 +11,7 @@ import java.util.List;
 public class MockDocumentManager implements DocumentManager {
 
 	@Override
-	public AlexRoute registerDocument(Registerdocument doc) {
+	public Registerdocumentresponse  registerDocument(Registerdocument doc) {
 		return null;
 	}
 
diff --git a/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapterTest.java b/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapterTest.java
index 51752f1a1b4ba41036de243393ca82760abd42d4..97cb4f7cdf8988b907c549742c0c16dd67b0124c 100644
--- a/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapterTest.java
+++ b/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerAdapterTest.java
@@ -11,14 +11,15 @@ public class DocumentManagerAdapterTest {
 
 	Registerdocument r1;
 	String r1xml;
-	
+
 	public DocumentManagerAdapterTest() {
 		r1 = new Registerdocument();
 		r1.setDocumentqueue("d1");
 		r1.setEnvironmentid("e1");
 		r1xml = MarshallUtils.marshallToXML("core", r1, getClass().getClassLoader());
 	}
-	
+
+	/*
 	@Test
 	public void testStartingAndStopping() throws Exception {
 		DocumentManagerAdapter adapter = new DocumentManagerAdapter();
@@ -36,5 +37,5 @@ public class DocumentManagerAdapterTest {
 		temp.sendBody("activemq:queue:"+DocumentManagerAdapter.sallyRegisterQueue, r1);
 		adapter.stop();
 	}
-
+	 */
 }
diff --git a/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModelTest.java b/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModelTest.java
deleted file mode 100644
index a96b5367665890666db421cf4b7e84e5d246b691..0000000000000000000000000000000000000000
--- a/docmanager/src/test/java/info/kwarc/sally4/docmanager/impl/DocumentManagerModelTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package info.kwarc.sally4.docmanager.impl;
-
-import static org.junit.Assert.*;
-import info.kwarc.sally4.docmanager.AlexRoute;
-import info.kwarc.sally4.docmanager.mocks.MockCountingWorkflow;
-
-import org.junit.Test;
-
-public class DocumentManagerModelTest {
-
-	DocumentManagerModel model;
-
-	public DocumentManagerModelTest() {
-		model = new DocumentManagerModel();
-	}
-
-	@Test
-	public void testSameQueueSameRoute() {
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2"});
-		AlexRoute route2 = model.addDocument("doc1", "env2", "user2", new String[] {"i1", "i2"});
-
-		assertEquals("env1", route2.getEnvironmentID());
-		assertEquals("user1", route2.getUserID());
-	}
-
-	@Test
-	public void testRemovingRoute() {
-		AlexRoute route1 = model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2"});
-		model.removeDocument(route1.getDocQueue());
-
-		AlexRoute route2 = model.addDocument("doc1", "env2", "user2", new String[] {"i1", "i2"});
-		assertEquals("env2", route2.getEnvironmentID());
-		assertEquals("user2", route2.getUserID());
-	}
-
-	@Test
-	public void testRemovingAllRoutes() {
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2"});
-		model.addDocument("doc2", "env1", "user1", new String[] {"i1", "i2"});
-		model.addDocument("doc3", "env1", "user1", new String[] {"i1", "i2"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2"});
-		model.removeDocument("doc1");
-		model.removeDocument("doc2");
-		model.removeDocument("doc3");
-		assertEquals(0, model.getRoutes().size());
-	}
-
-	@Test
-	public void testMatchingRouteAndWorkflow() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-		model.addWorkflow(cnt1);
-		assertEquals(2, cnt1.getInstances());
-		model.addWorkflow(cnt2);
-		assertEquals(1, cnt2.getInstances());
-	}	
-
-	@Test
-	public void testMatchingRouteAndWorkflowAndRemovingRoute() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-		model.addWorkflow(cnt1);
-		assertEquals(2, cnt1.getInstances());
-		model.addWorkflow(cnt2);
-		assertEquals(1, cnt2.getInstances());
-		model.removeDocument("doc1");
-
-		assertEquals(1, cnt1.getInstances());
-		assertEquals(0, cnt2.getInstances());
-	}	
-
-	@Test
-	public void testMatchingRouteAndWorkflowAndRemovingWorkflow() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-		model.addWorkflow(cnt1);
-		assertEquals(2, cnt1.getInstances());
-		model.addWorkflow(cnt2);
-		assertEquals(1, cnt2.getInstances());
-		model.removeWorkflow(cnt1);
-
-		assertEquals(0, cnt1.getInstances());
-		assertEquals(1, cnt2.getInstances());
-	}	
-
-	@Test
-	public void testMatchingRouteAndWorkflowAndRemovingAllWorkflows() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-		model.addWorkflow(cnt1);
-		assertEquals(2, cnt1.getInstances());
-		model.addWorkflow(cnt2);
-		assertEquals(1, cnt2.getInstances());
-		model.removeWorkflow(cnt1);
-		model.removeWorkflow(cnt2);
-
-		assertEquals(0, cnt1.getInstances());
-		assertEquals(0, cnt2.getInstances());
-	}	
-
-	@Test
-	public void testMatchingWorkflowAndRoute() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-
-		model.addWorkflow(cnt1);
-
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		assertEquals(1, cnt1.getInstances());
-		model.addWorkflow(cnt2);
-		assertEquals(1, cnt2.getInstances());
-				
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-
-		assertEquals(2, cnt1.getInstances());
-		assertEquals(1, cnt2.getInstances());
-		model.removeWorkflow(cnt1);
-		model.removeWorkflow(cnt2);
-
-		assertEquals(0, cnt1.getInstances());
-		assertEquals(0, cnt2.getInstances());
-	}	
-
-	@Test
-	public void testRemovingRouteTwice() {
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.removeDocument("doc1");
-		model.removeDocument("doc1");
-		assertEquals(0, model.getRoutes().size());		
-	}
-	
-	@Test
-	public void testWorkflowTwice() {
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		model.removeWorkflow(cnt1);
-		model.removeWorkflow(cnt1);
-	}
-	
-	@Test
-	public void testStoppingAllRoutes() {
-		MockCountingWorkflow cnt1 = new MockCountingWorkflow(new String[]{"i1"}, new String[]{"n1"});
-		MockCountingWorkflow cnt2 = new MockCountingWorkflow(new String[]{"i1", "i3"}, new String[]{"n1"});
-		model.addDocument("doc1", "env1", "user1", new String[] {"i1", "i2", "i3"});
-		model.addDocument("doc2", "env2", "user2", new String[] {"i1", "i2"});
-		model.addWorkflow(cnt1);
-		model.addWorkflow(cnt2);
-
-		model.stopAllRoutes();
-		
-		assertEquals(0, cnt1.getInstances());
-		assertEquals(0, cnt2.getInstances());
-		assertEquals(0, model.getRoutes().size());
-	}	
-
-
-}
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java
index bfabeb09cb9e90fd6f5cc4d85447f860449b0ffb..a0f471d9ee964249b799cbf213c5b0480fdb6436 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java
index a3e4540aca15f4f5c14987742235fe92851c3085..0b31f519ab18764246060b63963ad000c7625093 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/NewService.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/NewService.java
index f6a00423380a0ad106a082bc7841049183244139..315a8fa61aa9c9fb4f81ff78710faeb1c64fe4b8 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/NewService.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/NewService.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java
index ff4bd416ccf3738f5ccbb1f9f89b22438356127d..05b90f41a4688fc9c39db65a61f8c97f34aa2cdc 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 
@@ -61,11 +61,11 @@ public class ObjectFactory {
     }
 
     /**
-     * Create an instance of {@link GetServices }
+     * Create an instance of {@link RemoveService }
      * 
      */
-    public GetServices createGetServices() {
-        return new GetServices();
+    public RemoveService createRemoveService() {
+        return new RemoveService();
     }
 
 }
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/RemoveService.java
similarity index 53%
rename from planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java
rename to planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/RemoveService.java
index d76cdb4d10b30effdc077057f71c1e807d4c9700..58b40b4ceb544d3290480488eb752c399b6d76b4 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/RemoveService.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 
@@ -10,6 +10,7 @@ package info.kwarc.sally.comm.planetaryclient;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
@@ -23,6 +24,9 @@ import javax.xml.bind.annotation.XmlType;
  * &lt;complexType>
  *   &lt;complexContent>
  *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       &lt;sequence>
+ *         &lt;element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ *       &lt;/sequence>
  *     &lt;/restriction>
  *   &lt;/complexContent>
  * &lt;/complexType>
@@ -31,9 +35,37 @@ import javax.xml.bind.annotation.XmlType;
  * 
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "")
-@XmlRootElement(name = "GetServices")
-public class GetServices {
+@XmlType(name = "", propOrder = {
+    "id"
+})
+@XmlRootElement(name = "RemoveService")
+public class RemoveService {
 
+    @XmlElement(required = true)
+    protected String id;
+
+    /**
+     * Gets the value of the id property.
+     * 
+     * @return
+     *     possible object is
+     *     {@link String }
+     *     
+     */
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * Sets the value of the id property.
+     * 
+     * @param value
+     *     allowed object is
+     *     {@link String }
+     *     
+     */
+    public void setId(String value) {
+        this.id = value;
+    }
 
 }
diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java
index a1f87af04a92f21603565140175e3cc0efdee428..593c6eab70d758864d8a34ca2aefa1a4288fb659 100644
--- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java
+++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java
@@ -2,7 +2,7 @@
 // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
 // Any modifications to this file will be lost upon recompilation of the source schema. 
-// Generated on: 2014.04.17 at 11:52:15 AM CEST 
+// Generated on: 2014.04.22 at 07:50:56 PM CEST 
 //
 
 @javax.xml.bind.annotation.XmlSchema(namespace = "http://kwarc.info/sally/comm/planetaryclient", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
diff --git a/planetary/src/main/resources/planetaryclient.xsd b/planetary/src/main/resources/planetaryclient.xsd
index 4812246922d6c6694921c14bccd033277815a240..6fceac75a04c985d0d4709a71a423f46cc2a261c 100644
--- a/planetary/src/main/resources/planetaryclient.xsd
+++ b/planetary/src/main/resources/planetaryclient.xsd
@@ -19,11 +19,6 @@
 		</xs:complexType>
 	</xs:element>
 
-	<xs:element name="GetServices">
-		<xs:complexType>
-		</xs:complexType>
-	</xs:element>
-
 	<xs:element name="NewService">
 		<xs:complexType>
 			<xs:sequence>
@@ -36,4 +31,12 @@
 		</xs:complexType>
 	</xs:element>
 
+	<xs:element name="RemoveService">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="id" type="xs:string"></xs:element>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
 </xs:schema>
\ No newline at end of file