diff --git a/modules/CouplingCommunication.java b/modules/CouplingCommunication.java
index 76a30a1f89aa77d9aadb392bfca8f81618cafac9..150ae199837041dd1b31ab61b09359ff977bcff2 100644
--- a/modules/CouplingCommunication.java
+++ b/modules/CouplingCommunication.java
@@ -39,6 +39,7 @@ import java.net.Socket;
 
 import org.json.JSONObject;
 import org.json.JSONArray;
+import jams.JAMSException;
 
 /**
  *
@@ -298,8 +299,27 @@ public class CouplingCommunication extends JAMSComponent {
         return result;
     }
 
-    public String getAttribAllHruList(List<String> attributes) {
+    public String getAttribAllHruList(List<String> attributes, List<Long> requestedIds) {
         Iterator<Attribute.Entity> hruIterator = hrus.getEntities().iterator();
+        List<Attribute.Entity> requestedEntities = new ArrayList(); // used only if some entities are requested
+        long id;
+        if (!requestedIds.isEmpty()){
+            Iterator<Long> idsIterator = requestedIds.iterator();
+            while(idsIterator.hasNext()) {
+                Attribute.Entity selectedEntity;
+                id = idsIterator.next();
+                selectedEntity = hrus.getEntity(id);
+                try{
+                    if(selectedEntity == null){
+                        throw new JAMSException("Hru nb "+id+" not found in Hrus");
+                    }
+                } catch(Exception e) {
+                    return("Hru nb "+id+" not found in Hrus");
+                }
+                requestedEntities.add(selectedEntity);
+            }
+            hruIterator = requestedEntities.iterator();
+        }
         Attribute.Entity hru;
         Double value;
         Double hruId;
@@ -328,8 +348,27 @@ public class CouplingCommunication extends JAMSComponent {
         return result;
     }
 
-    public String getAttribAllReachList(List<String> attributes) {
+    public String getAttribAllReachList(List<String> attributes, List<Long> requestedIds) {
         Iterator<Attribute.Entity> reachIterator = reachs.getEntities().iterator();
+        List<Attribute.Entity> requestedEntities = new ArrayList(); // used only if some entities are requested
+        long id;
+        if (!requestedIds.isEmpty()){
+            Iterator<Long> idsIterator = requestedIds.iterator();
+            while(idsIterator.hasNext()) {
+               Attribute.Entity selectedEntity;
+                id = idsIterator.next();
+                selectedEntity = reachs.getEntity(id);
+                try{
+                    if(selectedEntity == null){
+                        throw new JAMSException("Reach nb "+id+" not found in reachs");
+                    }
+                } catch(Exception e) {
+                    return("Reach nb "+id+" not found in reachs");
+                }
+                requestedEntities.add(selectedEntity);
+            }
+            reachIterator = requestedEntities.iterator();
+        }
         Attribute.Entity reach;
         Double value;
         Double reachId;
@@ -751,12 +790,19 @@ public class CouplingCommunication extends JAMSComponent {
                             commandIsGet = true;
                             if (jsonPayload.has("keys") && !jsonPayload.isNull("keys")) {
                                 JSONArray jsonArray = jsonPayload.getJSONArray("keys");
-                                 List<String> keys = new ArrayList();
-                                 for (int i = 0; i < jsonArray.length();i++){
-                                 keys.add(jsonArray.getString(i));
-                                 //log("an attribute name:" + jsonArray.getString(i));
-                                         };
-                                out.print(getAttribAllHruList(keys));
+                                List<String> keys = new ArrayList();
+                                for (int i = 0; i < jsonArray.length();i++){
+                                    keys.add(jsonArray.getString(i));
+                                    //log("an attribute name:" + jsonArray.getString(i));
+                                };
+                                List<Long> ids = new ArrayList();
+                                if (jsonPayload.has("ids") && !jsonPayload.isNull("ids")) {
+                                    jsonArray = jsonPayload.getJSONArray("ids");
+                                    for (int i = 0; i < jsonArray.length();i++){
+                                        ids.add(jsonArray.getLong(i));
+                                    };
+                                }
+                                out.print(getAttribAllHruList(keys, ids));
                             }
                             sAcceptConnection.release();
                         } else if (command.equals("getReach")) {
@@ -765,10 +811,17 @@ public class CouplingCommunication extends JAMSComponent {
                                 JSONArray jsonArray = jsonPayload.getJSONArray("keys");
                                  List<String> keys = new ArrayList();
                                  for (int i = 0; i < jsonArray.length();i++){
-                                 keys.add(jsonArray.getString(i));
-                                 //log("an attribute name:" + jsonArray.getString(i));
-                                         };
-                                out.print(getAttribAllReachList(keys));
+                                    keys.add(jsonArray.getString(i));
+                                    //log("an attribute name:" + jsonArray.getString(i));
+                                 };
+                                List<Long> ids = new ArrayList();
+                                if (jsonPayload.has("ids") && !jsonPayload.isNull("ids")) {
+                                    jsonArray = jsonPayload.getJSONArray("ids");
+                                    for (int i = 0; i < jsonArray.length();i++){
+                                        ids.add(jsonArray.getLong(i));
+                                    };
+                                }
+                                out.print(getAttribAllReachList(keys, ids));
                             }
                             sAcceptConnection.release();
                         } else if (command.equals("getHruSum")) {