diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd
index 24fc3c16b0b48da64868065565611b8773ae74f1..d643c9ebf7417ab3c424df8304b1f40146a5cd22 100644
--- a/src/main/jastadd/base/distribution/DistributedPN.jadd
+++ b/src/main/jastadd/base/distribution/DistributedPN.jadd
@@ -63,6 +63,10 @@ aspect PnDistribution {
         return ToolSpecificsParser.getPortNameByPlaceId(this.getToolspecificList(), placeId);
     }
 
+    syn String PetriNet.getPortNameByPlaceId(String placeId, String type){
+        return ToolSpecificsParser.getPortNameByPlaceId(this.getToolspecificList(), placeId, type);
+    }
+
     syn String PetriNet.getServiceClientResponsePlaceId(String placeId){
         return ToolSpecificsParser.getServiceClientResponsePlaceId(this.getToolspecificList(), placeId);
     }
diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
index 4b70cbf0e0bb267fb40501f242483cee7b21952b..c7cfd2d1f2ec872ae115d41d766bc2664e7edfc9 100644
--- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
+++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
@@ -23,6 +23,10 @@ aspect ToolSpecificsParser{
 
         private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ToolSpecificsParser.class);
 
+        private static String clean(String s){
+            return s.replace("\n", "").replace(" ", "");
+        }
+
         public static InputSignalClause getClauseFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
 
             if (toolInfos.getNumChild() > 0) {
@@ -82,7 +86,9 @@ aspect ToolSpecificsParser{
 
                 for(int i = 0; i < portDefList.getLength(); i++){
                     Element portElem = (Element) portDefList.item(i);
-                    if(portElem.getTextContent().equals(requestPlaceId)){
+                    if(clean(portElem.getTextContent()).equals(requestPlaceId) &&
+                            clean(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY))
+                                    .equals(PnmlConstants.CHANNEL_PLACE_TYPE_CLIENT_REQ_KEY)){
                         return portElem.getAttribute(PnmlConstants.PORTS_CRES_KEY);
 
                     }
@@ -107,9 +113,8 @@ aspect ToolSpecificsParser{
 
                 for(int i = 0; i < portDefList.getLength(); i++){
                     Element portElem = (Element) portDefList.item(i);
-                    if(portElem.getTextContent().equals(id)){
+                    if(clean(portElem.getTextContent()).equals(id)){
                         return portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY);
-
                     }
                 }
 
@@ -120,6 +125,31 @@ aspect ToolSpecificsParser{
             return null;
         }
 
+        public static String getPortNameByPlaceId(JastAddList<ToolInfo> toolInfos, String id, String type){
+
+        if(id.contains("INSTANCE")){
+            id = id.split("-INSTANCE")[0];
+        }
+
+        try {
+            Document doc = parseToolSpecifics(toolInfos);
+            org.w3c.dom.NodeList portDefList = doc.getElementsByTagName(PnmlConstants.CHANNEL_PORT_KEY);
+
+            for(int i = 0; i < portDefList.getLength(); i++){
+                Element portElem = (Element) portDefList.item(i);
+                if(clean(portElem.getTextContent()).equals(id) &&
+                        clean(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY)).equals(type)){
+                    return portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY);
+                }
+            }
+
+        } catch(ParserConfigurationException | SAXException | IOException e){
+            logger.error(e.getMessage());
+        }
+
+        return null;
+    }
+
         public static HashMap<String, ArrayList<String>> getChannelElemensByKey(JastAddList<ToolInfo> toolInfos, String channelTypeKey){
 
             HashMap<String, ArrayList<String>> res =  new HashMap<String, ArrayList<String>>();
@@ -132,14 +162,14 @@ aspect ToolSpecificsParser{
                     Element portElem = (Element) portDefList.item(i);
                     if(portElem.getAttribute(PnmlConstants.CHANNEL_PLACE_TYPE_KEY).equals(channelTypeKey)){
                         if(res.containsKey(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY))){
-                            res.get(PnmlConstants.CHANNEL_NAME_KEY).add(portElem.getTextContent());
+                            res.get(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY)).add(portElem.getTextContent());
                         } else {
                             ArrayList<String> placeList = new ArrayList<>();
                             placeList.add(portElem.getTextContent());
                             res.put(portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY), placeList);
-                            System.out.println("[Parser] Creating mapping: " +
-                                    portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY) +
-                                    " >> " + portElem.getTextContent());
+                          //  System.out.println("[Parser] Creating mapping: " +
+                          //          portElem.getAttribute(PnmlConstants.CHANNEL_NAME_KEY) +
+                          //          " >> " + portElem.getTextContent());
                         }
                     }
                 }
@@ -156,7 +186,7 @@ aspect ToolSpecificsParser{
             Map<String, String> inputSignalDefs = new HashMap<>();
 
             try {
-                Document doc = parseToolSpecifics(toolInfos);
+                Document doc = parseToolSpecifics(toolInfos, PnmlConstants.TOOL_SPEC_KEY);
 
                 if(doc == null){
                     return inputSignalDefs;
@@ -498,7 +528,14 @@ aspect ToolSpecificsParser{
             return placeInformation;
         }
 
-        private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException {
+        private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos)
+                throws ParserConfigurationException, SAXException, IOException {
+              return parseToolSpecifics(toolInfos, null);
+        }
+
+
+        private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos, String tool)
+                throws ParserConfigurationException, SAXException, IOException {
 
             if (toolInfos == null || toolInfos.getNumChild() == 0 || toolInfos.getChild(0).getFormattedXMLBuffer() == null) {
                 return null;
@@ -507,13 +544,20 @@ aspect ToolSpecificsParser{
             ToolInfo ti = null;
 
             for (ToolInfo toolInfo : toolInfos) {
-                if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 ||
-                        toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 ||
-                        toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.INPUT_SIGNALS_DEF) > 0 ||
-                        toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.CHANNEL_PORT_KEY) > 0 ||
-                        toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) {
-                    ti = toolInfo;
-                    break;
+                if(tool == null) {
+                    if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 ||
+                            toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 ||
+                            toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.INPUT_SIGNALS_DEF) > 0 ||
+                            toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.CHANNEL_PORT_KEY) > 0 ||
+                            toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) {
+                        ti = toolInfo;
+                        break;
+                    }
+                } else {
+                    if(toolInfo.getFormattedXMLBuffer().indexOf(tool) > 0){
+                        ti = toolInfo;
+                        break;
+                    }
                 }
             }
 
@@ -521,10 +565,28 @@ aspect ToolSpecificsParser{
 
             DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
             DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
-
             Document doc = dBuilder.parse(fromStringBuffer(toolInfoStringBuffer));
-            doc.getDocumentElement().normalize();
-            return doc;
+
+            if(tool != null && tool.equals(PnmlConstants.TOOL_SPEC_KEY)){
+             //   if (doc.getDocumentElement() == null) {
+                    Document newDocument = dBuilder.newDocument();
+                    Element rootElement = newDocument.createElement("root");
+                    newDocument.appendChild(rootElement);
+
+                    org.w3c.dom.NodeList childNodes = doc.getChildNodes();
+                    for (int i = 0; i < childNodes.getLength(); i++) {
+                        org.w3c.dom.Node importedNode = newDocument.importNode(childNodes.item(i), true);
+                        rootElement.appendChild(importedNode);
+                    }
+
+                    return newDocument;
+               // }
+            } else {
+                doc.getDocumentElement().normalize();
+                return doc;
+            }
+
+          //  return null;
         }
 
         private static InputStream fromStringBuffer(StringBuffer buf) {