diff --git a/app/bcc1/alarm1/verify_a.py b/app/bcc1/alarm1/verify_a.py
index 36731d3a4cd09f15b2744770925a80a7d1be8be1..523af7e8c62761845b1a3fc3f6444ea1df3bd355 100644
--- a/app/bcc1/alarm1/verify_a.py
+++ b/app/bcc1/alarm1/verify_a.py
@@ -1,31 +1,26 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
     # H1 and H3 are not activated
-    syscalls.update(set(H1.get_syscalls()))
-    syscalls.update(set(H3.get_syscalls()))
+    t.mark_syscalls_in_function(H1)
+    t.mark_syscalls_in_function(H3)
 
-    test(StartOS, "StartOS", [], # =>
-         [Idle])
+    t.reachability(StartOS, "StartOS", [], # =>
+                   [Idle])
 
-    activated_test(analysis, [Idle], # =>
-                   H2)
+    t.activate([Idle], # =>
+               H2)
 
-    test(H2, "TerminateTask", [], # =>
-         [Idle])
+    t.reachability(H2, "TerminateTask", [], # =>
+                   [Idle])
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
-
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/alarm1/verify_b.py b/app/bcc1/alarm1/verify_b.py
index 121a361afabb1b76e70da55a5714e4569017b3c9..0716ee7be694c855ba4f27f8e42bac7f7a8489da 100644
--- a/app/bcc1/alarm1/verify_b.py
+++ b/app/bcc1/alarm1/verify_b.py
@@ -1,36 +1,31 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
     # H3 are not activated
-    syscalls.update(set(H3.get_syscalls()))
+    t.mark_syscalls_in_function(H3)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle], # =>
-                   H2)
+    t.activate([Idle], # =>
+               H2)
 
-    test(H2, "ActivateTask", [H1], # =>
+    t.reachability(H2, "ActivateTask", [H1], # =>
          [H1])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [Idle])
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2])
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
-
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/alarm1/verify_c.py b/app/bcc1/alarm1/verify_c.py
index b0d4de91ba9d19da45ad4cdd8b03f3b326e96ecc..6f5dc42d4e09c9d091bb050abc26674b0d5e389d 100644
--- a/app/bcc1/alarm1/verify_c.py
+++ b/app/bcc1/alarm1/verify_c.py
@@ -1,33 +1,27 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-
+    t = RunningTaskToolbox(analysis)
     # H3 are not activated
-    syscalls.update(set(H3.get_syscalls()))
+    t.mark_syscalls_in_function(H3)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle, H1], # =>
-                   H2)
+    t.activate([Idle, H1], # =>
+               H2)
 
-    test(H2, "ChainTask", [H1], # =>
+    t.reachability(H2, "ChainTask", [H1], # =>
          [H1])
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, Idle])
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
-
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/alarm1/verify_d.py b/app/bcc1/alarm1/verify_d.py
index 31d0c85ae2014e7c2d3b7f7b722b9888e8da1806..ca826c1256c93eaf41b3415f22e86399a7a75017 100644
--- a/app/bcc1/alarm1/verify_d.py
+++ b/app/bcc1/alarm1/verify_d.py
@@ -1,36 +1,32 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-    test(StartOS, "StartOS", [], # =>
+
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle, H1, H3], # =>
-                   H2)
+    t.activate([Idle, H1, H3], # =>
+               H2)
 
-    test(H1, "ActivateTask", [H3], # =>
+    t.reachability(H1, "ActivateTask", [H3], # =>
          [H1])
 
-    test(H2, "ChainTask", [H1], # =>
+    t.reachability(H2, "ChainTask", [H1], # =>
          [H1])
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, H3])
 
-    test(H3, "TerminateTask", [], # =>
+    t.reachability(H3, "TerminateTask", [], # =>
          [Idle])
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
-
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/alarm1/verify_e.py b/app/bcc1/alarm1/verify_e.py
index 98f50c0f34bc5f02c0baa7092d15bfc47352fc6b..d36f6241e1a2ea92bdd69b4c6d1383920811f39f 100644
--- a/app/bcc1/alarm1/verify_e.py
+++ b/app/bcc1/alarm1/verify_e.py
@@ -1,42 +1,38 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle, H1, H3], # =>
-                   H2)
+    t.activate([Idle, H1, H3], # =>
+               H2)
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, H3])
 
-    test(H2, "ActivateTask", [H3], # =>
+    t.reachability(H2, "ActivateTask", [H3], # =>
          [H2])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [H3, Idle])
 
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, H3])
 
-    test(H3, "ActivateTask", [H1], # =>
+    t.reachability(H3, "ActivateTask", [H1], # =>
          [H1])
 
-    test(H3, "TerminateTask", [], # =>
+    t.reachability(H3, "TerminateTask", [], # =>
          [Idle])
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/complex1/verify_a.py b/app/bcc1/complex1/verify_a.py
index 515eb31d999ea6fb57cd6b07802c16bbad2d7869..efbfbdbe01a6f1502b6cc98d424e8ac297cab6bd 100644
--- a/app/bcc1/complex1/verify_a.py
+++ b/app/bcc1/complex1/verify_a.py
@@ -1,35 +1,29 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-    syscalls.update(set(H3.get_syscalls()))
-    syscalls.update(set(ISR1.get_syscalls()))
+    t = RunningTaskToolbox(analysis)
+    t.mark_syscalls_in_function(H3)
+    t.mark_syscalls_in_function(ISR1)
 
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-        return abb
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [Idle])
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, # Activated by Alarm
           Idle,
          ])
 
-    activated_test(analysis, [Idle, H1], # =>
-                   H2)
+    t.activate([Idle, H1], # =>
+               H2)
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "%s != %s" \
-        %(analysis.system.get_syscalls(), syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/complex1/verify_b.py b/app/bcc1/complex1/verify_b.py
index 5b7047a007191e0d2c8d13d75114da306907fd6a..2e9847bcc814bfe255f66ce10c88664b1581dec7 100644
--- a/app/bcc1/complex1/verify_b.py
+++ b/app/bcc1/complex1/verify_b.py
@@ -1,36 +1,30 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-    syscalls.update(set(H1.get_syscalls()))
-    syscalls.update(set(ISR1.get_syscalls()))
+    t = RunningTaskToolbox(analysis)
+    t.mark_syscalls_in_function(H1)
+    t.mark_syscalls_in_function(ISR1)
 
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-        return abb
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [Idle, H3]) # H3 could be activated by ISR1
 
-    test(H3, "TerminateTask", [], # =>
+    t.reachability(H3, "TerminateTask", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle, H3], # =>
+    t.activate([Idle, H3], # =>
                    H2)
 
     # H2.entry can be reached by H3.entry, when alarm was running
     assert H2.entry_abb in H3.entry_abb.get_outgoing_nodes('global')
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "%s != %s" \
-        %(analysis.system.get_syscalls(), syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/complex1/verify_c.py b/app/bcc1/complex1/verify_c.py
index c8521f515f5d07dc9042f5a083b17f497a46f28d..ccb5a5f63e338eb6500056619d8b450b85cfba40 100644
--- a/app/bcc1/complex1/verify_c.py
+++ b/app/bcc1/complex1/verify_c.py
@@ -1,46 +1,40 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-    syscalls.update(set(H1.get_syscalls()))
-    syscalls.update(set(ISR1.get_syscalls()))
+    t = RunningTaskToolbox(analysis)
+    t.mark_syscalls_in_function(H1)
+    t.mark_syscalls_in_function(ISR1)
 
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-        return abb
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [Idle, H3]) # H3 could be activated by ISR1
 
-    test(H3, "ChainTask", [H1], # =>
+    t.reachability(H3, "ChainTask", [H1], # =>
          [H1])
 
-    test(H1, "TerminateTask", [], # =>
+    t.reachability(H1, "TerminateTask", [], # =>
          [H2, # Could be activated by Alarm
           H3, # Could be activated by ISR
           Idle, # Nothing could have happended
       ])
 
-    activated_test(analysis, [Idle, H3, H1], # =>
-                   H2)
+    t.activate([Idle, H3, H1], # =>
+               H2)
 
-    activated_test(analysis, [H3], # =>
-                   H1)
+    t.activate([H3], # =>
+               H1)
 
 
     # H2.entry can be reached by H3.entry, when alarm was running
     assert H2.entry_abb in H3.entry_abb.get_outgoing_nodes('global')
 
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "%s != %s" \
-        %(analysis.system.get_syscalls(), syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/isr2/verify_a.py b/app/bcc1/isr2/verify_a.py
index 3aacaa8607bbec5e1a8ba726d5518709f84ea22e..517c166a5f83b04a69ee2e7eaae42ad66b74a3ec 100644
--- a/app/bcc1/isr2/verify_a.py
+++ b/app/bcc1/isr2/verify_a.py
@@ -1,33 +1,26 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-    syscalls.update(set(H1.get_syscalls()))
-    syscalls.update(set(H3.get_syscalls()))
-    syscalls.update(set(ISR1.get_syscalls()))
+    t = RunningTaskToolbox(analysis)
+    t.mark_syscalls_in_function(H1)
+    t.mark_syscalls_in_function(H3)
+    t.mark_syscalls_in_function(ISR1)
 
-
-
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle], # =>
-                   H2)
+    t.activate([Idle], # =>
+               H2)
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "%s != %s" \
-        %(analysis.system.get_syscalls(), syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/isr2/verify_b.py b/app/bcc1/isr2/verify_b.py
index 15f9d32106e6190eb80d9596e4ea85b2ffa161e9..015326d4492da5450306a3073d232325a1779dde 100644
--- a/app/bcc1/isr2/verify_b.py
+++ b/app/bcc1/isr2/verify_b.py
@@ -1,39 +1,32 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-    syscalls.update(set(H1.get_syscalls()))
-    syscalls.update(set(ISR1.get_syscalls()))
+    t = RunningTaskToolbox(analysis)
+    t.mark_syscalls_in_function(H1)
+    t.mark_syscalls_in_function(ISR1)
 
-
-
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Idle])
 
-    test(H2, "ActivateTask", [H3], # =>
+    t.reachability(H2, "ActivateTask", [H3], # =>
          [H2])
 
 
-    test(H2, "TerminateTask", [], # =>
+    t.reachability(H2, "TerminateTask", [], # =>
          [H3])
 
-    test(H3, "TerminateTask", [], # =>
+    t.reachability(H3, "TerminateTask", [], # =>
          [Idle])
 
-    activated_test(analysis, [Idle, H3], # =>
-                   H2)
+    t.activate([Idle, H3], # =>
+               H2)
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/isr2/verify_c.py b/app/bcc1/isr2/verify_c.py
index 94cef5d0b8313ecf9812b3beb910b467cf017b1a..21f19e68cb85f02b2e8495c292d39d38747e6e1a 100644
--- a/app/bcc1/isr2/verify_c.py
+++ b/app/bcc1/isr2/verify_c.py
@@ -1,49 +1,45 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
-
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-        return abb
+    t = RunningTaskToolbox(analysis)
 
     # In H2:
-    AT3 = test(H2, "ActivateTask", [H3], # =>
-               [H2])
+    AT3 = t.reachability(H2, "ActivateTask", [H3], # =>
+                         [H2])
     state_before_AT3 = analysis.for_abb(AT3)
-    state_after_AT3  = analysis.for_abb(AT3.get_outgoing_nodes('global')[0])
+    state_after_AT3  = analysis.for_abb(AT3.definite_after('local'))
     # Could be entered by H3 or Idle loop
     assert state_before_AT3.is_unsure_ready_state(H3)
     assert state_after_AT3.is_surely_ready(H3)
 
     ## Before ActivateTask(H1) the state of H3 is known
-    AT1 = test(H2, "ActivateTask", [H1], # =>
-               [H1])
+    AT1 = t.reachability(H2, "ActivateTask", [H1], # =>
+                         [H1])
     state_before_AT1 = analysis.for_abb(AT1)
     assert state_before_AT1.is_surely_ready(H3)
 
 
-    TT3 = test(H2, "TerminateTask", [], # =>
-         [H3])
+    TT3 = t.reachability(H2, "TerminateTask", [], # =>
+                         [H3])
     returned_nodes = TT3.get_outgoing_nodes('global')
+    assert len(returned_nodes) == 2
     # When H3 was not preempted, then we start in the entry node
     assert H3.entry_abb in returned_nodes
     # When H3 was interrupted by ISR1, then it was preempted, and
     # should continue after the computation block
     assert H3.entry_abb.definite_after('local') in returned_nodes
 
-    test(StartOS, "StartOS", [], # =>
-         [Idle])
+    t.reachability(StartOS, "StartOS", [], # =>
+                   [Idle])
 
-    activated_test(analysis, [Idle, H3], # =>
-                   H2)
+    t.activate([Idle, H3], # =>
+               H2)
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
-         [Idle])
+    t.reachability(Idle, "Idle", [], # =>
+                   [Idle])
 
diff --git a/app/bcc1/isr2/verify_d.py b/app/bcc1/isr2/verify_d.py
index 560f93a09041a57a0cf9fe8b3cf9be356ceb4c83..7b3fc721c44d8b9043e850282826ab6960f70230 100644
--- a/app/bcc1/isr2/verify_d.py
+++ b/app/bcc1/isr2/verify_d.py
@@ -1,20 +1,16 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (H1, H2, H3, Idle, StartOS, ISR1) = \
        get_functions(analysis.system, ["H1", "H2", "H3", "Idle", "StartOS", "ISR1"])
 
-    syscalls = set()
+    t = RunningTaskToolbox(analysis)
 
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-
-    test(H1, "TerminateTask", [], # =>
-         [H3, # If interrupt was triggered
-          Idle, # If Interrupt wasn't triggered
-          ])
+    t.reachability(H1, "TerminateTask", [], # =>
+                   [H3, # If interrupt was triggered
+                    Idle, # If Interrupt wasn't triggered
+                ])
 
     isr_entry_state = analysis.for_abb(ISR1.entry_abb)
     for st in (H1, H2, H3):
diff --git a/app/bcc1/task1/verify_a.py b/app/bcc1/task1/verify_a.py
index a77cb42d094023629673e592e00f6d4a595858c8..b7454076366b3cf2d5ed3d91fdf8213ec354916f 100644
--- a/app/bcc1/task1/verify_a.py
+++ b/app/bcc1/task1/verify_a.py
@@ -1,43 +1,38 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS) = \
-       get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
+         get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
     # Handler11 has higher priority than Handler12
-    test(StartOS, "StartOS", [], # =>
-         [Handler11])
+    t.reachability(StartOS, "StartOS", [], # =>
+                   [Handler11])
 
     # Handler11 has higher priority than Handler12
-    test(Handler11, "ActivateTask", [Handler12], # =>
-         [Handler11])
+    t.reachability(Handler11, "ActivateTask", [Handler12], # =>
+                   [Handler11])
 
     # Handler13 is directly started
-    test(Handler11, "ActivateTask", [Handler13], # =>
-         [Handler13])
+    t.reachability(Handler11, "ActivateTask", [Handler13], # =>
+                   [Handler13])
 
     # Handler12 is always activated afterwards
-    test(Handler13, "TerminateTask", [], # =>
-         [Handler11])
+    t.reachability(Handler13, "TerminateTask", [], # =>
+                   [Handler11])
 
     # Handler12 is always activated afterwards
-    test(Handler11, "TerminateTask", [], # =>
-         [Handler12])
+    t.reachability(Handler11, "TerminateTask", [], # =>
+                   [Handler12])
 
     # Handler12 is always activated afterwards
-    test(Handler12, "TerminateTask", [], # =>
-         [Idle])
+    t.reachability(Handler12, "TerminateTask", [], # =>
+                   [Idle])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
-         [Idle])
-
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
+    t.reachability(Idle, "Idle", [], # =>
+                   [Idle])
 
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_b.py b/app/bcc1/task1/verify_b.py
index 0c6f2ea110578ba63b493209f60bbcf528324dd9..181c42e1165c24d060dde6370ea401153f947edf 100644
--- a/app/bcc1/task1/verify_b.py
+++ b/app/bcc1/task1/verify_b.py
@@ -1,4 +1,4 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
@@ -22,39 +22,35 @@ def after_RunningTaskAnalysis(analysis):
     (Handler11, Handler12, Handler13, bar, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "bar", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
     # Handler11 has higher priority than Handler12
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
     # Handler11 has higher priority than Handler12
-    test(Handler11, "ActivateTask", [Handler12], # =>
+    t.reachability(Handler11, "ActivateTask", [Handler12], # =>
          [Handler11])
 
     # Handler13 is directly started
-    test(Handler11, "ChainTask", [Handler13], # =>
+    t.reachability(Handler11, "ChainTask", [Handler13], # =>
          [Handler13])
 
     # bar is called by Handler11
-    test(bar, "ActivateTask", [Handler12], # =>
+    t.reachability(bar, "ActivateTask", [Handler12], # =>
          [Handler11])
 
 
     # Handler 13 does always lead to the activated handler 12
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler12])
 
     # Handler12 is always activated afterwards
-    test(Handler12, "TerminateTask", [], # =>
+    t.reachability(Handler12, "TerminateTask", [], # =>
          [Idle])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    # All system calls were checked
-    assert set(analysis.system.get_syscalls()) == syscalls
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_c.py b/app/bcc1/task1/verify_c.py
index 208ce6f465f52382b53ae33336dc78dec3a978f2..85763c4be30c35f5b1954339b95205f710fa1b40 100644
--- a/app/bcc1/task1/verify_c.py
+++ b/app/bcc1/task1/verify_c.py
@@ -1,4 +1,4 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
@@ -22,35 +22,31 @@ def after_RunningTaskAnalysis(analysis):
     (Handler11, Handler12, Handler13, bar, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "bar", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
-
+    t = RunningTaskToolbox(analysis)
 
     # Handler11 has higher priority than Handler12
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
     # Handler13 is directly started
-    test(Handler11, "ChainTask", [Handler13], # =>
+    t.reachability(Handler11, "ChainTask", [Handler13], # =>
          [Handler13])
 
     # bar is called by Handler11
-    test(bar, "ActivateTask", [Handler12], # =>
+    t.reachability(bar, "ActivateTask", [Handler12], # =>
          [Handler11])
 
 
     # Handler 13 does always lead to the activated handler 12
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler12, Idle])
 
     # Handler12 is always activated afterwards
-    test(Handler12, "TerminateTask", [], # =>
+    t.reachability(Handler12, "TerminateTask", [], # =>
          [Idle])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_d.py b/app/bcc1/task1/verify_d.py
index 47c3e747f8823b23076cdf8ba089b4bcaaa7ae43..086b688550a7b2dccaa4f4f3de8752ec0a9dbfb3 100644
--- a/app/bcc1/task1/verify_d.py
+++ b/app/bcc1/task1/verify_d.py
@@ -1,4 +1,4 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_CurrentRunningSubtask(analysis):
     (Handler11,  bar) = \
@@ -22,35 +22,31 @@ def after_RunningTaskAnalysis(analysis):
     (Handler11, Handler12, Handler13, bar, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "bar", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
-    test(Handler11, "ActivateTask", [Handler12], # =>
+    t.reachability(Handler11, "ActivateTask", [Handler12], # =>
          [Handler11])
 
-    test(bar, "ActivateTask", [Handler13], # =>
+    t.reachability(bar, "ActivateTask", [Handler13], # =>
          [Handler13])
 
-    test(Handler11, "ActivateTask", [Handler13], # =>
+    t.reachability(Handler11, "ActivateTask", [Handler13], # =>
          [Handler13])
 
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler11])
 
-    test(Handler11, "TerminateTask", [], # =>
+    t.reachability(Handler11, "TerminateTask", [], # =>
          [Handler12, Idle])
 
-    test(Handler12, "TerminateTask", [], # =>
+    t.reachability(Handler12, "TerminateTask", [], # =>
          [Idle])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_e.py b/app/bcc1/task1/verify_e.py
index 4f516ced5106e2b36dd858fdada0db08d42b20eb..e7fa842c2ccbe0d31aaac7348958437e7b782bad 100644
--- a/app/bcc1/task1/verify_e.py
+++ b/app/bcc1/task1/verify_e.py
@@ -1,36 +1,33 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
-    test(Handler13, "ActivateTask", [Handler12], # =>
+    t.reachability(Handler13, "ActivateTask", [Handler12], # =>
          [Handler13])
 
-    test(Handler11, "ActivateTask", [Handler13], # =>
+    t.reachability(Handler11, "ActivateTask", [Handler13], # =>
          [Handler13])
 
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler11])
 
     # Handler13 did non nessecary run!
-    test(Handler11, "TerminateTask", [], # =>
+    t.reachability(Handler11, "TerminateTask", [], # =>
          [Handler12, Idle])
 
-    test(Handler12, "TerminateTask", [], # =>
+    t.reachability(Handler12, "TerminateTask", [], # =>
          [Idle])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [Idle])
 
-    assert set(analysis.system.get_syscalls()) == syscalls
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_f.py b/app/bcc1/task1/verify_f.py
index 7e64e39962ec2c89a0f01437f54fa52cdc880833..992da4cc86b59b76e1d3d2197593840775372ad6 100644
--- a/app/bcc1/task1/verify_f.py
+++ b/app/bcc1/task1/verify_f.py
@@ -1,33 +1,29 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
-    test(Handler11, "ChainTask", [Handler13], # =>
+    t.reachability(Handler11, "ChainTask", [Handler13], # =>
          [Handler13])
 
-    test(Handler13, "ActivateTask", [Handler12], # =>
+    t.reachability(Handler13, "ActivateTask", [Handler12], # =>
          [Handler13])
 
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler12])
 
-    test(Handler12, "ChainTask", [Handler11], # =>
+    t.reachability(Handler12, "ChainTask", [Handler11], # =>
          [Handler11])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "%s != %s" \
-        %(analysis.system.get_syscalls(), syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task1/verify_g.py b/app/bcc1/task1/verify_g.py
index 18632c26a073454996e32a726360388449e50f1d..e9fb05476bbb9904f5028fc4b38ae17fe07c4296 100644
--- a/app/bcc1/task1/verify_g.py
+++ b/app/bcc1/task1/verify_g.py
@@ -1,36 +1,32 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS, bar) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS", "bar"])
 
-    syscalls = set()
-    def test(func, syscall, args, expected_subtasks):
-        abb = reachability_test(analysis, func, syscall, args, expected_subtasks)
-        syscalls.add(abb)
+    t = RunningTaskToolbox(analysis)
 
-    test(StartOS, "StartOS", [], # =>
+    t.reachability(StartOS, "StartOS", [], # =>
          [Handler11])
 
-    test(Handler11, "ChainTask", [Handler13], # =>
+    t.reachability(Handler11, "ChainTask", [Handler13], # =>
          [Handler13])
 
-    test(Handler13, "ActivateTask", [Handler12], # =>
+    t.reachability(Handler13, "ActivateTask", [Handler12], # =>
          [Handler13])
 
-    test(Handler13, "TerminateTask", [], # =>
+    t.reachability(Handler13, "TerminateTask", [], # =>
          [Handler12, Handler11])
 
-    test(Handler12, "ChainTask", [Handler11], # =>
+    t.reachability(Handler12, "ChainTask", [Handler11], # =>
          [Handler11])
 
-    test(bar, "ActivateTask", [Handler13], # =>
+    t.reachability(bar, "ActivateTask", [Handler13], # =>
          [Handler13])
 
     # Idle handler is never left
-    test(Idle, "Idle", [], # =>
+    t.reachability(Idle, "Idle", [], # =>
          [])
 
-    assert set(analysis.system.get_syscalls()) == syscalls, "missing %s" \
-        %(set(analysis.system.get_syscalls()) - syscalls)
+    t.promise_all_syscalls_checked()
diff --git a/app/bcc1/task2/verify_a.py b/app/bcc1/task2/verify_a.py
index 34e7a75e5f3bca83abcf54360ba43cce4cb812b5..06a5e97561fa2e47556be86b7c376e6307010ffe 100644
--- a/app/bcc1/task2/verify_a.py
+++ b/app/bcc1/task2/verify_a.py
@@ -1,48 +1,46 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
 
-    def reachability(function, syscall, arguments, reaching_subtasks):
-        syscall = analysis.system.find_syscall(function, syscall, arguments)
-        assert syscall
-        reachable_tasks = analysis.reachable_subtasks_from_abb(syscall)
-        assert(reachable_tasks == set(reachable_tasks))
+    t = RunningTaskToolbox(analysis)
 
     # Handler11 has higher priority than Handler12
-    reachability(StartOS, "StartOS", [],
+    t.reachability(StartOS, "StartOS", [],
                  # =>
                  [Handler11])
 
     # Handler11 has higher priority than Handler12
-    reachability(Handler11, "ActivateTask", [Handler12],
+    t.reachability(Handler11, "ActivateTask", [Handler12],
                  # =>
                  [Handler11])
 
     # Handler11 is preemptable
-    reachability(Handler11, "ActivateTask", [Handler13],
+    t.reachability(Handler11, "ActivateTask", [Handler13],
                  # =>
                  [Handler11])
 
     # Handler12 is always activated afterwards
-    reachability(Handler11, "TerminateTask", [],
+    t.reachability(Handler11, "TerminateTask", [],
                  # =>
                  [Handler13])
 
     # Handler12 is always activated afterwards
-    reachability(Handler13, "TerminateTask", [],
+    t.reachability(Handler13, "TerminateTask", [],
                  # =>
                  [Handler12])
 
     # Handler12 is always activated afterwards
-    reachability(Handler12, "TerminateTask", [],
+    t.reachability(Handler12, "TerminateTask", [],
                  # =>
                  [Idle])
 
     # Idle handler is never left
-    reachability(Idle, "Idle", [],
-                 # =>
-                 [])
+    t.reachability(Idle, "Idle", [],
+                   # =>
+                   [Idle])
+
+    t.promise_all_syscalls_checked()
 
diff --git a/app/bcc1/task2/verify_b.py b/app/bcc1/task2/verify_b.py
index 3dd8019a91f02be6629d126e309719d20001705d..686a26453d019efd42c04f88093d6b7b97160f52 100644
--- a/app/bcc1/task2/verify_b.py
+++ b/app/bcc1/task2/verify_b.py
@@ -1,28 +1,24 @@
-from generator.graph.common import *
+from generator.graph.verifier_tools import *
 
 def after_RunningTaskAnalysis(analysis):
     # Find all three systemcall handlers
     (Handler11, Handler12, Handler13, Idle, StartOS) = \
        get_functions(analysis.system, ["Handler11", "Handler12", "Handler13", "Idle", "StartOS"])
 
-    def reachability(function, syscall, arguments, reaching_subtasks):
-        syscall = analysis.system.find_syscall(function, syscall, arguments)
-        assert syscall
-        reachable_tasks = analysis.reachable_subtasks_from_abb(syscall)
-        assert(reachable_tasks == set(reachable_tasks))
+    t = RunningTaskToolbox(analysis)
 
     # Handler11 has higher priority than Handler12
-    reachability(StartOS, "StartOS", [],
+    t.reachability(StartOS, "StartOS", [],
                  # =>
                  [Handler11])
 
     # Handler11 has higher priority than Handler12
-    reachability(Handler11, "ActivateTask", [Handler12],
+    t.reachability(Handler11, "ActivateTask", [Handler12],
                  # =>
                  [Handler11])
 
     # Handler11 is preemptable
-    reachability(Handler11, "ActivateTask", [Handler13],
+    t.reachability(Handler11, "ActivateTask", [Handler13],
                  # =>
                  [Handler11])
 
@@ -32,19 +28,21 @@ def after_RunningTaskAnalysis(analysis):
     for x in syscalls:
         tasks = set(analysis.reachable_subtasks_from_abb(x))
         assert tasks == set([Handler12]) or tasks == set([Handler13])
+        t.mark_syscall(x)
 
     # Handler12 is always activated afterwards
-    reachability(Handler13, "TerminateTask", [],
+    t.reachability(Handler13, "TerminateTask", [],
                  # =>
                  [Handler12])
 
     # Handler12 is always activated afterwards
-    reachability(Handler12, "TerminateTask", [],
+    t.reachability(Handler12, "TerminateTask", [],
                  # =>
                  [Idle])
 
     # Idle handler is never left
-    reachability(Idle, "Idle", [],
+    t.reachability(Idle, "Idle", [],
                  # =>
-                 [])
+                   [Idle])
+    t.promise_all_syscalls_checked()
 
diff --git a/generator/graph/RunningTask.py b/generator/graph/RunningTask.py
index f0103b323e94d40edc91cc3d1b23d7ecd7545794..a87a770f19126e989e690205790ac7205139583a 100644
--- a/generator/graph/RunningTask.py
+++ b/generator/graph/RunningTask.py
@@ -450,12 +450,14 @@ class RunningTaskAnalysis(Analysis):
             subtasks.add(st)
         return subtasks
 
-    def activated_by(self, subtask):
+    def activating_subtasks(self, subtask):
         subtasks = set()
+        abbs = set()
         for reaching in subtask.entry_abb.get_incoming_nodes('global'):
             st = self.running_task.for_abb(reaching)
             subtasks.add(st)
-        return subtasks
+            abbs.add(reaching)
+        return subtasks, abbs
 
     def for_abb(self, abb):
         return self.before_abb_states[abb]
diff --git a/generator/graph/common.py b/generator/graph/common.py
index ad9c627053efbdeab4b0e771e705079d1d16b013..fea23dd7009fd713b90a880e167469792b0ae49b 100644
--- a/generator/graph/common.py
+++ b/generator/graph/common.py
@@ -144,38 +144,6 @@ class FixpointIteraton:
 def is_local_edge(edge):
     return edge.is_local()
 
-def get_functions(system, names):
-    """A helper for verify scripts to find quickly a set of subtask handlers"""
-    ret = []
-    for x in names:
-        for name, func in system.functions.items():
-            if x == name or \
-               "OSEKOS_TASK_" + x == name or \
-               "OSEKOS_ISR_" + x == name:
-                ret.append(func)
-    return tuple(ret)
-
-def syscall_test(analysis, function, syscall_name, arguments):
-    """Tests wheter a syscall exists and returns it"""
-    syscall = analysis.system.find_syscall(function, syscall_name, arguments)
-    assert syscall, "%s:%s(%s) not found" %(function.function_name, syscall_name, arguments)
-    return syscall
-
-
-def reachability_test(analysis, function, syscall_name, arguments, possible_subtasks):
-    syscall = analysis.system.find_syscall(function, syscall_name, arguments)
-    assert syscall, "%s:%s(%s) not found" %(function.function_name, syscall_name, arguments)
-    reachable_subtasks = analysis.reachable_subtasks_from_abb(syscall)
-    assert(set(reachable_subtasks) == set(possible_subtasks)), "%s:%s(%s)::: %s != %s" %(
-        function.function_name, syscall_name, arguments, list(possible_subtasks), list(reachable_subtasks))
-
-    return syscall
-
-def activated_test(analysis, possible_subtasks, function):
-    reachable_subtasks = analysis.activated_by(function)
-    assert(set(reachable_subtasks) == set(possible_subtasks)), "SetReady(%s):: %s != %s" %(
-        function.function_name, list(possible_subtasks), list(reachable_subtasks))
-
 
 # Hook for coloured tracebacks on the console :-)
 def myexcepthook(type, value, tb):
diff --git a/generator/graph/verifier_tools.py b/generator/graph/verifier_tools.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c44687a4f20d0278aadf403ab352cb7b774759f
--- /dev/null
+++ b/generator/graph/verifier_tools.py
@@ -0,0 +1,55 @@
+def get_functions(system, names):
+    """A helper for verify scripts to find quickly a set of subtask handlers"""
+    ret = []
+    for x in names:
+        for name, func in system.functions.items():
+            if x == name or \
+               "OSEKOS_TASK_" + x == name or \
+               "OSEKOS_ISR_" + x == name:
+                ret.append(func)
+    return tuple(ret)
+
+class RunningTaskToolbox:
+    def __init__(self, analysis):
+        self.analysis = analysis
+        self.checked_syscalls = set()
+
+    def mark_syscall(self, syscall):
+        """Mark syscall as checked"""
+        self.checked_syscalls.add(syscall)
+
+    def mark_syscalls_in_function(self, function):
+        """Mark all syscalls in functions as checked"""
+        for syscall in function.get_syscalls():
+            self.mark_syscall(syscall)
+
+    def promise_all_syscalls_checked(self):
+        assert set(self.analysis.system.get_syscalls()) == self.checked_syscalls, "missing %s" \
+            %(set(self.analysis.system.get_syscalls()) - self.checked_syscalls)
+
+    def syscall(self, function, syscall_name, arguments):
+        """Tests wheter a syscall exists and returns it"""
+        syscall = self.analysis.system.find_syscall(function, syscall_name, arguments)
+        assert syscall, "%s:%s(%s) not found" %(function.function_name, syscall_name, arguments)
+        return syscall
+
+    def reachability(self, function, syscall_name, arguments, possible_subtasks):
+        """Check to which subtasks a certain syscall can dispatch. Syscall is
+        marked as visited"""
+
+        syscall = self.syscall(function, syscall_name, arguments)
+        reachable_subtasks = self.analysis.reachable_subtasks_from_abb(syscall)
+        assert(set(reachable_subtasks) == set(possible_subtasks)), "%s:%s(%s)::: %s != %s" %(
+            function.function_name, syscall_name, arguments, list(possible_subtasks), list(reachable_subtasks))
+        self.checked_syscalls.add(syscall)
+
+        return syscall
+
+    def activate(self, possible_subtasks, function):
+        """Check which subtasks can activate a given function. The activating
+        ABBs are returned"""
+        activating_subtasks, activating_abbs = self.analysis.activating_subtasks(function)
+        assert(set(activating_subtasks) == set(possible_subtasks)), "SetReady(%s):: %s != %s" %(
+            function.function_name, list(activating_subtasks), list(reachable_subtasks))
+
+        return activating_abbs
diff --git a/toolchain/app.cmake b/toolchain/app.cmake
index 0748ec0541a2cab318d020da24e675f7b43a91e1..39508a04897e829f6be3b6496eba406754433e3a 100644
--- a/toolchain/app.cmake
+++ b/toolchain/app.cmake
@@ -125,5 +125,5 @@ MACRO(COREDOS_BINARY)
   coredos_executable(${NAME} EXCLUDE_FROM_ALL
     ${COREDOS_SOURCE_SYSTEM_OBJECT} ${COREDOS_GENERATED_SOURCE})
 
-  add_test(${NAME}-test make ${NAME}-generate)
+  add_test(${NAME}-test make ${NAME}-clean ${NAME}-generate)
 ENDMACRO(COREDOS_BINARY)