diff --git a/trainbenchmark/models/.gitignore b/trainbenchmark/models/.gitignore
index 296d9b6f2d35789f1c96dd845a2cf7e2851f555d..769f779cd54db495a69dbda4d49a8c9ac1c3c9ce 100644
--- a/trainbenchmark/models/.gitignore
+++ b/trainbenchmark/models/.gitignore
@@ -3,6 +3,7 @@
 !railway-*-1-*.*
 !railway-*-2.*
 !railway-*-2-*.*
+!railway-minimal-*.*
 *railway-*-raw.txt
 *railway-*.dot
 !.gitignore
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3156ee2cfe3ea727b444b7badca6a71a163178c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"3","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":4}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"4","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":5}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"5","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":6}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"6","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":7}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"7","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"8","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"2","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":3},{"k":"i","t":"TrackElement","v":4},{"k":"i","t":"TrackElement","v":5},{"k":"i","t":"TrackElement","v":6},{"k":"i","t":"TrackElement","v":7},{"k":"i","t":"TrackElement","v":8}]}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..cb061458f491398ce3fd7f48dfa9e2f6a6b0106c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":3}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":2}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..64f95111695bc2862a1f6def3bd2044ae79478b2
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-jastadd-relast.json
@@ -0,0 +1,91 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "2",
+          "children" : {
+            "Id" : 3,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "4" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "4",
+          "children" : {
+            "Id" : 4,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "5" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "5",
+          "children" : {
+            "Id" : 5,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "6" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "6",
+          "children" : {
+            "Id" : 6,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "7" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "7",
+          "children" : {
+            "Id" : 7,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "8" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "8",
+          "children" : {
+            "Id" : 8,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 2
+          },
+          "relations" : {
+            "monitors" : [ "2", "4", "5", "6", "7", "8" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..75bf6c6550968adc695bc14822af84d90b973668
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Sensor</data></node><node id="3"><data key="labelV">Segment</data></node><node id="4"><data key="labelV">Segment</data></node><node id="5"><data key="labelV">Segment</data></node><node id="6"><data key="labelV">Segment</data></node><node id="7"><data key="labelV">Segment</data></node><node id="8"><data key="labelV">Segment</data></node><edge id="2" source="0" target="1"><data key="labelE">sensors</data></edge><edge id="9" source="0" target="3"><data key="labelE">elements</data></edge><edge id="10" source="0" target="4"><data key="labelE">elements</data></edge><edge id="11" source="0" target="5"><data key="labelE">elements</data></edge><edge id="12" source="0" target="6"><data key="labelE">elements</data></edge><edge id="13" source="0" target="7"><data key="labelE">elements</data></edge><edge id="14" source="0" target="8"><data key="labelE">elements</data></edge><edge id="15" source="3" target="4"><data key="labelE">connectsTo</data></edge><edge id="16" source="4" target="5"><data key="labelE">connectsTo</data></edge><edge id="17" source="5" target="6"><data key="labelE">connectsTo</data></edge><edge id="18" source="6" target="7"><data key="labelE">connectsTo</data></edge><edge id="19" source="7" target="8"><data key="labelE">connectsTo</data></edge><edge id="20" source="3" target="1"><data key="labelE">monitoredBy</data></edge><edge id="21" source="4" target="1"><data key="labelE">monitoredBy</data></edge><edge id="22" source="5" target="1"><data key="labelE">monitoredBy</data></edge><edge id="23" source="6" target="1"><data key="labelE">monitoredBy</data></edge><edge id="24" source="7" target="1"><data key="labelE">monitoredBy</data></edge><edge id="25" source="8" target="1"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject.xmi b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..4eeb51ac30ce563d7de204b1619bac1c2481e3dc
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsInject.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <sensors id="2" monitors="//@regions.0/@elements.0 //@regions.0/@elements.1 //@regions.0/@elements.2 //@regions.0/@elements.3 //@regions.0/@elements.4 //@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="3" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.1"/>
+    <elements xsi:type="railway:Segment" id="4" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.2"/>
+    <elements xsi:type="railway:Segment" id="5" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.3"/>
+    <elements xsi:type="railway:Segment" id="6" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.4"/>
+    <elements xsi:type="railway:Segment" id="7" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="8" monitoredBy="//@regions.0/@sensors.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3156ee2cfe3ea727b444b7badca6a71a163178c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"3","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":4}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"4","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":5}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"5","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":6}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"6","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":7}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"7","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"8","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"2","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":3},{"k":"i","t":"TrackElement","v":4},{"k":"i","t":"TrackElement","v":5},{"k":"i","t":"TrackElement","v":6},{"k":"i","t":"TrackElement","v":7},{"k":"i","t":"TrackElement","v":8}]}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..cb061458f491398ce3fd7f48dfa9e2f6a6b0106c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":3}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":2}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..64f95111695bc2862a1f6def3bd2044ae79478b2
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-jastadd-relast.json
@@ -0,0 +1,91 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "2",
+          "children" : {
+            "Id" : 3,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "4" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "4",
+          "children" : {
+            "Id" : 4,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "5" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "5",
+          "children" : {
+            "Id" : 5,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "6" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "6",
+          "children" : {
+            "Id" : 6,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "7" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "7",
+          "children" : {
+            "Id" : 7,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "8" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "8",
+          "children" : {
+            "Id" : 8,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 2
+          },
+          "relations" : {
+            "monitors" : [ "2", "4", "5", "6", "7", "8" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..75bf6c6550968adc695bc14822af84d90b973668
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Sensor</data></node><node id="3"><data key="labelV">Segment</data></node><node id="4"><data key="labelV">Segment</data></node><node id="5"><data key="labelV">Segment</data></node><node id="6"><data key="labelV">Segment</data></node><node id="7"><data key="labelV">Segment</data></node><node id="8"><data key="labelV">Segment</data></node><edge id="2" source="0" target="1"><data key="labelE">sensors</data></edge><edge id="9" source="0" target="3"><data key="labelE">elements</data></edge><edge id="10" source="0" target="4"><data key="labelE">elements</data></edge><edge id="11" source="0" target="5"><data key="labelE">elements</data></edge><edge id="12" source="0" target="6"><data key="labelE">elements</data></edge><edge id="13" source="0" target="7"><data key="labelE">elements</data></edge><edge id="14" source="0" target="8"><data key="labelE">elements</data></edge><edge id="15" source="3" target="4"><data key="labelE">connectsTo</data></edge><edge id="16" source="4" target="5"><data key="labelE">connectsTo</data></edge><edge id="17" source="5" target="6"><data key="labelE">connectsTo</data></edge><edge id="18" source="6" target="7"><data key="labelE">connectsTo</data></edge><edge id="19" source="7" target="8"><data key="labelE">connectsTo</data></edge><edge id="20" source="3" target="1"><data key="labelE">monitoredBy</data></edge><edge id="21" source="4" target="1"><data key="labelE">monitoredBy</data></edge><edge id="22" source="5" target="1"><data key="labelE">monitoredBy</data></edge><edge id="23" source="6" target="1"><data key="labelE">monitoredBy</data></edge><edge id="24" source="7" target="1"><data key="labelE">monitoredBy</data></edge><edge id="25" source="8" target="1"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair.xmi b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..4eeb51ac30ce563d7de204b1619bac1c2481e3dc
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-ConnectedSegmentsRepair.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <sensors id="2" monitors="//@regions.0/@elements.0 //@regions.0/@elements.1 //@regions.0/@elements.2 //@regions.0/@elements.3 //@regions.0/@elements.4 //@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="3" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.1"/>
+    <elements xsi:type="railway:Segment" id="4" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.2"/>
+    <elements xsi:type="railway:Segment" id="5" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.3"/>
+    <elements xsi:type="railway:Segment" id="6" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.4"/>
+    <elements xsi:type="railway:Segment" id="7" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="8" monitoredBy="//@regions.0/@sensors.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..1ff65e23018237badf77b65ccb25c84d5a00e33c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"2","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"Length":{"k":"t","t":"int","v":-1},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..c91317dd24edbd5badda676bd7203c3ed06685a1
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"Length":{"k":"t","t":"int","v":-1},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..8d172f662d1f4a5c36e54be5f4881e5b38237d47
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthInject-jastadd-relast.json
@@ -0,0 +1,25 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "2",
+          "children" : {
+            "Id" : 2,
+            "Length" : -1
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-PosLengthInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..46f2170cdc9dfc1e48235e10ac1afb551cdf8b02
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="length" for="node" attr.name="length" attr.type="int"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Segment</data><data key="length">-1</data></node><edge id="3" source="0" target="1"><data key="labelE">elements</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthInject.xmi b/trainbenchmark/models/railway-minimal-PosLengthInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..003ceac504700835d870324b4fd9f634684ac01e
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthInject.xmi
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <elements xsi:type="railway:Segment" id="2" length="-1"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3156ee2cfe3ea727b444b7badca6a71a163178c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"3","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":4}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"4","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":5}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"5","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":6}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"6","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":7}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"7","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","id":"8","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":2}]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"2","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":3},{"k":"i","t":"TrackElement","v":4},{"k":"i","t":"TrackElement","v":5},{"k":"i","t":"TrackElement","v":6},{"k":"i","t":"TrackElement","v":7},{"k":"i","t":"TrackElement","v":8}]}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..cb061458f491398ce3fd7f48dfa9e2f6a6b0106c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":3},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":4},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}}]},"Id":{"k":"t","t":"int","v":5},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}}]},"Id":{"k":"t","t":"int","v":6},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":3}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":4}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":5}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":6}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}},{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":2}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..64f95111695bc2862a1f6def3bd2044ae79478b2
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthRepair-jastadd-relast.json
@@ -0,0 +1,91 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "2",
+          "children" : {
+            "Id" : 3,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "4" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "4",
+          "children" : {
+            "Id" : 4,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "5" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "5",
+          "children" : {
+            "Id" : 5,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "6" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "6",
+          "children" : {
+            "Id" : 6,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "7" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "7",
+          "children" : {
+            "Id" : 7,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "8" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "8",
+          "children" : {
+            "Id" : 8,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 2
+          },
+          "relations" : {
+            "monitors" : [ "2", "4", "5", "6", "7", "8" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-PosLengthRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..75bf6c6550968adc695bc14822af84d90b973668
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Sensor</data></node><node id="3"><data key="labelV">Segment</data></node><node id="4"><data key="labelV">Segment</data></node><node id="5"><data key="labelV">Segment</data></node><node id="6"><data key="labelV">Segment</data></node><node id="7"><data key="labelV">Segment</data></node><node id="8"><data key="labelV">Segment</data></node><edge id="2" source="0" target="1"><data key="labelE">sensors</data></edge><edge id="9" source="0" target="3"><data key="labelE">elements</data></edge><edge id="10" source="0" target="4"><data key="labelE">elements</data></edge><edge id="11" source="0" target="5"><data key="labelE">elements</data></edge><edge id="12" source="0" target="6"><data key="labelE">elements</data></edge><edge id="13" source="0" target="7"><data key="labelE">elements</data></edge><edge id="14" source="0" target="8"><data key="labelE">elements</data></edge><edge id="15" source="3" target="4"><data key="labelE">connectsTo</data></edge><edge id="16" source="4" target="5"><data key="labelE">connectsTo</data></edge><edge id="17" source="5" target="6"><data key="labelE">connectsTo</data></edge><edge id="18" source="6" target="7"><data key="labelE">connectsTo</data></edge><edge id="19" source="7" target="8"><data key="labelE">connectsTo</data></edge><edge id="20" source="3" target="1"><data key="labelE">monitoredBy</data></edge><edge id="21" source="4" target="1"><data key="labelE">monitoredBy</data></edge><edge id="22" source="5" target="1"><data key="labelE">monitoredBy</data></edge><edge id="23" source="6" target="1"><data key="labelE">monitoredBy</data></edge><edge id="24" source="7" target="1"><data key="labelE">monitoredBy</data></edge><edge id="25" source="8" target="1"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-PosLengthRepair.xmi b/trainbenchmark/models/railway-minimal-PosLengthRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..4eeb51ac30ce563d7de204b1619bac1c2481e3dc
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-PosLengthRepair.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <sensors id="2" monitors="//@regions.0/@elements.0 //@regions.0/@elements.1 //@regions.0/@elements.2 //@regions.0/@elements.3 //@regions.0/@elements.4 //@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="3" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.1"/>
+    <elements xsi:type="railway:Segment" id="4" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.2"/>
+    <elements xsi:type="railway:Segment" id="5" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.3"/>
+    <elements xsi:type="railway:Segment" id="6" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.4"/>
+    <elements xsi:type="railway:Segment" id="7" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.5"/>
+    <elements xsi:type="railway:Segment" id="8" monitoredBy="//@regions.0/@sensors.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..831442f137bcc1ec898c3ef156de5661f4bc47e4
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"4","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":3}]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"3","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":3},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":4}]}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"2","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[]},"SwitchPosition":{"k":"List","c":[{"k":"NT","id":"5","t":"SwitchPosition","c":{"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":5},"_impl_target":{"k":"i","t":"Switch","v":4}}}]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":2},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..30d6d751265b341a09fffb207ec1afca7ef0a94f
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":3}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[{"k":"NT","t":"SwitchPosition","c":{"Target":{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":4}}},"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":5}}}]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..83f40c80217018c3cdc0b78233d012387a6acdfe
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorInject-jastadd-relast.json
@@ -0,0 +1,59 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 2,
+        "Active" : false,
+        "SwitchPosition" : [ {
+          "type" : "SwitchPosition",
+          "id" : "2",
+          "children" : {
+            "Id" : 5,
+            "Position" : "STRAIGHT"
+          },
+          "relations" : {
+            "target" : "3"
+          }
+        } ]
+      },
+      "relations" : {
+        "requires" : [ ]
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "4",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Switch",
+          "id" : "3",
+          "children" : {
+            "Id" : 4,
+            "CurrentPosition" : "STRAIGHT"
+          },
+          "relations" : {
+            "monitoredBy" : [ "5" ],
+            "connectsTo" : [ ],
+            "positions" : [ "2" ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "5",
+          "children" : {
+            "Id" : 3
+          },
+          "relations" : {
+            "monitors" : [ "3" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-RouteSensorInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..7c363396ae792cd3011ef7006a2cd91ac8675d21
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="position" for="node" attr.name="position" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Route</data></node><node id="2"><data key="labelV">Sensor</data></node><node id="3"><data key="labelV">Switch</data><data key="currentPosition">STRAIGHT</data></node><node id="7"><data key="labelV">SwitchPosition</data><data key="position">STRAIGHT</data></node><edge id="5" source="0" target="2"><data key="labelE">sensors</data></edge><edge id="6" source="0" target="3"><data key="labelE">elements</data></edge><edge id="9" source="7" target="3"><data key="labelE">target</data></edge><edge id="10" source="1" target="7"><data key="labelE">follows</data></edge><edge id="11" source="3" target="2"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorInject.xmi b/trainbenchmark/models/railway-minimal-RouteSensorInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..299e8676530e2768e8e3ce9f4309207dbcf9546e
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorInject.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="2">
+    <follows id="5" position="STRAIGHT" target="//@regions.0/@elements.0"/>
+  </routes>
+  <regions id="1">
+    <sensors id="3" monitors="//@regions.0/@elements.0"/>
+    <elements xsi:type="railway:Switch" id="4" monitoredBy="//@regions.0/@sensors.0" currentPosition="STRAIGHT" positions="//@routes.0/@follows.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..831442f137bcc1ec898c3ef156de5661f4bc47e4
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"4","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":3}]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"3","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":3},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":4}]}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"2","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[]},"SwitchPosition":{"k":"List","c":[{"k":"NT","id":"5","t":"SwitchPosition","c":{"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":5},"_impl_target":{"k":"i","t":"Switch","v":4}}}]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":2},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..30d6d751265b341a09fffb207ec1afca7ef0a94f
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":4}}}]},"Id":{"k":"t","t":"int","v":3}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[{"k":"NT","t":"SwitchPosition","c":{"Target":{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":4}}},"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":5}}}]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..83f40c80217018c3cdc0b78233d012387a6acdfe
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorRepair-jastadd-relast.json
@@ -0,0 +1,59 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 2,
+        "Active" : false,
+        "SwitchPosition" : [ {
+          "type" : "SwitchPosition",
+          "id" : "2",
+          "children" : {
+            "Id" : 5,
+            "Position" : "STRAIGHT"
+          },
+          "relations" : {
+            "target" : "3"
+          }
+        } ]
+      },
+      "relations" : {
+        "requires" : [ ]
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "4",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Switch",
+          "id" : "3",
+          "children" : {
+            "Id" : 4,
+            "CurrentPosition" : "STRAIGHT"
+          },
+          "relations" : {
+            "monitoredBy" : [ "5" ],
+            "connectsTo" : [ ],
+            "positions" : [ "2" ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "5",
+          "children" : {
+            "Id" : 3
+          },
+          "relations" : {
+            "monitors" : [ "3" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-RouteSensorRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..7c363396ae792cd3011ef7006a2cd91ac8675d21
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="position" for="node" attr.name="position" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Route</data></node><node id="2"><data key="labelV">Sensor</data></node><node id="3"><data key="labelV">Switch</data><data key="currentPosition">STRAIGHT</data></node><node id="7"><data key="labelV">SwitchPosition</data><data key="position">STRAIGHT</data></node><edge id="5" source="0" target="2"><data key="labelE">sensors</data></edge><edge id="6" source="0" target="3"><data key="labelE">elements</data></edge><edge id="9" source="7" target="3"><data key="labelE">target</data></edge><edge id="10" source="1" target="7"><data key="labelE">follows</data></edge><edge id="11" source="3" target="2"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-RouteSensorRepair.xmi b/trainbenchmark/models/railway-minimal-RouteSensorRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..299e8676530e2768e8e3ce9f4309207dbcf9546e
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-RouteSensorRepair.xmi
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="2">
+    <follows id="5" position="STRAIGHT" target="//@regions.0/@elements.0"/>
+  </routes>
+  <regions id="1">
+    <sensors id="3" monitors="//@regions.0/@elements.0"/>
+    <elements xsi:type="railway:Switch" id="4" monitoredBy="//@regions.0/@sensors.0" currentPosition="STRAIGHT" positions="//@routes.0/@follows.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..345410d22d9dcba90de76ae6075c353a77d09857
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"7","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":5}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[{"k":"NT","id":"2","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":2}}}]}}},{"k":"NT","id":"8","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":6}]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"5","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[{"k":"i","t":"Route","v":3}]},"Id":{"k":"t","t":"int","v":5},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":7}]}}},{"k":"NT","id":"6","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[{"k":"i","t":"Route","v":4}]},"Id":{"k":"t","t":"int","v":6},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"3","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":5}]},"SwitchPosition":{"k":"List","c":[]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":3},"_impl_exit":{"k":"i","t":"Semaphore","v":2}}},{"k":"NT","id":"4","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":6}]},"SwitchPosition":{"k":"List","c":[]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":4},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..be8f81265eb3c2fad6f6ccd90bdd073aa4ea01e0
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[{"k":"NT","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":2}}}]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}}]},"Id":{"k":"t","t":"int","v":5}}},{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":6}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[{"k":"NT","t":"SensorRef","c":{"Value":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":3},"Exit":{"k":"Opt","c":{"k":"NT","t":"SemaphoreRef","c":{"Value":{"k":"t","t":"int","v":2}}}}}},{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[{"k":"NT","t":"SensorRef","c":{"Value":{"k":"t","t":"int","v":6}}}]},"Id":{"k":"t","t":"int","v":4},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..e6298b0140256f6e6530ce9a6dcae6e29190bd26
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-jastadd-relast.json
@@ -0,0 +1,87 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 3,
+        "Active" : false
+      },
+      "relations" : {
+        "exit" : "2",
+        "requires" : [ "3" ]
+      }
+    }, {
+      "type" : "Route",
+      "id" : "4",
+      "children" : {
+        "Id" : 4,
+        "Active" : false
+      },
+      "relations" : {
+        "requires" : [ "5" ]
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "6",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "7",
+          "children" : {
+            "Id" : 7,
+            "Length" : 0,
+            "Semaphore" : [ {
+              "type" : "Semaphore",
+              "id" : "2",
+              "children" : {
+                "Id" : 2,
+                "Signal" : "GO"
+              }
+            } ]
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "8" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "8",
+          "children" : {
+            "Id" : 8,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "5" ],
+            "connectsTo" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 5
+          },
+          "relations" : {
+            "monitors" : [ "7" ],
+            "requiredBy" : [ "1" ]
+          }
+        }, {
+          "type" : "Sensor",
+          "id" : "5",
+          "children" : {
+            "Id" : 6
+          },
+          "relations" : {
+            "monitors" : [ "8" ],
+            "requiredBy" : [ "4" ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..2a17f66defd1e6d71bcc41abb79b663fca13c858
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="signal" for="node" attr.name="signal" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Semaphore</data><data key="signal">GO</data></node><node id="3"><data key="labelV">Route</data></node><node id="5"><data key="labelV">Route</data></node><node id="6"><data key="labelV">Sensor</data></node><node id="7"><data key="labelV">Sensor</data></node><node id="8"><data key="labelV">Segment</data></node><node id="9"><data key="labelV">Segment</data></node><edge id="16" source="5" target="7"><data key="labelE">requires</data></edge><edge id="17" source="8" target="6"><data key="labelE">monitoredBy</data></edge><edge id="18" source="9" target="7"><data key="labelE">monitoredBy</data></edge><edge id="19" source="8" target="9"><data key="labelE">connectsTo</data></edge><edge id="4" source="3" target="1"><data key="labelE">exit</data></edge><edge id="10" source="0" target="6"><data key="labelE">sensors</data></edge><edge id="11" source="0" target="7"><data key="labelE">sensors</data></edge><edge id="12" source="0" target="8"><data key="labelE">elements</data></edge><edge id="13" source="0" target="9"><data key="labelE">elements</data></edge><edge id="14" source="8" target="1"><data key="labelE">semaphores</data></edge><edge id="15" source="3" target="6"><data key="labelE">requires</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject.xmi b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..0670e45a093ea72e9a65da0d13f7f0e955927ae1
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborInject.xmi
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="3" requires="//@regions.0/@sensors.0" exit="//@regions.0/@elements.0/@semaphores.0"/>
+  <routes id="4" requires="//@regions.0/@sensors.1"/>
+  <regions id="1">
+    <sensors id="5" monitors="//@regions.0/@elements.0"/>
+    <sensors id="6" monitors="//@regions.0/@elements.1"/>
+    <elements xsi:type="railway:Segment" id="7" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.1">
+      <semaphores id="2" signal="GO"/>
+    </elements>
+    <elements xsi:type="railway:Segment" id="8" monitoredBy="//@regions.0/@sensors.1"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..345410d22d9dcba90de76ae6075c353a77d09857
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"7","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":5}]},"_impl_connectsTo":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[{"k":"NT","id":"2","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":2}}}]}}},{"k":"NT","id":"8","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":6}]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"5","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[{"k":"i","t":"Route","v":3}]},"Id":{"k":"t","t":"int","v":5},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":7}]}}},{"k":"NT","id":"6","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[{"k":"i","t":"Route","v":4}]},"Id":{"k":"t","t":"int","v":6},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":8}]}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"3","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":5}]},"SwitchPosition":{"k":"List","c":[]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":3},"_impl_exit":{"k":"i","t":"Semaphore","v":2}}},{"k":"NT","id":"4","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":6}]},"SwitchPosition":{"k":"List","c":[]},"_impl_entry":{"k":"i","t":"Semaphore","v":null},"Id":{"k":"t","t":"int","v":4},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..be8f81265eb3c2fad6f6ccd90bdd073aa4ea01e0
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":7},"Semaphore":{"k":"List","c":[{"k":"NT","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":2}}}]}}},{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":8},"Semaphore":{"k":"List","c":[]}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":7}}}]},"Id":{"k":"t","t":"int","v":5}}},{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SegmentRef","c":{"Value":{"k":"t","t":"int","v":8}}}]},"Id":{"k":"t","t":"int","v":6}}}]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[{"k":"NT","t":"SensorRef","c":{"Value":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":3},"Exit":{"k":"Opt","c":{"k":"NT","t":"SemaphoreRef","c":{"Value":{"k":"t","t":"int","v":2}}}}}},{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[]},"Entry":{"k":"Opt"},"RequiredSensor":{"k":"List","c":[{"k":"NT","t":"SensorRef","c":{"Value":{"k":"t","t":"int","v":6}}}]},"Id":{"k":"t","t":"int","v":4},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..e6298b0140256f6e6530ce9a6dcae6e29190bd26
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-jastadd-relast.json
@@ -0,0 +1,87 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 3,
+        "Active" : false
+      },
+      "relations" : {
+        "exit" : "2",
+        "requires" : [ "3" ]
+      }
+    }, {
+      "type" : "Route",
+      "id" : "4",
+      "children" : {
+        "Id" : 4,
+        "Active" : false
+      },
+      "relations" : {
+        "requires" : [ "5" ]
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "6",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "7",
+          "children" : {
+            "Id" : 7,
+            "Length" : 0,
+            "Semaphore" : [ {
+              "type" : "Semaphore",
+              "id" : "2",
+              "children" : {
+                "Id" : 2,
+                "Signal" : "GO"
+              }
+            } ]
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ "8" ]
+          }
+        }, {
+          "type" : "Segment",
+          "id" : "8",
+          "children" : {
+            "Id" : 8,
+            "Length" : 0
+          },
+          "relations" : {
+            "monitoredBy" : [ "5" ],
+            "connectsTo" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 5
+          },
+          "relations" : {
+            "monitors" : [ "7" ],
+            "requiredBy" : [ "1" ]
+          }
+        }, {
+          "type" : "Sensor",
+          "id" : "5",
+          "children" : {
+            "Id" : 6
+          },
+          "relations" : {
+            "monitors" : [ "8" ],
+            "requiredBy" : [ "4" ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..2a17f66defd1e6d71bcc41abb79b663fca13c858
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="signal" for="node" attr.name="signal" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Semaphore</data><data key="signal">GO</data></node><node id="3"><data key="labelV">Route</data></node><node id="5"><data key="labelV">Route</data></node><node id="6"><data key="labelV">Sensor</data></node><node id="7"><data key="labelV">Sensor</data></node><node id="8"><data key="labelV">Segment</data></node><node id="9"><data key="labelV">Segment</data></node><edge id="16" source="5" target="7"><data key="labelE">requires</data></edge><edge id="17" source="8" target="6"><data key="labelE">monitoredBy</data></edge><edge id="18" source="9" target="7"><data key="labelE">monitoredBy</data></edge><edge id="19" source="8" target="9"><data key="labelE">connectsTo</data></edge><edge id="4" source="3" target="1"><data key="labelE">exit</data></edge><edge id="10" source="0" target="6"><data key="labelE">sensors</data></edge><edge id="11" source="0" target="7"><data key="labelE">sensors</data></edge><edge id="12" source="0" target="8"><data key="labelE">elements</data></edge><edge id="13" source="0" target="9"><data key="labelE">elements</data></edge><edge id="14" source="8" target="1"><data key="labelE">semaphores</data></edge><edge id="15" source="3" target="6"><data key="labelE">requires</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair.xmi b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..0670e45a093ea72e9a65da0d13f7f0e955927ae1
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SemaphoreNeighborRepair.xmi
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="3" requires="//@regions.0/@sensors.0" exit="//@regions.0/@elements.0/@semaphores.0"/>
+  <routes id="4" requires="//@regions.0/@sensors.1"/>
+  <regions id="1">
+    <sensors id="5" monitors="//@regions.0/@elements.0"/>
+    <sensors id="6" monitors="//@regions.0/@elements.1"/>
+    <elements xsi:type="railway:Segment" id="7" monitoredBy="//@regions.0/@sensors.0" connectsTo="//@regions.0/@elements.1">
+      <semaphores id="2" signal="GO"/>
+    </elements>
+    <elements xsi:type="railway:Segment" id="8" monitoredBy="//@regions.0/@sensors.1"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..6d193fa702eb2b25407d18d95afecf0b96bef139
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"2","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[{"k":"i","t":"Sensor","v":3}]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","id":"3","t":"Sensor","c":{"_impl_requiredBy":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":3},"_impl_monitors":{"k":"RefList","c":[{"k":"i","t":"TrackElement","v":2}]}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..3263a37927fd9ed3bf9e9babc2634119376165c6
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[{"k":"NT","t":"Sensor","c":{"MonitoredElement":{"k":"List","c":[{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":2}}}]},"Id":{"k":"t","t":"int","v":3}}}]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..1375edfbff4d6583197f9d37384e7c0e8ef8a25c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-jastadd-relast.json
@@ -0,0 +1,37 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Switch",
+          "id" : "2",
+          "children" : {
+            "Id" : 2,
+            "CurrentPosition" : "STRAIGHT"
+          },
+          "relations" : {
+            "monitoredBy" : [ "3" ],
+            "connectsTo" : [ ],
+            "positions" : [ ]
+          }
+        } ],
+        "Sensor" : [ {
+          "type" : "Sensor",
+          "id" : "3",
+          "children" : {
+            "Id" : 3
+          },
+          "relations" : {
+            "monitors" : [ "2" ],
+            "requiredBy" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..915fe4e0ffc6b2023fa1cd0cc12f44f9f469567c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Switch</data><data key="currentPosition">STRAIGHT</data></node><node id="3"><data key="labelV">Sensor</data></node><edge id="4" source="0" target="3"><data key="labelE">sensors</data></edge><edge id="5" source="0" target="1"><data key="labelE">elements</data></edge><edge id="6" source="1" target="3"><data key="labelE">monitoredBy</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredInject.xmi b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..758d1a572de0d108d1ef2bddcc270399434b33ef
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredInject.xmi
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <sensors id="3" monitors="//@regions.0/@elements.0"/>
+    <elements xsi:type="railway:Switch" id="2" monitoredBy="//@regions.0/@sensors.0" currentPosition="STRAIGHT"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..17808e09990a7950021661a7f45757b203a14130
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"2","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..cb537a160dbcf05c4be7d0f16fa3b310d032a18f
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d52a824ac559e9905db62986f0c376960c51953
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-jastadd-relast.json
@@ -0,0 +1,26 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "1",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Switch",
+          "id" : "2",
+          "children" : {
+            "Id" : 2,
+            "CurrentPosition" : "STRAIGHT"
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ],
+            "positions" : [ ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..12a60849e959bf1c56744c15f7cb8649b0adaa6e
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Switch</data><data key="currentPosition">STRAIGHT</data></node><edge id="3" source="0" target="1"><data key="labelE">elements</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair.xmi b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..bfcd56dfd686d0986eebfa367050309f04e1bef6
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchMonitoredRepair.xmi
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <regions id="1">
+    <elements xsi:type="railway:Switch" id="2" currentPosition="STRAIGHT"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..0b5ff9e239a799e030a515c98225b54762458ee7
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"2","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[{"k":"NT","id":"3","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":3}}}]}}},{"k":"NT","id":"5","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"DIVERGING"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"4","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[]},"SwitchPosition":{"k":"List","c":[{"k":"NT","id":"6","t":"SwitchPosition","c":{"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":6},"_impl_target":{"k":"i","t":"Switch","v":5}}}]},"_impl_entry":{"k":"i","t":"Semaphore","v":3},"Id":{"k":"t","t":"int","v":4},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..5dae1003b48dc962a44fe87fa4c898874b0148fb
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[{"k":"NT","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":3}}}]}}},{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"DIVERGING"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[{"k":"NT","t":"SwitchPosition","c":{"Target":{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":5}}},"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":6}}}]},"Entry":{"k":"Opt","c":{"k":"NT","t":"SemaphoreRef","c":{"Value":{"k":"t","t":"int","v":3}}}},"RequiredSensor":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":4},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..13441b39f0aaf8c6436477f85345ae42623ce872
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetInject-jastadd-relast.json
@@ -0,0 +1,68 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 4,
+        "Active" : false,
+        "SwitchPosition" : [ {
+          "type" : "SwitchPosition",
+          "id" : "2",
+          "children" : {
+            "Id" : 6,
+            "Position" : "STRAIGHT"
+          },
+          "relations" : {
+            "target" : "3"
+          }
+        } ]
+      },
+      "relations" : {
+        "requires" : [ ],
+        "entry" : "4"
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "5",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "6",
+          "children" : {
+            "Id" : 2,
+            "Length" : 0,
+            "Semaphore" : [ {
+              "type" : "Semaphore",
+              "id" : "4",
+              "children" : {
+                "Id" : 3,
+                "Signal" : "GO"
+              }
+            } ]
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ]
+          }
+        }, {
+          "type" : "Switch",
+          "id" : "3",
+          "children" : {
+            "Id" : 5,
+            "CurrentPosition" : "DIVERGING"
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ],
+            "positions" : [ "2" ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetInject-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SwitchSetInject-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..f66c2314890191a78ed87a5db5e83081df60c582
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetInject-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="position" for="node" attr.name="position" attr.type="string"></key><key id="signal" for="node" attr.name="signal" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Segment</data></node><node id="3"><data key="labelV">Semaphore</data><data key="signal">GO</data></node><node id="6"><data key="labelV">Route</data></node><node id="8"><data key="labelV">Switch</data><data key="currentPosition">DIVERGING</data></node><node id="11"><data key="labelV">SwitchPosition</data><data key="position">STRAIGHT</data></node><edge id="2" source="0" target="1"><data key="labelE">elements</data></edge><edge id="5" source="1" target="3"><data key="labelE">semaphores</data></edge><edge id="7" source="6" target="3"><data key="labelE">entry</data></edge><edge id="10" source="0" target="8"><data key="labelE">elements</data></edge><edge id="13" source="11" target="8"><data key="labelE">target</data></edge><edge id="14" source="6" target="11"><data key="labelE">follows</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetInject.xmi b/trainbenchmark/models/railway-minimal-SwitchSetInject.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..413be5aef019c6d1ad12a23f63b807325d6fb37c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetInject.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="4" entry="//@regions.0/@elements.0/@semaphores.0">
+    <follows id="6" position="STRAIGHT" target="//@regions.0/@elements.1"/>
+  </routes>
+  <regions id="1">
+    <elements xsi:type="railway:Segment" id="2">
+      <semaphores id="3" signal="GO"/>
+    </elements>
+    <elements xsi:type="railway:Switch" id="5" currentPosition="DIVERGING" positions="//@routes.0/@follows.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual-intrinsic.json b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual-intrinsic.json
new file mode 100644
index 0000000000000000000000000000000000000000..0b5ff9e239a799e030a515c98225b54762458ee7
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual-intrinsic.json
@@ -0,0 +1 @@
+{"k":"NT","id":"0","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","id":"1","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","id":"2","t":"Segment","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[{"k":"NT","id":"3","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":3}}}]}}},{"k":"NT","id":"5","t":"Switch","c":{"_impl_monitoredBy":{"k":"RefList","c":[]},"_impl_connectsTo":{"k":"RefList","c":[]},"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"DIVERGING"},"_impl_positions":{"k":"RefList","c":[]},"Id":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[{"k":"NT","id":"4","t":"Route","c":{"_impl_requires":{"k":"RefList","c":[]},"SwitchPosition":{"k":"List","c":[{"k":"NT","id":"6","t":"SwitchPosition","c":{"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":6},"_impl_target":{"k":"i","t":"Switch","v":5}}}]},"_impl_entry":{"k":"i","t":"Semaphore","v":3},"Id":{"k":"t","t":"int","v":4},"_impl_exit":{"k":"i","t":"Semaphore","v":null}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual.json b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual.json
new file mode 100644
index 0000000000000000000000000000000000000000..5dae1003b48dc962a44fe87fa4c898874b0148fb
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-manual.json
@@ -0,0 +1 @@
+{"k":"NT","t":"RailwayContainer","c":{"Region":{"k":"List","c":[{"k":"NT","t":"Region","c":{"TrackElement":{"k":"List","c":[{"k":"NT","t":"Segment","c":{"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":2},"Semaphore":{"k":"List","c":[{"k":"NT","t":"Semaphore","c":{"Signal":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Signal","v":"GO"},"Id":{"k":"t","t":"int","v":3}}}]}}},{"k":"NT","t":"Switch","c":{"CurrentPosition":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"DIVERGING"},"ConnectedElement":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":5}}}]},"Id":{"k":"t","t":"int","v":1},"Sensor":{"k":"List","c":[]}}}]},"Route":{"k":"List","c":[{"k":"NT","t":"Route","c":{"SwitchPosition":{"k":"List","c":[{"k":"NT","t":"SwitchPosition","c":{"Target":{"k":"NT","t":"SwitchRef","c":{"Value":{"k":"t","t":"int","v":5}}},"Position":{"k":"enum","t":"de.tudresden.inf.st.train.jastadd.ast.Position","v":"STRAIGHT"},"Id":{"k":"t","t":"int","v":6}}}]},"Entry":{"k":"Opt","c":{"k":"NT","t":"SemaphoreRef","c":{"Value":{"k":"t","t":"int","v":3}}}},"RequiredSensor":{"k":"List","c":[]},"Id":{"k":"t","t":"int","v":4},"Exit":{"k":"Opt"}}}]}}}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-relast.json b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-relast.json
new file mode 100644
index 0000000000000000000000000000000000000000..13441b39f0aaf8c6436477f85345ae42623ce872
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetRepair-jastadd-relast.json
@@ -0,0 +1,68 @@
+{
+  "type" : "RailwayContainer",
+  "id" : "0",
+  "children" : {
+    "Route" : [ {
+      "type" : "Route",
+      "id" : "1",
+      "children" : {
+        "Id" : 4,
+        "Active" : false,
+        "SwitchPosition" : [ {
+          "type" : "SwitchPosition",
+          "id" : "2",
+          "children" : {
+            "Id" : 6,
+            "Position" : "STRAIGHT"
+          },
+          "relations" : {
+            "target" : "3"
+          }
+        } ]
+      },
+      "relations" : {
+        "requires" : [ ],
+        "entry" : "4"
+      }
+    } ],
+    "Region" : [ {
+      "type" : "Region",
+      "id" : "5",
+      "children" : {
+        "Id" : 1,
+        "TrackElement" : [ {
+          "type" : "Segment",
+          "id" : "6",
+          "children" : {
+            "Id" : 2,
+            "Length" : 0,
+            "Semaphore" : [ {
+              "type" : "Semaphore",
+              "id" : "4",
+              "children" : {
+                "Id" : 3,
+                "Signal" : "GO"
+              }
+            } ]
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ]
+          }
+        }, {
+          "type" : "Switch",
+          "id" : "3",
+          "children" : {
+            "Id" : 5,
+            "CurrentPosition" : "DIVERGING"
+          },
+          "relations" : {
+            "monitoredBy" : [ ],
+            "connectsTo" : [ ],
+            "positions" : [ "2" ]
+          }
+        } ]
+      }
+    } ]
+  }
+}
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetRepair-tinkerpop.graphml b/trainbenchmark/models/railway-minimal-SwitchSetRepair-tinkerpop.graphml
new file mode 100644
index 0000000000000000000000000000000000000000..f66c2314890191a78ed87a5db5e83081df60c582
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetRepair-tinkerpop.graphml
@@ -0,0 +1 @@
+<?xml version="1.0" ?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.1/graphml.xsd"><key id="labelV" for="node" attr.name="labelV" attr.type="string"></key><key id="currentPosition" for="node" attr.name="currentPosition" attr.type="string"></key><key id="position" for="node" attr.name="position" attr.type="string"></key><key id="signal" for="node" attr.name="signal" attr.type="string"></key><key id="labelE" for="edge" attr.name="labelE" attr.type="string"></key><graph id="G" edgedefault="directed"><node id="0"><data key="labelV">Region</data></node><node id="1"><data key="labelV">Segment</data></node><node id="3"><data key="labelV">Semaphore</data><data key="signal">GO</data></node><node id="6"><data key="labelV">Route</data></node><node id="8"><data key="labelV">Switch</data><data key="currentPosition">DIVERGING</data></node><node id="11"><data key="labelV">SwitchPosition</data><data key="position">STRAIGHT</data></node><edge id="2" source="0" target="1"><data key="labelE">elements</data></edge><edge id="5" source="1" target="3"><data key="labelE">semaphores</data></edge><edge id="7" source="6" target="3"><data key="labelE">entry</data></edge><edge id="10" source="0" target="8"><data key="labelE">elements</data></edge><edge id="13" source="11" target="8"><data key="labelE">target</data></edge><edge id="14" source="6" target="11"><data key="labelE">follows</data></edge></graph></graphml>
\ No newline at end of file
diff --git a/trainbenchmark/models/railway-minimal-SwitchSetRepair.xmi b/trainbenchmark/models/railway-minimal-SwitchSetRepair.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..413be5aef019c6d1ad12a23f63b807325d6fb37c
--- /dev/null
+++ b/trainbenchmark/models/railway-minimal-SwitchSetRepair.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<railway:RailwayContainer xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:railway="http://www.semanticweb.org/ontologies/2015/trainbenchmark">
+  <routes id="4" entry="//@regions.0/@elements.0/@semaphores.0">
+    <follows id="6" position="STRAIGHT" target="//@regions.0/@elements.1"/>
+  </routes>
+  <regions id="1">
+    <elements xsi:type="railway:Segment" id="2">
+      <semaphores id="3" signal="GO"/>
+    </elements>
+    <elements xsi:type="railway:Switch" id="5" currentPosition="DIVERGING" positions="//@routes.0/@follows.0"/>
+  </regions>
+</railway:RailwayContainer>
diff --git a/trainbenchmark/trainbenchmark-generator/src/main/java/hu/bme/mit/trainbenchmark/generator/minimal/MinimalSwitchMonitoredInjectGenerator.java b/trainbenchmark/trainbenchmark-generator/src/main/java/hu/bme/mit/trainbenchmark/generator/minimal/MinimalSwitchMonitoredInjectGenerator.java
index 41a0177f22811c688c73e0d07790cc7386fda501..592e56d657565c7dc230f66238a73487436a8a6a 100644
--- a/trainbenchmark/trainbenchmark-generator/src/main/java/hu/bme/mit/trainbenchmark/generator/minimal/MinimalSwitchMonitoredInjectGenerator.java
+++ b/trainbenchmark/trainbenchmark-generator/src/main/java/hu/bme/mit/trainbenchmark/generator/minimal/MinimalSwitchMonitoredInjectGenerator.java
@@ -19,8 +19,10 @@ public class MinimalSwitchMonitoredInjectGenerator extends MinimalModelGenerator
 		final Object region = serializer.createVertex(REGION);
 		final Object sw = serializer.createVertex(SWITCH);
 		serializer.setAttribute(SWITCH, sw, CURRENTPOSITION, Position.STRAIGHT);
-
+		final Object sensor = serializer.createVertex(SENSOR);
+		serializer.createEdge(SENSORS, region, sensor);
 		serializer.createEdge(ELEMENTS, region, sw);
+		serializer.createEdge(MONITORED_BY, sw, sensor);
 	}
 
 }
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/test/java/de/tudresden/inf/st/train/jastadd/test/IncrementalSwitchMonitoredInjectTest.java b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/test/java/de/tudresden/inf/st/train/jastadd/test/IncrementalSwitchMonitoredInjectTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..36b16bb58abccd081505fb7cb90a5b12778d7791
--- /dev/null
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/test/java/de/tudresden/inf/st/train/jastadd/test/IncrementalSwitchMonitoredInjectTest.java
@@ -0,0 +1,89 @@
+package de.tudresden.inf.st.train.jastadd.test;
+
+import de.tudresden.inf.st.train.jastadd.ast.Position;
+import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
+import de.tudresden.inf.st.train.jastadd.ast.Sensor;
+import de.tudresden.inf.st.train.jastadd.ast.Switch;
+import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.Collection;
+
+public class IncrementalSwitchMonitoredInjectTest {
+
+  @Test
+  public void testIncrementalCollection() throws IOException {
+
+    JastaddDriver driver = JastaddDriver.create(false, null);
+
+    RailwayContainer model = null;
+
+    driver.read("../models/railway-minimal-SwitchMonitoredInject-jastadd-manual.json");
+    model = driver.getModel();
+    Switch beforeSwitch = new Switch();
+    beforeSwitch.setCurrentPosition(Position.STRAIGHT);
+
+    Switch afterSwitch = new Switch();
+    afterSwitch.setCurrentPosition(Position.STRAIGHT);
+
+    org.junit.Assert.assertNotNull(model);
+
+    // first, find switch monitored inject match
+    Collection<Switch> switches = model.switchMonitoredInjectMatches();
+    Assert.assertEquals(1, switches.size());
+
+    model.getRegion(0).getTrackElementList().insertChild(beforeSwitch, 0);
+    model.getRegion(0).getTrackElementList().add(afterSwitch);
+
+    // assert that we have three switches and one sensor
+    Assert.assertEquals(1, model.getNumRegion());
+    Assert.assertNotNull(model.getRegion(0));
+    Assert.assertEquals(3, model.getRegion(0).getNumTrackElement());
+    Assert.assertTrue(model.getRegion(0).getTrackElement(0).isSwitch());
+    Assert.assertTrue(model.getRegion(0).getTrackElement(1).isSwitch());
+    Assert.assertTrue(model.getRegion(0).getTrackElement(2).isSwitch());
+
+    Assert.assertEquals(beforeSwitch, model.getRegion(0).getTrackElement(0));
+    Assert.assertEquals(afterSwitch, model.getRegion(0).getTrackElement(2));
+
+    Switch monitoredSwitch = model.getRegion(0).getTrackElement(1).asSwitch();
+    Assert.assertNotNull(monitoredSwitch);
+
+    Assert.assertEquals(1, model.getRegion(0).getNumSensor());
+    Sensor sensor = model.getRegion(0).getSensor(0);
+
+    // first, assert monitoredBy and monitors relation
+    Assert.assertEquals(1, sensor.getNumMonitoredElement());
+    Assert.assertEquals(1, sensor.monitors().size());
+    Assert.assertEquals(monitoredSwitch, sensor.getMonitoredElement(0).getSwitch());
+    Assert.assertEquals(1, monitoredSwitch.monitoredBy().size());
+    Assert.assertEquals(sensor, monitoredSwitch.monitoredBy().get(0));
+
+    //next, remove monitored by relation
+    sensor.getMonitoredElementList().removeChild(0);
+
+    // check if relation is removed
+    Assert.assertEquals(0, sensor.getNumMonitoredElement());
+    Assert.assertEquals(0, sensor.monitors().size());
+    Assert.assertEquals(0, monitoredSwitch.monitoredBy().size());
+
+    // remove the switch
+    model.getRegion(0).getTrackElementList().removeChild(0);
+
+    // next, assert there are 2 inject matches
+    switches = model.switchMonitoredInjectMatches();
+    Assert.assertEquals(2, switches.size());
+
+    // remove the sensor
+    model.getRegion(0).getSensorList().removeChild(0);
+    Assert.assertEquals(0, model.getRegion(0).getNumSensor());
+
+    // next, assert there are 2 inject matches
+    switches = model.switchMonitoredInjectMatches();
+    Assert.assertEquals(2, switches.size());
+
+  }
+
+}