diff --git a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..65f7f930f0ac6ea24331945e47e77e95f3f254ec 100644
--- a/src/main/jastadd/flatter/transforms/SignalTransforms.jadd
+++ b/src/main/jastadd/flatter/transforms/SignalTransforms.jadd
@@ -0,0 +1,83 @@
+aspect SignalTransforms {
+
+    // apply rule I4
+    syn PetriNet PetriNet.transformSignalElements(Page signalValuePage){
+
+        Map<String, String> signalDefs = this.getInputSignalDefinition();
+        Page topPage = this.getPage(0);
+
+        for (Map.Entry<String, String> entry : signalDefs.entrySet()) {
+
+            PetriNet pubNet = SignalTemplates.getInputSignalTemplate(entry.getKey());
+
+            if(Boolean.parseBoolean(entry.getValue())){
+                pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(1);
+                pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(0);
+            } else {
+                pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_TRUE + entry.getKey()).getInitialMarking().setText(0);
+                pubNet.getPlaceById(TemplateConstants.INPUT_SIGNAL_PLACE_FALSE + entry.getKey()).getInitialMarking().setText(1);
+            }
+
+            TransformationUtils.includeTemplateInstance(signalValuePage, this, pubNet, "signal", "signal");
+        }
+        return this;
+    }
+
+    syn Page InputSignalClause.transformClauseElement(DinerosTransition t, PetriNet net) {
+
+        Page res = new Page();
+        res.setId(TemplateConstants.INPUT_SIGNAL_PAGE_PREFIX + t.getId());
+
+        // apply rule I1
+        int i = 0;
+        for(Disjunction dj : this.getDisjunctions()){
+            DinerosPlace pdi = PrimitiveTemplates.getDinerosPlace();
+            pdi.setId("PD-" + i + "-" + t.getId());
+            pdi.getName().setText(pdi.getId());
+            RefTransition rt = PrimitiveTemplates.getReferenceTransition(t);
+            rt.setId("PD-REF-" + i + "-" + t.getId());
+            rt.getName().setText(rt.getId());
+
+            int j = 0;
+            for(Literal l : dj.getLiterals()){
+
+                Transition toTrue = net.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_TRUE + "-" + l.getName());
+                Transition toFalse = net.getTransitionById(TemplateConstants.INPUT_SIGNAL_TRANSITION_TO_FALSE + "-" + l.getName());
+
+                // create elements for rule I2 & I3
+                RefTransition toTrueRt = PrimitiveTemplates.getReferenceTransition(toTrue);
+                toTrueRt.setId(toTrue.getId() + "REF-" + i + "-" + j);
+                toTrueRt.getName().setText(toTrueRt.getId());
+                res.addObject(toTrueRt);
+                RefTransition toFalseRt = PrimitiveTemplates.getReferenceTransition(toFalse);
+                toFalseRt.setId(toFalse.getId() + "REF-" + i + "-" + j);
+                toFalseRt.getName().setText(toFalseRt.getId());
+                res.addObject(toFalseRt);
+                RefPlace djRefPlace = PrimitiveTemplates.getReferencePlace(pdi);
+
+                // apply rule I2
+                if(l.isPositiveLiteral()){
+                    TransformationUtils.createAndIncludeArc(res, toFalse.getId() + "-to-" + djRefPlace.getId(), toFalseRt, djRefPlace);
+                    TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toTrueRt);
+
+                    if(Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){
+                        pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1);
+                    }
+                }
+
+                // apply rule I3
+                if(l.isNegativeLiteral()){
+                    TransformationUtils.createAndIncludeArc(res, toTrueRt.getId() + "-to-" + djRefPlace.getId(), toTrueRt, djRefPlace);
+                    TransformationUtils.createAndIncludeArc(res, djRefPlace.getId() + "-to-" + toTrueRt.getId(), djRefPlace, toFalseRt);
+
+                    if(!Boolean.parseBoolean(net.getInputSignalDefinition().get(l.getName()))){
+                        pdi.getInitialMarking().setText(pdi.getInitialMarking().getText() + 1);
+                    }
+                }
+                j++;
+            }
+            i++;
+        }
+        return res;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
index e6ce7a4a1343a5eea1597446865a5e3e1d8ec25c..644805e618a8cb4ef04afc3df4c29cb63cb79997 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/Main.java
@@ -3,6 +3,7 @@ package de.tudresden.inf.st.pnml.flatter;
 import de.tudresden.inf.st.jastadd.dumpAst.ast.DumpBuilder;
 import de.tudresden.inf.st.jastadd.dumpAst.ast.Dumper;
 import de.tudresden.inf.st.jastadd.dumpAst.ast.SkinParamBooleanSetting;
+import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
 import de.tudresden.inf.st.pnml.flatter.config.ConfigReader;
 import de.tudresden.inf.st.pnml.flatter.tina.KtzioProxy;
 import de.tudresden.inf.st.pnml.flatter.tina.SiftProxy;
@@ -70,7 +71,19 @@ public class Main {
         }
 
         // [STAGE 4] Transform signals
-        // TODO
+        Page signalValuePage = new Page();
+        signalValuePage.setId(PnmlConstants.SIGNAL_VALUE_PAGE_ID);
+        petriNet.addPage(signalValuePage);
+        petriNet.transformSignalElements(signalValuePage);
+        petriNet.flushTreeCache();
+
+        for(DinerosTransition dt : petriNet.allDinerosTransitions()){
+            Page dtClausePage = dt.getStaticTransitionInformation().asSignalTransitionInformation()
+                    .getClause().transformClauseElement(dt, petriNet);
+            petriNet.addPage(dtClausePage);
+        }
+
+        petriNet.flushTreeCache();
 
      //   DumpBuilder builder = Dumper.read(petriNet).skinParam(SkinParamBooleanSetting.Shadowing, false);
      //   builder.dumpAsPNG(Paths.get("net.png"));
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
index 7190bb7314dda1ae64fe1ec1b2d5ebe2e1ac902b..537ebc3f795d1d5ad2aa689ed868ce238729e18f 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/PrimitiveTemplates.java
@@ -29,4 +29,28 @@ public class PrimitiveTemplates extends PnmlTemplate{
 
         return null;
     }
+
+    public static RefTransition getReferenceTransition(Transition target){
+
+        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/RefTransition.pnml").get(0);
+
+        for(RefTransition rt : templateNet.allRefTransitions()){
+            rt.setRef(target);
+            return rt;
+        }
+
+        return null;
+    }
+
+    public static RefPlace getReferencePlace(Place target){
+
+        PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/elements/RefPlace.pnml").get(0);
+
+        for(RefPlace rp : templateNet.allRefPlaces()){
+            rp.setRef(target);
+            return rp;
+        }
+
+        return null;
+    }
 }
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/SignalTemplates.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/SignalTemplates.java
index baf688bb7fa12526454c5bb22bcfd5247ba6d48f..7734e6e1385a9de2b72d1f2d6d407e8ed81c553d 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/SignalTemplates.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/SignalTemplates.java
@@ -1,6 +1,5 @@
 package de.tudresden.inf.st.pnml.flatter.template;
 
-import de.tudresden.inf.st.pnml.jastadd.model.Name;
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
 import de.tudresden.inf.st.pnml.jastadd.model.PnObject;
 import de.tudresden.inf.st.pnml.jastadd.model.PnmlParser;
@@ -12,9 +11,7 @@ public class SignalTemplates extends PnmlTemplate{
         PetriNet templateNet = PnmlParser.parsePnml(homeDirectory + "/src/main/resources/templates/InputSignal.pnml").get(0);
 
         for(PnObject po : templateNet.allObjects()){
-            if(!po.getId().equals(TemplateConstants.INPUT_SIGNAL_TEMPLATE_PAGE)){
-                updatePnObjectIdAndName(po, idSuffix);
-            }
+            updatePnObjectIdAndName(po, idSuffix);
         }
 
         return templateNet;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java
index d3d2a77dcd54e3fa9a71ded64fa009b2557a83db..707903472508fca53ad0afc1cdda90318af8b2fc 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/flatter/template/TemplateConstants.java
@@ -38,21 +38,14 @@ public final class TemplateConstants {
     public static final String CHANNEL_TOPIC_PLACE = "ChannelConnectorPlace";
     public static final String CHANNEL_TOPIC_TRANSITION = "ChannelConnectorTransition";
     public static final String CHANNEL_TOPIC_PAGE_PREFIX = "ChannelTopicPage";
-    public static final String CHANNEL_SERVICE_PAGE_PREFIX = "ChannelServicePage";
+    public static final String CHANNEL_SERVICE_PAGE_PREFIX = "SIGNAL-PAGE-";
 
     // signal elements
-    public static final String INPUT_SIGNAL_TEMPLATE_PAGE = "InputSignalTemplatePage";
-    public static final String INPUT_SIGNAL_PLACE_ACTIVE = "InputSignalActivePlace";
-    public static final String INPUT_SIGNAL_PLACE_INACTIVE = "InputSignalInactivePlace";
-    public static final String INPUT_SIGNAL_PLACE_OR_CONNECTION_FALSE_PREFIX = "DINEROS-InputSignalOrConnectionFalse";
-    public static final String INPUT_SIGNAL_PLACE_OR_CONNECTION_TRUE_PREFIX = "DINEROS-InputSignalOrConnectionTrue";
-    public static final String INPUT_SIGNAL_TRANSITION_TO_ACTIVE = "InputSignalInactiveToActiveTransition";
-    public static final String INPUT_SIGNAL_TRANSITION_TO_INACTIVE = "InputSignalActiveToInactiveTransition";
-
-    public static final String ARC_T_ACTIVE_TO_TRUE = "DINEROS-ArcTActiveToTrue";
-    public static final String ARC_FALSE_TO_T_ACTIVE = "DINEROS-ArcFalseToTActive";
-    public static final String ARC_T_INACTIVE_TO_FALSE = "DINEROS-ArcTInactiveToFalse";
-    public static final String ARC_TRUE_TO_T_INACTIVE = "DINEROS-ArcTrueToTInactive";
+    public static final String INPUT_SIGNAL_PLACE_TRUE = "InputSignalTruePlace";
+    public static final String INPUT_SIGNAL_PLACE_FALSE = "InputSignalFalsePlace";
+    public static final String INPUT_SIGNAL_TRANSITION_TO_TRUE = "InputSignalToTrueTransition";
+    public static final String INPUT_SIGNAL_TRANSITION_TO_FALSE = "InputSignalToFalseTransition";
+    public static final String INPUT_SIGNAL_PAGE_PREFIX = "InputSignalTruePlace";
 
     // services
     // S3
diff --git a/src/main/resources/elements/RefPlace.pnml b/src/main/resources/elements/RefPlace.pnml
new file mode 100644
index 0000000000000000000000000000000000000000..ca63563bea17233b827dfbd1eab2210e76e8e27e
--- /dev/null
+++ b/src/main/resources/elements/RefPlace.pnml
@@ -0,0 +1,46 @@
+<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
+    <net id="DinerosTemplate" type ="http://www.pnml.org/version-2009/grammar/ptnet">
+        <name>
+            <text>DinerosTemplate</text>
+        </name>
+        <page id="DinerosTransitionPage">
+            <referencePlace id="DinerosRefPlace" ref="DinerosPlace">
+                <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                    <location>none</location>
+                    <subnet>none</subnet>
+                </toolspecific>
+                <name>
+                    <text>DinerosRefPlace</text>
+                    <graphics>
+                        <offset x="0" y="0" />
+                    </graphics>
+                </name>
+                <graphics>
+                    <position x="20" y="20"/>
+                </graphics>
+            </referencePlace>
+
+            <place id="DinerosPlace">
+                <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                    <location>none</location>
+                    <subnet>none</subnet>
+                    <type>discretePlaceType</type>
+                    <outputsignalbindings>
+                    </outputsignalbindings>
+                </toolspecific>
+                <name>
+                    <text>DinerosPlace</text>
+                    <graphics>
+                        <offset x="0" y="0" />
+                    </graphics>
+                </name>
+                <initialMarking>
+                    <text>0</text>
+                </initialMarking>
+                <graphics>
+                    <position x="0" y="0"/>
+                </graphics>
+            </place>
+        </page>
+    </net>
+</pnml>
\ No newline at end of file
diff --git a/src/main/resources/elements/RefTransition.pnml b/src/main/resources/elements/RefTransition.pnml
new file mode 100644
index 0000000000000000000000000000000000000000..08f037d8279504b6c11aa2bcc5dc4ea4d69d0ed0
--- /dev/null
+++ b/src/main/resources/elements/RefTransition.pnml
@@ -0,0 +1,34 @@
+<pnml xmlns="http://www.pnml.org/version-2009/grammar/pnml">
+    <net id="DinerosTemplate" type ="http://www.pnml.org/version-2009/grammar/ptnet">
+        <name>
+            <text>DinerosTemplate</text>
+        </name>
+        <page id="DinerosTransitionPage">
+            <transition id="DinerosTransition">
+                <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                    <location>none</location>
+                    <subnet>none</subnet>
+                    <type>discreteTransitionType</type>
+                    <inputsignalbindings>
+                    </inputsignalbindings>
+                    <inputsignalclause></inputsignalclause>
+                </toolspecific>
+                <name>
+                    <text>ServiceClientOutputTransition</text>
+                    <graphics>
+                        <offset x="0" y="0" />
+                    </graphics>
+                </name>
+                <graphics>
+                    <position x="0" y="0"/>
+                </graphics>
+            </transition>
+            <referenceTransition id="DinerosRefTransition" ref="DinerosTransition">
+                <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
+                    <location>none</location>
+                    <subnet>none</subnet>
+                </toolspecific>
+            </referenceTransition>
+        </page>
+    </net>
+</pnml>
\ No newline at end of file
diff --git a/src/main/resources/templates/InputSignal.pnml b/src/main/resources/templates/InputSignal.pnml
index 81eec344548c468c24419d87c7f8765d4125181a..c484c9fad4e469f3986b59de08fed409acef645c 100644
--- a/src/main/resources/templates/InputSignal.pnml
+++ b/src/main/resources/templates/InputSignal.pnml
@@ -3,8 +3,8 @@
         <name>
             <text>DinerosTemplate</text>
         </name>
-        <page id="InputSignalTemplatePage">
-            <place id="InputSignalActivePlace">
+        <page id="DinerosTemplatePage">
+            <place id="InputSignalTruePlace">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>
@@ -13,7 +13,7 @@
                     </outputsignalbindings>
                 </toolspecific>
                 <name>
-                    <text>InputSignalActivePlace</text>
+                    <text>InputSignalTruePlace</text>
                     <graphics>
                         <offset x="0" y="0" />
                     </graphics>
@@ -25,7 +25,7 @@
                     <position x="0" y="0"/>
                 </graphics>
             </place>
-            <place id="InputSignalInactivePlace">
+            <place id="InputSignalFalsePlace">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>
@@ -34,7 +34,7 @@
                     </outputsignalbindings>
                 </toolspecific>
                 <name>
-                    <text>InputSignalInactivePlace</text>
+                    <text>InputSignalFalsePlace</text>
                     <graphics>
                         <offset x="0" y="0" />
                     </graphics>
@@ -47,7 +47,7 @@
                 </graphics>
             </place>
 
-            <transition id="InputSignalActiveToInactiveTransition">
+            <transition id="InputSignalToFalseTransition">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>
@@ -57,7 +57,7 @@
                     <inputsignalclause></inputsignalclause>
                 </toolspecific>
                 <name>
-                    <text>InputSignalActiveToInactiveTransition</text>
+                    <text>InputSignalToFalseTransition</text>
                     <graphics>
                         <offset x="0" y="0" />
                     </graphics>
@@ -66,7 +66,7 @@
                     <position x="0" y="0"/>
                 </graphics>
             </transition>
-            <transition id="InputSignalInactiveToActiveTransition">
+            <transition id="InputSignalToTrueTransition">
                 <toolspecific tool="de.tudresden.inf.st.pnml.distributedPN" version="0.1">
                     <location>none</location>
                     <subnet>none</subnet>
@@ -76,7 +76,7 @@
                     <inputsignalclause></inputsignalclause>
                 </toolspecific>
                 <name>
-                    <text>InputSignalInactiveToActiveTransition</text>
+                    <text>InputSignalToTrueTransition</text>
                     <graphics>
                         <offset x="0" y="0" />
                     </graphics>
@@ -86,13 +86,13 @@
                 </graphics>
             </transition>
 
-            <arc id="arc-1" source="InputSignalActivePlace" target="InputSignalActiveToInactiveTransition">
+            <arc id="arc-1" source="InputSignalTruePlace" target="InputSignalToFalseTransition">
             </arc>
-            <arc id="arc-2" source="InputSignalActiveToInactiveTransition" target="InputSignalInactivePlace">
+            <arc id="arc-2" source="InputSignalToFalseTransition" target="InputSignalFalsePlace">
             </arc>
-            <arc id="arc-3" source="InputSignalInactivePlace" target="InputSignalInactiveToActiveTransition">
+            <arc id="arc-3" source="InputSignalFalsePlace" target="InputSignalToTrueTransition">
             </arc>
-            <arc id="arc-4" source="InputSignalInactiveToActiveTransition" target="InputSignalActivePlace">
+            <arc id="arc-4" source="InputSignalToTrueTransition" target="InputSignalTruePlace">
             </arc>
         </page>
     </net>