diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
index b39aee967694c34488da386226f9679457bac465..510c863aebdcf016e57e5d893615fe55bac6a2b0 100644
--- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
+++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
@@ -4,7 +4,6 @@ public final class PnmlConstants {
 
     // general transitions
     public static final String TRANSITION_TYPE_DISCRETE = "discreteTransitionType";
-    public static final String TRANSITION_TYPE_CONTINUOUS = "continuousTransitionType";
 
     // topic transitions
     public static final String TRANSITION_TYPE_TOPIC = "topicTransitionType";
@@ -15,9 +14,13 @@ public final class PnmlConstants {
     public static final String TRANSITION_TYPE_TOPIC_LIMITED_OUT = "limitedChannelOutType";
     public static final String TRANSITION_TYPE_TOPIC_UNLIMITED_OUT = "unlimitedChannelOutType";
 
-    // service transitions
-    public static final String TRANSITION_TYPE_SERVICE_REQUEST = "serviceTransitionTypeRequest";
-    public static final String TRANSITION_TYPE_SERVICE_RESPONSE = "serviceTransitionTypeResponse";
+    public static final String TRANSITION_TOPIC_PUBLISHERS_DEF_KEY = "publishers";
+    public static final String TRANSITION_TOPIC_PUBLISHER_DEF_KEY = "publisher";
+    public static final String TRANSITION_TOPIC_PORT_ID_DEF_KEY = "id";
+    public static final String TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY = "limit";
+
+    public static final String TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY = "subscribers";
+    public static final String TRANSITION_TOPIC_SUBSCRIBER_DEF_KEY = "subscriber";
 
     public static final String TRANSITION_TYPE_SERVICE_REQUEST_IN = "serviceTransitionRequestIn";
     public static final String TRANSITION_TYPE_SERVICE_REQUEST_OUT = "serviceTransitionRequestOut";
@@ -25,17 +28,20 @@ public final class PnmlConstants {
     public static final String TRANSITION_TYPE_SERVICE_RESPONSE_IN = "serviceTransitionResponseIn";
     public static final String TRANSITION_TYPE_SERVICE_RESPONSE_OUT = "serviceTransitionResponseOut";
 
-    // place types
-    public static final String PLACE_TYPE_DISCRETE = "discretePlaceType";
-    public static final String PLACE_TYPE_CONTINUOUS = "continuousPlaceType";
-
     // general properties
     public static final String NODE_KEY = "node";
     public static final String TYPE_KEY = "type";
 
     // service related keys
+    public static final String TRANSITION_TYPE_SERVICE = "serviceTransitionType";
     public static final String SERVICE_NAME = "serviceName";
     public static final String SERVICE_INSTANCE = "serviceInstance";
+    public static final String TRANSITION_SERVICE_SERVER_IN_KEY = "serverInput";
+    public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput";
+    public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels";
+    public static final String TRANSITION_SERVICE_CHANNEL_KEY = "channel";
+    public static final String TRANSITION_SERVICE_REQUEST_KEY = "request";
+    public static final String TRANSITION_SERVICE_RESPONSE_KEY = "response";
 
     // pub-sub related keys
     public static final String INPUT_LIMIT_KEY = "inputlimit";
@@ -53,15 +59,6 @@ public final class PnmlConstants {
     public static final String OUTPUT_SIGNAL_ID_KEY = "outputsignalID";
     public static final String CURRENT_VALUE_KEY = "initialvalue";
 
-    public static final String EQUAL_OS_KEY = "equal";
-    public static final String RANGE_OS_KEY = "range";
-    public static final String THRESHOLD_KEY = "threshold";
-
-    public static final String VALUE_KEY = "value";
-    public static final String RESULT_KEY = "result";
-    public static final String UPPER_BOUND_KEY = "upperbound";
-    public static final String LOWER_BOUND_KEY = "lowerbound";
-
     public static final String CLAUSE_KEY = "inputsignalclause";
 
     // structural keys
@@ -75,11 +72,13 @@ public final class PnmlConstants {
     public static final String SERVICE_CLIENT = "serviceClient";
     public static final String SERVICE_SERVER = "serviceServer";
 
+    public static final String INPUT_SIGNALS_DEF = "inputsignals";
+    public static final String INPUT_SIGNAL_DEF = "inputsignal";
+    public static final String INPUT_SIGNAL_ID_DEF = "inputsignalID";
+    public static final String INPUT_SIGNAL_INIT_VALUE_DEF = "initialvalue";
+
     // arc types
     public static final String ARC_TYPE_KEY = "type";
     public static final String DEFAULT_ARC = "default";
     public static final String INHIBITOR_ARC = "inhibitor";
-
-
-
 }
diff --git a/src/main/jastadd/base/Navigation.jrag b/src/main/jastadd/base/Navigation.jrag
index b2302e466dad06b9c351e612965deba82eedcd76..55d925a693cd688bb5d4ab1243b90b1663c3f720 100644
--- a/src/main/jastadd/base/Navigation.jrag
+++ b/src/main/jastadd/base/Navigation.jrag
@@ -99,6 +99,15 @@ aspect Navigation {
   syn boolean PlaceNode.isPlace() = false;
   eq Place.isPlace() = true;
 
+  syn PublisherPort Port.asPublisherPort() = null;
+  eq PublisherPort.asPublisherPort() = this;
+
+  syn SubscriberPort Port.asSubscriberPort() = null;
+  eq SubscriberPort.asSubscriberPort() = this;
+
+  syn ServiceChannel Port.asServiceChannel() = null;
+  eq ServiceChannel.asServiceChannel() = this;
+
   syn RefTransition TransitionNode.asRefTransition() = null;
   eq RefTransition.asRefTransition() = this;
 
diff --git a/src/main/jastadd/base/clauses/ExpressionParser.beaver b/src/main/jastadd/base/clauses/ExpressionParser.beaver
index 0871d1c03fb2f0a13e8fb8af5d77ce6d23f7ebec..86cb1da18944b769aaacc4e964a09fdf7a849626 100644
--- a/src/main/jastadd/base/clauses/ExpressionParser.beaver
+++ b/src/main/jastadd/base/clauses/ExpressionParser.beaver
@@ -4,12 +4,14 @@ package de.tudresden.inf.st.pnml.jastadd.parser;
 %terminals AND;
 %terminals OR;
 %terminals NOT;
+%terminals LP;
+%terminals RP;
 %terminals VARIABLE;
-%typeof goal = "expressions";
-%typeof exp = "Exp";
+%typeof goal = "conjunctions";
+%typeof conjunction = "Conjunction";
 %goal goal;
 goal =
-    exp.exp {: return new Symbol(new InputSignalClause(exp)); :}
+    conjunction.conjunction {: return new Symbol(new InputSignalClause(conjunction)); :}
   ;
 exp =
     exp.a AND.AND exp.b {: return new Symbol(new AndExp(a, b)); :}
@@ -18,5 +20,8 @@ exp =
 
   | NOT.NOT exp.exp {: return new Symbol(new NotExp(exp)); :}
 
-  | VARIABLE.v {: return new Symbol(new Var(((String)v.value))); :}
+  | NOT.NOT Literal.Literal {: return new Symbol(new NegativeLiteral(((String)v.value))); :}
+
+  | Literal.Literal {: return new Symbol(new PositiveLiteral(((String)v.value))); :}
   ;
+
diff --git a/src/main/jastadd/base/clauses/expressions.flex b/src/main/jastadd/base/clauses/expressions.flex
index e370a9ec182510da8f9559cde6235fd555e8d1de..32db549283eb6be57e00adf9941dcbdce5fd028e 100644
--- a/src/main/jastadd/base/clauses/expressions.flex
+++ b/src/main/jastadd/base/clauses/expressions.flex
@@ -32,8 +32,10 @@ Variable = [:jletter:][:jletterdigit:]*
 {WhiteSpace}  { }
 
 // token definitions
-"AND"           { return sym(Terminals.AND); }
-"OR"           { return sym(Terminals.OR); }
-"NOT"           { return sym(Terminals.NOT); }
-{Variable}      { return sym(Terminals.VARIABLE); }
+"AND"         { return sym(Terminals.AND); }
+"OR"          { return sym(Terminals.OR); }
+"NOT"         { return sym(Terminals.NOT); }
+"("           { return sym(Terminals.LP); }
+")"           { return sym(Terminals.RP); }
+{Variable}    { return sym(Terminals.VARIABLE); }
 <<EOF>>       { return sym(Terminals.EOF); }
diff --git a/src/main/jastadd/base/clauses/expressions.relast b/src/main/jastadd/base/clauses/expressions.relast
index 99586c025b0639f5eee742262e0eacc4c34f853b..a1aa39b640f7d746c35723804d4d18e8ff81cb95 100644
--- a/src/main/jastadd/base/clauses/expressions.relast
+++ b/src/main/jastadd/base/clauses/expressions.relast
@@ -1,12 +1,8 @@
-// TODO: REWORK FOR CONJUNCTIVE NORMALFORM
-InputSignalClause ::= Exp ;
+InputSignalClause ::= Conjuction:Conjunction;
 
-abstract Exp ;
-abstract UnaryExp:Exp ::= Exp ;
+Conjunction ::= Disjunction:Disjunction* ;
+Disjunction ::= Literal:Literal*;
 
-abstract BinExp:Exp ::= A:Exp B:Exp ;
-AndExp:BinExp ;
-OrExp:BinExp ;
-
-Var:Exp ::= <Name:String> ;
-NotExp:UnaryExp ;
+abstract Literal ::= <Name:String>;
+PositiveLiteral : Literal;
+NegativeLiteral : Literal;
\ No newline at end of file
diff --git a/src/main/jastadd/base/distribution/DistributedPN.jadd b/src/main/jastadd/base/distribution/DistributedPN.jadd
index 19d5e8cd979f74fb668bf1a0a63f9973e6527661..ec3670335a08eea549c5b6114ba0bd72f814cb4c 100644
--- a/src/main/jastadd/base/distribution/DistributedPN.jadd
+++ b/src/main/jastadd/base/distribution/DistributedPN.jadd
@@ -16,7 +16,7 @@ aspect PnDistribution {
     syn PlaceInformation DinerosPlace.getStaticPlaceInformation() {
 
         if(!this.hasMutablePlaceInformation()){
-            PlaceInformation tInfo = ToolSpecificsParser.getPlaceInformationInformation(this.getToolspecificList());
+            PlaceInformation tInfo = ToolSpecificsParser.getPlaceInformation(this.getToolspecificList());
             return tInfo;
         }
 
@@ -47,6 +47,10 @@ aspect PnDistribution {
         return ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList());
     }
 
+    syn lazy Map<String, String> PetriNet.getInputSignalDefinition(){
+        return ToolSpecificsParser.getInputSignalDefinitionsFromToolSpecifics(this.getToolspecificList());
+    }
+
     syn lazy CommunicatorInformation PetriNet.getCommunicatorInformation(Set<String> ignoredParts){
 
         CommunicatorInformation cInfo = ToolSpecificsParser.getCommunicatorInformationFromToolSpecifics(this.getToolspecificList());
diff --git a/src/main/jastadd/base/export/PnmlExporter.jadd b/src/main/jastadd/base/export/PnmlExporter.jadd
index e5f6747ab9f21a19abf410c6dcedb1c1b45b7e30..3d8e2aa2c6f0f6ce4e4a44f12433fe306b7d6eb0 100644
--- a/src/main/jastadd/base/export/PnmlExporter.jadd
+++ b/src/main/jastadd/base/export/PnmlExporter.jadd
@@ -199,7 +199,7 @@ aspect PnmlExporter{
             Set<PlaceHLAPI> convertedPlaces = new HashSet<>();
 
             for (Place p : petriNet.allPlaces()) {
-                PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asOutputSignalPlace());
+                PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asDinerosPlace());
                 for (PageHLAPI pageHLAPI : convertedPages) {
                     if (pageHLAPI.getId().equals(p.ContainingPage().getId())) {
                         assert convertedPlace != null;
@@ -217,7 +217,7 @@ aspect PnmlExporter{
             Set<TransitionHLAPI> convertedTransitions = new HashSet<>();
 
             for (Transition t : petriNet.allTransitions()) {
-                TransitionHLAPI convertedTransition = PrimitiveElementsConverter.convertTransitionToPnmlObject(t.asInputSignalTransition());
+                TransitionHLAPI convertedTransition = PrimitiveElementsConverter.convertTransitionToPnmlObject(t.asDinerosTransition());
                 for (PageHLAPI pageHLAPI : convertedPages) {
                     if (pageHLAPI.getId().equals(t.ContainingPage().getId())) {
                         assert convertedTransition != null;
diff --git a/src/main/jastadd/base/export/PrimitiveElementsConverter.jadd b/src/main/jastadd/base/export/PrimitiveElementsConverter.jadd
index 2b618279e29f2d3435b5f834554aa30313883004..66565ef5bd0f9a13c2b56ab162e6d012e3b2a4d7 100644
--- a/src/main/jastadd/base/export/PrimitiveElementsConverter.jadd
+++ b/src/main/jastadd/base/export/PrimitiveElementsConverter.jadd
@@ -109,23 +109,23 @@ aspect PrimitiveElementsConverter{
             return null;
         }
 
-        public static TransitionHLAPI convertTransitionToPnmlObject(InputSignalTransition inputSignalTransition) {
+        public static TransitionHLAPI convertTransitionToPnmlObject(DinerosTransition dinerosTransition) {
 
             try {
-                TransitionHLAPI t = new TransitionHLAPI(inputSignalTransition.getId());
+                TransitionHLAPI t = new TransitionHLAPI(dinerosTransition.getId());
 
-                t.setNameHLAPI(new NameHLAPI(inputSignalTransition.getName().getText()));
+                t.setNameHLAPI(new NameHLAPI(dinerosTransition.getName().getText()));
 
-                if (inputSignalTransition.getNodeGraphics() != null && inputSignalTransition.getNodeGraphics().getLine() != null
-                        && inputSignalTransition.getNodeGraphics().getDimension() != null) {
+                if (dinerosTransition.getNodeGraphics() != null && dinerosTransition.getNodeGraphics().getLine() != null
+                        && dinerosTransition.getNodeGraphics().getDimension() != null) {
                     t.setNodegraphicsHLAPI(new NodeGraphicsHLAPI(
                             new PositionHLAPI(
-                                    inputSignalTransition.getNodeGraphics().getPosition().getX(), inputSignalTransition.getNodeGraphics().getPosition().getY()),
-                            new DimensionHLAPI(inputSignalTransition.getNodeGraphics().getDimension().getX(), inputSignalTransition.getNodeGraphics().getDimension().getY()),
+                                    dinerosTransition.getNodeGraphics().getPosition().getX(), dinerosTransition.getNodeGraphics().getPosition().getY()),
+                            new DimensionHLAPI(dinerosTransition.getNodeGraphics().getDimension().getX(), dinerosTransition.getNodeGraphics().getDimension().getY()),
                             null, null)); // TODO
                 }
 
-                inputSignalTransition.getToolspecificList().forEach(toolInfo ->
+                dinerosTransition.getToolspecificList().forEach(toolInfo ->
                         t.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(),
                                 clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(),
                                         toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null)));
@@ -137,27 +137,27 @@ aspect PrimitiveElementsConverter{
             return null;
         }
 
-        public static PlaceHLAPI convertPlaceToPnmlObject(OutputSignalPlace outputSignalPlace) {
+        public static PlaceHLAPI convertPlaceToPnmlObject(DinerosPlace dinerosPlace) {
 
             try {
-                PlaceHLAPI p = new PlaceHLAPI(outputSignalPlace.getId());
-                p.setNameHLAPI(new NameHLAPI(outputSignalPlace.getName().getText()));
+                PlaceHLAPI p = new PlaceHLAPI(dinerosPlace.getId());
+                p.setNameHLAPI(new NameHLAPI(dinerosPlace.getName().getText()));
 
-                if (outputSignalPlace.getNodeGraphics() != null && outputSignalPlace.getNodeGraphics().getLine() != null && outputSignalPlace.getNodeGraphics().getDimension() != null) {
+                if (dinerosPlace.getNodeGraphics() != null && dinerosPlace.getNodeGraphics().getLine() != null && dinerosPlace.getNodeGraphics().getDimension() != null) {
                     p.setNodegraphicsHLAPI(new NodeGraphicsHLAPI(
                             new PositionHLAPI(
-                                    outputSignalPlace.getNodeGraphics().getPosition().getX(), outputSignalPlace.getNodeGraphics().getPosition().getY()),
-                            new DimensionHLAPI(outputSignalPlace.getNodeGraphics().getDimension().getX(), outputSignalPlace.getNodeGraphics().getDimension().getY()),
+                                    dinerosPlace.getNodeGraphics().getPosition().getX(), dinerosPlace.getNodeGraphics().getPosition().getY()),
+                            new DimensionHLAPI(dinerosPlace.getNodeGraphics().getDimension().getX(), dinerosPlace.getNodeGraphics().getDimension().getY()),
                             null, null)); // TODO
                 }
 
-                outputSignalPlace.getToolspecificList().forEach(toolInfo ->
+                dinerosPlace.getToolspecificList().forEach(toolInfo ->
                         p.addToolspecificsHLAPI(new ToolInfoHLAPI(toolInfo.getTool(), toolInfo.getVersion(), clipToolSpecificsFormattedXmlBuffer(toolInfo.getTool(), toolInfo.getVersion(),
                                 toolInfo.getFormattedXMLBuffer()), toolInfo.getToolInfoGrammarURI(), null)));
 
                 // TODO tranfer graphics
-                if (outputSignalPlace.getInitialMarking() != null) {
-                    p.setInitialMarkingHLAPI(new PTMarkingHLAPI(Long.valueOf(outputSignalPlace.getInitialMarking().getText())));
+                if (dinerosPlace.getInitialMarking() != null) {
+                    p.setInitialMarkingHLAPI(new PTMarkingHLAPI(Long.valueOf(dinerosPlace.getInitialMarking().getText())));
                 } else {
                     p.setInitialMarkingHLAPI(new PTMarkingHLAPI(0L));
                 }
diff --git a/src/main/jastadd/base/io/IoPN.relast b/src/main/jastadd/base/io/IoPN.relast
index b81d10091d7d575ad042b731be6a85884ac63933..9587cc3cf7d5d9b9e33863fa2ea314e296e2da53 100644
--- a/src/main/jastadd/base/io/IoPN.relast
+++ b/src/main/jastadd/base/io/IoPN.relast
@@ -3,16 +3,17 @@ abstract PnObjectInformation ::= <Node:String> <SubNet:String> <Instance:String>
 PlaceInformation : PnObjectInformation;
 
 // Ports
-TopicPort ::= <PlaceId:String> <Limit:int>;
+abstract Port;
+abstract TopicPort : Port ::= <PlaceId:String> <Limit:int>;
 SubscriberPort : TopicPort;
 PublisherPort : TopicPort;
-ServiceChannel ::= <RequestPort:String> <ResponsePort:String>;
+ServiceChannel : Port ::= <RequestPort:String> <ResponsePort:String>;
 
 // Transition Information
 InputSignalBinding ::= <InputSignalId:String>;
 abstract TransitionInformation : PnObjectInformation ::= <Type:String> InputSignal:InputSignalBinding*;
-TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPorts:SubscriberPort* PublisherPorts:PublisherPort*;
-ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannels:ServiceChannel*;
+TopicTransitionInformation : TransitionInformation ::= <Topic:String> SubscriberPort:SubscriberPort* PublisherPort:PublisherPort*;
+ServiceTransitionInformation : TransitionInformation ::= <ServiceName:String> <ServerInput:String> <ServerOutput:String> ServiceChannel:ServiceChannel*;
 DefaultTransitionInformation : TransitionInformation;
 
 // Elements
diff --git a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
index fa83544c4c3a44db2daf7ee70354a0a4af0066f2..931d161549602888e1aba13fd46a69cdbce23503 100644
--- a/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
+++ b/src/main/jastadd/base/parsing/ToolSpecificsParser.jadd
@@ -1,8 +1,10 @@
 import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
 import de.tudresden.inf.st.pnml.base.data.CommunicatorInformation;
+import de.tudresden.inf.st.pnml.jastadd.model.*;
 import de.tudresden.inf.st.pnml.jastadd.parser.ExpressionParser;
 import de.tudresden.inf.st.pnml.jastadd.scanner.ExpressionScanner;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -12,6 +14,8 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Map;
 
 aspect ToolSpecificsParser{
 
@@ -42,6 +46,40 @@ aspect ToolSpecificsParser{
             return new InputSignalClause();
         }
 
+        public static Map<String, String> getInputSignalDefinitionsFromToolSpecifics(JastAddList<ToolInfo> toolInfos){
+
+            Map<String, String> inputSignalDefs = new HashMap<>();
+
+            try {
+                Document doc = parseToolSpecifics(toolInfos);
+                org.w3c.dom.NodeList sDefList = doc.getElementsByTagName(PnmlConstants.INPUT_SIGNALS_DEF);
+
+                if (sDefList.getLength() > 0 && sDefList.item(0) != null) {
+                    org.w3c.dom.Node sDefNode = sDefList.item(0);
+
+                    if (sDefNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
+
+                        Element sDefsElement = (Element) sDefNode;
+                        org.w3c.dom.NodeList sDefNodes = sDefsElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_DEF);
+
+                        for (int i = 0; i < sDefNodes.getLength(); i++) {
+
+                            org.w3c.dom.Node isDefNode = sDefNodes.item(i);
+                            Element isDefElement = (Element) isDefNode;
+
+                            String signalId = isDefElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_ID_DEF).item(0).getTextContent();
+                            String initialValue = isDefElement.getElementsByTagName(PnmlConstants.INPUT_SIGNAL_INIT_VALUE_DEF).item(0).getTextContent();
+                            inputSignalDefs.put(signalId, initialValue);
+                        }
+                    }
+                }
+            } catch(ParserConfigurationException | SAXException | IOException e){
+                logger.error(e.getMessage());
+            }
+
+            return inputSignalDefs;
+        }
+
         public static CommunicatorInformation getCommunicatorInformationFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
 
             CommunicatorInformation ci = new CommunicatorInformation();
@@ -85,15 +123,15 @@ aspect ToolSpecificsParser{
             return ci;
         }
 
-        public static String getNodeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
+        private static String getElementByKeyFromToolSpecifics(JastAddList<ToolInfo> toolInfos, String key) {
 
             if (toolInfos.getNumChild() > 0) {
                 try {
                     Document doc = parseToolSpecifics(toolInfos);
-                    org.w3c.dom.NodeList locationList = doc.getElementsByTagName(PnmlConstants.NODE_KEY);
+                    org.w3c.dom.NodeList eList = doc.getElementsByTagName(key);
 
-                    if (locationList.getLength() > 0 && locationList.item(0) != null) {
-                        return locationList.item(0).getTextContent();
+                    if (eList.getLength() > 0 && eList.item(0) != null) {
+                        return eList.item(0).getTextContent();
                     }
 
                 } catch (ParserConfigurationException | SAXException | IOException e) {
@@ -101,7 +139,23 @@ aspect ToolSpecificsParser{
                 }
             }
 
-            return "";
+            return null;
+        }
+
+        public static String getTransitionServiceNameFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
+            return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.SERVICE_NAME);
+        }
+
+        public static String getNodeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
+            return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.NODE_KEY);
+        }
+
+        public static String getServerInputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
+            return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_IN_KEY);
+        }
+
+        public static String getServerOutputFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
+            return getElementByKeyFromToolSpecifics(toolInfos, PnmlConstants.TRANSITION_SERVICE_SERVER_OUT_KEY);
         }
 
         public static String getArcTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
@@ -136,9 +190,8 @@ aspect ToolSpecificsParser{
 
                     if (typeList.getLength() > 0 && typeList.item(0) != null) {
                         String type = typeList.item(0).getTextContent();
-                        if (!type.equals(PnmlConstants.TRANSITION_TYPE_CONTINUOUS) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)
-                                || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC) || !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_REQUEST)
-                                || !type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE_RESPONSE)) {
+                        if (!type.equals(PnmlConstants.TRANSITION_TYPE_SERVICE) || type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)
+                                || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC)) {
                             return type;
                         } else {
                             logger.error("Error: Invalid transition type configured: " + type + ".");
@@ -180,48 +233,6 @@ aspect ToolSpecificsParser{
             return null;
         }
 
-        public static String getTransitionServiceNameFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
-
-            if (toolInfos.getNumChild() > 0) {
-                try {
-                    Document doc = parseToolSpecifics(toolInfos);
-                    org.w3c.dom.NodeList typeList = doc.getElementsByTagName(PnmlConstants.SERVICE_NAME);
-
-                    if (typeList.getLength() > 0 && typeList.item(0) != null) {
-
-                        String type = typeList.item(0).getTextContent();
-                        if (!type.equals("") && type != null) {
-                            return type;
-                        }
-                    }
-                } catch (ParserConfigurationException | SAXException | IOException e) {
-                    logger.error(e.getMessage());
-                }
-            }
-            return null;
-        }
-
-        private static String getPlaceTypeFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
-
-            if (toolInfos.getNumChild() > 0) {
-                try {
-                    Document doc = parseToolSpecifics(toolInfos);
-                    org.w3c.dom.NodeList typeList = doc.getElementsByTagName(PnmlConstants.TYPE_KEY);
-
-                    if (typeList.getLength() > 0 && typeList.item(0) != null) {
-                        String type = typeList.item(0).getTextContent();
-                        if (type.equals(PnmlConstants.PLACE_TYPE_DISCRETE) || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS)) {
-                            return type;
-                        }
-                    }
-
-                } catch (ParserConfigurationException | SAXException | IOException e) {
-                    logger.error(e.getMessage());
-                }
-            }
-            return null;
-        }
-
         public static String getSubnetFromToolSpecifics(JastAddList<ToolInfo> toolInfos) {
             return getSubnetInfoInternal(toolInfos);
         }
@@ -231,21 +242,12 @@ aspect ToolSpecificsParser{
             if (toolInfos.getNumChild() > 0) {
                 try {
                     Document doc = parseToolSpecifics(toolInfos);
-                    //      String typeTrans = getTransitionTypeFromToolSpecifics(toolInfos);
-                    //      String typePlace = getPlaceTypeFromToolSpecifics(toolInfos);
-
-                    //   String type = typePlace == null ? typeTrans : typePlace;
-
-                    //  if (type != null && (type.equals(PnmlConstants.TRANSITION_TYPE_DISCRETE)
-                    //          || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS) || type.equals(PnmlConstants.PLACE_TYPE_CONTINUOUS)
-                    //          || type.equals(PnmlConstants.PLACE_TYPE_DISCRETE) || type.equals(PnmlConstants.TRANSITION_TYPE_TOPIC))) {
 
                     org.w3c.dom.NodeList snList = doc.getElementsByTagName(PnmlConstants.SUBNET_KEY);
 
                     if (snList.getLength() > 0 && snList.item(0) != null) {
                         return snList.item(0).getTextContent();
                     }
-                    //  }
                 } catch (ParserConfigurationException | SAXException | IOException e) {
                     logger.error(e.getMessage());
                 }
@@ -294,62 +296,129 @@ aspect ToolSpecificsParser{
             return getTransitionLimitsInternal(toolInfos, PnmlConstants.INPUT_LIMIT_KEY);
         }
 
+        private static JastAddList<Port> getPorts(JastAddList<ToolInfo> toolInfos,
+                                                  String listKey, String elemKey,
+                                                  String portField1Key, String portField2Key){
+
+            JastAddList<Port> ports = new JastAddList<>();
+
+            try {
+                Document doc = parseToolSpecifics(toolInfos);
+
+                org.w3c.dom.NodeList pDefList = doc.getElementsByTagName(listKey);
+
+                if (pDefList.getLength() > 0 && pDefList.item(0) != null) {
+
+                    org.w3c.dom.Node psDefNode = pDefList.item(0);
+
+                    if (psDefNode.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
+
+                        Element pDefsElement = (Element) psDefNode;
+
+                        org.w3c.dom.NodeList pDefNodes = pDefsElement.getElementsByTagName(elemKey);
+
+                        for (int i = 0; i < pDefNodes.getLength(); i++) {
+
+                            org.w3c.dom.Node pDefNode = pDefNodes.item(i);
+                            Element pDefElement = (Element) pDefNode;
+
+                            String portField1 = pDefElement.getElementsByTagName(portField1Key).item(0).getTextContent();
+                            String portField2 = pDefElement.getElementsByTagName(portField2Key).item(0).getTextContent();
+
+                            if(listKey.equals(PnmlConstants.TRANSITION_TOPIC_PUBLISHERS_DEF_KEY)){
+                                PublisherPort pp = new PublisherPort();
+                                pp.setPlaceId(portField1);
+                                pp.setLimit(Integer.parseInt(portField2));
+                                ports.add(pp);
+                            }
+                            if(listKey.equals(PnmlConstants.TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY)){
+                                SubscriberPort sp = new SubscriberPort();
+                                sp.setPlaceId(portField1);
+                                sp.setLimit(Integer.parseInt(portField2));
+                                ports.add(sp);
+                            }
+                            if(listKey.equals(PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY)){
+                                ServiceChannel sc = new ServiceChannel();
+                                sc.setRequestPort(portField1);
+                                sc.setRequestPort(portField2);
+                                ports.add(sc);
+                            }
+                        }
+                    }
+                }
+            } catch(ParserConfigurationException | SAXException | IOException e){
+                logger.error(e.getMessage());
+            }
+
+            return ports;
+        }
+
         public static TransitionInformation getTransitionInformation(JastAddList<ToolInfo> toolInfos) {
 
             if (getTransitionTopicFromToolSpecifics(toolInfos) != null) {
                 TopicTransitionInformation topicTransition = new TopicTransitionInformation();
-                topicTransition.setInputLimit(getTransitionInputLimit(toolInfos));
-                topicTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
-                topicTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
+                topicTransition.setNode(getNodeFromToolSpecifics(toolInfos));
                 topicTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
                 topicTransition.setTopic(getTransitionTopicFromToolSpecifics(toolInfos));
                 topicTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
+
+                JastAddList<Port> pubPorts = getPorts(toolInfos,
+                        PnmlConstants.TRANSITION_TOPIC_PUBLISHERS_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_PUBLISHER_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_PORT_ID_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY);
+                for(Port p : pubPorts){
+                    topicTransition.addPublisherPort(p.asPublisherPort());
+                }
+
+                JastAddList<Port> subPorts = getPorts(toolInfos,
+                        PnmlConstants.TRANSITION_TOPIC_SUBSCRIBERS_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_SUBSCRIBER_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_PORT_ID_DEF_KEY,
+                        PnmlConstants.TRANSITION_TOPIC_PORT_LIMIT_DEF_KEY);
+                for(Port s : subPorts){
+                    topicTransition.addSubscriberPort(s.asSubscriberPort());
+                }
+
                 return topicTransition;
             }
 
             if (getTransitionServiceNameFromToolSpecifics(toolInfos) != null) {
                 ServiceTransitionInformation serviceTransition = new ServiceTransitionInformation();
-                serviceTransition.setInputLimit(getTransitionInputLimit(toolInfos));
-                serviceTransition.setOutputLimit(getTransitionOutputLimit(toolInfos));
-                serviceTransition.setLocation(getLocationFromToolSpecifics(toolInfos));
+                serviceTransition.setNode(getNodeFromToolSpecifics(toolInfos));
                 serviceTransition.setType(getTransitionTypeFromToolSpecifics(toolInfos));
                 serviceTransition.setServiceName(getTransitionServiceNameFromToolSpecifics(toolInfos));
                 serviceTransition.setSubNet(getTransitionSubnetInfo(toolInfos));
+
+                JastAddList<Port> servicePorts = getPorts(toolInfos,
+                        PnmlConstants.TRANSITION_SERVICE_CHANNELS_KEY,
+                        PnmlConstants.TRANSITION_SERVICE_CHANNEL_KEY,
+                        PnmlConstants.TRANSITION_SERVICE_REQUEST_KEY,
+                        PnmlConstants.TRANSITION_SERVICE_RESPONSE_KEY);
+                for(Port s : servicePorts){
+                    serviceTransition.addServiceChannel(s.asServiceChannel());
+                }
+
                 return serviceTransition;
             }
 
             DefaultTransitionInformation transitionInformation = new DefaultTransitionInformation();
-            transitionInformation.setInputLimit(getTransitionInputLimit(toolInfos));
-            transitionInformation.setOutputLimit(getTransitionOutputLimit(toolInfos));
-            transitionInformation.setLocation(getLocationFromToolSpecifics(toolInfos));
+            transitionInformation.setNode(getNodeFromToolSpecifics(toolInfos));
             transitionInformation.setType(getTransitionTypeFromToolSpecifics(toolInfos));
             transitionInformation.setSubNet(getTransitionSubnetInfo(toolInfos));
 
             return transitionInformation;
         }
 
-        public static PlaceInformation getPlaceInformationInformation(JastAddList<ToolInfo> toolInfos) {
+        public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) {
 
             PlaceInformation placeInformation = new PlaceInformation();
-
-            placeInformation.setLocation(getLocationFromToolSpecifics(toolInfos));
-            placeInformation.setType(getPlaceTypeFromToolSpecifics(toolInfos));
-            String sn = getPlaceSubnetInfo(toolInfos);
-            placeInformation.setSubNet(sn);
+            placeInformation.setNode(getNodeFromToolSpecifics(toolInfos));
+            placeInformation.setSubNet(getPlaceSubnetInfo(toolInfos));
 
             return placeInformation;
         }
 
-        public static PlaceInformation getPlaceInformation(JastAddList<ToolInfo> toolInfos) {
-
-            PlaceInformation pi = new PlaceInformation();
-            pi.setLocation(getLocationFromToolSpecifics(toolInfos));
-            pi.setSubNet(getPlaceSubnetInfo(toolInfos));
-            pi.setType(getPlaceTypeFromToolSpecifics(toolInfos));
-
-            return pi;
-        }
-
         private static Document parseToolSpecifics(JastAddList<ToolInfo> toolInfos) throws ParserConfigurationException, SAXException, IOException {
 
             ToolInfo ti = null;
@@ -357,6 +426,7 @@ aspect ToolSpecificsParser{
             for (ToolInfo toolInfo : toolInfos) {
                 if (toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.SUBNET_KEY) > 0 ||
                         toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.COMMUNICATOR) > 0 ||
+                        toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.TYPE_KEY) > 0 ||
                         toolInfo.getFormattedXMLBuffer().indexOf(PnmlConstants.ARC_TYPE_KEY) > 0) {
                     ti = toolInfo;
                     break;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
index 38ba672e8bd747c68af8935d6fcdc4c4256d1897..23cccf20c741542b4804494ba33f503e1a382670 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
@@ -4,11 +4,8 @@ public class Main {
 
     public static void main(String[] args) {
 
-        // Nothing to to here
+        // Nothing to do here
 
         // TODO: update clauses
-        // TODO: fix parsing
-        // TODO: fix export
-        // TODO: read input signal defs (net level)
     }
 }