Merge "Make StackEngine share threads"
diff --git a/distribution/generator/profile/pom.xml b/distribution/generator/profile/pom.xml
index 5ee0c8e..0bc2612 100644
--- a/distribution/generator/profile/pom.xml
+++ b/distribution/generator/profile/pom.xml
@@ -92,7 +92,7 @@
 		<module>onem2m</module>
 		<module>onem2m-mqttbinding</module>
 		<module>rest-profile</module>
-		<module>jsonpath-profile</module>
+		<!--<module>jsonpath-profile</module>-->
 		<module>simulation-profile</module>
 		<module>http-storage-agent-profile</module>
 		<module>influxdb-storage-agent-profile</module>
diff --git a/integration-tests/mqtt-it/src/test/java/org/eclipse/sensinact/gateway/device/mqtt/lite/it/MqttBridgeTest.java b/integration-tests/mqtt-it/src/test/java/org/eclipse/sensinact/gateway/device/mqtt/lite/it/MqttBridgeTest.java
index 60fab34..5a59cdb 100644
--- a/integration-tests/mqtt-it/src/test/java/org/eclipse/sensinact/gateway/device/mqtt/lite/it/MqttBridgeTest.java
+++ b/integration-tests/mqtt-it/src/test/java/org/eclipse/sensinact/gateway/device/mqtt/lite/it/MqttBridgeTest.java
@@ -22,7 +22,7 @@
 import org.eclipse.sensinact.gateway.core.Core;
 import org.eclipse.sensinact.gateway.core.Session;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.eclipse.sensinact.gateway.device.mqtt.lite.it.util.MqttTestITAbstract;
 import org.eclipse.sensinact.gateway.util.IOUtils;
diff --git a/platform/northbound/jsonpath-filtering/jsonpath-filter/pom.xml b/platform/northbound/jsonpath-filtering/jsonpath-filter/pom.xml
index cfe0bd4..e4ef21f 100644
--- a/platform/northbound/jsonpath-filtering/jsonpath-filter/pom.xml
+++ b/platform/northbound/jsonpath-filtering/jsonpath-filter/pom.xml
@@ -84,10 +84,12 @@
 			<scope>test</scope>
 		</dependency>
 		<!-- dirty trick to avoid to change the global settings.xml file-->
+		<!--
 		<dependency>		
 			<groupId>org.gradle</groupId>
 			<artifactId>gradle-tooling-api</artifactId>
 		</dependency>
+		-->
 	</dependencies>
 
 	<build>
diff --git a/platform/northbound/mqtt/mqtt-agent/src/main/java/org/eclipse/sensinact/gateway/agent/mqtt/inst/osgi/Activator.java b/platform/northbound/mqtt/mqtt-agent/src/main/java/org/eclipse/sensinact/gateway/agent/mqtt/inst/osgi/Activator.java
index 61ac728..a3c8686 100644
--- a/platform/northbound/mqtt/mqtt-agent/src/main/java/org/eclipse/sensinact/gateway/agent/mqtt/inst/osgi/Activator.java
+++ b/platform/northbound/mqtt/mqtt-agent/src/main/java/org/eclipse/sensinact/gateway/agent/mqtt/inst/osgi/Activator.java
@@ -23,9 +23,6 @@
  */
 public class Activator extends AbstractActivator<Mediator> {
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.common.bundle.AbstractActivator#doStart()
-     */
     @Override
     public void doStart() throws Exception {
     	mediator.info("Starting MQTT Agents factory");
diff --git a/platform/northbound/mqtt/mqtt-agent/src/test/java/org/eclipse/sensinact/gateway/mqtt/inst/test/MidOSGiTestExtended.java b/platform/northbound/mqtt/mqtt-agent/src/test/java/org/eclipse/sensinact/gateway/mqtt/inst/test/MidOSGiTestExtended.java
index a7cbce8..2715348 100755
--- a/platform/northbound/mqtt/mqtt-agent/src/test/java/org/eclipse/sensinact/gateway/mqtt/inst/test/MidOSGiTestExtended.java
+++ b/platform/northbound/mqtt/mqtt-agent/src/test/java/org/eclipse/sensinact/gateway/mqtt/inst/test/MidOSGiTestExtended.java
@@ -265,7 +265,9 @@
         }
         MidProxy<Session> mids = (MidProxy<Session>) Proxy.getInvocationHandler(s);
         try {
-            Object o = mids.toOSGi(Session.class.getDeclaredMethod("get", new Class<?>[]{String.class, String.class, String.class, String.class}), new Object[]{provider, service, resource, DataResource.VALUE});
+            Object o = mids.toOSGi(Session.class.getDeclaredMethod("get", 
+            	new Class<?>[]{String.class, String.class, String.class, String.class, Object[].class}), 
+            	new Object[]{provider, service, resource, DataResource.VALUE, (Object[])null});
             Object j = o.getClass().getDeclaredMethod("getJSON").invoke(o);
             System.out.println(j);
             return (String) j;
@@ -284,7 +286,9 @@
         }
         MidProxy<Session> mids = (MidProxy<Session>) Proxy.getInvocationHandler(s);
         try {
-            Object o = mids.toOSGi(Session.class.getDeclaredMethod("set", new Class<?>[]{String.class, String.class, String.class, String.class, Object.class}), new Object[]{provider, service, resource, DataResource.VALUE, value});
+            Object o = mids.toOSGi(Session.class.getDeclaredMethod("set", 
+            	new Class<?>[]{String.class, String.class, String.class, String.class, Object.class,
+            	Object[].class}), new Object[]{provider, service, resource, DataResource.VALUE, value, (Object[])null});
             Object j = o.getClass().getDeclaredMethod("getJSON").invoke(o);
             System.out.println(j);
             return (String) j;
@@ -303,7 +307,9 @@
         }
         MidProxy<Session> mids = (MidProxy<Session>) Proxy.getInvocationHandler(s);
         try {
-            Object o = mids.toOSGi(Session.class.getDeclaredMethod("act", new Class<?>[]{String.class, String.class, String.class, Object[].class}), new Object[]{provider, service, resource, args});
+            Object o = mids.toOSGi(Session.class.getDeclaredMethod("act", 
+            	new Class<?>[]{String.class, String.class, String.class, Object[].class}),
+            	new Object[]{provider, service, resource, args});
             Object j = o.getClass().getDeclaredMethod("getJSON").invoke(o);
             System.out.println(j);
             return (String) j;
@@ -322,7 +328,9 @@
         }
         MidProxy<Session> mids = (MidProxy<Session>) Proxy.getInvocationHandler(s);
         try {
-            Object o = mids.toOSGi(Session.class.getDeclaredMethod("subscribe", new Class<?>[]{String.class, String.class, String.class, Recipient.class, JSONArray.class}), new Object[]{provider, service, resource, recipient, null});
+            Object o = mids.toOSGi(Session.class.getDeclaredMethod("subscribe", 
+            	new Class<?>[]{String.class, String.class, String.class, Recipient.class, JSONArray.class, Object[].class}), 
+            	new Object[]{provider, service, resource, recipient, null, (Object[])null});
             Object j = o.getClass().getDeclaredMethod("getJSON").invoke(o);
             System.out.println(j);
             return (String) j;
@@ -333,7 +341,8 @@
         return null;
     }
 
-    public String unsubscribe(String provider, String service, String resource, String subscriptionId) throws ClassNotFoundException, IOException, InvalidSyntaxException {
+    public String unsubscribe(String provider, String service, String resource, String subscriptionId) 
+    		throws ClassNotFoundException, IOException, InvalidSyntaxException {
         MidProxy<Core> mid = new MidProxy<Core>(classloader, this, Core.class);
         Core core = mid.buildProxy();
         if(s == null) {
@@ -341,7 +350,9 @@
         }
         MidProxy<Session> mids = (MidProxy<Session>) Proxy.getInvocationHandler(s);
         try {
-            Object o = mids.toOSGi(Session.class.getDeclaredMethod("unsubscribe", new Class<?>[]{String.class, String.class, String.class, String.class}), new Object[]{provider, service, resource, subscriptionId});
+            Object o = mids.toOSGi(Session.class.getDeclaredMethod("unsubscribe", 
+            	new Class<?>[]{String.class, String.class, String.class, String.class, Object[].class}), 
+            	new Object[]{provider, service, resource, subscriptionId, (Object[])null});
             Object j = o.getClass().getDeclaredMethod("getJSON").invoke(o);
             System.out.println(j);
             return (String) j;
diff --git a/platform/northbound/pom.xml b/platform/northbound/pom.xml
index 8c30f09..5d5ac58 100644
--- a/platform/northbound/pom.xml
+++ b/platform/northbound/pom.xml
@@ -27,7 +27,7 @@
 
 	<modules>
 	<module>rest-access</module>
-		<module>jsonpath-filtering</module>
+		<!--<module>jsonpath-filtering</module>-->
 		<module>geo-filtering</module>
 		<module>ldap-filtering</module>
 		<module>mqtt</module>
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpEndpoint.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpEndpoint.java
index 9e79a1a..bb0377d 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpEndpoint.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpEndpoint.java
@@ -100,6 +100,7 @@
             response.sendError(403, e.getMessage());
 
         } catch (Exception e) {
+        	e.printStackTrace();
             mediator.error(e);
             response.sendError(520, "Internal server error");
 
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRegisteringEndpoint.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRegisteringEndpoint.java
index ff355e7..e1f8dd1 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRegisteringEndpoint.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRegisteringEndpoint.java
@@ -43,11 +43,6 @@
         this.mediator = mediator;
     }
 
-    /**
-     * @inheritDoc
-     * @see javax.servlet.http.HttpServlet#
-     * doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
-     */
     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
         this.doExecute(request, response);
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccess.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccess.java
index 65bc032..dd1e58f 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccess.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccess.java
@@ -11,7 +11,7 @@
 package org.eclipse.sensinact.gateway.nthbnd.rest.internal.http;
 
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.eclipse.sensinact.gateway.core.security.Authentication;
 import org.eclipse.sensinact.gateway.core.security.AuthenticationToken;
 import org.eclipse.sensinact.gateway.core.security.InvalidCredentialException;
@@ -54,12 +54,6 @@
         }
     }
 
-    /**
-     * @inheritDoc
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundAccess#
-     * respond(org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundMediator,
-     * org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestBuilder)
-     */
     @Override
     protected boolean respond(NorthboundMediator mediator, NorthboundRequestBuilder builder) throws IOException {
         String httpMethod = super.request.getMethod();
@@ -98,11 +92,10 @@
         String result = null;
         List<String> rawList = super.request.getQueryMap().get("rawDescribe");
 
-        if (rawList != null && (rawList.contains("true") || rawList.contains("True") || rawList.contains("yes") || rawList.contains("Yes")) && DescribeResponse.class.isAssignableFrom(cap.getClass())) {
+        if (rawList != null && (rawList.contains("true") || rawList.contains("True") || rawList.contains("yes") || rawList.contains("Yes")) && DescribeResponse.class.isAssignableFrom(cap.getClass()))
             result = ((DescribeResponse<?>) cap).getJSON(true);
-        } else {
+        else
             result = cap.getJSON();
-        }
         byte[] resultBytes;
         String acceptEncoding = super.request.getHeader("Accept-Encoding");
         if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccessRequest.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccessRequest.java
index 0c82493..82844f9 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccessRequest.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/http/HttpRestAccessRequest.java
@@ -51,17 +51,11 @@
         this.mediator = mediator;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getMediator()
-     */
     @Override
     public NorthboundMediator getMediator() {
         return this.mediator;
     }
     
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getQueryMap()
-     */
     @Override
     public Map<String, List<String>> getQueryMap() {
         if (this.queryMap == null) {
@@ -75,9 +69,6 @@
         return queryMap;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getContent()
-     */
     @Override
     public String getContent() {
         if (this.content == null) {
@@ -104,9 +95,6 @@
         this.authentication = authentication;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getAuthentication()
-     */
     @Override
     public Authentication<?> getAuthentication() {
         if (this.authentication == null) {
@@ -123,25 +111,16 @@
         return this.authentication;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getRequestID()
-     */
     @Override
     public String getRequestIdProperty() {
        return "rid";
     }
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getRequestID()
-	 */
 	@Override
 	public String getRequestId() {
 		return super.getHeader(getRequestIdProperty());
 	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#createRecipient(org.eclipse.sensinact.gateway.core.api.method.Parameter[])
-     */
     @Override
     public NorthboundRecipient createRecipient(List<Parameter> parameters) {
         NorthboundRecipient recipient = null;
@@ -158,9 +137,8 @@
                 break;
             }
         }
-        if (callback != null) {
+        if (callback != null) 
             recipient = new HttpRecipient(mediator, callback);
-        }
         return recipient;
     }
 
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WebSocketConnection.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WebSocketConnection.java
index 5eed350..5f3a768 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WebSocketConnection.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WebSocketConnection.java
@@ -111,6 +111,7 @@
 	            this.mediator.error(e1);
 			}
         } catch (Exception e) {
+        	e.printStackTrace();
             this.mediator.error(e);
             try {
 				this.send(new JSONObject().put("statusCode", 500).put("message", "Exception - Internal server error").toString());
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccess.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccess.java
index 75d350f..51053a1 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccess.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccess.java
@@ -11,7 +11,7 @@
 package org.eclipse.sensinact.gateway.nthbnd.rest.internal.ws;
 
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.eclipse.sensinact.gateway.core.security.InvalidCredentialException;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundAccess;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundMediator;
diff --git a/platform/northbound/rest-access/src/test/resources/sensinact.config b/platform/northbound/rest-access/src/test/resources/sensinact.config
index 7b88e10..e69de29 100644
--- a/platform/northbound/rest-access/src/test/resources/sensinact.config
+++ b/platform/northbound/rest-access/src/test/resources/sensinact.config
@@ -1,3 +0,0 @@
-namespace=SERVER
-broker=tcp://sensinact-cea.ddns.net:5269
-broker.topic.prefix=/
\ No newline at end of file
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AllRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AllRequest.java
index be4e2af..c2ee89a 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AllRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AllRequest.java
@@ -22,27 +22,16 @@
         super(mediator, requestIdentifier, filteringCollection);
     }
 
-    /**
-     * @inheritDoc
-     * @see org.eclipse.sensinact.gateway.common.primitive.Nameable#getName()
-     */
+    @Override
     public String getName() {
         return "all";
     }
 
-    /**
-     * @inheritDoc
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return this.getName();
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
         Argument[] superArguments = super.getExecutionArguments();
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/Argument.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/Argument.java
index 106aeaf..b3bac26 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/Argument.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/Argument.java
@@ -14,15 +14,7 @@
  * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public class Argument {
-    //********************************************************************//
-    //						NESTED DECLARATIONS			  			      //
-    //********************************************************************//
-    //********************************************************************//
-    //						ABSTRACT DECLARATIONS						  //
-    //********************************************************************//
-    //********************************************************************//
-    //						STATIC DECLARATIONS							  //
-    //********************************************************************//
+
     public static Object[] getParameters(Argument[] arguments) {
         int index = 0;
         int length = arguments == null ? 0 : arguments.length;
@@ -42,7 +34,7 @@
         int length = arguments == null ? 0 : arguments.length;
 
         if (length == 0) {
-            return null;
+            return null; 
         }
         Class<?>[] parameterTypes = new Class<?>[length];
         for (; index < length; index++) {
@@ -51,10 +43,6 @@
         return parameterTypes;
     }
 
-    //********************************************************************//
-    //						INSTANCE DECLARATIONS						  //
-    //********************************************************************//
-
     public final Class<?> clazz;
     public final Object value;
 
@@ -62,4 +50,9 @@
         this.clazz = clazz;
         this.value = value;
     }
+    
+    @Override
+    public String toString() {
+    	return String.format("{\"type\":\"%s\",\"value\":\"%s\"}", this.clazz.getName(), String.valueOf(value));
+    }
 }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeGetRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeGetRequest.java
index b32e06b..3dadf8c 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeGetRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeGetRequest.java
@@ -10,24 +10,43 @@
  */
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 public class AttributeGetRequest extends AttributeRequest {
-    /**
+	
+    private Argument[] extraArguments;
+
+	/**
      * @param mediator
      * @param serviceProvider
      * @param service
      * @param resource
      * @param attribute
      */
-    public AttributeGetRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, String attribute) {
+    public AttributeGetRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, 
+    		String attribute, Argument[] extraArguments) {
         super(mediator, requestIdentifier, serviceProvider, service, resource, attribute);
+        this.extraArguments = extraArguments;
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourceRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "get";
     }
+    
+    @Override
+    protected Argument[] getExecutionArguments() {
+    	int offset = this.extraArguments == null?0:this.extraArguments.length;
+    	if(offset == 0)
+    		return super.getExecutionArguments();    	
+        Argument[] superArguments = super.getExecutionArguments();
+        int length = superArguments == null ? 0 : superArguments.length;
+        Argument[] arguments = new Argument[length + offset];
+        if (length > 0) 
+            System.arraycopy(superArguments, 0, arguments, 0, length);
+        System.arraycopy(this.extraArguments, 0, arguments, length, offset);
+        return arguments;
+    }
 }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeRequest.java
index 402cbe4..00a45cd 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeRequest.java
@@ -11,6 +11,7 @@
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
 public abstract class AttributeRequest extends ResourceRequest {
+	
     private String attribute;
 
     /**
@@ -22,34 +23,19 @@
      */
     public AttributeRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, String attribute) {
         super(mediator, requestIdentifier, serviceProvider, service, resource);
-
         this.attribute = attribute;
-//      if (this.attribute == null) {
-//      throw new NullPointerException("Attribute missing");
-//  }
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourcesRequest#getName()
-     */
+    @Override
     public String getName() {
         return attribute;
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourceRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return null;
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
         Argument[] superArguments = super.getExecutionArguments();
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSetRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSetRequest.java
index 7c50386..77a6e52 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSetRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSetRequest.java
@@ -10,7 +10,13 @@
  */
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 public class AttributeSetRequest extends AttributeRequest {
+
+    private Argument[] extraArguments;
     private Object argument;
 
     /**
@@ -21,9 +27,11 @@
      * @param attribute
      * @param argument
      */
-    public AttributeSetRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, String attribute, Object argument) {
+    public AttributeSetRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, 
+    		String attribute, Object argument, Argument[] extraArguments) {
         super(mediator, requestIdentifier, serviceProvider, service, resource, attribute);
         this.argument = argument;
+        this.extraArguments = extraArguments;
     }
 
     /**
@@ -32,13 +40,15 @@
      */
     @Override
     protected Argument[] getExecutionArguments() {
+    	int offset = this.extraArguments == null?0:this.extraArguments.length;
         Argument[] superArguments = super.getExecutionArguments();
         int length = superArguments == null ? 0 : superArguments.length;
-        Argument[] arguments = new Argument[length + 1];
-        if (length > 0) {
+        Argument[] arguments = new Argument[length + offset + 1];
+        if (length > 0) 
             System.arraycopy(superArguments, 0, arguments, 0, length);
-        }
         arguments[length] = new Argument(Object.class, this.argument);
+        if (offset > 0)
+            System.arraycopy(this.extraArguments, 0, arguments, length+1, offset);
         return arguments;
     }
 
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSubscribeRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSubscribeRequest.java
index a0cbd50..9847d8b 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSubscribeRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeSubscribeRequest.java
@@ -10,12 +10,18 @@
  */
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 import org.json.JSONArray;
 
 public class AttributeSubscribeRequest extends AttributeRequest {
+	
     private NorthboundRecipient recipient;
     private JSONArray conditions;
 	private String policy;
+	private Argument[] extraArguments;
 
     /**
      * @param mediator
@@ -27,40 +33,35 @@
      */
     public AttributeSubscribeRequest(NorthboundMediator mediator, String requestIdentifier, 
     		String serviceProvider, String service, String resource, String attribute, 
-    		NorthboundRecipient recipient, JSONArray conditions, String policy) {
+    		NorthboundRecipient recipient, JSONArray conditions, String policy, 
+    		Argument[] extraArguments) {
     	
         super(mediator, requestIdentifier, serviceProvider, service, resource, attribute);
         this.recipient = recipient;
         this.conditions = conditions;
         this.policy = policy;
+        this.extraArguments = extraArguments;
         
-        if (this.recipient == null) {
+        if (this.recipient == null) 
             throw new NullPointerException("Recipient missing");
-        }
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceProvidersRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
+    	int offset = this.extraArguments == null?0:this.extraArguments.length;
         Argument[] superArguments = super.getExecutionArguments();
         int length = superArguments == null ? 0 : superArguments.length;
-        Argument[] arguments = new Argument[length + 3];
-        if (length > 0) {
+        Argument[] arguments = new Argument[length + offset + 3];
+        if (length > 0) 
             System.arraycopy(superArguments, 0, arguments, 0, length);
-        }
         arguments[length] = new Argument(NorthboundRecipient.class, this.recipient);
         arguments[length + 1] = new Argument(JSONArray.class, this.conditions);
         arguments[length + 2] = new Argument(String.class, this.policy);
+        if (offset > 0)
+            System.arraycopy(this.extraArguments, 0, arguments, length+3, offset);
         return arguments;
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourceRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "subscribe";
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeUnsubscribeRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeUnsubscribeRequest.java
index 98a81bb..430f5d6 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeUnsubscribeRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/AttributeUnsubscribeRequest.java
@@ -10,8 +10,14 @@
  */
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 public class AttributeUnsubscribeRequest extends AttributeRequest {
+	
     private String subscriptionId;
+	private Argument[] extraArguments;
 
     /**
      * @param mediator
@@ -20,35 +26,31 @@
      * @param service
      * @param resource
      */
-    public AttributeUnsubscribeRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, String attribute, String subscriptionId) {
+    public AttributeUnsubscribeRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, 
+    		String attribute, String subscriptionId, Argument[] extraArguments) {
         super(mediator, requestIdentifier, serviceProvider, service, resource, attribute);
 
         this.subscriptionId = subscriptionId;
-        if (this.subscriptionId == null) {
+        this.extraArguments = extraArguments;
+        if (this.subscriptionId == null) 
             throw new NullPointerException("Subscription identifier mising");
-        }
+        
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceProvidersRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
+    	int offset = this.extraArguments == null?0:this.extraArguments.length;
         Argument[] superArguments = super.getExecutionArguments();
         int length = superArguments == null ? 0 : superArguments.length;
-        Argument[] arguments = new Argument[length + 1];
-        if (length > 0) {
+        Argument[] arguments = new Argument[length + offset + 1];
+        if (length > 0) 
             System.arraycopy(superArguments, 0, arguments, 0, length);
-        }
         arguments[length] = new Argument(String.class, this.subscriptionId);
+        if (offset > 0)
+            System.arraycopy(this.extraArguments, 0, arguments, length+1, offset);
         return arguments;
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourceRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "unsubscribe";
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/DefaultNorthboundRequestHandler.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/DefaultNorthboundRequestHandler.java
index da42dae..79dab68 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/DefaultNorthboundRequestHandler.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/DefaultNorthboundRequestHandler.java
@@ -25,7 +25,6 @@
 
 import org.eclipse.sensinact.gateway.common.execution.ErrorHandler;
 import org.eclipse.sensinact.gateway.common.primitive.InvalidValueException;
-import org.eclipse.sensinact.gateway.core.DataResource;
 import org.eclipse.sensinact.gateway.core.Filtering;
 import org.eclipse.sensinact.gateway.core.FilteringDefinition;
 import org.eclipse.sensinact.gateway.core.message.SnaFilter;
@@ -41,7 +40,7 @@
 import org.osgi.framework.ServiceReference;
 
 /**
- *
+ * Default {@link NorthboundRequestHandler} implementation
  */
 public class DefaultNorthboundRequestHandler implements NorthboundRequestHandler {
 	
@@ -109,9 +108,6 @@
         return this.buildError;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestHandler#processRequestURI()
-     */
     @Override
     public boolean processRequestURI() {
         String path = null;
@@ -147,9 +143,8 @@
                 this.isElementsList = true;	
                 break;
 	        case "sensinact":
-	        	if(this.method==null) {
-	        		this.method = "ALL";
-	        	}
+	        	if(this.method==null) 
+	        		this.method = "ALL";	        	
 	        	this.multi = true;
                 break;
             default:
@@ -186,11 +181,6 @@
         return true;
     }
 
-    /**
-     * @return
-     * @throws IOException
-     * @throws JSONException
-     */
     private List<Parameter> processParameters() throws IOException, JSONException {
         String content = this.request.getContent();
         JSONArray parameters = null;
@@ -204,7 +194,6 @@
             } catch (JSONException e) {
                 try {
                     parameters = new JSONArray(content);
-
                 } catch (JSONException je) {
                     mediator.debug("No JSON formated content in %s", content);
                 }
@@ -247,23 +236,11 @@
         return parametersList;
     }
 
-    /**
-     * @param builder
-     */
     private void processAttribute(NorthboundRequestBuilder builder) {
-        if (this.attribute != null)// {
+        if (this.attribute != null)
             builder.withAttribute(this.attribute);
-        //} else {
-        //    builder.withAttribute(DataResource.VALUE);
-        //}
     }
 
-    /**
-     * @param builder
-     * @param parameters
-     * @return
-     * @throws IOException
-     */
     private void processFilters(NorthboundRequestBuilder builder, List<Parameter> parameters) throws IOException {
         List<FilteringDefinition> defs = new ArrayList<>();
         String filter = null;
@@ -296,33 +273,27 @@
     				filter = CastUtils.castPrimitive(String.class, parameter.getValue());
     				int i=0;
     				for(;i<defs.size();i++){
-    					if(rank > defs.get(i).rank) {
+    					if(rank > defs.get(i).rank)
     						continue;
-    					}
 						defs.add(i,new FilteringDefinition(name, filter,rank));
 						break;
     				}
-    				if(i == defs.size()) {
+    				if(i == defs.size()) 
     					defs.add(new FilteringDefinition(name, filter,rank));
-    				}
     				it.remove();
     			}
     		} catch (InvalidSyntaxException e) {
     			continue;
     		}
         }
-        if(defs.size()==0) {
+        if(defs.size()==0) 
         	return;
-        }
         builder.withFilter(defs.size());
         final AtomicInteger n = new AtomicInteger(-1);
         defs.stream().forEach(d -> {builder.withFilter(d, n.incrementAndGet());});
         builder.withHiddenFilter(hidden);
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestHandler#handle()
-     */
     public NorthboundRequestBuilder handle() throws IOException {
         List<Parameter> parameters = null;
         try {
@@ -350,9 +321,9 @@
         	).withService(this.service
         	).withResource(this.resource);
 
-        if (!this.multi && !this.method.equals(AccessMethod.ACT) && !this.method.equals(AccessMethod.DESCRIBE)) {
+        if (!this.multi && !this.method.equals(AccessMethod.ACT) && !this.method.equals(AccessMethod.DESCRIBE))
             this.processAttribute(builder);
-        }    
+            
         this.rid = request.getRequestId();
         if(this.rid == null) {
 	        String requestIdName = request.getRequestIdProperty();
@@ -373,42 +344,44 @@
                 builder.isElementsList(isElementsList);
                 break;
             case "ACT":
-                int index = 0;
-                int length = parameters == null ? 0 : parameters.size();
-
-                Object[] arguments = length == 0 ? null : new Object[length];
-                for (; index < length; index++) {
-                    arguments[index] = parameters.get(index).getValue();
-                }
-                builder.withArgument(arguments);
+            case "GET":
+            	int index = 0;
+            	int length = parameters.size();
+                for (; index < length; index++) 
+                    builder.withArgument(new Argument(parameters.get(index).getType(), parameters.get(index).getValue()));
                 break;
             case "UNSUBSCRIBE":
-                if (parameters == null || parameters.size() != 1 || parameters.get(0) == null) {
+                if (parameters == null || parameters.isEmpty()) {
                     this.buildError = new NorthboundResponseBuildError(400, "A Parameter was expected");
                     return null;
                 }
-                if (parameters.get(0).getType() != String.class) {
+                if (parameters.get(0) == null || parameters.get(0).getType() != String.class) {
                     this.buildError = new NorthboundResponseBuildError(400, "Invalid parameter format");
                     return null;
                 }
-                builder.withArgument(parameters.get(0).getValue());
+                builder.withArgument(new Argument(String.class, parameters.get(0).getValue()));
+                index = 1;
+                length = parameters.size();
+                for (; index < length; index++) 
+                    builder.withArgument(new Argument(parameters.get(index).getType(), parameters.get(index).getValue()));
                 break;
             case "SET":
-                if (parameters == null || parameters.size() != 1 || parameters.get(0) == null) {
+                if (parameters == null || parameters.get(0) == null) {
                     this.buildError = new NorthboundResponseBuildError(400, "A Parameter was expected");
                     return null;
                 }
-                builder.withArgument(parameters.get(0).getValue());
+                builder.withArgument(new Argument(Object.class, parameters.get(0).getValue()));
+                index = 1;
+                length = parameters.size();
+                for (; index < length; index++) 
+                    builder.withArgument(new Argument(parameters.get(index).getType(), parameters.get(index).getValue()));  
                 break;
             case "SUBSCRIBE":
                 NorthboundRecipient recipient = this.request.createRecipient(parameters);
                 if (recipient == null) {
                     this.buildError = new NorthboundResponseBuildError(400, "Unable to create the appropriate recipient");
                     return null;
-                }
-                index = 0;
-                length = parameters == null ? 0 : parameters.size();
-
+                }                
                 String sender = null;
                 boolean isPattern = false;
                 boolean isComplement = false;
@@ -416,52 +389,71 @@
                 SnaMessage.Type[] types = null;
                 JSONArray conditions = null;
 
-                for (; index < length; index++) {
-                    Parameter parameter = parameters.get(index);
+                List<Parameter> extraParameters = new ArrayList<>();
+                
+                length = parameters == null ? 0 : parameters.size();                
+                for (; length > 0;) {
+                	boolean found = false;
+                    Parameter parameter = parameters.remove(0);
                     String name = parameter.getName();
                     switch (name) {
-                        case "conditions":
-                            conditions = CastUtils.cast(mediator.getClassLoader(), JSONArray.class, parameter.getValue());
-                            break;
+	                    case "callback":
+	                    	found = true;
+	                        break;
+	                    case "conditions":
+	                        conditions = CastUtils.cast(mediator.getClassLoader(), JSONArray.class, parameter.getValue());
+	                    	found = true;
+	                        break;
                         case "sender":
                             sender = CastUtils.cast(mediator.getClassLoader(), String.class, parameter.getValue());
+	                    	found = true;
                             break;
                         case "pattern":
                             isPattern = CastUtils.cast(mediator.getClassLoader(), boolean.class, parameter.getValue());
+	                    	found = true;
                             break;
                         case "complement":
                             isComplement = CastUtils.cast(mediator.getClassLoader(), boolean.class, parameter.getValue());
+	                    	found = true;
                             break;
                         case "types":
                             types = CastUtils.castArray(mediator.getClassLoader(), SnaMessage.Type[].class, parameter.getValue());
+	                    	found = true;
                         case "policy":
                             policy = CastUtils.cast(mediator.getClassLoader(), String.class, parameter.getValue());
+	                    	found = true;
                             break;
                         default:
-                            break;
+                        	break;
                     }
+                    if(!found)
+                    	extraParameters.add(parameter);
+                    length = parameters.size();
                 }
+
                 if (sender == null) {
                     sender = "(/[^/]+)+";
                     isPattern = true;
                 }
-                if (types == null) {
+                if (types == null) 
                     types = SnaMessage.Type.values();
-                }
-                if (conditions == null) {
+                
+                if (conditions == null) 
                     conditions = new JSONArray();
-                }
-                Object argument = null;
-
+                
+                builder.withArgument(new Argument(NorthboundRecipient.class, recipient));
                 if (this.resource == null) {
                     SnaFilter snaFilter = new SnaFilter(mediator, sender, isPattern, isComplement, conditions);
-                    snaFilter.addHandledType(types);
-                    argument = snaFilter;                    
-                    builder.withArgument(new Object[]{recipient, argument});
+                    snaFilter.addHandledType(types);       
+                    builder.withArgument(new Argument(SnaFilter.class, snaFilter));
                 } else {
-                    argument = conditions;
-                    builder.withArgument(new Object[]{recipient, argument, policy});
-                }
+                    builder.withArgument(new Argument(JSONArray.class, conditions));
+                    builder.withArgument(new Argument(String.class, policy));
+                }                
+                index = 0;
+                length = extraParameters == null ? 0 : extraParameters.size();
+                for (; index < length; index++) 
+                    builder.withArgument(new Argument(extraParameters.get(index).getType(), extraParameters.get(index).getValue()));
                 break;
             default:
                 break;
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundAccess.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundAccess.java
index 6964b2b..b95ecc8 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundAccess.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundAccess.java
@@ -103,9 +103,8 @@
         dnrh.init(request);
         if (dnrh.processRequestURI()) {
             builder = dnrh.handle();
-            if (builder == null) {
-                buildError = dnrh.getBuildError();
-            }
+            if (builder == null) 
+                buildError = dnrh.getBuildError();            
         } else {
             Collection<ServiceReference<NorthboundRequestHandler>> references;
             try {
@@ -126,25 +125,22 @@
                             }
                         } catch (IOException e) {
                             mediator.error(e);
-
                         } finally {
                             mediator.getContext().ungetService(reference);
                         }
                     }
-                    if (builder != null) {
+                    if (builder != null)
                         break;
-                    }
                 }
             } catch (InvalidSyntaxException e) {
                 mediator.error(e);
             }
         }
         if (builder == null) {
-            if (buildError == null) {
+            if (buildError == null) 
                 this.sendError(400, "Invalid request");
-            } else {
+            else
                 this.sendError(buildError.status, buildError.message);
-            }
             return;
         }
         this.respond(mediator, builder);
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundEndpoint.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundEndpoint.java
index c5f8dde..273bc43 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundEndpoint.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundEndpoint.java
@@ -16,12 +16,12 @@
 import org.eclipse.sensinact.gateway.core.message.AbstractMidAgentCallback;
 import org.eclipse.sensinact.gateway.core.message.SnaFilter;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 import org.eclipse.sensinact.gateway.core.security.Authentication;
 import org.eclipse.sensinact.gateway.core.security.InvalidCredentialException;
 import org.eclipse.sensinact.gateway.core.security.SecuredAccessException;
@@ -29,6 +29,9 @@
 import org.json.JSONObject;
 
 import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Optional;
+import java.util.function.Predicate;
 
 /**
  * A NorthboundEndpoint is a connection point to a sensiNact instance
@@ -55,9 +58,8 @@
     public NorthboundEndpoint(NorthboundMediator mediator, Authentication<?> authentication) throws InvalidCredentialException {
         this.mediator = mediator;
         this.session = this.mediator.getSession(authentication);
-        if (this.session == null) {
+        if (this.session == null) 
             throw new NullPointerException("null sensiNact session");
-        }
     }
 
     /**
@@ -84,13 +86,38 @@
      */
     public AccessMethodResponse<?> execute(NorthboundRequest request) {
         AccessMethodResponse<?> result = null;
-
         Argument[] arguments = request.getExecutionArguments();
-        Class<?>[] parameterTypes = Argument.getParameterTypes(arguments);
+        final String meth =  request.getMethod();
+        final Class<?>[] parameterTypes = Argument.getParameterTypes(arguments);
+    	Predicate<Method> predicate = m -> {
+			if(!m.getName().equals(meth))
+				return false;
+			Class<?>[] types = m.getParameterTypes();
+			if(types.length > (parameterTypes.length +1) || types.length < parameterTypes.length)
+				return false;
+			if(types.length == (parameterTypes.length +1) && !m.isVarArgs())
+				return false;
+			for(int i=0;i<parameterTypes.length;i++) {
+				if(!types[i].isAssignableFrom(parameterTypes[i]))
+					return false;
+			}
+			return true;
+	    };
         try {
-            Method method = getClass().getDeclaredMethod(request.getMethod(), parameterTypes);
-            result = (AccessMethodResponse<?>) method.invoke(this, Argument.getParameters(arguments));
+        	Method[] methods = getClass().getDeclaredMethods();
+        	Optional<Method> opt = Arrays.stream(methods).filter(predicate).findFirst();        	
+            Method method = opt.isPresent()?opt.get():null;
+            Object[] args = Argument.getParameters(arguments);
+            
+            if(method.isVarArgs() && method.getParameterTypes().length == parameterTypes.length+1) {
+            	Object[] _args = new Object[parameterTypes.length+1];
+            	System.arraycopy(args, 0, _args, 0, parameterTypes.length);
+            	_args[parameterTypes.length] = (Object[])null;
+            	args = _args;
+            }
+            result = (AccessMethodResponse<?>) method.invoke(this, args);
         } catch (Exception e) {
+        	e.printStackTrace();
             this.mediator.error(e);
         }
         return result;
@@ -104,9 +131,8 @@
      * @throws SecuredAccessException
      */
     public void registerUser(String login, String password, String account, String accountType) throws SecuredAccessException {
-    	if(!(session instanceof AnonymousSession)) {
+    	if(!(session instanceof AnonymousSession)) 
     		throw new SecuredAccessException("Invalid Session");
-    	}
 		((AnonymousSession)session).registerUser(login, password, account, accountType);
     }
 
@@ -115,9 +141,8 @@
      * @throws SecuredAccessException
      */
     public void renewUserPassword(String account) throws SecuredAccessException {    	
-    	if(!(session instanceof AnonymousSession)) {
+    	if(!(session instanceof AnonymousSession))
     		throw new SecuredAccessException("Invalid Session");
-    	}
 		((AnonymousSession)session).renewPassword(account);
     }
     
@@ -343,8 +368,9 @@
      * @param attributeId       the String identifier of the attribute
      * @return
      */
-    public GetResponse get(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, String attributeId) {
-        return session.get(requestIdentifier, serviceProviderId, serviceId, resourceId, attributeId);
+    public GetResponse get(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, 
+    		String attributeId, Object...args) {
+        return session.get(requestIdentifier, serviceProviderId, serviceId, resourceId, attributeId, args);
     }
 
     /**
@@ -359,8 +385,9 @@
      * @param value
      * @return
      */
-    public SetResponse set(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, String attributeId, Object value) {
-        return session.set(requestIdentifier, serviceProviderId, serviceId, resourceId, attributeId, value);
+    public SetResponse set(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, 
+    	String attributeId, Object value, Object...args) {
+        return session.set(requestIdentifier, serviceProviderId, serviceId, resourceId, attributeId, value, args);
     }
 
     /**
@@ -392,8 +419,8 @@
      * @return
      */
     public SubscribeResponse subscribe(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, String attributeId, 
-    		NorthboundRecipient recipient, JSONArray conditions, String policy) {
-        return session.subscribe(requestIdentifier, serviceProviderId, serviceId, resourceId, recipient, conditions, policy);
+    		NorthboundRecipient recipient, JSONArray conditions, String policy, Object...args) {
+        return session.subscribe(requestIdentifier, serviceProviderId, serviceId, resourceId, recipient, conditions, policy, args);
     }
 
     /**
@@ -408,7 +435,8 @@
      * @param subscriptionId
      * @return
      */
-    public UnsubscribeResponse unsubscribe(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, String attributeId, String subscriptionId) {
-        return session.unsubscribe(requestIdentifier, serviceProviderId, serviceId, resourceId, subscriptionId);
+    public UnsubscribeResponse unsubscribe(String requestIdentifier, String serviceProviderId, String serviceId, String resourceId, String attributeId,
+    		String subscriptionId, Object...args) {
+        return session.unsubscribe(requestIdentifier, serviceProviderId, serviceId, resourceId, subscriptionId, args);
     }
 }
\ No newline at end of file
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequest.java
index d41e78a..caef646 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequest.java
@@ -139,19 +139,11 @@
         this.filteringCollection = filteringCollection;
     }
 
-    /**
-     * @inheritedDoc
-     * @see org.eclipse.sensinact.gateway.util.common.primitive.PathElement#getPath()
-     */
     @Override
     public String getPath() {
         return ROOT;
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     protected Argument[] getExecutionArguments() {
         Argument[] arguments = new Argument[1];
         arguments[0] = new Argument(String.class, this.requestIdentifier);
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestBuilder.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestBuilder.java
index ce4577f..58af25f 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestBuilder.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestBuilder.java
@@ -10,6 +10,9 @@
  */
 package org.eclipse.sensinact.gateway.nthbnd.endpoint;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.eclipse.sensinact.gateway.common.execution.ErrorHandler;
 import org.eclipse.sensinact.gateway.core.FilteringCollection;
 import org.eclipse.sensinact.gateway.core.FilteringDefinition;
@@ -43,7 +46,7 @@
     protected String requestIdentifier;
     protected String method;
     protected boolean listElements;
-    private Object argument;
+    private List<Argument> arguments;
     private FilteringDefinition[] filterDefinitions;
     private boolean hiddenFilter;
 
@@ -56,6 +59,7 @@
      */
     public NorthboundRequestBuilder(NorthboundMediator mediator) {
         this.mediator = mediator;
+        this.arguments = new ArrayList<>();
         if (this.mediator == null) {
             throw new NullPointerException("Mediator needed");
         }
@@ -138,15 +142,14 @@
     }
 
     /**
-     * Define the argument that will be used to parameterize
-     * the call to the method the request to be built is
-     * targeting
+     * Define an argument that will be used to parameterize the associated method call
      *
-     * @param argument
+     * @param argument {@link Argument} wrapping the parameter 
+     * 
      * @return this NorthboundRequestBuilder
      */
-    public NorthboundRequestBuilder withArgument(Object argument) {
-        this.argument = argument;
+    public NorthboundRequestBuilder withArgument(Argument argument) {
+        this.arguments.add(argument);
         return this;
     }
 
@@ -205,80 +208,76 @@
      */
     public NorthboundRequest build() {
         NorthboundRequest request = null;
-        if (this.method == null) {
+        if (this.method == null) 
             return request;
-        }
         switch (this.method) {
             case "ALL":
                 FilteringCollection collection = null;
-                if (this.filterDefinitions != null) {
+                if (this.filterDefinitions != null) 
                     collection = new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions);
-                }
                 request = new AllRequest(mediator, getRequestIdentifier(), collection);
                 break;
             case "ACT":
-                if (this.resource != null) {
-                    Object[] arguments = null;
-                    if (this.argument != null) {
-                        if (this.argument.getClass().isArray()) {
-                            arguments = (Object[]) this.argument;
-
-                        } else {
-                            arguments = new Object[]{this.argument};
-                        }
-                    }
-                    request = new ResourceActRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, arguments);
-                }
+                if (this.resource != null) 
+                    request = new ResourceActRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, 
+                       this.arguments.stream().<List<Object>>collect(ArrayList::new,(l,a)->{l.add(a.value);},List::addAll).toArray());
                 break;
             case "DESCRIBE":
-                if (this.resource != null) {
+                if (this.resource != null) 
                     request = new ResourceRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource);
-
-                } else if (service != null) {
-                    if (this.listElements) {
-                        request = new ResourcesRequest(mediator, getRequestIdentifier(), serviceProvider, service, this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));
-
-                    } else {
-                        request = new ServiceRequest(mediator, getRequestIdentifier(), serviceProvider, service, null);
-                    }
+                else if (service != null) {
+                    if (this.listElements) 
+                        request = new ResourcesRequest(mediator, getRequestIdentifier(), serviceProvider, service, 
+                        	this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));
+                    else 
+                        request = new ServiceRequest(mediator, getRequestIdentifier(), serviceProvider, service, null);                    
                 } else if (serviceProvider != null) {
-                    if (this.listElements) {
-                        request = new ServicesRequest(mediator, getRequestIdentifier(), serviceProvider, this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));
-
-                    } else {
+                    if (this.listElements) 
+                        request = new ServicesRequest(mediator, getRequestIdentifier(), serviceProvider, 
+                        	this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));
+                    else 
                         request = new ServiceProviderRequest(mediator, getRequestIdentifier(), serviceProvider, null);
-                    }
-                } else {
-                    request = new ServiceProvidersRequest(mediator, getRequestIdentifier(), this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));
-                }
+                    
+                } else 
+                    request = new ServiceProvidersRequest(mediator, getRequestIdentifier(), 
+                    	this.filterDefinitions == null ? null : new FilteringCollection(mediator, this.hiddenFilter, this.filterDefinitions));                
                 break;
             case "GET":
-                request = new AttributeGetRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, attribute);
+                request = new AttributeGetRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, 
+                	attribute, this.arguments==null || this.arguments.size()==0 ?null:this.arguments.toArray(new Argument[0]));
                 break;
             case "SET":
-                request = new AttributeSetRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, attribute, argument);
+            	List<Argument> extraArguments = this.arguments.size()>1?this.arguments.subList(1, this.arguments.size()-1):null;
+                request = new AttributeSetRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, 
+                	attribute, this.arguments.get(0).value, extraArguments==null|| extraArguments.size()==0?null:extraArguments.toArray(new Argument[0]));
                 break;
             case "SUBSCRIBE":
-                Object[] arguments = this.argument != null ? (this.argument.getClass().isArray() ? (Object[]) this.argument : new Object[]{this.argument}) : null;
-
-                if (arguments == null || arguments.length == 0 || !NorthboundRecipient.class.isAssignableFrom(arguments[0].getClass())) {
+                if (this.arguments == null || this.arguments.size() == 0) 
                     break;
+                NorthboundRecipient northboundRecipient = null;
+                try{
+                	northboundRecipient = (NorthboundRecipient)this.arguments.get(0).value;
+                } catch(ClassCastException e){
+                	break;
                 }
-                if (this.resource != null) {
-                    request = new AttributeSubscribeRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, attribute, (NorthboundRecipient) arguments[0],
-                    	(arguments.length > 1 ? ((JSONArray) arguments[1]) : new JSONArray()),(arguments.length > 2 ? ((String) arguments[2]) : String.valueOf(ErrorHandler.Policy.DEFAULT_POLICY)));
-                } else {
-                    request = new RegisterAgentRequest(mediator, getRequestIdentifier(), serviceProvider, service, (NorthboundRecipient) arguments[0], 
-                    	(SnaFilter) (arguments.length > 1 ? arguments[1] : null),(arguments.length > 2 ? ((String) arguments[2]) : String.valueOf(ErrorHandler.Policy.DEFAULT_POLICY)));
-                }
+                String policy =  this.arguments.size() > 2?((String) this.arguments.get(2).value):String.valueOf(ErrorHandler.Policy.DEFAULT_POLICY);
+            	extraArguments = this.arguments.size() > 3?this.arguments.subList(3, this.arguments.size()-1):null;
+                if (this.resource != null) 
+                    request = new AttributeSubscribeRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, attribute, 
+                    	northboundRecipient, (JSONArray)(this.arguments.size() > 1?this.arguments.get(1).value:new JSONArray()), 
+                    	policy, extraArguments==null|| extraArguments.size()==0?null:extraArguments.toArray(new Argument[0]));
+                else 
+                    request = new RegisterAgentRequest(mediator, getRequestIdentifier(), serviceProvider, service, northboundRecipient, 
+                    	(SnaFilter) (this.arguments.size() > 1 ?this.arguments.get(1).value:null), policy);               
                 break;
             case "UNSUBSCRIBE":
-                String arg = CastUtils.cast(mediator.getClassLoader(), String.class, this.argument);
-                if (this.resource != null) {
-                    request = new AttributeUnsubscribeRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, attribute, arg);
-                } else {
-                    request = new UnregisterAgentRequest(mediator, getRequestIdentifier(), arg);
-                }
+            	extraArguments = this.arguments.size()>1?this.arguments.subList(1, this.arguments.size()-1):null;
+            	String subcriptionId = CastUtils.cast(mediator.getClassLoader(), String.class, this.arguments.get(0).value);
+                if (this.resource != null)
+                    request = new AttributeUnsubscribeRequest(mediator, getRequestIdentifier(), serviceProvider, service, resource, 
+                    	attribute, subcriptionId, extraArguments==null|| extraArguments.size()==0?null:extraArguments.toArray(new Argument[0]));
+                else 
+                    request = new UnregisterAgentRequest(mediator, getRequestIdentifier(), subcriptionId);                
                 break;
             default:
                 break;
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceActRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceActRequest.java
index b951dbf..8d4d7d5 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceActRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceActRequest.java
@@ -22,7 +22,8 @@
      * @param requestIdentifier
      * @param arguments
      */
-    public ResourceActRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource, Object[] arguments) {
+    public ResourceActRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource,
+    		Object[] arguments) {
         super(mediator, requestIdentifier, serviceProvider, service, resource);
         this.arguments = arguments;
     }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceRequest.java
index 6451b6b..2cf1455 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourceRequest.java
@@ -24,41 +24,22 @@
     public ResourceRequest(NorthboundMediator mediator, String requestIdentifier, String serviceProvider, String service, String resource) {
         super(mediator, requestIdentifier, serviceProvider, service, null);
         this.resource = resource;
-//      if (this.resource == null) {
-//      throw new NullPointerException("Resource missing");
-//  }
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourcesRequest#getName()
-     */
     public String getName() {
         return resource;
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourcesRequest#getPath()
-     */
     @Override
     public String getPath() {
         return new StringBuilder().append(super.getPath()).append(UriUtils.PATH_SEPARATOR).append(this.getName()).toString();
     }
 
-    /**
-     * @inheritDoc
-     * @see ResourcesRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "resourceDescription";
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
         Argument[] superArguments = super.getExecutionArguments();
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourcesRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourcesRequest.java
index 14b9d1c..15652ce 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourcesRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ResourcesRequest.java
@@ -25,45 +25,29 @@
         super(mediator, requestIdentifier, serviceProvider, service, filteringCollection);
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceRequest#getName()
-     */
+    @Override
     public String getName() {
         return null;
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceRequest#getPath()
-     */
     @Override
     public String getPath() {
         return new StringBuilder().append(super.getPath()).append(UriUtils.PATH_SEPARATOR).append("resources").toString();
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "resourcesList";
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
         if (this.getClass() == ResourcesRequest.class && super.filteringCollection != null) {
             Argument[] superArguments = super.getExecutionArguments();
             int length = superArguments == null ? 0 : superArguments.length;
             Argument[] arguments = new Argument[length + 1];
-            if (length > 0) {
-                System.arraycopy(superArguments, 0, arguments, 0, length);
-            }
+            if (length > 0) 
+                System.arraycopy(superArguments, 0, arguments, 0, length);            
             arguments[length] = new Argument(FilteringCollection.class, super.filteringCollection);
             return arguments;
         }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProviderRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProviderRequest.java
index d3d618b..c376a4d 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProviderRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProviderRequest.java
@@ -62,9 +62,8 @@
         Argument[] superArguments = super.getExecutionArguments();
         int length = superArguments == null ? 0 : superArguments.length;
         Argument[] arguments = new Argument[length + 1];
-        if (length > 0) {
+        if (length > 0) 
             System.arraycopy(superArguments, 0, arguments, 0, length);
-        }
         arguments[length] = new Argument(String.class, serviceProvider);
         return arguments;
     }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProvidersRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProvidersRequest.java
index 0266087..11115b6 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProvidersRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServiceProvidersRequest.java
@@ -17,49 +17,31 @@
     public ServiceProvidersRequest(NorthboundMediator mediator, String requestIdentifier, FilteringCollection filteringCollection) {
         super(mediator, requestIdentifier, filteringCollection);
     }
-
-    /**
-     * @inheritDoc
-     * @see ServiceProvidersRequest#
-     * getName()
-     */
+    
+    @Override
     public String getName() {
         return null;
     }
 
-    /**
-     * @inheritDoc
-     * @see ServiceProvidersRequest#
-     * getPath()
-     */
     @Override
     public String getPath() {
         return new StringBuilder().append(super.getPath()).append(UriUtils.PATH_SEPARATOR).append("providers").toString();
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getExecutionArguments()
-     */
     @Override
     protected Argument[] getExecutionArguments() {
         Argument[] superArguments = super.getExecutionArguments();
         int length = superArguments == null ? 0 : superArguments.length;
         if (this.getClass() == ServiceProvidersRequest.class && super.filteringCollection != null) {
             Argument[] arguments = new Argument[length + 1];
-            if (length > 0) {
-                System.arraycopy(superArguments, 0, arguments, 0, length);
-            }
+            if (length > 0) 
+                System.arraycopy(superArguments, 0, arguments, 0, length);            
             arguments[length] = new Argument(FilteringCollection.class, super.filteringCollection);
             return arguments;
         }
         return superArguments;
     }
 
-    /**
-     * @inheritDoc
-     * @see NorthboundRequest#getMethod()
-     */
     @Override
     protected String getMethod() {
         return "serviceProvidersList";
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServicesRequest.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServicesRequest.java
index f07de11..13002a5 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServicesRequest.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/ServicesRequest.java
@@ -54,9 +54,8 @@
             Argument[] superArguments = super.getExecutionArguments();
             int length = superArguments == null ? 0 : superArguments.length;
             Argument[] arguments = new Argument[length + 1];
-            if (length > 0) {
+            if (length > 0) 
                 System.arraycopy(superArguments, 0, arguments, 0, length);
-            }
             arguments[length] = new Argument(FilteringCollection.class, super.filteringCollection);
             return arguments;
         }
diff --git a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/Application.java b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/Application.java
index ddd5635..3c19db3 100644
--- a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/Application.java
+++ b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/Application.java
@@ -31,7 +31,7 @@
 import org.eclipse.sensinact.gateway.app.manager.watchdog.AppExceptionWatchDog;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorMessage;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONObject;
 import org.osgi.framework.ServiceRegistration;
diff --git a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/dependency/DependencyManager.java b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/dependency/DependencyManager.java
index ae0e56f..5f65069 100644
--- a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/dependency/DependencyManager.java
+++ b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/application/dependency/DependencyManager.java
@@ -19,7 +19,7 @@
 import org.eclipse.sensinact.gateway.core.message.SnaLifecycleMessageImpl;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/component/data/ResourceData.java b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/component/data/ResourceData.java
index c308e63..dbf59c2 100644
--- a/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/component/data/ResourceData.java
+++ b/platform/sensinact-application/application-manager/src/main/java/org/eclipse/sensinact/gateway/app/manager/component/data/ResourceData.java
@@ -14,10 +14,10 @@
 import org.eclipse.sensinact.gateway.core.DataResource;
 import org.eclipse.sensinact.gateway.core.Metadata;
 import org.eclipse.sensinact.gateway.core.Session;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
 import org.eclipse.sensinact.gateway.util.CastUtils;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONObject;
diff --git a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentFactory.java b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentFactory.java
index e8e6a3b..e67a550 100644
--- a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentFactory.java
+++ b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentFactory.java
@@ -38,7 +38,7 @@
 import org.eclipse.sensinact.gateway.core.ServiceProviderImpl;
 import org.eclipse.sensinact.gateway.core.Session;
 import org.eclipse.sensinact.gateway.core.TypeConfig;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONObject;
 import org.junit.Before;
diff --git a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentInstance.java b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentInstance.java
index 963c1d2..2ce9e87 100644
--- a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentInstance.java
+++ b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestComponentInstance.java
@@ -44,11 +44,11 @@
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.eclipse.sensinact.gateway.core.message.SnaConstants;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONArray;
 import org.json.JSONObject;
diff --git a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestSubscription.java b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestSubscription.java
index 4a2c019..51e764d 100644
--- a/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestSubscription.java
+++ b/platform/sensinact-application/application-manager/src/test/java/org/eclipse/sensinact/gateway/app/manager/test/TestSubscription.java
@@ -44,12 +44,12 @@
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.eclipse.sensinact.gateway.core.message.SnaConstants;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
+import org.eclipse.sensinact.gateway.core.method.DescribeJSONResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONArray;
 import org.json.JSONObject;
diff --git a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/AppActionResponse.java b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/AppActionResponse.java
index 97e40cd..0584561 100644
--- a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/AppActionResponse.java
+++ b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/AppActionResponse.java
@@ -11,7 +11,7 @@
 package org.eclipse.sensinact.gateway.app.basic.test;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
 
 class AppActionResponse extends ActResponse {
     public AppActionResponse(Mediator mediator, String uri, Status status, int code) {
diff --git a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/DisplayActionResource.java b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/DisplayActionResource.java
index 873e938..5a76ebf 100644
--- a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/DisplayActionResource.java
+++ b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/DisplayActionResource.java
@@ -20,11 +20,11 @@
 import org.eclipse.sensinact.gateway.core.ModelElementProxy;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 
 import java.util.Enumeration;
 import java.util.Set;
@@ -45,34 +45,34 @@
     }
 
     @Override
-    public GetResponse get(String s) {
+    public GetResponse get(String s, Object...args) {
         return null;
     }
 
     @Override
-    public SetResponse set(String s, Object o) {
+    public SetResponse set(String s, Object o, Object...args) {
         return null;
     }
 
     @Override
-    public SubscribeResponse subscribe(String s, Recipient recipient) {
+    public SubscribeResponse subscribe(String s, Recipient recipient, Object...args) {
         return null;
     }
 
     @Override
-    public SubscribeResponse subscribe(String s, Recipient recipient, Set<Constraint> set) {
+    public SubscribeResponse subscribe(String s, Recipient recipient, Set<Constraint> set, Object...args) {
         return null;
     }
 
     
 	@Override
 	public SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions,
-			String policy) {
+			String policy, Object...args) {
 		return null;
 	}
 	
     @Override
-    public UnsubscribeResponse unsubscribe(String s, String s1) {
+    public UnsubscribeResponse unsubscribe(String s, String s1, Object...args) {
         return null;
     }
 
diff --git a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/StateActionResource.java b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/StateActionResource.java
index 033f30c..7459610 100644
--- a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/StateActionResource.java
+++ b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/StateActionResource.java
@@ -20,11 +20,11 @@
 import org.eclipse.sensinact.gateway.core.ModelElementProxy;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 
 import java.util.Enumeration;
 import java.util.Set;
@@ -47,33 +47,33 @@
     }
 
     @Override
-    public GetResponse get(String s) {
+    public GetResponse get(String s, Object...args) {
         return null;
     }
 
     @Override
-    public SetResponse set(String s, Object o) {
+    public SetResponse set(String s, Object o, Object...args) {
         return null;
     }
 
     @Override
-    public SubscribeResponse subscribe(String s, Recipient recipient) {
+    public SubscribeResponse subscribe(String s, Recipient recipient, Object...args) {
         return null;
     }
 
     @Override
-    public SubscribeResponse subscribe(String s, Recipient recipient, Set<Constraint> set) {
+    public SubscribeResponse subscribe(String s, Recipient recipient, Set<Constraint> set, Object...args) {
         return null;
     }
     
 	@Override
 	public SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions,
-			String policy) {
+			String policy, Object...args) {
 		return null;
 	}
 
     @Override
-    public UnsubscribeResponse unsubscribe(String s, String s1) {
+    public UnsubscribeResponse unsubscribe(String s, String s1, Object...args) {
         return null;
     }
 
diff --git a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/TestSnaFunction.java b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/TestSnaFunction.java
index f994604..d94448a 100644
--- a/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/TestSnaFunction.java
+++ b/platform/sensinact-application/basic-plugin/src/test/java/org/eclipse/sensinact/gateway/app/basic/test/TestSnaFunction.java
@@ -37,11 +37,11 @@
 import org.eclipse.sensinact.gateway.core.Session;
 import org.eclipse.sensinact.gateway.core.TypeConfig;
 import org.eclipse.sensinact.gateway.core.message.SnaConstants;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 import org.eclipse.sensinact.gateway.core.security.AccessLevelOption;
 import org.eclipse.sensinact.gateway.core.security.AccessProfileOption;
 import org.eclipse.sensinact.gateway.core.security.AccessTreeImpl;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AbstractSession.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AbstractSession.java
index fbc6528..46e61d1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AbstractSession.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AbstractSession.java
@@ -24,15 +24,15 @@
 import org.eclipse.sensinact.gateway.core.message.SnaFilter;
 import org.eclipse.sensinact.gateway.core.method.AccessMethod;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponseBuilder;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponseBuilder;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 import org.json.JSONArray;
 import org.json.JSONObject;
 
@@ -42,21 +42,6 @@
  * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
  */
 public abstract class AbstractSession implements Session {
-	// ********************************************************************//
-	// NESTED DECLARATIONS //
-	// ********************************************************************//
-
-	// ********************************************************************//
-	// ABSTRACT DECLARATIONS //
-	// ********************************************************************//
-
-	// ********************************************************************//
-	// STATIC DECLARATIONS //
-	// ********************************************************************//
-
-	// ********************************************************************//
-	// INSTANCE DECLARATIONS //
-	// ********************************************************************//
 
 	protected final String identifier;
 
@@ -85,40 +70,45 @@
 		return response;
 	}
 
+	@SuppressWarnings("unchecked")
 	protected <A extends AccessMethodResponse<JSONObject>> A responseFromJSONObject(Mediator mediator, String uri,
 			String method, JSONObject object) throws Exception {
-		A response = null;
-		if (object == null) {
-			response = AccessMethodResponse.<JSONObject, A>error(mediator, uri, AccessMethod.Type.valueOf(method),
-					SnaErrorfulMessage.NOT_FOUND_ERROR_CODE, "Not found", null);
+		if (object == null) 
+			return AccessMethodResponse.<JSONObject, A>error(mediator, uri, AccessMethod.Type.valueOf(method),
+				SnaErrorfulMessage.NOT_FOUND_ERROR_CODE, "Not found", null);
+		else {			
+			switch (method) {
+			case "ACT":
+				return (A) this.<ActResponse>responseFromJSONObject(ActResponse.class, mediator, uri, method, object);
+			case "GET":
+				return (A) this.<GetResponse>responseFromJSONObject(GetResponse.class, mediator, uri, method, object);
+			case "SET":
+				return (A) this.<SetResponse>responseFromJSONObject(SetResponse.class, mediator, uri, method, object);
+			case "SUBSCRIBE":
+				return (A) this.<SubscribeResponse>responseFromJSONObject(SubscribeResponse.class, mediator, uri, 
+						method, object);
+			case "UNSUBSCRIBE":
+				return (A) this.<UnsubscribeResponse>responseFromJSONObject(UnsubscribeResponse.class, mediator, uri, 
+						method, object);
+			default:
+			    break;
+			}
+		}
+		return (A) null;
+	}
 
-		} else {
+	protected <A extends AccessMethodResponse<JSONObject>> A responseFromJSONObject(Class<A> responseType, Mediator mediator, 
+		String uri, String method, JSONObject object) throws Exception {
+		A response = null;
+		if (object == null) 
+			response = AccessMethodResponse.<JSONObject, A>error(mediator, uri, AccessMethod.Type.valueOf(method),
+				SnaErrorfulMessage.NOT_FOUND_ERROR_CODE, "Not found", null);
+		else {
 			object.remove("type");
 			object.remove("uri");
 			Integer statusCode = (Integer) object.remove("statusCode");
-
-			Class<A> clazz = null;
-			switch (method) {
-			case "ACT":
-				clazz = (Class<A>) ActResponse.class;
-				break;
-			case "GET":
-				clazz = (Class<A>) GetResponse.class;
-				break;
-			case "SET":
-				clazz = (Class<A>) SetResponse.class;
-				break;
-			case "SUBSCRIBE":
-				clazz = (Class<A>) SubscribeResponse.class;
-				break;
-			case "UNSUBSCRIBE":
-				clazz = (Class<A>) UnsubscribeResponse.class;
-				break;
-			default:
-				break;
-			}
-			if (clazz != null) {
-				response = clazz.getConstructor(new Class<?>[] { Mediator.class, String.class, 
+			if (responseType != null) {
+				response = responseType.getConstructor(new Class<?>[] { Mediator.class, String.class, 
 					Status.class, int.class }).newInstance(mediator, uri, statusCode.intValue() == 200 
 					? Status.SUCCESS : Status.ERROR, statusCode.intValue());
 
@@ -137,8 +127,8 @@
 		return response;
 	}
 
-	protected DescribeResponse<JSONObject> describeFromJSONObject(Mediator mediator,
-			DescribeResponseBuilder<JSONObject> builder, DescribeType describeType, JSONObject object) {
+	protected DescribeResponse<JSONObject> describeFromJSONObject(Mediator mediator, DescribeResponseBuilder<JSONObject> builder, 
+		DescribeType describeType, JSONObject object) {
 		DescribeResponse<JSONObject> response = null;
 		if (object == null) {
 			String element = describeType.name().toLowerCase();
@@ -190,22 +180,11 @@
 		return this.identifier;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.Session#getServiceProviders()
-	 */
 	@Override
 	public Set<ServiceProvider> serviceProviders() {
 		return this.serviceProviders(null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# getService(java.lang.String,
-	 *      java.lang.String)
-	 */
 	@Override
 	public Service service(String serviceProviderName, String serviceName) {
 		Service service = null;
@@ -216,12 +195,6 @@
 		return service;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getResource(java.lang.String, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public Resource resource(String serviceProviderName, String serviceName, String resourceName) {
 		Resource resource = null;
@@ -232,265 +205,123 @@
 		return resource;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 * registerSessionIntent(org.eclipse.sensinact.gateway.common.execution.Executable, java.lang.String[])
-	 */
 	@Override
 	public SubscribeResponse registerSessionIntent(Executable<Boolean,Void> callback, String... resourcePath) {
 		return registerSessionIntent(null, callback, resourcePath);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#unregisterSessionIntent(java.lang.String)
-	 */
 	@Override
 	public UnsubscribeResponse unregisterSessionIntent(String intentId) {
 		return unregisterSessionIntent(null, intentId);
 	}
 	
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#registerSessionAgent(org.eclipse.sensinact.gateway.core.message.MidAgentCallback, 
-	 * org.eclipse.sensinact.gateway.core.message.SnaFilter)
-	 */
 	@Override
 	public SubscribeResponse registerSessionAgent(MidAgentCallback callback, SnaFilter filter) {
 		return registerSessionAgent(null, callback, filter);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      unregisterSessionAgent(java.lang.String)
-	 */
 	@Override
 	public UnsubscribeResponse unregisterSessionAgent(String agentId) {
 		return unregisterSessionAgent(null, agentId);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# get(java.lang.String,
-	 *      java.lang.String, java.lang.String, java.lang.String)
-	 */
 	@Override
-	public GetResponse get(String serviceProviderId, String serviceId, String resourceId, String attributeId) {
-		return get(null, serviceProviderId, serviceId, resourceId, attributeId);
+	public GetResponse get(String serviceProviderId, String serviceId, String resourceId, String attributeId, Object...args) {
+		return get(null, serviceProviderId, serviceId, resourceId, attributeId, args);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# set(java.lang.String,
-	 *      java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
-	 */
 	@Override
 	public SetResponse set(final String serviceProviderId, final String serviceId, final String resourceId,
-			final String attributeId, final Object parameter) {
-		return set(null, serviceProviderId, serviceId, resourceId, attributeId, parameter);
+			final String attributeId, final Object parameter, Object... args) {
+		return set(null, serviceProviderId, serviceId, resourceId, attributeId, parameter, args);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# act(java.lang.String,
-	 *      java.lang.String, java.lang.String, java.lang.Object[])
-	 */
-	public ActResponse act(String serviceProviderId, String serviceId, String resourceId, 
-			Object[] parameters) {
+	@Override
+	public ActResponse act(String serviceProviderId, String serviceId, String resourceId, Object[] parameters) {
 		return act(null, serviceProviderId, serviceId, resourceId, parameters);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.Session# subscribe(java.lang.String,
-	 *      java.lang.String, java.lang.String,org.eclipse.sensinact.gateway.core.message.Recipient,
-	 *      org.json.JSONArray)
-	 */
 	@Override
 	public SubscribeResponse subscribe(String serviceProviderId, String serviceId, 
-		    String resourceId, Recipient recipient, JSONArray conditions) {
-		return subscribe(null, serviceProviderId, serviceId, resourceId, recipient, conditions);
+		    String resourceId, Recipient recipient, JSONArray conditions, Object...args) {
+		return subscribe(null, serviceProviderId, serviceId, resourceId, recipient, conditions, args);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.Session#subscribe(java.lang.String, java.lang.String, 
-	 * java.lang.String, org.eclipse.sensinact.gateway.core.message.Recipient, org.json.JSONArray, 
-	 * java.lang.String)
-	 */
 	@Override
 	public SubscribeResponse subscribe(String serviceProviderId, String serviceId, 
-		    String resourceId, Recipient recipient, JSONArray conditions, String policy) {
-		return subscribe(null, serviceProviderId, serviceId, resourceId, recipient, conditions, policy);
+		    String resourceId, Recipient recipient, JSONArray conditions, String policy, Object...args) {
+		return subscribe(null, serviceProviderId, serviceId, resourceId, recipient, conditions, policy, args);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.Session#subscribe(java.lang.String, java.lang.String, 
-	 * java.lang.String, java.lang.String, org.eclipse.sensinact.gateway.core.message.Recipient, 
-	 * org.json.JSONArray)
-	 */
 	@Override
 	public SubscribeResponse subscribe(String requestId, String serviceProviderId, String serviceId, 
-		    String resourceId, Recipient recipient, JSONArray conditions) {
+		    String resourceId, Recipient recipient, JSONArray conditions, Object...args) {
 		return subscribe(requestId, serviceProviderId, serviceId, resourceId, recipient, 
-				conditions, String.valueOf(ErrorHandler.Policy.DEFAULT_POLICY));
+				conditions, String.valueOf(ErrorHandler.Policy.DEFAULT_POLICY), args);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      unsubscribe(java.lang.String, java.lang.String, java.lang.String,
-	 *      java.lang.String)
-	 */
 	@Override
 	public UnsubscribeResponse unsubscribe(String serviceProviderId, String serviceId, 
-			final String resourceId, String subscriptionId) {
-		return unsubscribe(null, serviceProviderId, serviceId, resourceId, subscriptionId);
+			final String resourceId, String subscriptionId, Object...args) {
+		return unsubscribe(null, serviceProviderId, serviceId, resourceId, subscriptionId, args);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# getAll(java.lang.String,
-	 *      org.eclipse.sensinact.gateway.core.FilteringDefinition)
-	 */
 	@Override
 	public DescribeResponse<String> getAll() {
 		return getAll(null, null, null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# getAll(java.lang.String,
-	 *      org.eclipse.sensinact.gateway.core.FilteringDefinition)
-	 */
 	@Override
 	public DescribeResponse<String> getAll(FilteringCollection filterCollection) {
 		return getAll(null, null, filterCollection);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# getAll(java.lang.String,
-	 *      org.eclipse.sensinact.gateway.core.FilteringDefinition)
-	 */
 	@Override
 	public DescribeResponse<String> getAll(String filter, FilteringCollection filterCollection) {
 		return getAll(null, filter, filterCollection);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#getProviders()
-	 */
 	@Override
 	public DescribeResponse<String> getProviders() {
 		return getProviders(null, null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getProviders(org.eclipse.sensinact.gateway.core.FilteringCollection)
-	 */
 	@Override
 	public DescribeResponse<String> getProviders(FilteringCollection filterCollection) {
 		return getProviders(null, filterCollection);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getProvider(java.lang.String)
-	 */
 	@Override
 	public DescribeResponse<JSONObject> getProvider(String serviceProviderId) {
 		return getProvider(null, serviceProviderId);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getServices(java.lang.String)
-	 */
 	@Override
 	public DescribeResponse<String> getServices(String serviceProviderId) {
 		return getServices(null, serviceProviderId, null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getServices(java.lang.String,
-	 *      org.eclipse.sensinact.gateway.core.FilteringCollection)
-	 */
 	@Override
 	public DescribeResponse<String> getServices(final String serviceProviderId, FilteringCollection filterCollection) {
 		return getServices(null, serviceProviderId, filterCollection);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session# getService(java.lang.String,
-	 *      java.lang.String)
-	 */
 	@Override
 	public DescribeResponse<JSONObject> getService(final String serviceProviderId, final String serviceId) {
 		return getService(null, serviceProviderId, serviceId);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getResources(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public DescribeResponse<String> getResources(final String serviceProviderId, final String serviceId) {
 		return getResources(null, serviceProviderId, serviceId, null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getResources(java.lang.String, java.lang.String,
-	 *      org.eclipse.sensinact.gateway.core.FilteringDefinition)
-	 */
 	@Override
 	public DescribeResponse<String> getResources(final String serviceProviderId, final String serviceId,
 			FilteringCollection filterCollection) {
 		return getResources(null, serviceProviderId, serviceId, filterCollection);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.Session#
-	 *      getResource(java.lang.String, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public DescribeResponse<JSONObject> getResource(final String serviceProviderId, final String serviceId,
 			final String resourceId) {
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ActionResource.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ActionResource.java
index e465489..888d9b1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ActionResource.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ActionResource.java
@@ -11,7 +11,7 @@
 
 package org.eclipse.sensinact.gateway.core;
 
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
 
 /**
  * Extended {@link Resource} for Action
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Attribute.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Attribute.java
index c6fcbb4..3a5c74f 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Attribute.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Attribute.java
@@ -181,11 +181,11 @@
 	 */
 	public MetadataDescription setMetadataValue(String name, Object value) throws InvalidValueException {
 		Metadata metadata = null;
-		if (name == null || (metadata = this.get(name)) == null) {
+		if (name == null || (metadata = this.get(name)) == null) 
 			return null;
-		}
 		metadata.setValue(value);
-		return (MetadataDescription) metadata.getDescription();
+		MetadataDescription description = (MetadataDescription) metadata.getDescription();
+		return description;
 	}
 
 	/**
@@ -201,16 +201,15 @@
 		synchronized (this.metadata) {
 			if (meta == null) {
 				this.metadata.add(metadata);
-				super.weakDescription = null;
-
+				super.weakDescription = null;				
+				if(!metadata.getName().equals(Metadata.HIDDEN) && metadata.getModifiable().equals(Modifiable.FIXED))
+					this.resource.updated(this, metadata.getDescription());
 			} else {
 				try {
 					this.setMetadataValue(metadata.getName(), metadata.getValue());
-
 				} catch (InvalidValueException e) {
-					if (super.mediator.isErrorLoggable()) {
-						super.mediator.error(e, e.getMessage());
-					}
+					if (super.mediator.isErrorLoggable()) 
+						super.mediator.error(e);
 				}
 				return;
 			}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AttributeBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AttributeBuilder.java
index 779f3c1..16505b7 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AttributeBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/AttributeBuilder.java
@@ -214,7 +214,7 @@
 	 * @throws InvalidAttributeException
 	 */
 	private AttributeBuilder(String name, Requirement[] requirementsArray, Deque<Requirement> requirementsList,
-			boolean hidden, Modifiable modifiable, Class<?> type, Object value) throws InvalidAttributeException {
+		boolean hidden, Modifiable modifiable, Class<?> type, Object value) throws InvalidAttributeException {
 		
 		if (name == null) 
 			throw new InvalidAttributeException("attribute name required");
@@ -241,11 +241,6 @@
 		this.metadataBuilders.addAll(metadataBuilder);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see java.lang.Object#clone()
-	 */
 	public Object clone() {
 		AttributeBuilder clone = new AttributeBuilder(this.name, this.requirementsArray, this.requirementsList,
 				this.hidden, this.modifiable, this.type, this.value);
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DataResource.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DataResource.java
index 3031f9e..cbf932c 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DataResource.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DataResource.java
@@ -14,15 +14,15 @@
 
 import org.eclipse.sensinact.gateway.common.constraint.Constraint;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 
 /**
  * Extended {@link Resource} holding a 'value' attribute
  * 
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public interface DataResource extends Resource {
 	// Value attribute name
@@ -47,9 +47,11 @@
 	 * {@link GetResponse}. The read attribute is the one defined as being
 	 * the default attribute of this DataResource (the "value" attribute by default).
 	 * 
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
 	 * @return the {@link GetResponse} of the executed get access method
 	 */
-	GetResponse get();
+	GetResponse get(Object...args);
 
 	/**
 	 * Executes an set access method on this DataResource and returns its 
@@ -57,10 +59,11 @@
 	 * the default attribute of this DataResource (the "value" attribute by default).
 	 * 
 	 * @param value the Object to set as value of the default attribute
+	 * @param args optional variable Objects array parameterizing the call
 	 * 
 	 * @return the {@link SetResponse} of the executed set access method
 	 */
-	SetResponse set(Object value);
+	SetResponse set(Object value, Object...args);
 
 	/**
 	 * Executes an subscribe access method on this DataResource and returns its 
@@ -73,10 +76,11 @@
 	 *  subscription closing and to the thrown exception logging
 	 * 
 	 * @param recipient the {@link Recipient} to which the messages will be sent
+	 * @param args optional variable Objects array parameterizing the call
 	 * 
 	 * @return the {@link SubscribeResponse} of the executed subscribe access method
 	 */
-	SubscribeResponse subscribe(Recipient recipient);
+	SubscribeResponse subscribe(Recipient recipient, Object...args);
 
 	/**
 	 * Executes an subscribe access method on this DataResource and returns its 
@@ -89,10 +93,11 @@
 	 * @param recipient the {@link Recipient} to which the messages will be sent
 	 * @param conditions the {@link Set} of {@link Constraint}s that will help at
 	 * discriminating the messages to be transmitted to the recipient
+	 * @param args optional variable Objects array parameterizing the call
 	 * 
 	 * @return the {@link SubscribeResponse} of the executed subscribe access method
 	 */
-	SubscribeResponse subscribe(Recipient recipient, Set<Constraint> conditions);
+	SubscribeResponse subscribe(Recipient recipient, Set<Constraint> conditions, Object...args);
 
 	/**
 	 * Executes an subscribe access method on this DataResource and returns its 
@@ -105,10 +110,11 @@
 	 * @param policy the String representation of the policy that will apply on the 
 	 * {@link org.eclipse.sensinact.gateway.common.execution.ErrorHandler} of the 
 	 * subscription to be created.
+	 * @param args optional variable Objects array parameterizing the call
 	 * 
 	 * @return the {@link SubscribeResponse} of the executed subscribe access method
 	 */
-	SubscribeResponse subscribe(Recipient recipient, Set<Constraint> conditions, String policy);
+	SubscribeResponse subscribe(Recipient recipient, Set<Constraint> conditions, String policy, Object...args);
 
 	/**
 	 * Executes an unsubscribe access method on this DataResource and returns its 
@@ -116,8 +122,9 @@
 	 * is passed as parameter.
 	 * 
 	 * @param subscriptionId the String identifier of the subscription to close
+	 * @param args optional variable Objects array parameterizing the call
 	 * 
 	 * @return the {@link UnsubscribeResponse} of the executed unsubscribe access method
 	 */
-	UnsubscribeResponse unsubscribe(String subscriptionId);
+	UnsubscribeResponse unsubscribe(String subscriptionId, Object...args);
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DefaultResourceConfigBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DefaultResourceConfigBuilder.java
index 11b3390..1d8beef 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DefaultResourceConfigBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/DefaultResourceConfigBuilder.java
@@ -17,7 +17,7 @@
  * The default {@link ResourceConfigBuilder} is in charge of create the
  * previously non-described {@link ResourceConfig}s
  * 
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public class DefaultResourceConfigBuilder implements ResourceConfigBuilder {
 	private Class<? extends Resource> defaultResourceType;
@@ -25,11 +25,6 @@
 	private Modifiable defaultModifiable;
 	private Resource.UpdatePolicy defaultUpdatePolicy;
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.ResourceConfigBuilder#getResourceConfig(org.eclipse.sensinact.gateway.core.ResourceDescriptor)
-	 */
 	@Override
 	public ResourceConfig getResourceConfig(ResourceDescriptor resourceDescriptor) {
 		Class<? extends Resource> resourceType = (resourceDescriptor.resourceType() == null)
@@ -90,11 +85,7 @@
 		return defaultResourceType;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ResourceConfigBuilder# setDefaultResourceType(java.lang.Class)
-	 */
+	@Override
 	public void setDefaultResourceType(Class<? extends Resource> defaultResourceType) {
 		this.defaultResourceType = defaultResourceType;
 	}
@@ -111,11 +102,7 @@
 		return defaultDataType;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ResourceConfigBuilder# setDefaultDataType(java.lang.Class)
-	 */
+	@Override
 	public void setDefaultDataType(Class<?> defaultDataType) {
 		this.defaultDataType = defaultDataType;
 	}
@@ -133,11 +120,7 @@
 		return defaultModifiable;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ResourceConfigBuilder#setDefaultModifiable(Modifiable)
-	 */
+	@Override
 	public void setDefaultModifiable(Modifiable defaultModifiable) {
 		this.defaultModifiable = defaultModifiable;
 	}
@@ -149,17 +132,12 @@
 	 * @return this ResourceConfigBuilder's default {@link Resource.UpdatePolicy}
 	 */
 	private Resource.UpdatePolicy getDefaultUpdatePolicy() {
-		if (this.defaultUpdatePolicy == null) {
+		if (this.defaultUpdatePolicy == null)
 			return UPDATE_POLICY;
-		}
 		return defaultUpdatePolicy;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ResourceConfigBuilder# setDefaultUpdatePolicy(Resource.UpdatePolicy)
-	 */
+	@Override
 	public void setDefaultUpdatePolicy(Resource.UpdatePolicy defaultUpdatePolicy) {
 		this.defaultUpdatePolicy = defaultUpdatePolicy;
 	}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ElementsProxyWrapper.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ElementsProxyWrapper.java
index e80886a..3c2d933 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ElementsProxyWrapper.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ElementsProxyWrapper.java
@@ -10,20 +10,20 @@
  */
 package org.eclipse.sensinact.gateway.core;
 
+import java.lang.reflect.Array;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 
 import org.eclipse.sensinact.gateway.common.primitive.ElementsProxy;
 import org.eclipse.sensinact.gateway.common.primitive.Nameable;
-import org.eclipse.sensinact.gateway.common.primitive.PathElement;
 
 /**
- * Abstract extended {@link ElementsProxyWrapper} implementation
+ * Abstract extended {@link ElementsProxy} implementation
  *
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public abstract class ElementsProxyWrapper<M extends ModelElementProxy, P extends Nameable>
-		implements ElementsProxy<P>, InvocationHandler, Nameable, PathElement {
+		implements ElementsProxy<P>, InvocationHandler {
 	/**
 	 * the proxied class
 	 */
@@ -32,89 +32,70 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param proxy
-	 *            the extended {@link ModelElementProxy} to be wrapped by the
-	 *            ProxyWrapper to be instantiated
+	 * @param proxy the extended {@link ModelElementProxy} to be wrapped by the
+	 * ElementsProxyWrapper to be instantiated
 	 */
 	protected ElementsProxyWrapper(M proxy) {
 		this.proxy = proxy;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see java.lang.reflect.InvocationHandler# invoke(java.lang.Object,
-	 *      java.lang.reflect.Method, java.lang.Object[])
-	 */
 	@Override
 	public Object invoke(Object proxy, Method method, Object[] parameters) throws Throwable {
 		Object result = null;
 		if (this.proxy.getProxied().isAssignableFrom(method.getDeclaringClass())) {
 			Object[] calledParameters = null;
-
-			if (method.isVarArgs() && parameters != null && parameters.length == 1
-					&& parameters[0].getClass().isArray()) {
-				calledParameters = (Object[]) parameters[0];
-
-			} else {
-				calledParameters = parameters;
-			}
+			if(method.isVarArgs()) {
+				if(parameters[parameters.length-1]==null || Array.getLength(parameters[parameters.length-1]) == 0
+					|| (Array.getLength(parameters[parameters.length-1]) == 1 && Array.get(parameters[parameters.length-1], 0)==null)) {
+					int length = method.getParameterCount() -1 ;
+					calledParameters = new Object[length];
+					if(length > 0)
+						System.arraycopy(parameters, 0, calledParameters, 0, length);
+				} else if(parameters.length == 1) 
+					calledParameters = (Object[]) parameters[0];
+				else {
+					int length = Array.getLength(parameters[parameters.length-1]);
+					length+=(parameters.length-1);
+					calledParameters = new Object[length];
+					System.arraycopy(parameters, 0, calledParameters, 0, parameters.length-1);
+					System.arraycopy(parameters[parameters.length-1],0,calledParameters, parameters.length-1,Array.getLength(parameters[parameters.length-1]));
+				}
+			} else 
+				calledParameters = parameters;			
 			result = this.proxy.invoke(method.getName().toUpperCase(), calledParameters);
-		} else {
+		} else 
 			result = method.invoke(this, parameters);
-		}
-		if (result == this.proxy || result == this) {
+		
+		if (result == this.proxy || result == this) 
 			return proxy;
-		}
+		
 		return result;
 	}
 
 	/**
-	 * Returns the {@link ModelElementProxy} wrapped by this ProxyWrapper
+	 * Returns the {@link ModelElementProxy} wrapped by this ElementsProxyWrapper
 	 * 
-	 * @return this ProxyWrapper's {@link ModelElementProxy}
+	 * @return this ElementsProxyWrapper's {@link ModelElementProxy}
 	 */
 	public M getProxy() {
 		return this.proxy;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxyWrapper#
-	 *      getName()
-	 */
+	@Override
 	public String getName() {
 		return this.proxy.getName();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxyWrapper#
-	 *      getPath()
-	 */
+	@Override
 	public String getPath() {
 		return this.proxy.getPath();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxy#
-	 *      addElement(org.eclipse.sensinact.gateway.common.primitive.Nameable)
-	 */
 	@Override
 	public boolean addElement(P element) {
 		return false;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxy#
-	 *      removeElement(java.lang.String)
-	 */
 	@Override
 	public P removeElement(String element) {
 		return null;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Metadata.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Metadata.java
index ce3ed85..4e6c3e1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Metadata.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Metadata.java
@@ -74,38 +74,21 @@
 		super(mediator, metadata);
 		try {
 			this.modifiable = Modifiable.valueOf(metadata.optString(Metadata.MODIFIABLE));
-
 		} catch (Exception e) {
 			this.modifiable = Modifiable.FIXED;
 		}
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see Primitive#isModifiable()
-	 */
 	@Override
 	public Modifiable getModifiable() {
 		return this.modifiable;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Primitive#getDefaultDescription()
-	 */
 	@Override
 	protected MetadataDescription createDescription() {
 		return new MetadataDescription(this);
 	}
 
-	/**
-	 * Validates the type of this Metadata
-	 * 
-	 * @param type
-	 *            the type to validate
-	 */
 	@Override
 	protected void checkType(Class<?> type) throws InvalidValueTypeException {
 		if ((!type.isArray() || !Constraint.class.isAssignableFrom(type.getComponentType()))) {
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/MetadataDescription.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/MetadataDescription.java
index 626f6e6..823c301 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/MetadataDescription.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/MetadataDescription.java
@@ -26,25 +26,18 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param metadata
-	 *            the {@link Metadata} for which to instantiate the
-	 *            MetadataDescription
+	 * @param metadata the {@link Metadata} for which to instantiate the
+	 * MetadataDescription
 	 */
 	public MetadataDescription(Metadata metadata) {
 		super(metadata);
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see Description #getJSONDescription()
-	 */
 	@Override
 	public String getJSONDescription() {
 		JSONObject description = this.getJSONObjectDescription();
-		if (description == null) {
-			return EMPTY;
-		}
+		if (description == null) 
+			return EMPTY;		
 		return description.toString();
 	}
 
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElement.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElement.java
index 7ac40e3..7e9054a 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElement.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElement.java
@@ -43,10 +43,10 @@
  * Abstract sensiNact resource model element (service provider, service &
  * resource) implementation
  * 
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public abstract class ModelElement<I extends ModelInstance<?>, M extends ModelElementProxy, P extends ProcessableData, E extends Nameable, R extends Nameable>
-		extends Elements<E> implements SensiNactResourceModelElement<M> {
+	extends Elements<E> implements SensiNactResourceModelElement<M> {
 	abstract class ModelElementProxyWrapper extends ElementsProxyWrapper<M, R> {
 		private final ImmutableAccessTree tree;
 
@@ -58,11 +58,6 @@
 			this.tree = tree;
 		}
 
-		/**
-		 * @inheritDoc
-		 * 
-		 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxy#element(java.lang.String)
-		 */
 		@Override
 		public R element(String name) {
 			E e = ModelElement.this.element(name);
@@ -80,11 +75,6 @@
 			return null;
 		}
 
-		/**
-		 * @inheritDoc
-		 * 
-		 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxy#elements()
-		 */
 		@Override
 		public Enumeration<R> elements() {
 			final Object[] es;
@@ -126,9 +116,6 @@
 			};
 		}
 
-		/**
-		 * @return
-		 */
 		protected List<R> list() {
 			List<R> list = new ArrayList<R>();
 			Enumeration<R> elements = elements();
@@ -263,13 +250,11 @@
 	 * @throws ModelElementProxyBuildException
 	 */
 	public <S extends ElementsProxy<R>> S getProxy(SessionKey key) throws ModelElementProxyBuildException {
-		if (!this.started.get()) {
+		if (!this.started.get()) 
 			throw new ModelElementProxyBuildException("this model element must be started first");
-		}
 		AccessTree<? extends AccessNode> accessTree = key.getAccessTree();
-		if (accessTree == null || accessTree.getRoot() == null) {
+		if (accessTree == null || accessTree.getRoot() == null) 
 			throw new ModelElementProxyBuildException("A valid access tree was expected");
-		}
 		return this.getProxy(accessTree);
 	}
 
@@ -294,12 +279,12 @@
 
 		// AccessLevelOption will be the same for all methods, just check
 		// what is the one associated with the DESCRIBE one
-		AccessLevelOption accessLevelOption = node
-				.getAccessLevelOption(AccessMethod.Type.valueOf(AccessMethod.DESCRIBE));
+		AccessLevelOption accessLevelOption = node.getAccessLevelOption(
+				AccessMethod.Type.valueOf(AccessMethod.DESCRIBE));
 
-		if (accessLevelOption == null) {
+		if (accessLevelOption == null) 
 			throw new ModelElementProxyBuildException("Access level option expected");
-		}
+		
 		Class<S> proxied = (Class<S>) this.getProxyType();
 		M proxy = this.proxies.get(accessLevelOption);
 		if (proxy == null) {
@@ -358,11 +343,6 @@
 		return null;
 	}
 
-	/**
-	 * @InheritedDoc
-	 *
-	 * @see Elements# addElement(Nameable)
-	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public boolean addElement(final E element) {
@@ -375,11 +355,6 @@
 		return true;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Elements# removeElement(java.lang.String)
-	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public E removeElement(String name) {
@@ -394,10 +369,7 @@
 	}
 
 	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.ModelElementOld#
-	 *      registered(org.eclipse.sensinact.gateway.core.model.message.SnaMessageHandler)
+	 * Starts this ModelElement
 	 */
 	protected void start() {
 		try {
@@ -437,7 +409,7 @@
 	}
 
 	/**
-	 * Stops this extended {@link ModelElementOld}
+	 * Stops this ModelElement
 	 */
 	protected void stop() {
 		if (!this.started.get()) {
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElementProxy.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElementProxy.java
index b14f5f8..5d2057d 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElementProxy.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelElementProxy.java
@@ -10,6 +10,8 @@
  */
 package org.eclipse.sensinact.gateway.core;
 
+import java.util.Arrays;
+
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.common.primitive.Nameable;
 import org.eclipse.sensinact.gateway.common.primitive.PathElement;
@@ -21,7 +23,7 @@
 /**
  * Abstract {@link SensiNactResourceModelElementProxy} implementation
  *
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public abstract class ModelElementProxy implements Nameable, PathElement {
 	/**
@@ -73,21 +75,13 @@
 		this.mediator = mediator;
 		this.proxied = proxied;
 	}
-
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.PathElement#getPath()
-	 */
+	
+	@Override
 	public String getPath() {
 		return this.path;
 	}
-
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.common.primitive.Nameable#getName()
-	 */
+	
+	@Override
 	public String getName() {
 		return this.name;
 	}
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 bbd0ba8..8de1d32 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
@@ -316,9 +316,8 @@
 	 *            the {@link SnaMessage} to post

 	 */

 	public void postMessage(SnaMessage<?> message) {

-		if (this.messageRouter == null) {

+		if (this.messageRouter == null) 

 			return;

-		}

 		((AbstractSnaMessage<?>)message).put("namespace", this.namespace, true);

 		this.messageRouter.handle(message);

 	}

@@ -366,9 +365,9 @@
 		AccessNode root = this.configuration.getAccessTree().getRoot();

 		AccessMethod.Type[] accessMethodTypes = AccessMethod.Type.values();

 		int typesLength = accessMethodTypes == null ? 0 : accessMethodTypes.length;

-		if ((node = (AccessNodeImpl<?>) root.get(uri)) == null) {

+		if ((node = (AccessNodeImpl<?>) root.get(uri)) == null)

 			node = root;

-		}

+		

 		int index = 0;

 		for (; index < typesLength; index++) {

 			AccessLevelOption accessLevelOption = node.getAccessLevelOption(accessMethodTypes[index]);

@@ -430,9 +429,8 @@
 			filter.addHandledType(SnaMessage.Type.LIFECYCLE);

 			this.messageRouter.addCallback(filter, registration);

 

-			if (this.configuration().getStartAtInitializationTime()) {

+			if (this.configuration().getStartAtInitializationTime())

 				this.provider.start();

-			}

 		}

 	}

 

@@ -585,9 +583,9 @@
 	 */

 	public <I extends ModelInstance<?>, M extends ModelElementProxy, P extends ProcessableData, E extends Nameable, R extends Nameable> List<MethodAccessibility> getAuthorizations(

 			ModelElement<I, M, P, E, R> modelElement, AccessLevelOption accessLevelOption) {

-		if (modelElement.getModelInstance() != this) {

+		if (modelElement.getModelInstance() != this)

 			throw new RuntimeException("the model element argument must belong to this model instance");

-		}

+		

 		final String path = modelElement.getPath();

 		return this.configuration().getAccessibleMethods(path, accessLevelOption);

 	}

diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstanceRegistration.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstanceRegistration.java
index 00f57ec..427191e 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstanceRegistration.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ModelInstanceRegistration.java
@@ -129,10 +129,6 @@
 		}
 	}
 
-	/**
-	 * @param uri
-	 * @param location
-	 */
 	void update(final Dictionary<String, Object> properties) {
 		if (!registered || properties == null || properties.size() == 0 || this.instanceRegistration == null) {
 			return;
@@ -165,9 +161,6 @@
 		}
 	}
 
-	/**
-	 * @return
-	 */
 	private Dictionary<String, Object> properties() {
 		final Hashtable<String, Object> properties = new Hashtable<String, Object>();
 
@@ -301,9 +294,9 @@
 				Object value = null;
 				String attribute = it.next();
 
-				if (attribute.equals(name) || (attribute.equals(DataResource.VALUE) && resource.equals(name))) {
+				if (attribute.equals(name) || (attribute.equals(DataResource.VALUE) && resource.equals(name))) 
 					value = initial.opt(DataResource.VALUE);
-				}
+				
 				if (LOCATION_PROPERTY.equals(resourceKey)) {
 					double latitude = 0d;
 					double longitude = 0d;
@@ -353,9 +346,9 @@
 		String resourceKey = new StringBuilder().append(service).append(".").append(resource).toString();
 
 		List<String> resources = (List<String>) properties.get(serviceKey);
-		if (resources != null) {
+		if (resources != null) 
 			resources.remove(resource);
-		}
+		
 		properties.remove(resourceKey.concat(".type"));
 		int index = 0;
 		for (; index < typesLength; index++) {
@@ -403,12 +396,6 @@
 		properties.put("services", services);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.message.AbstractMidCallback#
-	 *      doCallback(org.eclipse.sensinact.gateway.core.message.SnaMessage)
-	 */
 	@Override
 	public void doCallback(SnaMessage<?> message) {
 
@@ -416,18 +403,26 @@
 		String[] uriElements = UriUtils.getUriElements(uri);
 		switch (((SnaMessageSubType) message.getType()).getSnaMessageType()) {
 		case UPDATE:
-			if (!Update.ATTRIBUTE_VALUE_UPDATED.equals((SnaMessageSubType) message.getType())) {
-				break;
-			}
 			SnaUpdateMessage m = (SnaUpdateMessage) message;
 			JSONObject notification = m.getNotification();
 			String key = new StringBuilder().append(uriElements[1]).append(".").append(uriElements[2]).toString();
-			List<String> obs = this.observed.get(key);
-			if (obs != null && !obs.isEmpty() && obs.contains(uriElements[3])) {
-				Object value = notification.opt(DataResource.VALUE);
-				this.updateObserved(new StringBuilder().append(key).append("."
-					).append(uriElements[3]).toString(), value);
-			}
+			switch(m.getType()) {
+				case ATTRIBUTE_VALUE_UPDATED:					
+					List<String> obs = this.observed.get(key);
+					if (obs != null && !obs.isEmpty() && obs.contains(uriElements[3])) {
+						Object value = notification.opt(DataResource.VALUE);
+						this.updateObserved(new StringBuilder().append(key).append("."
+							).append(uriElements[3]).toString(), value);
+					}
+					break;
+				case METADATA_VALUE_UPDATED:
+					Object value = notification.opt(DataResource.VALUE);
+					this.updateObserved(new StringBuilder().append(key).append("."
+						).append(uriElements[3]).append(".").append(uriElements[4]).toString(), value);					
+					break;
+				case ACTUATED: 
+					break;
+				}
 			break;
 		case LIFECYCLE:
 			SnaLifecycleMessage l = (SnaLifecycleMessage) message;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Resource.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Resource.java
index 2e5c2df..20c3aa1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Resource.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Resource.java
@@ -17,16 +17,16 @@
 import org.eclipse.sensinact.gateway.common.primitive.Modifiable;
 import org.eclipse.sensinact.gateway.common.primitive.Typable;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 
 /**
  * A Resource owns {@link Attribute}s and {@link AccessMethod}s whose call allow
  * to manipulate those {@link Attribute}s
  * 
- * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
+ * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
  */
 public interface Resource extends ElementsProxy<AttributeDescription>, Typable<Resource.Type> {
 	// Type attribute property key
@@ -81,54 +81,68 @@
 	/**
 	 * Asks for this Resource's associated get execution
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
+	 * @param atributeName the String name of the targeted attribute
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
+	 * @return the resulting {@link GetResponse}
 	 */
-	GetResponse get(String attributeName);
+	GetResponse get(String attributeName, Object...args);
 
 	/**
 	 * Asks for this Resource's associated set execution
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
+	 * @param atributeName the String name of the targeted attribute
+	 * @param value the value Object to be set
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
+	 * @return the resulting {@link SetResponse}
 	 */
-	SetResponse set(String atributeName, Object value);
+	SetResponse set(String atributeName, Object value, Object...args);
 
 	/**
-	 * Asks for this Resource's associated set execution
+	 * Asks for this Resource's associated subscription execution
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
+	 * @param atributeName the String name of the targeted attribute
+	 * @param recipient the {@link Recipient} of the subscription to be created
+	 * @param args optional variable Objects array parameterizing the call
+	 *
+	 * @return the resulting {@link SubscribeResponse}
 	 */
-	SubscribeResponse subscribe(String attributeName, Recipient recipient);
+	SubscribeResponse subscribe(String attributeName, Recipient recipient, Object...args);
 
 	/**
-	 * Asks for this Resource's associated set execution
+	 * Asks for this Resource's associated subscription execution
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
+	 * @param atributeName the String name of the targeted attribute
+	 * @param recipient the {@link Recipient} of the subscription to be created
+	 * @param conditions Set of {@link Constraint}s applying on the subscription to be created
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
+	 * @return the resulting {@link SubscribeResponse}
 	 */
-	SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions);
+	SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions, Object...args);
 
 	/**
-	 * Asks for this Resource's associated set execution
+	 * Asks for this Resource's associated subscription execution
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
+	 * @param atributeName the String name of the targeted attribute
+	 * @param recipient the {@link Recipient} of the subscription to be created
+	 * @param conditions Set of {@link Constraint}s applying on the subscription to be created
+	 * @param policy the String definition of the error policy applying on the subscription to be created
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
+	 * @return the resulting {@link SubscribeResponse}
 	 */
-	SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions, String policy);
+	SubscribeResponse subscribe(String attributeName, Recipient recipient, Set<Constraint> conditions, String policy, Object...args);
 
 	/**
-	 * Asks for this Resource's associated set execution
+	 * Asks for this Resource's associated unsubscription execution
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
+	 * @param atributeName the String name of the targeted attribute
+	 * @param subscriptionId the String identifier of the subscription to be deleted
+	 * @param args optional variable Objects array parameterizing the call
+	 * 
+	 * @return the resulting {@link UnsubscribeResponse}
 	 */
-	UnsubscribeResponse unsubscribe(String attributeName, String subscriptionId);
+	UnsubscribeResponse unsubscribe(String attributeName, String subscriptionId, Object...args);
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceBuilder.java
index 6477b39..455e675 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceBuilder.java
@@ -10,6 +10,7 @@
  */
 package org.eclipse.sensinact.gateway.core;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -30,15 +31,15 @@
 import org.eclipse.sensinact.gateway.core.method.AccessMethod;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
+import org.eclipse.sensinact.gateway.core.method.ActMethod;
+import org.eclipse.sensinact.gateway.core.method.GetMethod;
 import org.eclipse.sensinact.gateway.core.method.LinkedActMethod;
 import org.eclipse.sensinact.gateway.core.method.Parameter;
+import org.eclipse.sensinact.gateway.core.method.SetMethod;
 import org.eclipse.sensinact.gateway.core.method.Shortcut;
 import org.eclipse.sensinact.gateway.core.method.Signature;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeMethod;
+import org.eclipse.sensinact.gateway.core.method.SubscribeMethod;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeMethod;
 import org.eclipse.sensinact.gateway.util.ReflectUtils;
 
 /**
@@ -47,12 +48,12 @@
  * @author <a href="mailto:christophe.munilla@cea.fr">Christophe Munilla</a>
  */
 public class ResourceBuilder {
-	private final AccessMethod.Type GET = AccessMethod.Type.valueOf(AccessMethod.GET);
-	private final AccessMethod.Type SET = AccessMethod.Type.valueOf(AccessMethod.SET);
-	private final AccessMethod.Type ACT = AccessMethod.Type.valueOf(AccessMethod.ACT);
-	private final AccessMethod.Type SUBSCRIBE = AccessMethod.Type.valueOf(AccessMethod.SUBSCRIBE);
-	private final AccessMethod.Type UNSUBSCRIBE = AccessMethod.Type.valueOf(AccessMethod.UNSUBSCRIBE);
-	private final AccessMethod.Type DESCRIBE = AccessMethod.Type.valueOf(AccessMethod.DESCRIBE);
+	private static final AccessMethod.Type GET = AccessMethod.Type.valueOf(AccessMethod.GET);
+	private static final AccessMethod.Type SET = AccessMethod.Type.valueOf(AccessMethod.SET);
+	private static final AccessMethod.Type ACT = AccessMethod.Type.valueOf(AccessMethod.ACT);
+	private static final AccessMethod.Type SUBSCRIBE = AccessMethod.Type.valueOf(AccessMethod.SUBSCRIBE);
+	private static final AccessMethod.Type UNSUBSCRIBE = AccessMethod.Type.valueOf(AccessMethod.UNSUBSCRIBE);
+	private static final AccessMethod.Type DESCRIBE = AccessMethod.Type.valueOf(AccessMethod.DESCRIBE);
 
 	protected final Mediator mediator;
 	protected final ResourceConfig resourceConfig;
@@ -107,9 +108,8 @@
 	 * @param name the name of the resource to build
 	 */
 	public void configureValue(Object value) {
-		if (value == null) {
-			return;
-		}
+		if (value == null) 
+			return;		
 		this.configureRequirement(DataResource.VALUE, AttributeBuilder.Requirement.VALUE, value);
 	}
 
@@ -166,9 +166,8 @@
 				this.buildMethods(resourceImpl);
 
 			} catch (InvalidValueException e) {
-				if (this.mediator.isErrorLoggable()) {
-					this.mediator.error(e, e.getMessage());
-				}
+				if (this.mediator.isErrorLoggable()) 
+					this.mediator.error(e);				
 				throw new InvalidResourceException("Error while creating methods", e);
 			}
 		}
@@ -238,12 +237,6 @@
 		return linkedResourceImpl;
 	}
 
-	/**
-	 * Builds the set of access methods of this resource
-	 * 
-	 * @throws InvalidResourceException
-	 * @throws InvalidValueException
-	 */
 	protected final void buildMethods(final ResourceImpl resource)
 			throws InvalidResourceException, InvalidValueException {
 		if (resource == null) {
@@ -274,7 +267,7 @@
 
 		setMethod = new SetMethod(this.mediator, resource.getPath(),
 				this.getPreProcessingExecutor(resource, AccessMethod.SET));
-
+		
 		setSignature = new Signature(this.mediator, SET, new Class<?>[] { String.class, Object.class },
 				new String[] { "attributeName", "value" });
 
@@ -282,14 +275,15 @@
 				this.getPreProcessingExecutor(resource, AccessMethod.SUBSCRIBE));
 
 		subscribeSignature = new Signature(this.mediator, SUBSCRIBE,
-				new Class<?>[] { String.class, Recipient.class, Set.class, String.class },
-				new String[] { "attributeName", "listener", "conditions", "policy" });
+			new Class<?>[] { String.class, Recipient.class, Set.class, String.class },
+			new String[] { "attributeName", "listener", "conditions", "policy" });
 
 		unsubscribeMethod = new UnsubscribeMethod(this.mediator, resource.getPath(),
 				this.getPreProcessingExecutor(resource, AccessMethod.UNSUBSCRIBE));
-
+		
 		unsubscribeSignature = new Signature(this.mediator, UNSUBSCRIBE, new Class<?>[] { String.class, String.class },
 				new String[] { "attributeName", "subscriptionId" });
+		
 		// Get method
 		getMethod.addSignature(getSignature, getExecutor(resource), AccessMethodExecutor.ExecutionPolicy.BEFORE);
 
@@ -301,11 +295,10 @@
 			if (Modifiable.MODIFIABLE.equals(attrs.nextElement().getModifiable())) {
 				// Set method
 				setMethod.addSignature(setSignature, setExecutor(resource),
-						AccessMethodExecutor.ExecutionPolicy.BEFORE);
+						AccessMethodExecutor.ExecutionPolicy.BEFORE );
 				break;
 			}
 		}
-
 		// Subscribe method
 		subscribeMethod.addSignature(subscribeSignature, subscribeExecutor(resource),
 				AccessMethodExecutor.ExecutionPolicy.BEFORE);
@@ -325,7 +318,7 @@
 
 		fixedPolicyParameters = new HashMap<Integer, Parameter>();
 		fixedPolicyParameters.put(3, policyParameter);
-
+		
 		Shortcut subscribePolicyShortcut = new Shortcut(this.mediator, SUBSCRIBE,
 			new Class<?>[] { String.class, Recipient.class, Set.class }, 
 			new String[] { "attributeName", "listener", "conditions" },
@@ -340,33 +333,38 @@
 				new Class<?>[] { String.class, Recipient.class }, 
 				new String[] { "attributeName", "listener" },
 				fixedConditionsParameters);
-
+		
 		subscribeMethod.addShortcut(subscribeConditionsAndPolicyShortcut, subscribePolicyShortcut);
-
-		if (resource.getDefault() != null) {
+		String resourceDefaultAttribute = resource.getDefault();
+		
+		if (resourceDefaultAttribute != null) {
 			Parameter nameParameter = new Parameter(this.mediator, "attributeName", String.class);
-			nameParameter.setValue(resource.getDefault());
+			nameParameter.setValue(resourceDefaultAttribute);
 
 			Map<Integer, Parameter> fixedNameParameter = new HashMap<Integer, Parameter>();
 
 			fixedNameParameter.put(0, nameParameter);
 
 			// Get method - name parameter shortcut
-			Shortcut getAttributeShortcut = new Shortcut(this.mediator, GET, new Class<?>[0], new String[0],
-					fixedNameParameter);
+			//Shortcut getAttributeShortcut = new Shortcut(this.mediator, GET, new Class<?>[0], new String[0], fixedNameParameter, true);
 
+			// Get method - name parameter shortcut
+			Shortcut getAttributeShortcut = new Shortcut(this.mediator, GET, new Class<?>[0], new String[0], fixedNameParameter);
+			
 			getMethod.addShortcut(getAttributeShortcut, getSignature);
 
 			// Set method - name parameter shortcut
 			// if the default attribute is modifiable
-			Attribute defaultAttribute = resource.getAttribute(resource.getDefault());
+			Attribute defaultAttribute = resource.getAttribute(resourceDefaultAttribute);
 
 			if (defaultAttribute != null && Modifiable.MODIFIABLE.equals(defaultAttribute.getModifiable())) {
+				
 				Shortcut setAttributeShortcut = new Shortcut(this.mediator, SET, new Class<?>[] { Object.class },
-						new String[] { "value" }, fixedNameParameter);
+						new String[] { DataResource.VALUE }, fixedNameParameter);
 
 				setMethod.addShortcut(setAttributeShortcut, setSignature);
 			}
+
 			Shortcut subscribeNameConditionsAndPolicyShortcut = new Shortcut(this.mediator, SUBSCRIBE,
 					new Class<?>[] { Recipient.class }, 
 					new String[] { "listener" }, fixedNameParameter);
@@ -380,7 +378,7 @@
 					new Class<?>[] { Recipient.class, Set.class, String.class }, 
 					new String[] { "listener", "conditions", "policy" },
 					fixedNameParameter);
-
+			
 			subscribeMethod.addShortcut(subscribeNameConditionsAndPolicyShortcut, subscribeConditionsAndPolicyShortcut);
 			subscribeMethod.addShortcut(subscribeNameAndPolicyShortcut, subscribePolicyShortcut);
 			subscribeMethod.addShortcut(subscribeNameShortcut, subscribeSignature);
@@ -404,12 +402,6 @@
 		resource.registerMethod(UNSUBSCRIBE, unsubscribeMethod);
 	}
 
-	/**
-	 * Creates and returns the pre-processing {@link AccessMethodExecutor} to
-	 * register into the {@link AccessMethod} whose type is passed as parameter
-	 * 
-	 * @return the pre-processing executor associated to the specified method type
-	 */
 	private AccessMethodExecutor getPreProcessingExecutor(final ResourceImpl resource, final String type) {
 		return new AccessMethodExecutor() {
 			@Override
@@ -430,20 +422,12 @@
 		};
 	}
 
-	/**
-	 * Creates and returns the specific post-processing {@link AccessMethodExecutor}
-	 * to register into the {@link ActMethod} of the {@link ResourceImpl} passed as
-	 * parameter
-	 * 
-	 * @return the post-processing executor associated to the act method of the
-	 *         specified resource
-	 */
 	private AccessMethodExecutor getActPostProcessingExecutor(final ResourceImpl resource) {
 		return new AccessMethodExecutor() {
 			@Override
 			public Void execute(AccessMethodResponseBuilder parameter) throws Exception {
-				SnaUpdateMessage message = SnaNotificationMessageImpl.Builder.<SnaUpdateMessage>notification(mediator,
-						SnaUpdateMessage.Update.ACTUATED, resource.getPath());
+				SnaUpdateMessage message = SnaNotificationMessageImpl.Builder.<SnaUpdateMessage>notification(
+					mediator, SnaUpdateMessage.Update.ACTUATED, resource.getPath());
 
 				JSONObject notification = new JSONObject();
 				notification.put(Metadata.TIMESTAMP, System.currentTimeMillis());
@@ -457,10 +441,6 @@
 		};
 	}
 
-	/**
-	 * @param resource
-	 * @return
-	 */
 	final private AccessMethodExecutor getExecutor(final ResourceImpl resource) {
 		return new AccessMethodExecutor() {
 			@Override
@@ -477,15 +457,13 @@
 		};
 	}
 
-	/**
-	 * @param resource
-	 * @return
-	 */
 	final private AccessMethodExecutor setExecutor(final ResourceImpl resource) {
 		return new AccessMethodExecutor() {
 			@Override
 			public Void execute(AccessMethodResponseBuilder snaResult) throws Exception {
-				AttributeDescription desc = resource.set((String) snaResult.getParameter(0),snaResult.getParameter(1));
+				Object[] parameters = snaResult.getParameters();
+				int length = parameters == null?0:parameters.length;	
+				AttributeDescription desc = resource.set((String) parameters[0], (Object)parameters[1]);
 				JSONObject result = new JSONObject(desc.getJSON());
 				snaResult.setAccessMethodObjectResult(result);
 				return null;
@@ -493,10 +471,6 @@
 		};
 	}
 
-	/**
-	 * @param resource
-	 * @return
-	 */
 	final private AccessMethodExecutor subscribeExecutor(final ResourceImpl resource) {
 		return new AccessMethodExecutor() {
 			@Override
@@ -551,9 +525,8 @@
 									}								
 								}
 							}
-						} else {
-							policy = ((Integer) parameters[3]).intValue();
-						}				
+						} else 
+						policy = ((Integer) parameters[3]).intValue();		
 					case 3:
 						conditions = (Set) parameters[2];
 					case 2:
@@ -576,10 +549,6 @@
 		};
 	}
 
-	/**
-	 * @param resource
-	 * @return
-	 */
 	final private AccessMethodExecutor unsubscribeExecutor(final ResourceImpl resource) {
 		return new AccessMethodExecutor() {
 			@Override
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 554694d..7190cf1 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
@@ -382,21 +382,17 @@
 		};
 	}
 
-	public AttributeDescription set(String name, Object value) throws InvalidValueException {
+	public AttributeDescription set(String attributeName, Object value) throws InvalidValueException {
 		AttributeDescription description = null;
-		if (name == null) {
+		if (attributeName == null) 
 			return description;
-		}
-		Attribute attribute = this.getAttribute(name);
+		
+		Attribute attribute = this.getAttribute(attributeName);
 		if (attribute != null) {
-			if (!Modifiable.MODIFIABLE.equals(attribute.getModifiable())) {
-				throw new InvalidValueException(
-						new StringBuilder().append(name).append(" attribute is not modifiable").toString());
-			}
-			if (attribute.getLocked()) {
-				throw new InvalidValueException(new StringBuilder().append(name)
-						.append(" attribute has been locked by an action trigger").toString());
-			}
+			if (!Modifiable.MODIFIABLE.equals(attribute.getModifiable())) 
+				throw new InvalidValueException(new StringBuilder().append(attributeName).append(" attribute is not modifiable").toString());
+			if (attribute.getLocked()) 
+				throw new InvalidValueException(new StringBuilder().append(attributeName).append(" attribute has been locked by an action trigger").toString());
 			attribute.setValue(value);
 			description = (AttributeDescription) attribute.getDescription();
 		}
@@ -632,27 +628,23 @@
 	 * Registers a {@link Signature} to create and to associate with the specified
 	 * {@link AccessMethodExecutor}
 	 * 
-	 * @param type
-	 *            the type of the {@link AccessMethod} associated to the signature
-	 *            to create
-	 * @param parameterNames
-	 *            the array of parameter names of the signature to create
-	 * @param parameterTypes
-	 *            the array of parameter types of the signature to create
-	 * @param executor
-	 *            the {@link AccessMethodExecutor} to associate to the signature to
-	 *            create
-	 * @param policy
-	 *            the execution policy of the {@link AccessMethodExecutor}
+	 * @param type the type of the {@link AccessMethod} associated to the signature
+	 * to create
+	 * @param parameterNames the array of parameter names of the signature to create
+	 * @param parameterTypes the array of parameter types of the signature to create
+	 * @param executor the {@link AccessMethodExecutor} to associate to the signature 
+	 * to create
+	 * @param policy the execution policy of the {@link AccessMethodExecutor}
 	 * @throws InvalidValueException
 	 * @throws InvalidConstraintDefinitionException
 	 */
-	public AccessMethod registerExecutor(AccessMethod.Type type, Class<?>[] parameterTypes, String[] parameterNames,
-			AccessMethodExecutor executor, AccessMethodExecutor.ExecutionPolicy policy) throws InvalidValueException {
+	@SuppressWarnings("unchecked")
+	public AccessMethod registerExecutor(AccessMethod.Type type, Class<?>[] parameterTypes, String[] parameterNames, 
+		AccessMethodExecutor executor, AccessMethodExecutor.ExecutionPolicy policy) 
+		throws InvalidValueException {
 		AccessMethod method = this.getAccessMethod(type);
-		if (method != null) {
+		if (method != null)
 			((AbstractAccessMethod) method).addSignature(parameterTypes, parameterNames, executor, policy);
-		}
 		return method;
 	}
 
@@ -689,11 +681,6 @@
 		return super.elements();
 	}
 
-	/**
-	 * @param attribute
-	 * @param value
-	 * @param hasChanged
-	 */
 	@SuppressWarnings("rawtypes")
 	protected void updated(Attribute attribute, Object value, boolean hasChanged) {
 		if (!super.started.get() || attribute.isHidden()) {
@@ -729,6 +716,16 @@
 		}
 	}
 
+	protected void updated(Attribute attribute, MetadataDescription metadata) {
+		if (!super.started.get() || attribute==null || metadata == null) 
+			return;
+		SnaUpdateMessage message = SnaNotificationMessageImpl.Builder.<SnaUpdateMessage>notification(
+			super.modelInstance.mediator(), SnaUpdateMessage.Update.METADATA_VALUE_UPDATED, 
+				UriUtils.getUri(new String[] {getPath(), attribute.getName(), metadata.getName()}));
+		message.setNotification(metadata.getJSONObjectDescription());
+		super.modelInstance.postMessage(message);
+	}
+	
 	/**
 	 * Registers the path of a {@link LinkedResourceImpl} linked to this ResouceImpl
 	 * instance
@@ -743,10 +740,9 @@
 
 	@Override
 	public void start() {
-		if (!super.getModelInstance().isRegistered() || this.isHidden()) {
-			// already registered or hidden resource
+		// already registered or hidden resource
+		if (!super.getModelInstance().isRegistered() || this.isHidden()) 
 			return;
-		}
 		if (super.started.get()) {
 			this.modelInstance.mediator().debug("%s already started", this.getName());
 			return;
@@ -763,31 +759,33 @@
 
 		notificationObject.put(SnaConstants.ADDED_OR_REMOVED, SnaLifecycleMessage.Lifecycle.RESOURCE_APPEARING.name());
 		notificationObject.put(Resource.TYPE, this.getType());
-
 		notification.setNotification(notificationObject);
 
-		Attribute attribute = null;
+		for(Attribute attribute : this.elements) {
 
-		if (this.defaultAttribute != null && (attribute = this.getAttribute(this.defaultAttribute)) != null) {
-			JSONObject jsonAttribute = new JSONObject(attribute.getDescription().getJSON());
-
-			MetadataDescription[] metadataDescriptions = attribute.getAllDescriptions();
-
-			int index = 0;
-			int length = metadataDescriptions.length;
-
-			for (; index < length; index++) {
-				MetadataDescription metadataDescription = metadataDescriptions[index];
-				String metadataName = metadataDescription.getName().intern();
-
-				if (Modifiable.FIXED.equals(metadataDescription.getModifiable())
-						&& Metadata.LOCKED.intern() != metadataName && Metadata.MODIFIABLE.intern() != metadataName
-						&& Metadata.HIDDEN.intern() != metadataName && Attribute.NICKNAME.intern() != metadataName) {
-					jsonAttribute.put(metadataDescription.getName(),
-							PrimitiveDescription.toJson(metadataDescription.getType(), metadataDescription.getValue()));
+			if (this.defaultAttribute != null && attribute.getName().equals(this.defaultAttribute)) {
+				JSONObject jsonAttribute = new JSONObject(attribute.getDescription().getJSON());	
+				MetadataDescription[] metadataDescriptions = attribute.getAllDescriptions();	
+				int index = 0;
+				int length = metadataDescriptions.length;	
+				for (; index < length; index++) {
+					MetadataDescription metadataDescription = metadataDescriptions[index];
+					String metadataName = metadataDescription.getName().intern();	
+					if (Modifiable.FIXED.equals(metadataDescription.getModifiable())
+							&& Metadata.LOCKED.intern() != metadataName && Metadata.MODIFIABLE.intern() != metadataName
+							&& Metadata.HIDDEN.intern() != metadataName && Attribute.NICKNAME.intern() != metadataName) {
+						jsonAttribute.put(metadataDescription.getName(),
+								PrimitiveDescription.toJson(metadataDescription.getType(), metadataDescription.getValue()));
+					}
 				}
+				((SnaLifecycleMessageImpl) notification).put("initial", jsonAttribute);
 			}
-			((SnaLifecycleMessageImpl) notification).put("initial", jsonAttribute);
+			if(attribute.isHidden()) 
+				continue;
+			for(Metadata m : attribute.metadata) {
+				if(!m.getName().equals(Metadata.HIDDEN) &&  m.getModifiable().equals(Modifiable.FIXED) && m.getValue()!=null )
+						this.updated(attribute, m.getDescription());
+			}
 		}
 		super.modelInstance.postMessage(notification);
 	}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceProxy.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceProxy.java
index 7563f56..eec1e24 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceProxy.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ResourceProxy.java
@@ -54,11 +54,9 @@
 			}
 			int accessIndex = -1;
 
-			if ((accessIndex = methodAccessibilities
-					.indexOf(new Name<MethodAccessibility>(existingTypes[index].name()))) == -1
+			if ((accessIndex = methodAccessibilities.indexOf(new Name<MethodAccessibility>(existingTypes[index].name()))) == -1
 					|| !methodAccessibilities.get(accessIndex).isAccessible()) {
-				methods.put(existingTypes[index].name(),
-						new UnaccessibleAccessMethod(mediator, super.getPath(), existingTypes[index]));
+				methods.put(existingTypes[index].name(),new UnaccessibleAccessMethod(mediator, super.getPath(), existingTypes[index]));
 			} else {
 				methods.put(existingTypes[index].name(), method);
 			}
@@ -66,11 +64,6 @@
 		this.methods = Collections.<String, AccessMethod>unmodifiableMap(methods);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see SensiNactResourceModelElementProxy# getAccessMethod(String)
-	 */
 	@Override
 	public AccessMethod getAccessMethod(String type) {
 		return this.methods.get(type);
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SensiNact.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SensiNact.java
index f036237..5b602f1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SensiNact.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/SensiNact.java
@@ -51,17 +51,17 @@
 import org.eclipse.sensinact.gateway.core.message.SnaUpdateMessageImpl;
 import org.eclipse.sensinact.gateway.core.method.AccessMethod;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponseBuilder;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 import org.eclipse.sensinact.gateway.core.method.RemoteAccessMethodExecutable;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponseBuilder;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 import org.eclipse.sensinact.gateway.core.remote.RemoteCore;
 import org.eclipse.sensinact.gateway.core.remote.SensinactCoreBaseIFaceManager;
 import org.eclipse.sensinact.gateway.core.remote.SensinactCoreBaseIFaceManagerFactory;
@@ -112,9 +112,6 @@
  */
 @Component(immediate=true)
 public class SensiNact implements Core {
-	// ********************************************************************//
-	// NESTED DECLARATIONS //
-	// ********************************************************************//
 	
 	/**
 	 * Abstract {@link Session} service implementation
@@ -129,6 +126,16 @@
 		public SensiNactSession(String identifier) {
 			super(identifier);
 		}
+		
+		protected final SessionKey getSessionKeyFromToken() {
+			SessionKey sessionKey;
+			synchronized(SensiNact.this.sessions) {
+				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
+			}	
+			if(sessionKey == null)
+				throw new IllegalArgumentException("Invalid session token");
+			return sessionKey;
+		}
 
 		@Override
 		public Set<ServiceProvider> serviceProviders(final String filter) {
@@ -152,13 +159,9 @@
 		}
 
 		@Override
-		public SubscribeResponse registerSessionAgent(String requestId, 
-				final MidAgentCallback callback, final SnaFilter filter) {
+		public SubscribeResponse registerSessionAgent(String requestId, final MidAgentCallback callback, final SnaFilter filter) {
 
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+			final SessionKey sessionKey=getSessionKeyFromToken();
 			
 			boolean registered = AccessController.<Boolean>doPrivileged(new PrivilegedAction<Boolean>() {
 				@Override public Boolean run() {return sessionKey.registerAgent(callback, filter);}});
@@ -183,10 +186,9 @@
 
 		@Override
 		public UnsubscribeResponse unregisterSessionAgent(String requestId, final String agentId) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}			
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			boolean unregistered = AccessController.<Boolean>doPrivileged(new PrivilegedAction<Boolean>() {
 				@Override
 				public Boolean run() {
@@ -209,12 +211,9 @@
 		}
 
 		@Override
-		public SubscribeResponse registerSessionIntent(String requestId, Executable<Boolean, Void> callback,
-				String... resourcePath) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+		public SubscribeResponse registerSessionIntent(String requestId, Executable<Boolean, Void> callback, String... resourcePath) {
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
 			final ResourceIntent intent = new ResourceIntent(mediator, sessionKey.getPublicKey(), callback, resourcePath) {
 				@Override
 				public boolean isAccessible(String path) {	
@@ -245,10 +244,9 @@
 
 		@Override
 		public UnsubscribeResponse unregisterSessionIntent(String requestId, final String intentId) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			boolean unregistered = AccessController.<Boolean>doPrivileged(new PrivilegedAction<Boolean>() {
 				@Override
 				public Boolean run() {
@@ -272,11 +270,10 @@
 
 		@Override
 		public GetResponse get(String requestId, final String serviceProviderId, final String serviceId,
-				final String resourceId, final String attributeId) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}						
+				final String resourceId, final String attributeId, Object... args) {
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId, resourceId);
 
 			Resource resource = this.resource(serviceProviderId, serviceId, resourceId);
@@ -285,11 +282,11 @@
 			if (resource != null) {
 				if (attributeId == null) {
 					if (!resource.getType().equals(Resource.Type.ACTION))
-						response = ((DataResource) resource).get();
+						response = ((DataResource) resource).get(args);
 					else 
 						response = SensiNact.<JSONObject, GetResponse>createErrorResponse(mediator, AccessMethod.GET, uri, 404, "Unknown Method", null);
 				} else 
-					response = resource.get(attributeId);
+					response = resource.get(attributeId, args);
 				return tatooRequestId(requestId, response);
 			}
 			if (serviceProviderId.indexOf('(') < 0 && sessionKey.localID() != 0) {
@@ -303,7 +300,7 @@
 				@Override
 				public JSONObject run() {
 					return SensiNact.this.get(sessionKey.getToken(), serviceProviderId, serviceId,
-							resourceId, attributeId);
+							resourceId, attributeId, args);
 				}
 			});
 			try {
@@ -317,11 +314,10 @@
 		
 		@Override
 		public SetResponse set(String requestId, final String serviceProviderId, final String serviceId,
-				final String resourceId, final String attributeId, final Object parameter) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+				final String resourceId, final String attributeId, final Object parameter, Object... args) {
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId,
 					resourceId);
 			Resource resource = this.resource(serviceProviderId, serviceId, resourceId);
@@ -330,14 +326,14 @@
 			if (resource != null) {
 				if (attributeId == null) {
 					if (!resource.getType().equals(Resource.Type.ACTION)) {
-						response = ((DataResource) resource).set(parameter);
+						response = ((DataResource) resource).set(parameter, args);
 
 					} else {
 						response = SensiNact.<JSONObject, SetResponse>createErrorResponse(mediator, AccessMethod.SET,
 								uri, 404, "Unknown Method", null);
 					}
 				} else {
-					response = resource.set(attributeId, parameter);
+					response = resource.set(attributeId, parameter, args);
 				}
 				return tatooRequestId(requestId, response);
 			}
@@ -350,7 +346,7 @@
 				@Override
 				public JSONObject run() {
 					return SensiNact.this.set(sessionKey.getPublicKey(), serviceProviderId, serviceId,
-							resourceId, attributeId, parameter);
+							resourceId, attributeId, parameter, args);
 				}
 			});
 			try {
@@ -365,10 +361,9 @@
 		@Override
 		public ActResponse act(String requestId, final String serviceProviderId, final String serviceId,
 				final String resourceId, final Object[] parameters) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			ActResponse response = null;
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId,
 					resourceId);
@@ -412,11 +407,11 @@
 
 		@Override
 		public SubscribeResponse subscribe(final String requestId, final String serviceProviderId, final String serviceId,
-				final String resourceId, final Recipient recipient, final JSONArray conditions, final String policy) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, getSessionId()));
-			}	
+				final String resourceId, final Recipient recipient, final JSONArray conditions, final String policy,
+				Object... args) {
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			SubscribeResponse response = null;	
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, 
 				serviceId, resourceId);
@@ -434,7 +429,7 @@
 						}
 					}
 					response = ((DataResource) resource).subscribe(recipient, (constraint == null 
-						? Collections.<Constraint>emptySet():Collections.<Constraint>singleton(constraint)),policy);
+						? Collections.<Constraint>emptySet():Collections.<Constraint>singleton(constraint)), policy, args);
 				} else {
 					response = SensiNact.<JSONObject, SubscribeResponse>createErrorResponse(mediator,
 							AccessMethod.SUBSCRIBE, uri, 404, "Unknown Method", null);
@@ -488,12 +483,10 @@
 
 		@Override
 		public UnsubscribeResponse unsubscribe(String requestId, final String serviceProviderId, final String serviceId,
-				final String resourceId, final String subscriptionId) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, 
-						getSessionId()));
-			}		
+				final String resourceId, final String subscriptionId, Object... args) {
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			UnsubscribeResponse response = null;	
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId,
 					resourceId);
@@ -502,7 +495,7 @@
 
 			if (resource != null) {
 				if (!resource.getType().equals(Resource.Type.ACTION)) {
-					response = ((DataResource) resource).unsubscribe(subscriptionId);
+					response = ((DataResource) resource).unsubscribe(subscriptionId, args);
 
 				} else {
 					response = SensiNact.<JSONObject, UnsubscribeResponse>createErrorResponse(mediator,
@@ -541,11 +534,9 @@
 
 		@Override
 		public DescribeResponse<String> getAll(String requestId, String filter, FilteringCollection filterCollection) {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, 
-						getSessionId()));
-			}			
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			DescribeResponse<String> response = null;
 			DescribeMethod<String> method = new DescribeMethod<String>(mediator, UriUtils.PATH_SEPARATOR, null,
 					DescribeType.COMPLETE_LIST);
@@ -593,8 +584,8 @@
 
 		@Override
 		public DescribeResponse<String> getProviders(String requestId, FilteringCollection filterCollection) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-						KeyExtractorType.TOKEN, this.getSessionId()));
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
 			
 			DescribeResponse<String> response = null;
 			DescribeMethod<String> method = new DescribeMethod<String>(mediator, UriUtils.PATH_SEPARATOR, null,
@@ -641,8 +632,8 @@
 
 		@Override
 		public DescribeResponse<JSONObject> getProvider(String requestId, final String serviceProviderId) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-					KeyExtractorType.TOKEN, this.getSessionId()));
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
 
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId);
 
@@ -680,8 +671,8 @@
 		@Override
 		public DescribeResponse<String> getServices(String requestId, final String serviceProviderId,
 				FilteringCollection filterCollection) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-					KeyExtractorType.TOKEN, this.getSessionId()));
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
 
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId);
 			DescribeResponse<String> response = null;
@@ -737,9 +728,9 @@
 		@Override
 		public DescribeResponse<JSONObject> getService(String requestId, final String serviceProviderId,
 				final String serviceId) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-						KeyExtractorType.TOKEN, this.getSessionId()));
 
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId);
 
 			DescribeResponse<JSONObject> response = null;
@@ -774,8 +765,8 @@
 		@Override
 		public DescribeResponse<String> getResources(String requestId, final String serviceProviderId,
 				final String serviceId, FilteringCollection filterCollection) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-					KeyExtractorType.TOKEN, this.getSessionId()));
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
 
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId);
 
@@ -837,9 +828,9 @@
 		@Override
 		public DescribeResponse<JSONObject> getResource(final String requestId, final String serviceProviderId,
 				final String serviceId, final String resourceId) {
-			SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-					KeyExtractorType.TOKEN, this.getSessionId()));
 
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			String uri = getUri((sessionKey.localID() != 0), SensiNact.this.namespace(), serviceProviderId, serviceId,
 					resourceId);
 
@@ -889,8 +880,9 @@
 		 * </ul>
 		 */
 		private final boolean isAccessible(final String path) {
-			final SessionKey sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(
-					KeyExtractorType.TOKEN, this.getSessionId()));
+
+			final SessionKey sessionKey=getSessionKeyFromToken();
+			
 			Boolean accessible = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
 				@Override
 				public Boolean run() {
@@ -1039,11 +1031,8 @@
 
 		@Override
 		public final void changePassword(final String oldPassword, final String newPassword) throws SecuredAccessException {
-			final SessionKey sessionKey;
-			synchronized(SensiNact.this.sessions) {
-				sessionKey = SensiNact.this.sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, 
-						getSessionId()));
-			}	
+
+			final SessionKey sessionKey=getSessionKeyFromToken();	
 			final String publicKey = sessionKey.getPublicKey();
 			
 			SecuredAccessException exception = SensiNact.this.mediator.callService(
@@ -1891,7 +1880,7 @@
 	 * @return the JSON formated response of the SET access method invocation
 	 */
 	private JSONObject set(String identifier, final String serviceProviderId, final String serviceId,
-			final String resourceId, final String attributeId, final Object parameter) {
+			final String resourceId, final String attributeId, final Object parameter, Object...args) {
 		final SessionKey sessionKey;
 		synchronized(this.sessions){
 			sessionKey = sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, identifier));
@@ -1971,7 +1960,7 @@
 	 * @return the JSON formated response of the GET access method invocation
 	 */
 	private JSONObject get(String identifier, final String serviceProviderId, final String serviceId,
-	final String resourceId, final String attributeId) {
+	final String resourceId, final String attributeId, Object...args) {
 		final SessionKey sessionKey;
 		synchronized(this.sessions){
 			sessionKey = sessions.get(new KeyExtractor<KeyExtractorType>(KeyExtractorType.TOKEN, identifier));
@@ -1993,6 +1982,7 @@
 		ExecutorService executor = Executors.newFixedThreadPool(20);
 		
 		if (sessionKey.localID() == 0) {
+			
 			Collection<ServiceReference<SensinactCoreBaseIface>> references = null;
 			try {
 				references = mediator.getContext().getServiceReferences(SensinactCoreBaseIface.class, String.format("(!(%s=%s))",
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Service.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Service.java
index 69ec7bb..450d541 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Service.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Service.java
@@ -15,10 +15,10 @@
 import org.eclipse.sensinact.gateway.common.constraint.Constraint;
 import org.eclipse.sensinact.gateway.common.primitive.ElementsProxy;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 
 /**
  * This interface represents devices (called smart object services) and higher
@@ -44,38 +44,20 @@
 	/**
 	 * Asks for this Resource's associated get execution
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
-	 */
-	GetResponse get(String resourceName, String attributeName);
-
-	/**
-	 * Asks for this Resource's associated get execution
+	 * @param parameters objects array parameterizing the invocation
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
+	 * @return the resulting {@link GetResponse} 
 	 */
-	GetResponse get(String resourceName);
+	GetResponse get(String resourceName, String attributeName, Object...args);
 
 	/**
 	 * Asks for this Resource's associated set execution
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
-	 */
-	SetResponse set(String resourceName, String atributeName, Object value);
-
-	/**
-	 * Asks for this Resource's associated set execution
+	 * @param parameters objects array parameterizing the invocation
 	 * 
-	 * @param parameters
-	 *            objects array parameterizing the invocation
-	 * @return the invocation {@link SnaMessage} result
+	 * @return the resulting {@link SetResponse} 
 	 */
-	SetResponse set(String resourceName, Object value);
+	SetResponse set(String resourceName, String atributeName, Object value, Object...args);
 
 	/**
 	 * Asks for this Resource's associated set execution
@@ -84,7 +66,7 @@
 	 *            array of {@link Parameter}s parameterizing the invocation
 	 * @return the {@link SnaMessage} resulting of the invocation
 	 */
-	SubscribeResponse subscribe(String resourceName, String attributeName, Recipient recipient);
+	SubscribeResponse subscribe(String resourceName, String attributeName, Recipient recipient, Object...args);
 
 	/**
 	 * Asks for this Resource's associated set execution
@@ -93,8 +75,8 @@
 	 *            array of {@link Parameter}s parameterizing the invocation
 	 * @return the {@link SnaMessage} resulting of the invocation
 	 */
-	SubscribeResponse subscribe(String resourceName, Recipient recipient);
-
+	SubscribeResponse subscribe(String resourceName, String attributeName, Recipient recipient, Set<Constraint> conditions, Object...args);
+	
 	/**
 	 * Asks for this Resource's associated set execution
 	 * 
@@ -102,42 +84,15 @@
 	 *            array of {@link Parameter}s parameterizing the invocation
 	 * @return the {@link SnaMessage} resulting of the invocation
 	 */
-	SubscribeResponse subscribe(String resourceName, String attributeName, Recipient recipient,
-			Set<Constraint> conditions);
+	SubscribeResponse subscribe(String resourceName, String attributeName, Recipient recipient, Set<Constraint> conditions, String policy, Object...args);
 
 	/**
 	 * Asks for this Resource's associated set execution
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
-	 */
-	SubscribeResponse subscribe(String resourceName, Recipient recipient, Set<Constraint> conditions);
-
-	/**
-	 * Asks for this Resource's associated set execution
+	 * @param parameters array of {@link Parameter}s parameterizing the invocation
 	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
+	 * @return the resulting {@link UnsubscribeResponse} 
 	 */
-	SubscribeResponse subscribe(String resourceName, Recipient recipient, Set<Constraint> conditions, long lifetime);
+	UnsubscribeResponse unsubscribe(String resourceName, String attributeName, String subscriptionId, Object...args);
 
-	/**
-	 * Asks for this Resource's associated set execution
-	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
-	 */
-	UnsubscribeResponse unsubscribe(String resourceName, String attributeName, String subscriptionId);
-
-	/**
-	 * Asks for this Resource's associated set execution
-	 * 
-	 * @param parameters
-	 *            array of {@link Parameter}s parameterizing the invocation
-	 * @return the {@link SnaMessage} resulting of the invocation
-	 */
-	UnsubscribeResponse unsubscribe(String resourceName, String subscriptionId);
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceImpl.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceImpl.java
index ed91d2a..863e498 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceImpl.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceImpl.java
@@ -48,33 +48,16 @@
 			super(proxy, tree);
 		}
 
-		/**
-		 * @inheritDoc
-		 * 
-		 * @see org.eclipse.sensinact.gateway.core.ResourceCollection#getResources()
-		 */
 		@Override
 		public List<Resource> getResources() {
 			return super.list();
 		}
 
-		/**
-		 * @inheritDoc
-		 * 
-		 * @see org.eclipse.sensinact.gateway.core.ResourceCollection#
-		 *      getResource(java.lang.String)
-		 */
 		@Override
 		public <R extends Resource> R getResource(String resource) {
 			return (R) super.element(resource);
 		}
 
-		/**
-		 * @inheritDoc
-		 *
-		 * @see java.lang.reflect.InvocationHandler# invoke(java.lang.Object,
-		 *      java.lang.reflect.Method, java.lang.Object[])
-		 */
 		@Override
 		public Object invoke(Object proxy, Method method, Object[] parameters) throws Throwable {
 			Object result = null;
@@ -83,39 +66,27 @@
 				if (method.isVarArgs() && parameters != null && parameters.length == 1
 						&& parameters[0].getClass().isArray()) {
 					calledParameters = (Object[]) parameters[0];
-
-				} else {
+				} else 
 					calledParameters = parameters;
-				}
+				
 				if (calledParameters.length > 0) {
 					String resourceName = (String) calledParameters[0];
 					calledParameters[0] = getResource(resourceName);
 				}
 				result = this.proxy.invoke(method.getName().toUpperCase(), calledParameters);
-			} else {
+			} else
 				result = method.invoke(this, parameters);
-			}
-			if (result == this.proxy || result == this) {
+			
+			if (result == this.proxy || result == this) 
 				return proxy;
-			}
 			return result;
 		}
 
-		/**
-		 * @inheritDoc
-		 *
-		 * @see org.eclipse.sensinact.gateway.common.primitive.ElementsProxy#isAccessible()
-		 */
 		@Override
 		public boolean isAccessible() {
 			return true;
 		}
 
-		/**
-		 * @inheritDoc
-		 * 
-		 * @see org.eclipse.sensinact.gateway.common.primitive.Describable#getDescription()
-		 */
 		@Override
 		public Description getDescription() {
 			return new Description() {
@@ -659,42 +630,21 @@
 		return this.subscriptionsCount;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ModelElement#getRegisteredEvent()
-	 */
 	@Override
 	protected Lifecycle getRegisteredEvent() {
 		return Lifecycle.SERVICE_APPEARING;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see ModelElement#getUnregisteredEvent()
-	 */
 	@Override
 	protected Lifecycle getUnregisteredEvent() {
 		return Lifecycle.SERVICE_DISAPPEARING;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.ModelElement#getProxyType()
-	 */
 	@Override
 	protected Class<? extends ElementsProxy<Resource>> getProxyType() {
 		return Service.class;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see org.eclipse.sensinact.gateway.core.SensiNactResourceModelElement#
-	 *      getProxy(java.util.List)
-	 */
 	@Override
 	public ServiceProxy getProxy(List<MethodAccessibility> methodAccessibilities) {
 		try {
@@ -708,13 +658,6 @@
 		return null;
 	}
 
-	/**
-	 * @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 Resource getElementProxy(AccessTree<?> tree, ResourceImpl element)
 			throws ModelElementProxyBuildException {
@@ -724,13 +667,6 @@
 		return element.getProxy(tree);
 	}
 
-	/**
-	 * @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(ServiceProxy proxy, ImmutableAccessTree tree) {
 		ServiceProxyWrapper wrapper = new ServiceProxyWrapper(proxy, tree);
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProviderImpl.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProviderImpl.java
index c23d61e..4e76e9a 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProviderImpl.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProviderImpl.java
@@ -79,7 +79,7 @@
 			String location = null;
 			Service admin = getService(ServiceProvider.ADMINISTRATION_SERVICE_NAME);
 			if (admin != null) {
-				JSONObject response = admin.get(LocationResource.LOCATION).getResponse();
+				JSONObject response = admin.get(LocationResource.LOCATION, DataResource.VALUE).getResponse();
 				location = String.valueOf(response.opt(DataResource.VALUE));
 			}
 			return location;
@@ -90,7 +90,7 @@
 			String setLocation = null;
 			Service admin = getService(ServiceProvider.ADMINISTRATION_SERVICE_NAME);
 			if (admin != null) {
-				JSONObject response = admin.set(LocationResource.LOCATION, location).getResponse();
+				JSONObject response = admin.set(LocationResource.LOCATION, DataResource.VALUE, location).getResponse();
 				setLocation = String.valueOf(response.opt(DataResource.VALUE));
 			}
 			return setLocation;
@@ -101,7 +101,7 @@
 			ServiceProvider.LifecycleStatus status = null;
 			Service admin = getService(ServiceProvider.ADMINISTRATION_SERVICE_NAME);
 			if (admin != null) {
-				JSONObject response = admin.get(ServiceProvider.LIFECYCLE_STATUS).getResponse();
+				JSONObject response = admin.get(ServiceProvider.LIFECYCLE_STATUS, DataResource.VALUE).getResponse();
 				status = ServiceProvider.LifecycleStatus.valueOf(String.valueOf(response.opt(DataResource.VALUE)));
 			}
 			return status;
@@ -113,7 +113,7 @@
 			ServiceProvider.LifecycleStatus setStatus = null;
 			Service admin = getService(ServiceProvider.ADMINISTRATION_SERVICE_NAME);
 			if (admin != null) {
-				JSONObject response = admin.set(ServiceProvider.LIFECYCLE_STATUS, status).getResponse();
+				JSONObject response = admin.set(ServiceProvider.LIFECYCLE_STATUS, DataResource.VALUE, status).getResponse();
 				setStatus = ServiceProvider.LifecycleStatus.valueOf(String.valueOf(response.opt(DataResource.VALUE)));
 			}
 			return setStatus;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProxy.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProxy.java
index 140e6a0..a63b2c4 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProxy.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/ServiceProxy.java
@@ -48,11 +48,6 @@
 		this.methods = new HashMap<String, AccessMethod>();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see SensiNactResourceModelElementProxy# getAccessMethod(AccessMethod.Type)
-	 */
 	@Override
 	public AccessMethod getAccessMethod(String method) {
 		return this.methods.get(method);
@@ -103,26 +98,21 @@
 			}
 			switch (methodAccessibility.getMethod().name()) {
 			case "ACT":
-				actMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.ACT),
-						handler);
+				actMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.ACT),handler);
 				break;
 			case "DESCRIBE":
 				break;
 			case "GET":
-				getMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.GET),
-						handler);
+				getMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.GET),handler);
 				break;
 			case "SET":
-				setMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.SET),
-						handler);
+				setMethod = new ServiceAccessMethod(mediator, getPath(), AccessMethod.Type.valueOf(AccessMethod.SET),handler);
 				break;
 			case "SUBSCRIBE":
-				subscribeMethod = new ServiceAccessMethod(mediator, getPath(),
-						AccessMethod.Type.valueOf(AccessMethod.SUBSCRIBE), handler);
+				subscribeMethod = new ServiceAccessMethod(mediator, getPath(),AccessMethod.Type.valueOf(AccessMethod.SUBSCRIBE), handler);
 				break;
 			case "UNSUBSCRIBE":
-				unsubscribeMethod = new ServiceAccessMethod(mediator, getPath(),
-						AccessMethod.Type.valueOf(AccessMethod.UNSUBSCRIBE), handler);
+				unsubscribeMethod = new ServiceAccessMethod(mediator, getPath(),AccessMethod.Type.valueOf(AccessMethod.UNSUBSCRIBE), handler);
 				break;
 			default:
 				break;
@@ -138,16 +128,17 @@
 		Signature getSignature = new Signature(mediator, GET, new Class<?>[] { String.class, String.class },
 				new String[] { "resourceName", "attributeName" });
 
+
 		Signature setSignature = new Signature(mediator, SET,
 				new Class<?>[] { String.class, String.class, Object.class },
 				new String[] { "resourceName", "attributeName", "value" });
 
 		Signature actSignature = new Signature(mediator, ACT, new Class<?>[] { String.class, Object[].class },
 				new String[] { "resourceName", "arguments" });
-
+		
 		Signature subscribeSignature = new Signature(mediator, SUBSCRIBE,
-				new Class<?>[] { String.class, String.class, Recipient.class, Set.class },
-				new String[] { "resourceName", "attributeName", "listener", "conditions" });
+				new Class<?>[] { String.class, String.class, Recipient.class, Set.class, String.class },
+				new String[] { "resourceName", "attributeName", "listener", "conditions", "policy" });
 
 		Signature unsubscribeSignature = new Signature(mediator, UNSUBSCRIBE,
 				new Class<?>[] { String.class, String.class, String.class },
@@ -156,10 +147,6 @@
 		// Get method
 		if (getMethod != null) {
 			getMethod.addSignature(getSignature);
-			Signature getAttributeShortcut = new Signature(mediator, GET, new Class<?>[] { String.class },
-					new String[] { "resourceName" });
-
-			getMethod.addSignature(getAttributeShortcut);
 			registerMethod(AccessMethod.GET, getMethod);
 
 		} else {
@@ -169,10 +156,7 @@
 		}
 		// Set method
 		if (setMethod != null) {
-			setMethod.addSignature(setSignature);
-			Signature setAttributeShortcut = new Signature(mediator, SET, new Class<?>[] { String.class, Object.class },
-					new String[] { "resourceName", "value" });
-			setMethod.addSignature(setAttributeShortcut);
+			setMethod.addSignature(setSignature);			
 			registerMethod(AccessMethod.SET, setMethod);
 
 		} else {
@@ -194,21 +178,16 @@
 		if (subscribeMethod != null) {
 			subscribeMethod.addSignature(subscribeSignature);
 
-			Signature subscribeConditionsShortcut = new Signature(mediator, SUBSCRIBE,
-					new Class<?>[] { String.class, String.class, Recipient.class },
-					new String[] { "resourceName", "attributeName", "listener" });
-
-			subscribeMethod.addSignature(subscribeConditionsShortcut);
-
-			Signature subscribeNameConditionsShortcut = new Signature(mediator, SUBSCRIBE,
-					new Class<?>[] { String.class, Recipient.class }, new String[] { "resourceName", "listener" });
-
-			Signature subscribeNameShortcut = new Signature(mediator, SUBSCRIBE,
-					new Class<?>[] { String.class, Recipient.class, Set.class },
-					new String[] { "resourceName", "listener", "conditions" });
-
-			subscribeMethod.addSignature(subscribeNameConditionsShortcut);
-			subscribeMethod.addSignature(subscribeNameShortcut);
+			Signature subscribePolicyShortcut = new Signature(mediator, SUBSCRIBE,
+				new Class<?>[] { String.class, String.class, Recipient.class, Set.class },
+				new String[] { "resourceName", "attributeName", "listener", "conditions" });
+					
+			Signature subscribeConditionsPolicyShortcut = new Signature(mediator, SUBSCRIBE,
+				new Class<?>[] { String.class, String.class, Recipient.class },
+				new String[] { "resourceName", "attributeName", "listener" });
+			
+			subscribeMethod.addSignature(subscribePolicyShortcut);
+			subscribeMethod.addSignature(subscribeConditionsPolicyShortcut);
 			registerMethod(AccessMethod.SUBSCRIBE, subscribeMethod);
 
 		} else {
@@ -219,8 +198,10 @@
 		// Unsubscribe method
 		if (unsubscribeMethod != null) {
 			unsubscribeMethod.addSignature(unsubscribeSignature);
+			
 			Signature unsubscribeNameShortcut = new Signature(mediator, UNSUBSCRIBE,
-					new Class<?>[] { String.class, String.class }, new String[] { "resourceName", "subscriptionId" });
+				new Class<?>[] { String.class, String.class, String.class }, 
+				new String[] { "resourceName", "attributeName", "subscriptionId" });
 			unsubscribeMethod.addSignature(unsubscribeNameShortcut);
 			registerMethod(AccessMethod.UNSUBSCRIBE, unsubscribeMethod);
 
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Session.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Session.java
index 0a3b426..66adfe5 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Session.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/Session.java
@@ -16,12 +16,12 @@
 import org.eclipse.sensinact.gateway.common.execution.Executable;
 import org.eclipse.sensinact.gateway.core.message.MidAgentCallback;
 import org.eclipse.sensinact.gateway.core.message.SnaFilter;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.ActResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.GetResponse;
+import org.eclipse.sensinact.gateway.core.method.SetResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.UnsubscribeResponse;
 import org.json.JSONArray;
 import org.json.JSONObject;
 
@@ -130,11 +130,13 @@
 	 * @param attributeId
 	 *            the String identifier of the resource's attribute targeted by the
 	 *            access method call
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the GET access method invocation,
 	 *         wrapped into a {@link GetResponse}
 	 */
-	GetResponse get(String serviceProviderId, String serviceId, String resourceId, String attributeId);
+	GetResponse get(String serviceProviderId, String serviceId, String resourceId, String attributeId, 
+			Object...args);
 
 	/**
 	 * Invokes the GET access method on the resource whose String identifier is
@@ -155,13 +157,14 @@
 	 * @param attributeId
 	 *            the String identifier of the resource's attribute targeted by the
 	 *            access method call
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the GET access method invocation,
 	 *         tagged by the specified request identifier, and wrapped into a
 	 *         {@link GetResponse}
 	 */
 	GetResponse get(String requestId, String serviceProviderId, String serviceId, String resourceId,
-			String attributeId);
+			String attributeId, Object...args);
 
 	/**
 	 * Invokes the SET access method on the resource whose String identifier is
@@ -181,12 +184,13 @@
 	 *            access method call
 	 * @param parameter
 	 *            the value object to be set
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SET access method invocation,
 	 *         wrapped into a {@link SetResponse}
 	 */
 	SetResponse set(String serviceProviderId, String serviceId, String resourceId, String attributeId,
-			Object parameter);
+			Object parameter, Object...args);
 
 	/**
 	 * Invokes the SET access method on the resource whose String identifier is
@@ -209,13 +213,14 @@
 	 *            access method call
 	 * @param parameter
 	 *            the value object to be set
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SET access method invocation,
 	 *         tagged by the specified request identifier and , wrapped into a
 	 *         {@link SetResponse}
 	 */
 	SetResponse set(String requestId, String serviceProviderId, String serviceId, String resourceId,
-			String attributeId, Object parameter);
+			String attributeId, Object parameter, Object...args);
 
 	/**
 	 * Invokes the ACT access method on the resource whose String identifier is
@@ -283,12 +288,13 @@
 	 * @param conditions
 	 *            the JSON formated set of constraints applying on the subscription
 	 *            to be created
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SUBSCRIBE access method invocation,
 	 *         wrapped into a {@link SubscribeResponse}
 	 */
 	SubscribeResponse subscribe(String serviceProviderId, String serviceId, String resourceId, 
-			Recipient recipient, JSONArray conditions);
+			Recipient recipient, JSONArray conditions, Object...args);
 
 	/**
 	 * Invokes the SUBSCRIBE access method on the resource whose String identifier
@@ -312,12 +318,13 @@
 	 * @param policy
 	 *            the policy applying on the ErrorHandler of the callback of the 
 	 *            subscription to be created
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SUBSCRIBE access method invocation,
 	 *         wrapped into a {@link SubscribeResponse}
 	 */
 	SubscribeResponse subscribe(String serviceProviderId, String serviceId, String resourceId, 
-		Recipient recipient, JSONArray conditions, String policy);
+		Recipient recipient, JSONArray conditions, String policy, Object...args);
 
 	/**
 	 * Invokes the SUBSCRIBE access method on the resource whose String identifier
@@ -341,13 +348,14 @@
 	 * @param conditions
 	 *            the JSON formated set of constraints applying on the subscription
 	 *            to be created
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SUBSCRIBE access method invocation,
 	 *         tagged by the specified request identifier, and wrapped into a
 	 *         {@link SubscribeResponse}
 	 */
 	SubscribeResponse subscribe(String requestId, String serviceProviderId, String serviceId, 
-		String resourceId, Recipient recipient, JSONArray conditions);
+		String resourceId, Recipient recipient, JSONArray conditions, Object...args);
 
 	/**
 	 * Invokes the SUBSCRIBE access method on the resource whose String identifier
@@ -374,13 +382,14 @@
 	 * @param policy
 	 *            the policy applying on the ErrorHandler of the callback of the subscription
 	 *            to be created
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the SUBSCRIBE access method invocation,
 	 *         tagged by the specified request identifier, and wrapped into a
 	 *         {@link SubscribeResponse}
 	 */
 	SubscribeResponse subscribe(String requestId, String serviceProviderId, String serviceId, String resourceId,
-			Recipient recipient, JSONArray conditions, String policy);
+			Recipient recipient, JSONArray conditions, String policy, Object...args);
 
 	/**
 	 * Invokes the UNSUBSCRIBE access method on the resource whose String identifier
@@ -397,12 +406,13 @@
 	 *            method call
 	 * @param subscriptionId
 	 *            the String identifier of the subscription to be deleted
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the UNSUBSCRIBE access method
 	 *         invocation, wrapped into a {@link UnsubscribeResponse}
 	 */
 	UnsubscribeResponse unsubscribe(String serviceProviderId, String serviceId, String resourceId,
-			String subscriptionId);
+			String subscriptionId, Object...args);
 
 	/**
 	 * Invokes the UNSUBSCRIBE access method on the resource whose String identifier
@@ -422,13 +432,14 @@
 	 *            method call
 	 * @param subscriptionId
 	 *            the String identifier of the subscription to be deleted
+	 * @param args optional extra arguments Object array parameterizing the call
 	 * 
 	 * @return the JSON formated response of the UNSUBSCRIBE access method
 	 *         invocation, tagged by the specified request identifier, and wrapped
 	 *         into a {@link UnsubscribeResponse}
 	 */
-	UnsubscribeResponse unsubscribe(String requestId, String serviceProviderId, String serviceId, String resourceId,
-			String subscriptionId);
+	UnsubscribeResponse unsubscribe(String requestId, String serviceProviderId, String serviceId, 
+		String resourceId, String subscriptionId, Object...args);
 
 	/**
 	 * Creates and registers an {@link SnaAgent} attached to this Session and that
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 640f063..f05fd92 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
@@ -177,43 +177,43 @@
 		String messageMethod = null;
 
 		switch (((SnaMessageSubType) message.getType()).getSnaMessageType()) {
-		case RESPONSE:
-			switch ((AccessMethodResponse.Response) message.getType()) {
-			case ACT_RESPONSE:
-				messageMethod = AccessMethod.ACT;
+			case RESPONSE:
+				switch ((AccessMethodResponse.Response) message.getType()) {
+				case ACT_RESPONSE:
+					messageMethod = AccessMethod.ACT;
+					break;
+				case DESCRIBE_RESPONSE:
+					messageMethod = AccessMethod.DESCRIBE;
+					break;
+				case GET_RESPONSE:
+					messageMethod = AccessMethod.GET;
+					break;
+				case SET_RESPONSE:
+					messageMethod = AccessMethod.SET;
+					break;
+				case SUBSCRIBE_RESPONSE:
+					messageMethod = AccessMethod.SUBSCRIBE;
+					break;
+				case UNSUBSCRIBE_RESPONSE:
+					messageMethod = AccessMethod.UNSUBSCRIBE;
+					break;
+				default:
+					break;
+				}
 				break;
-			case DESCRIBE_RESPONSE:
+			case ERROR:
+			case LIFECYCLE:
 				messageMethod = AccessMethod.DESCRIBE;
 				break;
-			case GET_RESPONSE:
+			case UPDATE:
 				messageMethod = AccessMethod.GET;
 				break;
-			case SET_RESPONSE:
-				messageMethod = AccessMethod.SET;
-				break;
-			case SUBSCRIBE_RESPONSE:
-				messageMethod = AccessMethod.SUBSCRIBE;
-				break;
-			case UNSUBSCRIBE_RESPONSE:
-				messageMethod = AccessMethod.UNSUBSCRIBE;
-				break;
 			default:
 				break;
-			}
-			break;
-		case ERROR:
-		case LIFECYCLE:
-			messageMethod = AccessMethod.DESCRIBE;
-			break;
-		case UPDATE:
-			messageMethod = AccessMethod.GET;
-			break;
-		default:
-			break;
 		}
-		if (messageMethod != null) {
+		if (messageMethod != null)
 			doHandleAgents(message, messageMethod);
-		}
+		
 		doHandleSubscribers(message);
 	}
 
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AbstractAccessMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AbstractAccessMethod.java
index 6a64eee..4ed190d 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AbstractAccessMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AbstractAccessMethod.java
@@ -10,6 +10,8 @@
  */
 package org.eclipse.sensinact.gateway.core.method;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Deque;
 import java.util.HashMap;
@@ -17,8 +19,10 @@
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.common.constraint.Fixed;
@@ -130,8 +134,9 @@
 	 * @param parameterTypes
 	 *            the array of types of the {@link Signature} to create
 	 * @return a new {@link Signature} instance
+	 * @throws InvalidValueException 
 	 */
-	private Signature createSignature(Class<?>[] parameterTypes) {
+	private Signature createSignature(Class<?>[] parameterTypes) throws InvalidValueException {
 		Class<?>[] types = parameterTypes == null ? new Class<?>[0] : parameterTypes;
 
 		String[] names = new String[types.length];
@@ -157,24 +162,21 @@
 	 *            the array of parameter string names of the {@link Signature} to
 	 *            create
 	 * @return a new {@link Signature} instance
+	 * 
+	 * @throws InvalidValueException 
 	 */
-	private Signature createSignature(Class<?>[] parameterTypes, String[] parameterNames) {
+	private Signature createSignature(Class<?>[] parameterTypes, String[] parameterNames) throws InvalidValueException {
 		Signature signature = null;
 		Class<?>[] types = parameterTypes == null ? new Class<?>[0] : parameterTypes;
-
 		String[] names = parameterNames == null ? new String[0] : parameterNames;
-
-		if (types.length > names.length) {
+		if (types.length > names.length) 
 			return signature;
-		}
 		Parameter[] parameters = new Parameter[types.length];
-
 		int index = 0;
 		int length = types.length;
 		for (; index < length; index++) {
 			try {
 				parameters[index] = new Parameter(this.mediator, names[index], types[index]);
-
 			} catch (InvalidValueException e) {
 				// cannot happen
 				e.printStackTrace();
@@ -183,7 +185,7 @@
 		signature = new Signature(this.mediator, type.name(), parameters);
 		return signature;
 	}
-
+	
 	/**
 	 * Creates a {@link Signature} using the parameter types array argument and maps
 	 * it to the {@link AccessMethodExecutor} passed as parameter
@@ -196,9 +198,10 @@
 	 * @param policy
 	 *            the {@link AccessMethodExecutor.Execu tionPolicy} of the specified
 	 *            {@link AccessMethodExecutor}
+	 * @throws InvalidValueException 
 	 */
-	public void addSignature(Class<?>[] parameterTypes, AccessMethodExecutor executor,
-			AccessMethodExecutor.ExecutionPolicy policy) {
+	public void addSignature(Class<?>[] parameterTypes, AccessMethodExecutor executor, AccessMethodExecutor.ExecutionPolicy policy) 
+		throws InvalidValueException {
 		Signature signature = this.getSignature(parameterTypes);
 		if (signature != null) {
 			this.addSignature(signature, executor, policy);
@@ -222,10 +225,11 @@
 	 * @param policy
 	 *            the {@link AccessMethodExecutor.ExecutionPolicy} of the specified
 	 *            {@link AccessMethodExecutor}
+	 * @throws InvalidValueException 
 	 * @throws InvalidConstraintDefinitionException
 	 */
 	public void addSignature(Class<?>[] parameterTypes, String[] parameterNames, AccessMethodExecutor executor,
-			AccessMethodExecutor.ExecutionPolicy policy) {
+			AccessMethodExecutor.ExecutionPolicy policy) throws InvalidValueException {	
 		Signature signature = this.getSignature(parameterTypes);
 		if (signature != null) {
 			this.addSignature(signature, executor, policy);
@@ -326,64 +330,51 @@
 	 *            {@link Shortcut}
 	 */
 	public void addShortcut(Shortcut shortcut, Signature signature) {
-		if (shortcut == null || signature == null
-				|| (this.map.get(signature) == null && this.shortcuts.get(signature) == null)) {
-			return;
-		}
+		if (shortcut == null || signature == null || (this.map.get(signature) == null && this.shortcuts.get(signature) == null)) 
+			return;		
 		this.shortcuts.put(shortcut, signature);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Describable# getDescription()
-	 */
 	@Override
 	public AccessMethodDescription getDescription() {
 		return new AccessMethodDescription(this);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Nameable#getName()
-	 */
 	@Override
 	public String getName() {
 		return this.type.name();
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see PathElement#getPath()
-	 */
+	@Override
 	public String getPath() {
 		return this.uri;
 	}
 
-	/**
-	 * @return
-	 */
+	@Override
 	public int size() {
 		return this.map.size() + this.shortcuts.size();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.method.AccessMethod#invoke(java.lang.Object[])
-	 */
 	@Override
 	public R invoke(Object[] parameters) {
-		Iterator<Signature> iterator = this.getSignatures().iterator();
+		List<Signature> signatures = new ArrayList<>();
+		
+		signatures.addAll(this.shortcuts.keySet().stream().sorted(
+			(s1,s2)->{return s1.length()<s2.length()?-1:(s1.length()>s2.length()?1:0);}
+			).collect(Collectors.toList()));
+		
+		signatures.addAll(this.map.keySet().stream().sorted(
+			(s1,s2)->{return s1.length()<s2.length()?-1:(s1.length()>s2.length()?1:0);}
+			).collect(Collectors.toList()));
+		
+		Iterator<Signature> iterator = signatures.iterator();
 
 		while (iterator.hasNext()) {
 			Signature signature = iterator.next();
-			if (signature.validParameters(parameters)) {
+			if (signature.validParameters(parameters)) 
 				return this.invoke(signature);
-			}
 		}
+		
 		return this.error(AccessMethodResponse.NOT_FOUND_ERROR_CODE, "Unknown signature");
 	}
 
@@ -391,16 +382,13 @@
 	 * Invokes this method using the specified {@link Signature}'s parameter values
 	 * to parameterize the call
 	 * 
-	 * @param signature
-	 *            the {@link Signature} of this method parameterizing the invocation
-	 * @param accessLevel
-	 *            the integer access level of the call
-	 * @return the invocation resulting {@link SnaMessage}
+	 * @param signature  the {@link Signature} of this method parameterizing the invocation
+
+	 * @return the resulting {@link SnaMessage}
 	 */
 	public synchronized <A extends AccessMethodResponseBuilder<T, R>> R invoke(Signature signature) {
-		if (signature == null) {
+		if (signature == null) 
 			return this.error(SnaErrorfulMessage.BAD_REQUEST_ERROR_CODE, "Null signature");
-		}
 		Deque<AccessMethodExecutor> executors = null;
 		Signature current = signature;
 		Signature previous = null;
@@ -417,26 +405,25 @@
 				break;
 			}
 			((Shortcut) signature).push((Shortcut) current);
-		}
-		if (executors == null) {
+		};
+		if (executors == null) 
 			return this.error(SnaErrorfulMessage.NOT_FOUND_ERROR_CODE, "Unknown signature");
-		}
+		
 		Object[] parameters = signature.values();
 		A result = this.createAccessMethodResponseBuilder(parameters);
-
-		if (preProcessingExecutor != null) {
-			executors.addFirst(preProcessingExecutor);
-		}
-		if (postProcessingExecutor != null) {
+		
+		if (preProcessingExecutor != null) 
+			executors.addFirst(preProcessingExecutor);		
+		
+		if (postProcessingExecutor != null) 
 			executors.addLast(postProcessingExecutor);
-		}
+		
 		Iterator<AccessMethodExecutor> iterator = executors.iterator();
 
 		while (iterator.hasNext()) {
 			AccessMethodExecutor executor = iterator.next();
-			if (executor == null) {
-				continue;
-			}
+			if (executor == null) 
+				continue;			
 			try {
 				executor.execute(result);
 
@@ -447,12 +434,12 @@
 				}
 			}
 		}
-		if (preProcessingExecutor != null) {
+		if (preProcessingExecutor != null) 
 			executors.removeFirst();
-		}
-		if (postProcessingExecutor != null) {
+		
+		if (postProcessingExecutor != null) 
 			executors.removeLast();
-		}
+		
 		return result.createAccessMethodResponse();
 	}
 
@@ -460,11 +447,6 @@
 		return AccessMethodResponse.<T, R>error(mediator, this.getPath(), this.getType(), errorCode, message, null);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see AccessMethod#getSignatures()
-	 */
 	@Override
 	public Set<Signature> getSignatures() {
 		Set<Signature> signatures = new HashSet<Signature>(this.map.keySet());
@@ -472,11 +454,6 @@
 		return Collections.unmodifiableSet(signatures);
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see AccessMethod# getType()
-	 */
 	@Override
 	public AccessMethod.Type getType() {
 		return this.type;
@@ -490,11 +467,6 @@
 		this.shortcuts.clear();
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see org.eclipse.sensinact.gateway.core.method.SnaObjectMethod#getErrorHandler()
-	 */
 	@Override
 	public ErrorHandler getErrorHandler() {
 		return this.errorHandler;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethod.java
index fcccb88..591d773 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethod.java
@@ -52,9 +52,8 @@
 		 * 
 		 */
 		private static final void initialize() {
-			if (initialized) {
+			if (initialized) 
 				return;
-			}
 			initialized = true;
 			new Type(AccessMethod.GET, AccessMethodResponse.Response.GET_RESPONSE);
 			new Type(AccessMethod.SET, AccessMethodResponse.Response.SET_RESPONSE);
@@ -69,12 +68,10 @@
 		 * @return
 		 */
 		public static final Type valueOf(String name) {
-			if (!initialized) {
+			if (!initialized) 
 				initialize();
-			}
-			if (name == null) {
+			if (name == null) 
 				return null;
-			}
 			return METHODS.get(name);
 		}
 
@@ -83,12 +80,10 @@
 		 * @return
 		 */
 		public static final Type valueOf(AccessMethodResponse.Response response) {
-			if (!initialized) {
+			if (!initialized)
 				initialize();
-			}
-			if (response == null) {
+			if (response == null) 
 				return null;
-			}
 			Collection<Type> methods = METHODS.values();
 			Iterator<Type> it = methods.iterator();
 			Type m = null;
@@ -96,9 +91,8 @@
 				if (!it.hasNext())
 					break;
 				m = it.next();
-				if (response.equals(m.response)) {
+				if (response.equals(m.response))
 					return m;
-				}
 			}
 			return null;
 		}
@@ -107,9 +101,8 @@
 		 * @return
 		 */
 		public static final Type[] values() {
-			if (!initialized) {
+			if (!initialized)
 				initialize();
-			}
 			Collection<Type> collection = METHODS.values();
 			Type[] types = new Type[collection.size()];
 			Iterator<Type> iterator = collection.iterator();
@@ -159,20 +152,12 @@
 			return this.response;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.lang.Object#hashCode()
-		 */
+		@Override	
 		public int hashCode() {
 			return this.ordinal();
 		}
-
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.lang.Object#equals(java.lang.Object)
-		 */
+		
+		@Override	
 		public boolean equals(Object o) {
 			if (AccessMethod.Type.class.isAssignableFrom(o.getClass())) {
 				return ((AccessMethod.Type) o).ordinal() == this.ordinal();
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethodResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethodResponse.java
index dc49d0c..34bdcb6 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethodResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/AccessMethodResponse.java
@@ -26,16 +26,7 @@
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
 import org.eclipse.sensinact.gateway.core.message.SnaMessageSubType;
 import org.eclipse.sensinact.gateway.core.message.SnaResponseMessage;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeMethod.DescribeType;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeStringResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.UnsubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeMethod.DescribeType;
 
 /**
  * Extended {@link SnaMessage} dedicated to the responses to the
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActMethod.java
similarity index 85%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActMethod.java
index c6d89ab..9b70be7 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponse.java
similarity index 92%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponse.java
index ef17fdf..4ef63cf 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponse.java
@@ -8,7 +8,7 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -16,8 +16,6 @@
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaConstants;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 import org.eclipse.sensinact.gateway.util.JSONUtils;
 import org.json.JSONArray;
 
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponseBuilder.java
similarity index 88%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponseBuilder.java
index afbca53..a4b81dc 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/ActResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/ActResponseBuilder.java
@@ -8,11 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponse.java
similarity index 96%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponse.java
index 7d91128..23b5b36 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponse.java
@@ -8,7 +8,7 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponseBuilder.java
similarity index 94%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponseBuilder.java
index 3eee79c..29c798b 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeJSONResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeJSONResponseBuilder.java
@@ -8,10 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeMethod.java
similarity index 90%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeMethod.java
index 2fafbea..9007534 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 
 /**
  * Describe {@link AccessMethod}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponse.java
similarity index 95%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponse.java
index 6f793ed..9ca3165 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponse.java
@@ -8,7 +8,7 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -16,7 +16,6 @@
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.common.props.TypedKey;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 import org.eclipse.sensinact.gateway.util.JSONUtils;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponseBuilder.java
similarity index 90%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponseBuilder.java
index 4d2b542..89b9c23 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeResponseBuilder.java
@@ -8,10 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 
 /**
  * Extended {@link AccessMethodResponseBuilder} dedicated to
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponse.java
similarity index 95%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponse.java
index 0221565..aa7fa23 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponse.java
@@ -8,7 +8,7 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponseBuilder.java
similarity index 97%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponseBuilder.java
index 4a590db..44788a1 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/DescribeStringResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/DescribeStringResponseBuilder.java
@@ -8,13 +8,12 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import java.util.Enumeration;
 import java.util.Iterator;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 import org.json.JSONArray;
 import org.json.JSONObject;
 
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetMethod.java
similarity index 81%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetMethod.java
index 71359c6..7976e1f 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponse.java
similarity index 86%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponse.java
index f97f667..d42ff83 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponse.java
@@ -8,12 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 
 /**
  * Extended {@link AccessMethodJSONResponse} returned by an {@link GetMethod}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponseBuilder.java
similarity index 91%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponseBuilder.java
index 595ed5e..7dfcc6a 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/GetResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/GetResponseBuilder.java
@@ -8,11 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/LinkedActMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/LinkedActMethod.java
index 2ae8195..94d6306 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/LinkedActMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/LinkedActMethod.java
@@ -19,7 +19,7 @@
 import java.util.Map;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.legacy.ActMethod;
+import org.eclipse.sensinact.gateway.common.primitive.InvalidValueException;
 
 /**
  * Extended {@link AccessMethod} dedicated to an Actuation
@@ -120,12 +120,11 @@
 	 * Links the registered executors for the specified {@link Signature} of the
 	 * {@link ActMethod} passed as parameters, to this LinkedActMethod
 	 * 
-	 * @param linked
-	 *            the {@link ActMethod} to link with
-	 * @param Signature
-	 *            the {@Signature} of the {@link ActMethod} to link with
+	 * @param linked the {@link ActMethod} to link with
+	 * @param Signature the {@Signature} of the {@link ActMethod} to link with
+	 * @throws InvalidValueException 
 	 */
-	public final void createShortcut(Signature signature, Shortcut shortcut) {
+	public final void createShortcut(Signature signature, Shortcut shortcut) throws InvalidValueException {
 		Signature thatSignature = null;
 
 		if (linked == null || signature == null || signature.getName().intern() != super.getName().intern()
@@ -133,7 +132,6 @@
 			return;
 		}
 		Deque<AccessMethodExecutor> executors = linked.map.get(thatSignature);
-
 		Map<Integer, Parameter> fixedParameters = new HashMap<Integer, Parameter>();
 
 		fixedParameters.putAll(shortcut.getFixedParameters());
@@ -155,9 +153,7 @@
 		while (iterator.hasNext()) {
 			parameters.add(iterator.next());
 		}
-		super.map.put(
-				new Shortcut(super.mediator, signature.getName(), signature.getResponseType(),
-						parameters.toArray(new Parameter[parameters.size()]), fixedParameters),
-				new LinkedList<AccessMethodExecutor>(executors));
+		super.map.put(new Shortcut(super.mediator, signature.getName(), parameters.toArray(new Parameter[parameters.size()]), 
+			fixedParameters),  new LinkedList<AccessMethodExecutor>(executors));
 	}
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Parameter.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Parameter.java
index e970203..639a21b 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Parameter.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Parameter.java
@@ -12,10 +12,12 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.sensinact.gateway.core.DataResource;
 import org.eclipse.sensinact.gateway.core.Metadata;
 import org.eclipse.sensinact.gateway.core.message.Recipient;
 import org.json.JSONArray;
@@ -45,14 +47,15 @@
 	protected boolean fixed = false;
 	protected Object fixedValue = null;
 	protected List<Constraint> constraints;
-
+	
 	/**
 	 * Constructor
 	 * 
-	 * @param name
-	 *            this parameter's name
-	 * @param type
-	 *            this parameter's type
+	 * @param mediator {@link Mediator} allowing the Parameter to be created to interact 
+	 * with the OSGi host environment
+	 * @param name the String name of the Parameter to be instantiated
+	 * @param type the java type of the Parameter to be instantiated
+	 * 
 	 * @throws InvalidValueException
 	 */
 	public Parameter(Mediator mediator, String name, Class<?> type) throws InvalidValueException {
@@ -65,13 +68,15 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param name
-	 *            this parameter's name
-	 * @param type
-	 *            this parameter's type
+	 * @param mediator {@link Mediator} allowing the Parameter to be created to interact 
+	 * with the OSGi host environment
+	 * @param name the String name of the Parameter to be instantiated
+	 * @param type the java type of the Parameter to be instantiated
+	 * @param constraints the {@link List} of {@link Constaint}s applying on the Parameter to be instantiated
+	 * 
 	 * @throws InvalidValueException
 	 */
-	public Parameter(Mediator mediator, String name, Class<?> type, Set<Constraint> constraints)
+	public Parameter(Mediator mediator, String name, Class<?> type, List<Constraint> constraints)
 			throws InvalidValueException {
 		super(mediator, name, type);
 		this.fixed = false;
@@ -82,10 +87,13 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param name
-	 *            this parameter's name
-	 * @param type
-	 *            this parameter's type
+	 * 
+	 * @param mediator {@link Mediator} allowing the Parameter to be created to interact 
+	 * with the OSGi host environment
+	 * @param name the String name of the Parameter to be instantiated
+	 * @param type the java type of the Parameter to be instantiated
+	 * @param value the fixed Object value of the Parameter to be instantiated
+	 * 
 	 * @throws InvalidValueException
 	 */
 	public Parameter(Mediator mediator, String name, Class<?> type, Object value) throws InvalidValueException {
@@ -96,29 +104,30 @@
 	}
 
 	/**
-	 * @param parameter
+	 * Constructor
+	 * 
+	 * @param mediator {@link Mediator} allowing the Parameter to be created to interact 
+	 * with the OSGi host environment
+	 * @param parameter the {@link JSONObject} describing the Parameter to be instantiated
 	 * 
 	 * @throws InvalidValueException
 	 */
 	public Parameter(Mediator mediator, JSONObject parameter) throws InvalidValueException {
 		super(mediator, parameter);
-		this.fixed = parameter.optBoolean(FIXED_PARAMETER_KEY);
+		this.fixed = parameter.optBoolean(FIXED_PARAMETER_KEY);	
 		if (fixed) {
-			this.fixedValue = value;
+			this.fixedValue = parameter.opt(DataResource.VALUE);
 			this.constraints = Collections.emptyList();
-
 		} else {
 			this.fixedValue = null;
 			JSONArray constraints = parameter.optJSONArray(Metadata.CONSTRAINTS);
 			List<Constraint> constraintList = new ArrayList<Constraint>();
 			int index = 0;
 			int length = constraints == null ? 0 : constraints.length();
-
 			try {
 				for (; index < length; index++) {
 					JSONObject constraintJSON = constraints.getJSONObject(index);
-					Constraint constraint = ConstraintFactory.Loader.load(super.mediator.getClassLoader(),
-							constraintJSON);
+					Constraint constraint = ConstraintFactory.Loader.load(super.mediator.getClassLoader(),constraintJSON);
 					constraintList.add(constraint);
 				}
 			} catch (InvalidConstraintDefinitionException e) {
@@ -198,79 +207,55 @@
 	 *         </ul>
 	 */
 	public boolean validParameter(Object parameter) {
-		if (Modifiable.FIXED.equals(this.getModifiable())) {
+		if (Modifiable.FIXED.equals(this.getModifiable())) 
 			return true;
-		}
+		if((parameter == null || (parameter.getClass().isArray() 
+				&& parameter.getClass().getComponentType() == Object.class)))
+			return true;
 		Iterator<Constraint> iterator = this.constraints.iterator();
-
 		while (iterator.hasNext()) {
 			Constraint constraint = iterator.next();
-			if (!constraint.complies(parameter)) {
+			if (!constraint.complies(parameter)) 
 				return false;
-			}
 		}
 		try {
 			super.setValue(parameter);
-
 		} catch (InvalidValueException e) {
 			return false;
 		}
 		return true;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see Primitive #getModifiable()
-	 */
 	@Override
 	public Modifiable getModifiable() {
 		return !this.fixed ? Modifiable.UPDATABLE : Modifiable.FIXED;
 	}
-
-	/**
-	 * 
-	 * @throws InvalidValueException
-	 */
+	
 	public void reset() {
-		if (Modifiable.FIXED.equals(this.getModifiable())) {
+		if (Modifiable.FIXED.equals(this.getModifiable())) 
 			return;
-		}
 		try {
 			super.setValue(this.fixedValue);
-
 		} catch (InvalidValueException e) {
-			// should never happen
-			e.printStackTrace();
+			mediator.error(e);
 		}
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Primitive#getValue()
-	 */
 	@Override
 	public Object getValue() {
 		return super.value;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see JSONable#getJSON()
-	 */
 	@Override
 	public String getJSON() {
 		JSONObject description = getJSONObject();
-		if (String.class == this.getType() || this.getType().isPrimitive()) {
+		if (String.class == this.getType() || this.getType().isPrimitive()) 
 			description.put(PrimitiveDescription.VALUE_KEY, this.getValue());
-		} else {
+		else
 			description.put(PrimitiveDescription.VALUE_KEY, JSONUtils.toJSONFormat(this.getValue()));
-		}
 		return description.toString();
 	}
-
+	
 	/**
 	 * Returns the JSONObject from which is based the JSON formated string
 	 * description of this Parameter
@@ -284,7 +269,7 @@
 
 		description.put(PrimitiveDescription.TYPE_KEY, typeName);
 		description.put(FIXED_PARAMETER_KEY, this.fixed);
-
+		
 		JSONArray constraints = new JSONArray();
 		Iterator<Constraint> iterator = this.constraints.iterator();
 		while (iterator.hasNext()) {
@@ -295,12 +280,6 @@
 		return description;
 	}
 
-	/**
-	 * Validates the type of this Primitive
-	 * 
-	 * @param type
-	 *            the type to be validated
-	 */
 	@Override
 	protected final void checkType(Class<?> type) throws InvalidValueTypeException {
 		if (Object.class != type && Object[].class != type && !Recipient.class.isAssignableFrom(type)
@@ -309,43 +288,29 @@
 		}
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Primitive#beforeChange(java.lang.Object)
-	 */
 	@Override
 	protected void beforeChange(Object value) throws InvalidValueException {
 		// do nothing
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see Primitive#afterChange(java.lang.Object)
-	 */
 	@Override
 	protected void afterChange(Object value) throws InvalidValueException {
 		// do nothing
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see java.lang.Object#clone()
-	 */
+	@Override
 	public Object clone() {
 		try {
 			if (this.constraints.isEmpty()) {
-				if (this.fixed) {
+				if (this.fixed) 
 					return new Parameter(super.mediator, this.name, this.type, this.fixedValue);
-				} else {
+				else 
 					return new Parameter(super.mediator, this.name, this.type);
-				}
-			} else {
+			} else 
 				return new Parameter(super.mediator, this.name, this.type, this.constraints);
-			}
+			
 		} catch (InvalidValueException e) {
+			e.printStackTrace();
 			return null;
 		}
 	}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetMethod.java
similarity index 81%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetMethod.java
index 1a1f0d4..e16f8bd 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponse.java
similarity index 86%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponse.java
index b98c55b..2b7af70 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponse.java
@@ -8,12 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 
 /**
  * Extended {@link AccessMethodJSONResponse} returned by an {@link SetMethod}
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponseBuilder.java
similarity index 91%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponseBuilder.java
index 4209d25..a102d59 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SetResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SetResponseBuilder.java
@@ -8,11 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse.Status;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Shortcut.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Shortcut.java
index 8263d74..d8b3531 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Shortcut.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Shortcut.java
@@ -10,6 +10,7 @@
  */
 package org.eclipse.sensinact.gateway.core.method;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -31,16 +32,16 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param type
-	 *            the type of the {@link AccessMethod} associates to the shortcut to
-	 *            instantiate
-	 * @param parameterTypes
-	 *            the array of parameter types of the shortcut to instantiate
-	 * @param parameterNames
-	 *            the array of parameter names of the shortcut to instantiate
-	 * @param fixedParameters
-	 *            the set of fixed {@link Parameter}s mapped to their index in the
-	 *            method signature
+	 * @param mediator the {@link Mediator} allowing the Shortcut to be instantiated to interact
+	 * with the OSGi host environment 
+	 * @param type the type of the {@link AccessMethod} associates to the Shortcut to be
+	 * instantiated
+	 * @param parameterTypes the array of parameter types of the Shortcut to be
+	 * instantiated
+	 * @param parameterNames the array of parameter names of the Shortcut to be
+	 * instantiated
+	 * @param fixedParameters the set of fixed {@link Parameter}s mapped to their index in the
+	 *  method signature
 	 * @throws InvalidValueException
 	 */
 	public Shortcut(Mediator mediator, AccessMethod.Type type, Class<?>[] parameterTypes, String[] parameterNames,
@@ -49,22 +50,21 @@
 		this.fixedParameters = Collections.unmodifiableMap(fixedParameters);
 		this.shortucts = new Stack<Shortcut>();
 	}
-
+	
 	/**
 	 * Constructor
 	 * 
-	 * @param methodType
-	 *            the type of the associated {@link AccessMethod}
-	 * @param responseType
-	 *            the object type returned by the associated {@link AccessMethod}
-	 * @param parameters
-	 *            this Signature {@link Parameter}s array
-	 * @param fixedParameters
-	 *            the set of fixed {@link Parameter}s mapped to their index in the
-	 *            method signature
+	 * @param mediator the {@link Mediator} allowing the Shortcut to be instantiated to interact
+	 * with the OSGi host environment 
+	 * @param methodType the type of the associated {@link AccessMethod}
+	 * @param responseType the object type returned by the associated {@link AccessMethod}
+	 * @param parameters the {@link Parameter}s array parameterizing the call
+	 * @param fixedParameters the set of fixed {@link Parameter}s mapped to their index in the
+	 * method signature
+	 * @throws InvalidValueException 
 	 */
-	public Shortcut(Mediator mediator, String methodType, Parameter[] parameters,
-			Map<Integer, Parameter> fixedParameters) {
+	public Shortcut(Mediator mediator, String methodType, Parameter[] parameters, Map<Integer, Parameter> fixedParameters) 
+	throws InvalidValueException {
 		super(mediator, methodType, parameters);
 		this.fixedParameters = Collections.unmodifiableMap(fixedParameters);
 		this.shortucts = new Stack<Shortcut>();
@@ -73,18 +73,20 @@
 	/**
 	 * Constructor
 	 * 
-	 * @param name
-	 *            the type's name of the associated {@link AccessMethod}
-	 * @param responseType
-	 *            the object type returned by the associated {@link AccessMethod}
-	 * @param parameters
-	 *            this Signature {@link Parameter}s array
-	 * @param fixedParameters
-	 *            the set of fixed {@link Parameter}s mapped to their index in the
-	 *            method signature
+	 * 
+	 * @param mediator the {@link Mediator} allowing the Shortcut to be instantiated to interact
+	 * with the OSGi host environment 
+	 * @param methodType the type of the associated {@link AccessMethod}
+	 * @param responseType the object type returned by the associated {@link AccessMethod}
+	 * @param parameters the {@link Parameter}s array parameterizing the call
+	 * @param fixedParameters the set of fixed {@link Parameter}s mapped to their index in the
+	 * method signature
+	 * @param varArgs boolean defining whether thz Shortcut to be instantiated includes an optional
+	 * variable Objects array argument
+	 * @throws InvalidValueException 
 	 */
 	public Shortcut(Mediator mediator, String name, AccessMethodResponse.Response returnedType, Parameter[] parameters,
-			Map<Integer, Parameter> fixedParameters) {
+	Map<Integer, Parameter> fixedParameters) throws InvalidValueException {
 		super(mediator, name, returnedType, parameters);
 		this.fixedParameters = Collections.unmodifiableMap(fixedParameters);
 		this.shortucts = new Stack<Shortcut>();
@@ -94,13 +96,11 @@
 	 * Pushes the Shortcut whose fixed parameters have to be used while building the
 	 * object values array
 	 * 
-	 * @param shortcut
-	 *            the Shortcut to push
+	 * @param shortcut the Shortcut to push
 	 */
 	public void push(Shortcut shortcut) {
-		if (shortcut == null) {
-			return;
-		}
+		if (shortcut == null) 
+			return;		
 		this.shortucts.push(shortcut);
 	}
 
@@ -113,17 +113,10 @@
 		return this.fixedParameters;
 	}
 
-	/**
-	 * Returns the array of object values of this Shortcut's set of
-	 * {@link Parameter}s after completion
-	 * 
-	 * @return the array of this Shortcut's {@link Parameter}s'object values
-	 */
 	@Override
 	public Object[] values() {
 		int position = 0;
 		Map<Integer, Parameter> gathered = new HashMap<Integer, Parameter>();
-
 		while (!this.shortucts.isEmpty()) {
 			gathered.putAll(this.shortucts.pop().getFixedParameters());
 		}
@@ -135,20 +128,20 @@
 
 		for (; position < values.length; position++) {
 			parameter = gathered.get(position);
-			if (parameter == null && iterator.hasNext()) {
-				parameter = iterator.next();
-			}
+			if (parameter == null && iterator.hasNext()) 
+				parameter = iterator.next();			
 			values[position] = parameter.getValue();
 		}
 		return values;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see Signature#clone()
-	 */
+	@Override
 	public Object clone() {
-		return new Shortcut(super.mediator, super.name, super.returnedType, super.parameters, this.fixedParameters);
+		try {
+			return new Shortcut(super.mediator, super.name, super.returnedType, super.parameters, this.fixedParameters);
+		} catch (InvalidValueException e) {
+			super.mediator.error(e);
+		}
+		return null;
 	}
 }
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Signature.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Signature.java
index 3f3b7af..a26f454 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Signature.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/Signature.java
@@ -10,6 +10,7 @@
  */
 package org.eclipse.sensinact.gateway.core.method;
 
+import java.util.Arrays;
 import java.util.Iterator;
 
 import org.json.JSONArray;
@@ -56,14 +57,15 @@
 	 *            the type of the associated {@link SnaObjectMethod}
 	 * @param parameters
 	 *            this Signature {@link Parameter}s array
+	 * @throws InvalidValueException 
 	 */
-	public Signature(Mediator mediator, String methodType, Parameter[] parameters) {
+	public Signature(Mediator mediator, String methodType, Parameter[] parameters) throws InvalidValueException {
 		this.mediator = mediator;
 		int length = parameters == null ? 0 : parameters.length;
 		this.parameters = new Parameter[length];
 		int index = 0;
 		for (; index < length; index++) {
-			this.parameters[index] = parameters[index];
+			this.parameters[index] = (Parameter) parameters[index].clone();
 		}
 		this.name = methodType;
 		this.returnedType = AccessMethod.Type.valueOf(this.name).getReturnedType();
@@ -82,7 +84,7 @@
 	 * @throws InvalidValueException
 	 */
 	public Signature(Mediator mediator, AccessMethod.Type type, Class<?>[] parameterTypes, String[] parameterNames)
-			throws InvalidValueException {
+	throws InvalidValueException {
 		this.mediator = mediator;
 		String name = null;
 		int index = 0;
@@ -93,26 +95,28 @@
 		String[] names = parameterNames == null ? new String[0] : parameterNames;
 
 		for (; index < length; index++) {
-			if (index < names.length) {
-				name = names[index];
-			}
-			if (name == null) {
-				name = new StringBuilder().append("arg").append(index).toString();
-			}
+			if (index < names.length) 
+				name = names[index];			
+			if (name == null) 
+				name = new StringBuilder().append("arg").append(index).toString();			
 			this.parameters[index] = new Parameter(this.mediator, name, parameterTypes[index]);
-
 			name = null;
 		}
+		
 		this.name = type.name();
 		this.returnedType = AccessMethod.Type.valueOf(this.name).getReturnedType();
 	}
 
 	protected Signature(Mediator mediator, String name, AccessMethodResponse.Response returnedType,
-			Parameter[] parameters) {
+			Parameter[] parameters) throws InvalidValueException {
 		this.mediator = mediator;
 		this.name = name;
 		this.returnedType = returnedType;
-		this.parameters = parameters.clone();
+		this.parameters = new Parameter[parameters.length];
+		int index = 0;
+		for (; index < parameters.length; index++) {
+			this.parameters[index] = (Parameter) parameters[index].clone();
+		}
 	}
 
 	/**
@@ -142,7 +146,6 @@
 	 */
 	public Class<?>[] getParameterTypes() {
 		int index = 0;
-
 		Class<?>[] parameterTypes = new Class<?>[this.length()];
 		for (; index < this.length(); index++) {
 			parameterTypes[index] = this.parameters[index].getType();
@@ -315,18 +318,21 @@
 	 *         {@link Set}; false otherwise
 	 */
 	public boolean validParameters(Object[] methodParameters) {
-		int length = methodParameters == null ? 0 : methodParameters.length;
-
-		if (this.parameters.length != length) {
-			return false;
-		}
-		int index = 0;
-		for (; index < length; index++) {
-			this.parameters[index].reset();
-
-			if (!this.parameters[index].validParameter(methodParameters[index])) {
+		try {
+			int length = methodParameters == null ? 0 : methodParameters.length;
+	
+			if (this.parameters.length != length)
 				return false;
+			
+			int index = 0;
+			for (; index < length; index++) {
+				this.parameters[index].reset();			
+				if (!this.parameters[index].validParameter(methodParameters[index]))
+					return false;
 			}
+		}catch(Exception | Error e) {
+			e.printStackTrace();
+			return false;
 		}
 		return true;
 	}
@@ -369,11 +375,6 @@
 		return this.parameters.length;
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see JSONable#getJSON()
-	 */
 	@Override
 	public String getJSON() {
 		return getJSONObjectDescription().toString();
@@ -399,23 +400,18 @@
 		return jsonObject;
 	}
 
-	/**
-	 * @inheritDoc
-	 *
-	 * @see java.lang.Iterable#iterator()
-	 */
 	@Override
 	public Iterator<Parameter> iterator() {
 		return new ParameterIterator();
 	}
 
-	/**
-	 * @inheritDoc
-	 * 
-	 * @see java.lang.Object#clone()
-	 */
 	public Object clone() {
-		return new Signature(this.mediator, this.name, this.returnedType, this.parameters);
+		try {
+			return new Signature(this.mediator, this.name, this.returnedType, this.parameters);
+		} catch (InvalidValueException e) {
+			mediator.error(e);
+		}
+		return null;
 	}
 
 	private final class ParameterIterator implements Iterator<Parameter> {
@@ -429,21 +425,11 @@
 			findNext();
 		}
 
-		/**
-		 * @inheritDoc
-		 *
-		 * @see java.util.Iterator#hasNext()
-		 */
 		@Override
 		public boolean hasNext() {
 			return next != null;
 		}
 
-		/**
-		 * @inheritDoc
-		 *
-		 * @see java.util.Iterator#next()
-		 */
 		@Override
 		public Parameter next() {
 			Parameter parameter = next;
@@ -451,19 +437,11 @@
 			return parameter;
 		}
 
-		/**
-		 * @inheritDoc
-		 *
-		 * @see java.util.Iterator#remove()
-		 */
 		@Override
 		public void remove() {
 			// not implemented
 		}
 
-		/**
-		 * 
-		 */
 		private final void findNext() {
 			position += 1;
 			next = null;
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeMethod.java
similarity index 81%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeMethod.java
index df6b5d3..6d1cce6 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponse.java
similarity index 88%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponse.java
index e43d887..96d3345 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponse.java
@@ -8,12 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponseBuilder.java
similarity index 87%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponseBuilder.java
index dae371b..4dfe2cb 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/SubscribeResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/SubscribeResponseBuilder.java
@@ -8,11 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeMethod.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeMethod.java
similarity index 82%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeMethod.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeMethod.java
index ec8d44b..77a8475 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeMethod.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeMethod.java
@@ -8,12 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AbstractAccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethod;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponse.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponse.java
similarity index 87%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponse.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponse.java
index 49511a3..76c19ea 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponse.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponse.java
@@ -8,12 +8,10 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
 import org.eclipse.sensinact.gateway.core.message.SnaErrorfulMessage;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodJSONResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
 
 /**
  * Extended {@link AccessMethodJSONResponse} returned by an
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponseBuilder.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponseBuilder.java
similarity index 87%
rename from platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponseBuilder.java
rename to platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponseBuilder.java
index e048a6f..2c81d0c 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/legacy/UnsubscribeResponseBuilder.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/method/UnsubscribeResponseBuilder.java
@@ -8,11 +8,9 @@
  * Contributors:
 *    Kentyou - initial API and implementation
  */
-package org.eclipse.sensinact.gateway.core.method.legacy;
+package org.eclipse.sensinact.gateway.core.method;
 
 import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;
 import org.json.JSONObject;
 
 /**
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/LocalEndpoint.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/LocalEndpoint.java
index 9dfebcf..af216df 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/LocalEndpoint.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/LocalEndpoint.java
@@ -123,37 +123,27 @@
 	}
 
 	@Override
-	public JSONObject get(String publicKey, String serviceProviderId, String serviceId, String resourceId,
-			String attributeId) {
-		return new JSONObject(
-				this.getSession(publicKey).get(serviceProviderId, serviceId, resourceId, attributeId).getJSON());
+	public JSONObject get(String publicKey, String serviceProviderId, String serviceId, String resourceId,String attributeId) {
+		return new JSONObject(this.getSession(publicKey).get(serviceProviderId, serviceId, resourceId, attributeId).getJSON());
 	}
 
 	@Override
-	public JSONObject set(String publicKey, String serviceProviderId, String serviceId, String resourceId,
-			String attributeId, Object parameter) {
-		return new JSONObject(this.getSession(publicKey)
-				.set(serviceProviderId, serviceId, resourceId, attributeId, parameter).getJSON());
+	public JSONObject set(String publicKey, String serviceProviderId, String serviceId, String resourceId,String attributeId, Object parameter) {
+		return new JSONObject(this.getSession(publicKey).set(serviceProviderId, serviceId, resourceId, attributeId, parameter).getJSON());
 	}
 
 	@Override
-	public JSONObject act(String publicKey, String serviceProviderId, String serviceId, String resourceId,
-			Object[] parameters) {
-		return new JSONObject(
-				this.getSession(publicKey).act(serviceProviderId, serviceId, resourceId, parameters).getJSON());
+	public JSONObject act(String publicKey, String serviceProviderId, String serviceId, String resourceId,Object[] parameters) {
+		return new JSONObject(this.getSession(publicKey).act(serviceProviderId, serviceId, resourceId, parameters).getJSON());
 	}
 
 	@Override
-	public JSONObject subscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,
-			Recipient recipient, JSONArray conditions) {
-		return new JSONObject(this.getSession(publicKey)
-				.subscribe(serviceProviderId, serviceId, resourceId, recipient, conditions).getJSON());
+	public JSONObject subscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,Recipient recipient, JSONArray conditions) {
+		return new JSONObject(this.getSession(publicKey).subscribe(serviceProviderId, serviceId, resourceId, recipient, conditions).getJSON());
 	}
 
 	@Override
-	public JSONObject unsubscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,
-			String subscriptionId) {
-		return new JSONObject(this.getSession(publicKey)
-				.unsubscribe(serviceProviderId, serviceId, resourceId, subscriptionId).getJSON());
+	public JSONObject unsubscribe(String publicKey, String serviceProviderId, String serviceId, String resourceId,String subscriptionId) {
+		return new JSONObject(this.getSession(publicKey).unsubscribe(serviceProviderId, serviceId, resourceId, subscriptionId).getJSON());
 	}
 }
\ No newline at end of file
diff --git a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/RemoteSensiNact.java b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/RemoteSensiNact.java
index b1ac053..7db61b5 100644
--- a/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/RemoteSensiNact.java
+++ b/platform/sensinact-core/src/main/java/org/eclipse/sensinact/gateway/core/remote/RemoteSensiNact.java
@@ -32,7 +32,7 @@
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
 import org.eclipse.sensinact.gateway.core.message.SnaRemoteMessage;
 import org.eclipse.sensinact.gateway.core.message.SnaRemoteMessageImpl;
-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;
+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONArray;
 import org.json.JSONException;
diff --git a/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/TestResourceBuilder.java b/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/TestResourceBuilder.java
index b4f8cbe..13ae27a 100644
--- a/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/TestResourceBuilder.java
+++ b/platform/sensinact-core/src/test/java/org/eclipse/sensinact/gateway/core/test/TestResourceBuilder.java
@@ -21,12 +21,14 @@
 import java.util.HashMap;

 import java.util.HashSet;

 import java.util.List;

+import java.util.Set;

 import java.util.concurrent.atomic.AtomicInteger;

 

 import org.eclipse.sensinact.gateway.common.constraint.Changed;

 import org.eclipse.sensinact.gateway.common.constraint.Constraint;

 import org.eclipse.sensinact.gateway.common.constraint.MaxLength;

 import org.eclipse.sensinact.gateway.common.constraint.MinLength;

+import org.eclipse.sensinact.gateway.common.execution.ErrorHandler;

 import org.eclipse.sensinact.gateway.common.execution.Executable;

 import org.eclipse.sensinact.gateway.common.primitive.InvalidValueException;

 import org.eclipse.sensinact.gateway.common.primitive.Modifiable;

@@ -60,13 +62,13 @@
 import org.eclipse.sensinact.gateway.core.method.AccessMethodExecutor;

 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;

 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponseBuilder;

+import org.eclipse.sensinact.gateway.core.method.GetResponse;

 import org.eclipse.sensinact.gateway.core.method.LinkedActMethod;

 import org.eclipse.sensinact.gateway.core.method.Parameter;

+import org.eclipse.sensinact.gateway.core.method.SetResponse;

 import org.eclipse.sensinact.gateway.core.method.Shortcut;

 import org.eclipse.sensinact.gateway.core.method.Signature;

-import org.eclipse.sensinact.gateway.core.method.legacy.GetResponse;

-import org.eclipse.sensinact.gateway.core.method.legacy.SetResponse;

-import org.eclipse.sensinact.gateway.core.method.legacy.SubscribeResponse;

+import org.eclipse.sensinact.gateway.core.method.SubscribeResponse;

 import org.eclipse.sensinact.gateway.core.method.trigger.Constant;

 import org.eclipse.sensinact.gateway.core.security.AccessProfileOption;

 import org.eclipse.sensinact.gateway.core.security.AccessTree;

@@ -189,10 +191,7 @@
 					@Override

 					public Void execute(AccessMethodResponseBuilder result) throws Exception {

 						JSONObject jsonObject = (JSONObject) result.getAccessMethodObjectResult();

-

-						jsonObject.put("value",

-								new StringBuilder().append(jsonObject.get("value")).append("_suffix").toString());

-

+						jsonObject.put("value",new StringBuilder().append(jsonObject.get("value")).append("_suffix").toString());

 						result.setAccessMethodObjectResult(jsonObject);

 						return null;

 					}

@@ -236,19 +235,11 @@
 			}

 		}, null);

 

-		JSONObject set1 = session.set("serviceProvider", "testService", "TestProperty2", null, "property3")

-				.getResponse();

-

+		JSONObject set1 = session.set("serviceProvider", "testService", "TestProperty2", null, "property3").getResponse();

 		Thread.sleep(250);

-

-		JSONObject set2 = session

-				.set("serviceProvider", "testService", "TestProperty2", DataResource.VALUE, "property3").getResponse();

-

+		JSONObject set2 = session.set("serviceProvider", "testService", "TestProperty2", DataResource.VALUE, "property3").getResponse();

 		Assert.assertEquals(set1.get(DataResource.VALUE), set2.get(DataResource.VALUE));

-

-		JSONObject set3 = session

-				.set("serviceProvider", "testService", "TestProperty", DataResource.VALUE, "TEST LINKED SUBSCRIPTION")

-				.getResponse();

+		JSONObject set3 = session.set("serviceProvider", "testService", "TestProperty", DataResource.VALUE, "TEST LINKED SUBSCRIPTION").getResponse();

 

 		Thread.sleep(250);

 

@@ -273,7 +264,7 @@
 				((MyModelInstance) this.testContext.getModelInstance()).getHandler().count(filter));

 

 		Service proxy = service.<Service>getProxy(this.tree);

-		SetResponse error = proxy.set("location", "unknown");

+		SetResponse error = proxy.set("location", DataResource.VALUE, "unknown");

 		assertTrue(error.getStatusCode() == 403);

 		assertEquals(1, this.testContext.getLinkCallbackCount());

 	}

@@ -290,31 +281,25 @@
 		Assert.assertEquals("TestProperty", r1.getName());

 		Assert.assertEquals(Resource.Type.PROPERTY, r1.getType());

 

-		String get1 = r1.get(DataResource.VALUE).getJSON();

+		String get1 = r1.get(DataResource.VALUE).getJSON();		

 		String get2 = r1.get().getJSON();

-

+		

 		JSONAssert.assertEquals(get1, get2, false);

 		SubscribeResponse res = r1.subscribe(new Recipient() {

 			@Override

 			public void callback(String callbackId, SnaMessage[] messages) throws Exception {

 				boolean hasChanged = ((TypedProperties<?>) messages[0]).<Boolean>get("hasChanged");

-

 				if (!hasChanged)

-					;

-				{

 					TestResourceBuilder.this.testContext.extraCallbackInc();

-				}

 			}

-

+			

 			@Override

 			public String getJSON() {

 				return null;

 			}

-		}, new HashSet<Constraint>() {

-			{

+		}, new HashSet<Constraint>() {{

 				this.add(new Changed(Thread.currentThread().getContextClassLoader(), true));

-			}

-		});

+		}});

 

 		r1.set("hello");

 		Thread.sleep(500);

@@ -328,7 +313,7 @@
 		ResourceImpl r3impl = service.addLinkedResource("LinkedProperty", r1impl);

 		PropertyResource r3 = r3impl.<PropertyResource>getProxy(this.tree);

 

-		service.addLinkedResource(LocationResource.LOCATION, this.testContext.getModelInstance().getRootElement()

+		ResourceImpl r4impl = service.addLinkedResource(LocationResource.LOCATION, this.testContext.getModelInstance().getRootElement()

 				.getAdminService().getResource(LocationResource.LOCATION));

 

 		// test linked resource

@@ -338,21 +323,16 @@
 

 		JSONAssert.assertEquals(((GetResponse) r1.get()).getResponse(), ((GetResponse) r3.get()).getResponse(), false);

 

-		ResourceImpl r4impl = service.getResource("location");

-

 		r4impl.registerExecutor(AccessMethod.Type.valueOf(AccessMethod.GET), new Class<?>[0], new String[0],

-				new AccessMethodExecutor() {

-					@Override

-					public Void execute(AccessMethodResponseBuilder result) throws Exception {

-						JSONObject jsonObject = (JSONObject) result.getAccessMethodObjectResult();

-

-						jsonObject.put("value",

-								new StringBuilder().append(jsonObject.get("value")).append("_suffix").toString());

-

-						result.setAccessMethodObjectResult(jsonObject);

-						return null;

-					}

-				}, AccessMethodExecutor.ExecutionPolicy.AFTER);

+			new AccessMethodExecutor() {

+				@Override

+				public Void execute(AccessMethodResponseBuilder result) throws Exception {

+					JSONObject jsonObject = (JSONObject) result.getAccessMethodObjectResult();

+					jsonObject.put("value", new StringBuilder().append(jsonObject.get("value")).append("_suffix").toString());

+					result.setAccessMethodObjectResult(jsonObject);

+					return null;

+				}

+			}, AccessMethodExecutor.ExecutionPolicy.AFTER);

 

 		String attributeValue = (String) r4impl.getAttribute("value").getValue();

 		LocationResource r4 = r4impl.<LocationResource>getProxy(this.tree);

@@ -421,21 +401,19 @@
 				((MyModelInstance) this.testContext.getModelInstance()).getHandler().count(filter));

 

 		Service proxy = service.<Service>getProxy(this.tree);

-		SetResponse error = proxy.set("location", "unknown");

+		SetResponse error = proxy.set("location", DataResource.VALUE, (Object)"unknown");

 		assertTrue(error.getStatusCode() == 403);

 		assertEquals(1, this.testContext.getLinkCallbackCount());

 	}

 

 	@Test

 	public void testAgent() throws Exception {

+		

 		ServiceImpl service1 = this.testContext.getModelInstance().getRootElement().addService("testService");

-

 		ResourceImpl r1impl = service1.addDataResource(PropertyResource.class, "TestProperty", String.class, "hello");

-

 		ServiceImpl service2 = this.testContext.getModelInstance().getRootElement().addService("tostService");

-

 		ResourceImpl r2impl = service2.addDataResource(PropertyResource.class, "TestProperty", String.class, "hello");

-

+		

 		// wait for the previously generated events to be consumed

 		Thread.sleep(1000);

 		SnaFilter filter = new SnaFilter(this.testContext.getMediator(), "/serviceProvider/(test).*", true, false);

@@ -453,12 +431,12 @@
 		PropertyResource r2 = r2impl.<PropertyResource>getProxy(this.tree);

 

 		assertEquals(0, TestResourceBuilder.this.testContext.getAgentCallbackCount());

-		r2.set("goodbye");

+		System.out.println(r2.set("goodbye").getJSON());

 

 		Thread.sleep(250);

 		assertEquals(0, TestResourceBuilder.this.testContext.getAgentCallbackCount());

 

-		r1.set("goodbye");

+		System.out.println(r1.set("goodbye").getJSON());

 

 		Thread.sleep(250);

 		assertEquals(1, TestResourceBuilder.this.testContext.getAgentCallbackCount());

diff --git a/platform/sensinact-generic/extra-src/test/java/org/eclipse/sensinact/gateway/generic/test/moke/Activator.java b/platform/sensinact-generic/extra-src/test/java/org/eclipse/sensinact/gateway/generic/test/moke/Activator.java
index 424e1a3..93ba887 100644
--- a/platform/sensinact-generic/extra-src/test/java/org/eclipse/sensinact/gateway/generic/test/moke/Activator.java
+++ b/platform/sensinact-generic/extra-src/test/java/org/eclipse/sensinact/gateway/generic/test/moke/Activator.java
@@ -59,7 +59,6 @@
     		).withStartAtInitializationTime(startAtInitializationTime
     		).build("resources.xml", defaults);
 
-    	
         this.endpoint = new MokeStack(mediator);
         this.endpoint.connect(this.manager);
 
diff --git a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/ExtServiceImpl.java b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/ExtServiceImpl.java
index b2fdb8a..3a849c5 100644
--- a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/ExtServiceImpl.java
+++ b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/ExtServiceImpl.java
@@ -99,7 +99,7 @@
             return;
         }
         int index = 0;
-        int length = references == null ? 0 : references.size();
+        int length = references == null ?0:references.size();
         AccessMethodTriggerFactory.Loader loader = AccessMethodTriggerFactory.LOADER.get();
         try {
             for (; index < length; index++) {
diff --git a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/ParameterDefinition.java b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/ParameterDefinition.java
index 96f6c93..6e0fc33 100644
--- a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/ParameterDefinition.java
+++ b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/ParameterDefinition.java
@@ -25,9 +25,11 @@
 import org.json.JSONObject;
 import org.xml.sax.Attributes;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -102,7 +104,7 @@
             }
             Object fixedValue = null;
             Iterator<ConstraintDefinition> iterator = this.constraintDefinitions.iterator();
-            Set<Constraint> constraints = new HashSet<Constraint>();
+            List<Constraint> constraints = new ArrayList<Constraint>();
 
             while (iterator.hasNext()) {
                 try {
@@ -120,10 +122,10 @@
                 }
             }
             if (fixedValue == null) {
-                parameter = new Parameter(super.mediator, super.getName(), super.getType(), (Set<Constraint>) constraints);
+                parameter = new Parameter(super.mediator, super.getName(), super.getType(), constraints);
             } else {
                 parameter = new Parameter(super.mediator, super.getName(), super.getType(), fixedValue);
-            }
+            }            
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/SignatureDefinition.java b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/SignatureDefinition.java
index d3e45e1..de72d30 100644
--- a/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/SignatureDefinition.java
+++ b/platform/sensinact-generic/src/main/java/org/eclipse/sensinact/gateway/generic/parser/SignatureDefinition.java
@@ -11,6 +11,7 @@
 package org.eclipse.sensinact.gateway.generic.parser;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -85,6 +86,7 @@
      * @throws InvalidValueException
      */
     public Signature getSignature(Mediator mediator, ResourceImpl resource, ServiceImpl service) throws InvalidValueException {
+
         Map<Integer, Parameter> fixedParameters = new HashMap<Integer, Parameter>();
         List<Parameter> parameters = new ArrayList<Parameter>();
 
@@ -97,11 +99,11 @@
         while (parameterIterator.hasNext()) {
             ParameterDefinition parameterDefinition = parameterIterator.next();
             Parameter parameter = parameterDefinition.getParameter(resource, service);
-            if (Modifiable.FIXED.equals(parameter.getModifiable())) {
+
+            if (Modifiable.FIXED.equals(parameter.getModifiable()))
                 fixedParameters.put(position, parameter);
-            } else {
+            else
                 parameters.add(parameter);
-            }
             position++;
         }
         Parameter[] parametersArray = parameters.toArray(new Parameter[parameters.size()]);
@@ -131,11 +133,7 @@
         }
         return count;
     }
-
-    /**
-     * @inheritDoc
-     * @see java.lang.Comparable#compareTo(java.lang.Object)
-     */
+    
     @Override
     public int compareTo(SignatureDefinition definition) {
         int compare = new Integer(this.size()).compareTo(definition.size());
diff --git a/platform/sensinact-generic/src/test/java/org/eclipse/sensinact/gateway/generic/test/TestGenericImplementation.java b/platform/sensinact-generic/src/test/java/org/eclipse/sensinact/gateway/generic/test/TestGenericImplementation.java
index 2bc8c24..8e88c1c 100644
--- a/platform/sensinact-generic/src/test/java/org/eclipse/sensinact/gateway/generic/test/TestGenericImplementation.java
+++ b/platform/sensinact-generic/src/test/java/org/eclipse/sensinact/gateway/generic/test/TestGenericImplementation.java
@@ -20,7 +20,7 @@
 import org.eclipse.sensinact.gateway.core.ServiceProvider;
 import org.eclipse.sensinact.gateway.core.Session;
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.eclipse.sensinact.gateway.test.MidOSGiTest;
 import org.eclipse.sensinact.gateway.test.MidProxy;
 import org.eclipse.sensinact.gateway.test.ProcessorService;
@@ -65,8 +65,8 @@
         getResources = Session.class.getDeclaredMethod("getResources", new Class<?>[] {String.class, String.class});  
         getJSON = DescribeResponse.class.getDeclaredMethod("getJSON");  
         getDescription = Describable.class.getDeclaredMethod("getDescription");        
-        getMethod = Resource.class.getDeclaredMethod("get", new Class<?>[]{String.class});
-        setMethod = Resource.class.getDeclaredMethod("set", new Class<?>[]{String.class, Object.class});
+        getMethod = Resource.class.getDeclaredMethod("get", new Class<?>[]{String.class, Object[].class});
+        setMethod = Resource.class.getDeclaredMethod("set", new Class<?>[]{String.class, Object.class, Object[].class});
         actMethod = ActionResource.class.getDeclaredMethod("act", new Class<?>[]{Object[].class});
     }
 
@@ -102,7 +102,7 @@
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
         MidProxy midVariation = (MidProxy) Proxy.getInvocationHandler(variation);
 
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         JSONObject jsonObject = new JSONObject(response.getJSON());
 
         assertEquals(1, (int) jsonObject.getJSONObject("response").getInt("value"));
@@ -114,7 +114,7 @@
 
         ActionResource action = actionProxy.buildProxy(midAction.getInstance());
         actionProxy.toOSGi(actMethod, new Object[]{new Object[0]});
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         assertEquals(1, (int) jsonObject.getJSONObject("response").getInt("value"));
 
         resource = service.getResource("turnoff");
@@ -123,11 +123,11 @@
 
         action = actionProxy.buildProxy(midAction.getInstance());
         actionProxy.toOSGi(actMethod, new Object[]{new Object[0]});
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
 
         assertEquals(0, (int) jsonObject.getJSONObject("response").getInt("value"));
-        response = (SnaMessage) midVariation.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariation.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
 
         jsonObject = new JSONObject(response.getJSON());
 
@@ -153,14 +153,14 @@
         Resource temperature = service.getResource("temperature");
         JSONObject jsonObject;
         MidProxy midTemperature = (MidProxy) Proxy.getInvocationHandler(temperature);
-        SnaMessage response = (SnaMessage) midTemperature.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midTemperature.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(5.0f, (float) jsonObject.getJSONObject("response").getDouble("value"), 0.0f);
 
-        response = (SnaMessage) midTemperature.toOSGi(setMethod, new Object[]{DataResource.VALUE, -24.5f});
+        response = (SnaMessage) midTemperature.toOSGi(setMethod, new Object[]{DataResource.VALUE, -24.5f, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(-24.5f, (float) jsonObject.getJSONObject("response").getDouble("value"), 0.0f);
-        response = (SnaMessage) midTemperature.toOSGi(setMethod, new Object[]{DataResource.VALUE, 45.1f});
+        response = (SnaMessage) midTemperature.toOSGi(setMethod, new Object[]{DataResource.VALUE, 45.1f, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(520, (int) jsonObject.getInt("statusCode"));
         core.close();
@@ -305,7 +305,7 @@
         MidProxy midAdmin = (MidProxy) Proxy.getInvocationHandler(service);
         Description response = (Description) midAdmin.toOSGi(getDescription, null);
         MidProxy midResource = (MidProxy) Proxy.getInvocationHandler(resource);
-        SnaMessage message = (SnaMessage) midResource.toOSGi(setMethod, new Object[]{"value", "45.5667:5.9333"});
+        SnaMessage message = (SnaMessage) midResource.toOSGi(setMethod, new Object[]{"value", "45.5667:5.9333", null});
         JSONObject jsonObject = new JSONObject(message.getJSON());
 
         jsonObject.getJSONObject("response").remove("timestamp");
@@ -315,7 +315,7 @@
         ProcessorService processorService = processor.buildProxy();
 
         processorService.process("weather_7,null,admin,location,45.900002:6.11667");
-        message = (SnaMessage) midResource.toOSGi(getMethod, new Object[]{"value"});
+        message = (SnaMessage) midResource.toOSGi(getMethod, new Object[]{"value", null});
 
         jsonObject = new JSONObject(message.getJSON());
         jsonObject.getJSONObject("response").remove("timestamp");
diff --git a/platform/sensinact-shell/src/main/java/org/eclipse/sensinact/gateway/commands/gogo/internal/shell/ShellAccess.java b/platform/sensinact-shell/src/main/java/org/eclipse/sensinact/gateway/commands/gogo/internal/shell/ShellAccess.java
index 750f5fb..2ac2cc2 100644
--- a/platform/sensinact-shell/src/main/java/org/eclipse/sensinact/gateway/commands/gogo/internal/shell/ShellAccess.java
+++ b/platform/sensinact-shell/src/main/java/org/eclipse/sensinact/gateway/commands/gogo/internal/shell/ShellAccess.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.sensinact.gateway.commands.gogo.osgi.CommandServiceMediator;
 import org.eclipse.sensinact.gateway.core.method.AccessMethodResponse;
-import org.eclipse.sensinact.gateway.core.method.legacy.DescribeResponse;
+import org.eclipse.sensinact.gateway.core.method.DescribeResponse;
 import org.eclipse.sensinact.gateway.core.security.InvalidCredentialException;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundAccess;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundEndpoint;
diff --git a/platform/southbound/http/http-device/src/test/java/org/eclipse/sensinact/gateway/sthbnd/http/test/TestHttpDevice.java b/platform/southbound/http/http-device/src/test/java/org/eclipse/sensinact/gateway/sthbnd/http/test/TestHttpDevice.java
index 7b27f7c..572148f 100644
--- a/platform/southbound/http/http-device/src/test/java/org/eclipse/sensinact/gateway/sthbnd/http/test/TestHttpDevice.java
+++ b/platform/southbound/http/http-device/src/test/java/org/eclipse/sensinact/gateway/sthbnd/http/test/TestHttpDevice.java
@@ -135,8 +135,8 @@
     public TestHttpDevice() throws Exception {
         super();
         getDescription = Describable.class.getDeclaredMethod("getDescription");
-        getMethod = Resource.class.getDeclaredMethod("get", new Class<?>[]{String.class});
-        setMethod = Resource.class.getDeclaredMethod("set", new Class<?>[]{String.class, Object.class});
+        getMethod = Resource.class.getDeclaredMethod("get", new Class<?>[]{String.class, Object[].class});
+        setMethod = Resource.class.getDeclaredMethod("set", new Class<?>[]{String.class, Object.class, Object[].class});
         actMethod = ActionResource.class.getDeclaredMethod("act", new Class<?>[]{Object[].class});
     }
 
@@ -167,16 +167,16 @@
         Resource variable = service.getResource("temperature");
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
 
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
 
         JSONObject jsonObject = new JSONObject(response.getJSON());
         assertEquals(24, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25});
+        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
@@ -199,15 +199,15 @@
         Resource variable = service.getResource("temperature");
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
 
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         JSONObject jsonObject = new JSONObject(response.getJSON());
         assertEquals(24, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25});
+        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
@@ -230,15 +230,15 @@
         Resource variable = service.getResource("temperature");
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
 
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         JSONObject jsonObject = new JSONObject(response.getJSON());
         assertEquals(24, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25});
+        response = (SnaMessage) midVariable.toOSGi(setMethod, new Object[]{DataResource.VALUE, 25, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
 
@@ -260,7 +260,7 @@
         Resource variable = service.getResource("temperature");
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
 
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         JSONObject jsonObject = new JSONObject(response.getJSON());
         assertEquals(24, (int) jsonObject.getJSONObject("response").getInt("value"));
 
@@ -280,27 +280,27 @@
         Service service = provider.getService("service1");
         Resource variable = service.getResource("temperature");
         MidProxy midVariable = (MidProxy) Proxy.getInvocationHandler(variable);
-        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        SnaMessage response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         JSONObject jsonObject = new JSONObject(response.getJSON());
         assertEquals(24, (int) jsonObject.getJSONObject("response").getInt("value"));
 
         callback.setRemoteEntity(new JSONObject().put("serviceProviderId", "TestForSensiNactGateway2").put("serviceId", "service1").put("resourceId", "temperature").put("data", 25));
 
         Thread.sleep(2000);
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         System.out.println(jsonObject);
         assertEquals(25, (int) jsonObject.getJSONObject("response").getInt("value"));
         callback.setRemoteEntity(new JSONObject().put("serviceProviderId", "TestForSensiNactGateway2").put("serviceId", "service1").put("resourceId", "temperature").put("data", 32));
         Thread.sleep(2000);
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(32, (int) jsonObject.getJSONObject("response").getInt("value"));
         Thread.sleep(16 * 1000);
 
         callback.setRemoteEntity(new JSONObject().put("serviceProviderId", "TestForSensiNactGateway2").put("serviceId", "service1").put("resourceId", "temperature").put("data", 45));
         Thread.sleep(2000);
-        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE});
+        response = (SnaMessage) midVariable.toOSGi(getMethod, new Object[]{DataResource.VALUE, null});
         jsonObject = new JSONObject(response.getJSON());
         assertEquals(32, (int) jsonObject.getJSONObject("response").getInt("value"));