diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstance.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstance.java
index 8668c65..97ab69e 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstance.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstance.java
@@ -106,7 +106,7 @@
 	 * the {@link MesssageHandler} handling messages coming from this
 	 * SensiNactResourceModel
 	 */
-	protected MessageRouter messageHandler;
+	protected MessageRouter messageRouter;
 
 	/**
 	 * the String identifier of the profile of this SnaServiceProvider
@@ -324,11 +324,11 @@
 	 *            the {@link SnaMessage} to post
 	 */
 	public void postMessage(SnaMessage<?> message) {
-		if (this.messageHandler == null) {
+		if (this.messageRouter == null) {
 			return;
 		}
 		((AbstractSnaMessage<?>)message).put("namespace", this.namespace, true);
-		this.messageHandler.handle(message);
+		this.messageRouter.handle(message);
 	}
 
 	/**
@@ -401,7 +401,7 @@
 			List<String> observed = this.configuration.getObserved();
 
 			this.registration = new ModelInstanceRegistration(uri, observed, instanceRegistration, this.configuration);
-			this.messageHandler = new SnaMessageListener(mediator, this.configuration());
+			this.messageRouter = new SnaMessageListener(mediator, this.configuration());
 			
 			boolean pattern = false;
 
@@ -436,11 +436,11 @@
 			SnaFilter filter = new SnaFilter(mediator, observedBuilder.toString(), pattern, false);
 
 			filter.addHandledType(SnaMessage.Type.UPDATE);
-			this.messageHandler.addCallback(filter, registration);
+			this.messageRouter.addCallback(filter, registration);
 
-			filter = new SnaFilter(mediator, "(\\/[^\\/]+)+", true, false);
+			filter = new SnaFilter(mediator, "(/[^/]+)+", true, false);
 			filter.addHandledType(SnaMessage.Type.LIFECYCLE);
-			this.messageHandler.addCallback(filter, registration);
+			this.messageRouter.addCallback(filter, registration);
 
 			if (this.configuration().getStartAtInitializationTime()) {
 				this.provider.start();
@@ -466,8 +466,8 @@
 		} catch (Exception e) {
 			mediator.error(e);
 		}
-		this.messageHandler.close(true);
-		this.messageHandler = null;
+		this.messageRouter.close(true);
+		this.messageRouter = null;
 
 		AccessController.<Void>doPrivileged(new PrivilegedAction<Void>() {
 			@Override
@@ -531,10 +531,10 @@
 	 * @param callback
 	 */
 	public void registerCallback(SnaFilter filter, MidCallback callback) {
-		if (this.messageHandler == null) {
+		if (this.messageRouter == null) {
 			return;
 		}
-		this.messageHandler.addCallback(filter, callback);
+		this.messageRouter.addCallback(filter, callback);
 	}
 
 	/**
@@ -542,10 +542,10 @@
 	 * @param callback
 	 */
 	public void unregisterCallback(String callback) {
-		if (this.messageHandler == null) {
+		if (this.messageRouter == null) {
 			return;
 		}
-		this.messageHandler.deleteCallback(callback);
+		this.messageRouter.deleteCallback(callback);
 	}
 
 	/**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceImpl.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceImpl.java
index 4cc2329..2a180f9 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceImpl.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceImpl.java
@@ -554,21 +554,11 @@
 		return (Class<S>) this.resourceType;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Elements#getName()
-	 */
 	@Override
 	public String getName() {
 		return (String) this.getAttribute(Resource.NAME).getValue();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Typable#getType()
-	 */
 	@Override
 	public Resource.Type getType() {
 		return (Resource.Type) this.getAttribute(Resource.TYPE).getValue();
@@ -767,11 +757,6 @@
 		this.links.add(path);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.SnaObject#isRegistered()
-	 */
 	@Override
 	public void start() {
 		if (!super.getModelInstance().isRegistered() || this.isHidden()) {
@@ -844,12 +829,6 @@
 		super.stop();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ModelElement# passOn(AccessMethod.Type, java.lang.String,
-	 *      java.lang.Object[])
-	 */
 	@Override
 	protected <TASK> TASK passOn(String type, String uri, Object[] parameters) throws Exception {
 		if (!type.equals(AccessMethod.GET) || this.getUpdatePolicy() == Resource.UpdatePolicy.NONE
@@ -878,31 +857,16 @@
 		}
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see ModelElement#getProxyType()
-	 */
 	@Override
 	protected Class<? extends ElementsProxy<AttributeDescription>> getProxyType() {
 		return this.resourceType;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ModelElement#getRegisteredEvent()
-	 */
 	@Override
 	protected SnaLifecycleMessage.Lifecycle getRegisteredEvent() {
 		return SnaLifecycleMessage.Lifecycle.RESOURCE_APPEARING;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ModelElement#getUnregisteredEvent()
-	 */
 	@Override
 	protected SnaLifecycleMessage.Lifecycle getUnregisteredEvent() {
 		return SnaLifecycleMessage.Lifecycle.RESOURCE_DISAPPEARING;
@@ -927,25 +891,12 @@
 		return this.updatePolicy;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.SensiNactResourceModelElement#
-	 *      getProxy(java.util.List)
-	 */
 	@Override
 	public ResourceProxy getProxy(List<MethodAccessibility> methodAccessibilities) {
 		ResourceProxy proxy = new ResourceProxy(super.modelInstance.mediator(), this, methodAccessibilities);
 		return proxy;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.ModelElement#
-	 *      getElementProxy(org.eclipse.sensinact.gateway.core.security.AccessTree,
-	 *      org.eclipse.sensinact.gateway.common.primitive.Nameable)
-	 */
 	@Override
 	protected AttributeDescription getElementProxy(AccessTree<?> tree, Attribute element)
 			throws ModelElementProxyBuildException {
@@ -955,13 +906,6 @@
 		return element.getDescription();
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.ModelElement#
-	 *      getWrapper(org.eclipse.sensinact.gateway.core.ModelElementProxy,
-	 *      org.eclipse.sensinact.gateway.core.security.ImmutableAccessTree)
-	 */
 	@Override
 	protected ModelElementProxyWrapper getWrapper(ResourceProxy proxy, ImmutableAccessTree tree) {
 		ResourceProxyWrapper wrapper = new ResourceProxyWrapper(proxy, tree);
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SessionKey.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SessionKey.java
index 8649c46..758c8ce 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SessionKey.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SessionKey.java
@@ -17,7 +17,12 @@
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.common.execution.Executable;
 import org.eclipse.sensinact.gateway.core.Sessions.SessionObserver;
-import org.eclipse.sensinact.gateway.core.message.*;
+import org.eclipse.sensinact.gateway.core.message.LocalAgentImpl;
+import org.eclipse.sensinact.gateway.core.message.MidAgentCallback;
+import org.eclipse.sensinact.gateway.core.message.RemoteAgentCallback;
+import org.eclipse.sensinact.gateway.core.message.RemoteAgentImpl;
+import org.eclipse.sensinact.gateway.core.message.SnaAgent;
+import org.eclipse.sensinact.gateway.core.message.SnaFilter;
 import org.eclipse.sensinact.gateway.core.security.AccessNode;
 import org.eclipse.sensinact.gateway.core.security.AccessTree;
 import org.eclipse.sensinact.gateway.core.security.UserKey;
@@ -26,7 +31,6 @@
  *
  * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
  */
-//@Component(immediate = false)
 public class SessionKey {
 	private Mediator mediator;
 
@@ -133,8 +137,8 @@
 	public boolean unregisterAgent(String agentId) {
 		if (!this.agents.remove(agentId)) {
 			return false;
-		}
-		return this.mediator.callService(SnaAgent.class, String.format("org.eclipse.sensinact.gateway.agent.id=%s",agentId), new Executable<SnaAgent, Boolean>() {
+		}		
+		return this.mediator.callService(SnaAgent.class, String.format("(org.eclipse.sensinact.gateway.agent.id=%s)",agentId), new Executable<SnaAgent, Boolean>() {
 			@Override
 			public Boolean execute(SnaAgent agent) throws Exception {
 				try {
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/AbstractAgent.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/AbstractAgent.java
index e35c743..e185376 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/AbstractAgent.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/AbstractAgent.java
@@ -127,7 +127,8 @@
 			try {
 				this.registration = this.mediator.getContext().registerService(
 					getAgentInterfaces(),  this, properties);
-			} catch (IllegalStateException e) {
+			} catch (Exception e) {
+				e.printStackTrace();
 				this.mediator.error("The agent is not registered ", e);
 			}
 			doStart();
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/BufferMidCallback.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/BufferMidCallback.java
index f70634e..baad1bd 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/BufferMidCallback.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/BufferMidCallback.java
@@ -54,9 +54,9 @@
 		buffer = new SnaMessage[this.bufferSize];
 	}
 
-	/**
-	 * @inheritDoc
-	 *
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see StackEngineHandler#doHandle(java.lang.Object)
 	 */
 	@Override
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/LocalAgentImpl.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/LocalAgentImpl.java
index 697b686..cb1a50d 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/LocalAgentImpl.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/LocalAgentImpl.java
@@ -19,7 +19,7 @@
 /**
  * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
  */
-public class LocalAgentImpl extends AbstractAgent implements LocalAgent,RemoteAgent {
+public class LocalAgentImpl extends AbstractAgent implements LocalAgent {
 
 	// ********************************************************************//
 	// STATIC DECLARATIONS //
@@ -50,7 +50,7 @@
 			String sender = LocalAgentImpl.getSender(mediator, suffix);
 
 			if (sender == null) {
-				sender = ".*";
+				sender = "(/[^/]+)+";
 				isPattern = true;
 			} else {
 				isPattern = LocalAgentImpl.isPattern(mediator, suffix);
@@ -221,6 +221,6 @@
 	 */
 	@Override
 	public String[] getAgentInterfaces() {
-		return new String[] {SnaAgent.class.getName(), LocalAgent.class.getName(),RemoteAgent.class.getName()};
+		return new String[] {SnaAgent.class.getName(), LocalAgent.class.getName() };
 	}
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/SnaMessageListener.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/SnaMessageListener.java
index 9db3737..c0ad65b 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/SnaMessageListener.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/message/SnaMessageListener.java
@@ -267,8 +267,8 @@
 			public Void run() {
 				mediator.callServices(SnaAgent.class, new Executable<SnaAgent, Void>() {
 					@Override
-					public Void execute(SnaAgent agent) throws Exception {
-						String agentKey = agent.getPublicKey();
+					public Void execute(SnaAgent agent) throws Exception {	
+						String agentKey = agent.getPublicKey();						
 						List<MethodAccessibility> methodAccessibilities = SnaMessageListener.this.agentsAccessibility.get(agentKey);
 						int index = -1;
 						if (methodAccessibilities == null) {
@@ -278,7 +278,7 @@
 							}
 							methodAccessibilities = SnaMessageListener.this.configuration.getAccessibleMethods(path, option);
 							SnaMessageListener.this.agentsAccessibility.put(agentKey, methodAccessibilities);
-						}
+						}						
 						if ((index = methodAccessibilities.indexOf(new Name<MethodAccessibility>(method))) > -1
 								&& methodAccessibilities.get(index).isAccessible()) {
 							agent.register(message);
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/AbstractRemoteEndpoint.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/AbstractRemoteEndpoint.java
index 29a369a..f67f4c4 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/AbstractRemoteEndpoint.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/AbstractRemoteEndpoint.java
@@ -179,8 +179,6 @@
 	 * @param connected
 	 */
 	private void setConnected(boolean connected) {
-		System.out.println("SET CONNECTED "+connected);
-		Thread.dumpStack();
 		synchronized(lock) {			
 			this.connected = connected;
 		}
diff --git a/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/MyModelInstance.java b/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/MyModelInstance.java
index 8753eb6..eb764dd 100644
--- a/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/MyModelInstance.java
+++ b/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/MyModelInstance.java
@@ -45,7 +45,7 @@
 	}
 
 	public MessageRouter getHandler() {
-		return super.messageHandler;
+		return super.messageRouter;
 	}
 
 	/**
