Constraint query parameters order
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 e1f8dd1..7396914 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
@@ -11,8 +11,10 @@
 package org.eclipse.sensinact.gateway.nthbnd.rest.internal.http;
 
 import java.io.IOException;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.annotation.WebServlet;
@@ -22,6 +24,7 @@
 
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundMediator;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequest;
+import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper.QueryKey;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.RegisteringResponse;
 import org.eclipse.sensinact.gateway.nthbnd.rest.internal.RestAccessConstants;
 import org.eclipse.sensinact.gateway.util.IOUtils;
@@ -62,17 +65,31 @@
             if(queryString == null) {
             	response.sendError(400, "'create' or 'renew' request parameter expected");
             }
-            Map<String,List<String>> map = NorthboundRequest.processRequestQuery(queryString);
             String query = null;
-            List<String> list = map.get("request");
-            if(list!= null){
-            	query = list.get(list.size()-1);
-            }else {
-            	query = map.get("create")!=null?"create":(map.get("renew")!=null?"renew":null);
+            Map<QueryKey,List<String>> map = NorthboundRequest.processRequestQuery(queryString);
+            Set<QueryKey> queryKeys = map.keySet();
+            Iterator<QueryKey> iterator = queryKeys.iterator();
+            while(iterator.hasNext()) {
+            	QueryKey queryKey = iterator.next();
+            	switch(queryKey.name) {
+            	  case "request":
+            		List<String> list = map.get(queryKey);
+	                if(list != null)
+	                	query = list.get(list.size()-1);
+	                break;
+            	  case "create":
+            	  case "renew":
+            		  query = queryKey.name;
+            		  break;
+            	  default:
+            		  break;
+            	}
+            	if(query!=null)
+            		break;
             }
-            if(query == null) {
+            if(query == null) 
             	response.sendError(400, "'create' or 'renew' request parameter expected");
-            }                    
+                              
             byte[] content = IOUtils.read(request.getInputStream(),false);
             JSONObject jcontent = new JSONObject(new String(content));          
 
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 dd1e58f..9536552 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
@@ -20,12 +20,15 @@
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundMediator;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequest;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestBuilder;
+import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper.QueryKey;
 import org.eclipse.sensinact.gateway.nthbnd.rest.internal.RestAccessConstants;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponseWrapper;
 import java.io.IOException;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author <a href="mailto:cmunilla@kentyou.com">Christophe Munilla</a>
@@ -90,8 +93,16 @@
             return false;
         }
         String result = null;
-        List<String> rawList = super.request.getQueryMap().get("rawDescribe");
-
+        List<String> rawList = null;
+        Map<QueryKey, List<String>> queryMap = super.request.getQueryMap();
+        Iterator<QueryKey> iterator = queryMap.keySet().iterator();
+        while(iterator.hasNext()) {
+        	QueryKey queryKey = iterator.next();
+        	if("rawDescribe".equals(queryKey.name)) {
+        		rawList = queryMap.get(queryKey);
+        		break;
+        	}
+        }
         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
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 82844f9..3a73407 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
@@ -33,7 +33,7 @@
 
 public class HttpRestAccessRequest extends HttpServletRequestWrapper implements NorthboundRequestWrapper {
     private NorthboundMediator mediator;
-    private Map<String, List<String>> queryMap;
+    private Map<QueryKey, List<String>> queryMap;
     private Authentication<?> authentication;
     private String content;
 
@@ -57,13 +57,13 @@
     }
     
     @Override
-    public Map<String, List<String>> getQueryMap() {
+    public Map<QueryKey, List<String>> getQueryMap() {
         if (this.queryMap == null) {
             try {
                 this.queryMap = NorthboundRequest.processRequestQuery(super.getQueryString());
             } catch (UnsupportedEncodingException e) {
                 mediator.error(e.getMessage(), e);
-                this.queryMap = Collections.<String, List<String>>emptyMap();
+                this.queryMap = Collections.<QueryKey, List<String>>emptyMap();
             }
         }
         return queryMap;
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 51053a1..665a391 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
@@ -17,11 +17,14 @@
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundMediator;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequest;
 import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestBuilder;
+import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper.QueryKey;
 import org.json.JSONObject;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Extended {@link NorthboundAccess} dedicated to websocket connections
@@ -64,15 +67,24 @@
             return false;
         }
         String result = null;
-        List<String> rawList = super.request.getQueryMap().get("rawDescribe");
-
+        List<String> rawList = null;
+        List<String> acceptEncoding = null;
+        
+        Map<QueryKey, List<String>> queryMap = super.request.getQueryMap();
+        Iterator<QueryKey> iterator = queryMap.keySet().iterator();
+        while(iterator.hasNext()) {
+        	QueryKey queryKey = iterator.next();
+        	if("rawDescribe".equals(queryKey.name)) 
+        		rawList = queryMap.get(queryKey);        	
+        	if("Accept-Encoding".equals(queryKey.name)) 
+        		acceptEncoding= queryMap.get(queryKey);        	
+        }
         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 {
             result = cap.getJSON();
         }
         byte[] resultBytes;
-        List<String> acceptEncoding = super.request.getQueryMap().get("Accept-Encoding");
         try {
 	        if (acceptEncoding != null && acceptEncoding.contains("gzip")) {
 	            resultBytes = NorthboundAccess.compress(result);
diff --git a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccessRequest.java b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccessRequest.java
index f9d5462..ada8b5e 100644
--- a/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccessRequest.java
+++ b/platform/northbound/rest-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/rest/internal/ws/WsRestAccessRequest.java
@@ -35,34 +35,22 @@
         this.mediator = mediator;
         this.wsConnection = wsConnection;
     }
-
-    /* (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#getRequestID()
-     */
     @Override
     public String getRequestIdProperty() {
        return "rid";
     }
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getRequestID()
-	 */
 	@Override
 	public String getRequestId() {
 		return (String) this.request.opt(getRequestIdProperty());
 	}
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getRequestURI()
-     */
     @Override
     public String getRequestURI() {
         String uri = request.optString("uri");
@@ -70,11 +58,8 @@
         return uriElements[0];
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getQueryMap()
-     */
     @Override
-    public Map<String, List<String>> getQueryMap() {
+    public Map<QueryKey, List<String>> getQueryMap() {
         String uri = request.optString("uri");
         String[] uriElements = uri.split("\\?");
         if (uriElements.length == 2) {
@@ -84,12 +69,9 @@
                 this.mediator.error(e);
             }
         }
-        return Collections.<String, List<String>>emptyMap();
+        return Collections.<QueryKey, List<String>>emptyMap();
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getContent()
-     */
     @Override
     public String getContent() {
         if (this.content == null) {
@@ -102,17 +84,11 @@
         return this.content;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper#getAuthentication()
-     */
     @Override
     public Authentication<?> getAuthentication() {
         return null;
     }
 
-    /* (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) {
         return new WebSocketRecipient(mediator, wsConnection);
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 b3bac26..5616c43 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
@@ -18,14 +18,11 @@
     public static Object[] getParameters(Argument[] arguments) {
         int index = 0;
         int length = arguments == null ? 0 : arguments.length;
-
-        if (length == 0) {
+        if (length == 0) 
             return null;
-        }
-        Object[] parameters = new Object[length];
-        for (; index < length; index++) {
+        Object[] parameters = new Object[length];        
+        for (; index < length; index++) 
             parameters[index] = arguments[index].value;
-        }
         return parameters;
     }
 
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 79dab68..225f6b5 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
@@ -31,6 +31,7 @@
 import org.eclipse.sensinact.gateway.core.message.SnaMessage;
 import org.eclipse.sensinact.gateway.core.method.AccessMethod;
 import org.eclipse.sensinact.gateway.core.method.Parameter;
+import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper.QueryKey;
 import org.eclipse.sensinact.gateway.util.CastUtils;
 import org.eclipse.sensinact.gateway.util.UriUtils;
 import org.json.JSONArray;
@@ -74,7 +75,7 @@
     protected String rid;
     protected String method = null;
 
-    private Map<String, List<String>> query;
+    private Map<NorthboundRequestWrapper.QueryKey, List<String>> query;
     private NorthboundRequestWrapper request;
     private NorthboundResponseBuildError buildError;
     private Set<String> methods;
@@ -217,13 +218,17 @@
             }
             parametersList.add(parameter);
         }
-        Iterator<Map.Entry<String, List<String>>> iterator = this.query.entrySet().iterator();
+        Iterator<Map.Entry<QueryKey, List<String>>> iterator = this.query.entrySet().iterator();
 
         while (iterator.hasNext()) {
-            Map.Entry<String, List<String>> entry = iterator.next();
+            Map.Entry<QueryKey, List<String>> entry = iterator.next();
             Parameter parameter = null;
             try {
-                parameter = new Parameter(mediator, entry.getKey(), entry.getValue().size() > 1 ? JSONArray.class : String.class, entry.getValue().size() == 0 ? "true" : (entry.getValue().size() == 1 ? entry.getValue().get(0) : new JSONArray(entry.getValue())));
+                parameter = new Parameter(mediator, 
+                	entry.getKey().name, 
+                	entry.getValue().size() > 1 ? JSONArray.class : String.class, 
+                	entry.getValue().size() == 0 ? "true" : (entry.getValue().size() == 1 ? entry.getValue().get(0) : new JSONArray(entry.getValue()))
+                );
             } catch (InvalidValueException e) {
                 throw new JSONException(e);
             }
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 273bc43..cb0ef1c 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
@@ -93,11 +93,15 @@
 			if(!m.getName().equals(meth))
 				return false;
 			Class<?>[] types = m.getParameterTypes();
-			if(types.length > (parameterTypes.length +1) || types.length < parameterTypes.length)
+			if(types.length < parameterTypes.length && !m.isVarArgs())
 				return false;
 			if(types.length == (parameterTypes.length +1) && !m.isVarArgs())
 				return false;
-			for(int i=0;i<parameterTypes.length;i++) {
+			if(types.length > (parameterTypes.length +1))
+				return false;
+			for(int i=0;i<types.length;i++) {
+				if(i == (types.length-1) && (types.length == (parameterTypes.length +1)||types.length < parameterTypes.length))
+					continue;
 				if(!types[i].isAssignableFrom(parameterTypes[i]))
 					return false;
 			}
@@ -107,15 +111,29 @@
         	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;
+            if(method != null) {       
+            	Object[] args = Argument.getParameters(arguments);                
+	            if(method.isVarArgs()) {
+	            	if(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;
+	            	} else if(method.getParameterTypes().length < parameterTypes.length) {
+	            		Object[] _args = new Object[method.getParameterTypes().length];
+	            		Object[] _var = new Object[(parameterTypes.length - method.getParameterTypes().length) + 1];
+	            		if(method.getParameterTypes().length>1)
+	            			System.arraycopy(args, 0, _args, 0, method.getParameterTypes().length-1);
+	            		int n=0;
+	            		for(int i=method.getParameterTypes().length - 1; i < parameterTypes.length; i++)
+	            			_var[n++]=args[i];
+	            		_args[method.getParameterTypes().length-1] = _var;
+	            		args = _args;
+	            	}	            	
+	            }
+	            result = (AccessMethodResponse<?>) method.invoke(this, args);
             }
-            result = (AccessMethodResponse<?>) method.invoke(this, args);
         } catch (Exception e) {
         	e.printStackTrace();
             this.mediator.error(e);
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 caef646..faab27d 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
@@ -23,7 +23,8 @@
 import java.util.Map;
 
 public abstract class NorthboundRequest implements PathElement, Nameable {
-    public static final String ROOT = "/sensinact";
+    
+	public static final String ROOT = "/sensinact";
 
     /**
      * Builds a map of parameters according to the query String
@@ -34,14 +35,15 @@
      *                    into a map of parameters
      * @throws UnsupportedEncodingException
      */
-    public static Map<String, List<String>> processRequestQuery(String queryString) throws UnsupportedEncodingException {
-        if (queryString == null) {
-            return Collections.<String, List<String>>emptyMap();
-        }
-        Map<String, List<String>> queryMap = new HashMap<String, List<String>>();
+    public static Map<NorthboundRequestWrapper.QueryKey, List<String>> processRequestQuery(String queryString) throws UnsupportedEncodingException {
+        if (queryString == null) 
+            return Collections.<NorthboundRequestWrapper.QueryKey, List<String>>emptyMap();
+        
+        Map<NorthboundRequestWrapper.QueryKey, List<String>> queryMap = new HashMap<NorthboundRequestWrapper.QueryKey, List<String>>();
 
         char[] characters = queryString.toCharArray();
         int index = 0;
+        int pos = 0;
         int length = characters.length;
 
         boolean escape = false;
@@ -71,7 +73,7 @@
                     break;
                 case '&':
                     value = element.toString();
-                    addQueryParameter(queryMap, name, value);
+                    addQueryParameter(queryMap, pos++, name, value);
                     name = null;
                     value = null;
                     element = new StringBuilder();
@@ -82,11 +84,11 @@
         }
         if(name == null && element.length()>0) {
         	name = element.toString();
-            addQueryParameter(queryMap, name, Boolean.TRUE.toString());
+            addQueryParameter(queryMap, pos++, name, Boolean.TRUE.toString());
             return queryMap;
         }
         value = element.toString();
-        addQueryParameter(queryMap, name, value);
+        addQueryParameter(queryMap, pos++, name, value);
         return queryMap;
     }
 
@@ -103,17 +105,18 @@
      *                 added to the map argument
      * @throws UnsupportedEncodingException
      */
-    private static void addQueryParameter(Map<String, List<String>> queryMap, String name, String value) throws UnsupportedEncodingException {
-        if (name == null || name.length() == 0) {
+    private static void addQueryParameter(Map<NorthboundRequestWrapper.QueryKey, List<String>> queryMap, int pos, String name, String value) throws UnsupportedEncodingException {
+        if (name == null || name.length() == 0) 
             name = DefaultNorthboundRequestHandler.RAW_QUERY_PARAMETER;
-
-        } else {
+        else 
             name = URLDecoder.decode(name, "UTF-8");
-        }
-        List<String> values = queryMap.get(name);
+        NorthboundRequestWrapper.QueryKey key = new NorthboundRequestWrapper.QueryKey();
+        key.index = pos;
+        key.name = name;
+        List<String> values = queryMap.get(key);
         if (values == null) {
             values = new ArrayList<String>();
-            queryMap.put(name, values);
+            queryMap.put(key, values);
         }
         values.add(URLDecoder.decode(value, "UTF-8"));
     }
diff --git a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestWrapper.java b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestWrapper.java
index 4e7cd08..5f2768e 100644
--- a/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestWrapper.java
+++ b/platform/northbound/sensinact-access/src/main/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/NorthboundRequestWrapper.java
@@ -15,6 +15,7 @@
 
 import org.eclipse.sensinact.gateway.core.method.Parameter;
 import org.eclipse.sensinact.gateway.core.security.Authentication;
+import org.eclipse.sensinact.gateway.nthbnd.endpoint.NorthboundRequestWrapper.QueryKey;
 
 /**
  * Northbound request wrapper service.
@@ -23,7 +24,17 @@
  * characteristics of the request, allowing to treat it
  */
 public interface NorthboundRequestWrapper {
-    /**
+	
+    class QueryKey {
+		public int index;
+		public String name;
+		
+		public int hashCode() {
+			return index;
+		}
+	}
+
+	/**
      * Returns the {@link NorthboundMediator} of this
      * NorthboundAccessWrapper, allowing to interact with
      * the OSGi host environment
@@ -65,7 +76,7 @@
      * @return the query String of the wrapped request as a
      * map
      */
-    Map<String, List<String>> getQueryMap();
+    Map<NorthboundRequestWrapper.QueryKey, List<String>> getQueryMap();
 
     /**
      * Returns the String content the wrapped request
diff --git a/platform/northbound/sensinact-access/src/test/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/test/NorthboundRequestHandlerTest.java b/platform/northbound/sensinact-access/src/test/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/test/NorthboundRequestHandlerTest.java
index 4972638..64e8695 100644
--- a/platform/northbound/sensinact-access/src/test/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/test/NorthboundRequestHandlerTest.java
+++ b/platform/northbound/sensinact-access/src/test/java/org/eclipse/sensinact/gateway/nthbnd/endpoint/test/NorthboundRequestHandlerTest.java
@@ -193,10 +193,16 @@
             }
 
             @Override
-            public Map<String, List<String>> getQueryMap() {
-                return new HashMap<String, List<String>>() {{
-                    put("yfilter."+ranky, yfilter);
-                    put("xfilter."+rankx, xfilter);
+            public Map<QueryKey, List<String>> getQueryMap() {
+                return new HashMap<QueryKey, List<String>>() {{
+                	QueryKey k0 = new QueryKey();
+                	k0.index = 0;
+                	k0.name = "yfilter."+ranky;
+                    put(k0 , yfilter);
+                	QueryKey k1 = new QueryKey();
+                	k1.index = 1;
+                	k1.name = "xfilter."+rankx;
+                    put(k1, xfilter);
                     /*put("hideFilter",Arrays.asList("true"));	*/
                 }};
             }