diff --git a/app/benchmark/timing/aborted-computation.cc b/app/benchmark/timing/aborted-computation.cc
index 944523a6ee7e8763fe46afc99868d16dad5f4a41..964b1655d6614f9e2befffaadf99b1004f1a92b0 100644
--- a/app/benchmark/timing/aborted-computation.cc
+++ b/app/benchmark/timing/aborted-computation.cc
@@ -14,16 +14,16 @@ GENERATE_TIME_CONSUMER(computation, 5000)
 
 extern "C" {
     void timing_entry() {
+        timing_start(0);
         ActivateTask(Computation);
         WaitEvent(ComputationFinished | ComputationAborted);
+        timing_end(TIMING_POINT_NO_INTERRUPTS_IN_BLOCK | 0);
     }
 }
 
 
 TASK(Control) {
-    timing_start(0);
     timing_entry();
-    timing_end(TIMING_POINT_NO_INTERRUPTS_IN_BLOCK | 0);
 
     /* ABB Split Point */
     DisableAllInterrupts();
diff --git a/app/benchmark/timing/activate-task.cc b/app/benchmark/timing/activate-task.cc
index e79bf776f269f73d31032d8b22d389a40c9754a3..916c044ed63d60799eb0e2d0df31246cc90159dd 100644
--- a/app/benchmark/timing/activate-task.cc
+++ b/app/benchmark/timing/activate-task.cc
@@ -12,38 +12,49 @@ TIMING_MAKE_OS_MAIN( StartOS(0) )
 GENERATE_TIME_CONSUMER(timing_1, 100)
 GENERATE_TIME_CONSUMER(timing_2, 100)
 
+extern "C" {
+    void timing_entry_0() {
+        /* Timing Circuit 0:
+           - ActivateTask will not dispatch to Handler 12
+        */
+        timing_start(0);
+        ActivateTask(Handler12);
+        timing_end(0);
+    }
+
+    void timing_entry_1() {
+        /* The Timing Circuit 1 has the following properties:
+           - Activate Task will always Dispatch to upper Task
+        */
+        timing_start(1);
+        ActivateTask(Handler13);
+        timing_end(1);
+    }
+
+    void timing_entry_2() {
+        /* The Timing Circuit 2 has the following properties:
+           - Terminate and goto immediate task.
+        */
+        timing_start(2);
+        TerminateTask();
+    }
 
-TASK(Handler11) {
-    /* Timing Circuit 0:
-       - ActivateTask will not dispatch to Handler 12
-    */
-    timing_start(0);
-
-    ActivateTask(Handler12);
-
-    timing_end(0);
+}
 
+TASK(Handler11) {
+    timing_entry_0();
 
     /* ABB Split Point */
     DisableAllInterrupts();
     EnableAllInterrupts();
 
-    /* The Timing Circuit 1 has the following properties:
-       - Activate Task will always Dispatch to upper Task
-    */
-    timing_start(1);
-
-    ActivateTask(Handler13);
-
-    timing_end(1);
+    timing_entry_1();
 
     /* ABB Split Point */
     DisableAllInterrupts();
     EnableAllInterrupts();
 
-    timing_start(2);
-
-    TerminateTask();
+    timing_entry_2();
 }
 
 TASK(Handler12) {
diff --git a/app/benchmark/timing/all.sh b/app/benchmark/timing/all.sh
index cb604f81bf790123dc961f494ebe9cca1a008661..cc159543626f7cf751a5df73eedac7e24825881b 100755
--- a/app/benchmark/timing/all.sh
+++ b/app/benchmark/timing/all.sh
@@ -19,5 +19,10 @@ export NO_HEADER=1
 #./run bench-timing-simple_interrupt 1
 #./run bench-timing-alarm 0
 
+TIMING=$(pwd)
+# Manual Analysis
+cd ../../../build;
+${TIMING}/manual-syswcet.py --all -d bench-timing-manual.dref -vv
+
 
 cd ${ALL_PWD}
diff --git a/app/benchmark/timing/interrupt-reaction.cc b/app/benchmark/timing/interrupt-reaction.cc
index dcd43ee931bf929dd65454e7b29c177685444aec..e2b0a547fc233b76f1d59f356d91f53fe570b194 100644
--- a/app/benchmark/timing/interrupt-reaction.cc
+++ b/app/benchmark/timing/interrupt-reaction.cc
@@ -7,10 +7,13 @@ TEST_MAKE_OS_MAIN( StartOS(0) )
 
 DeclareTask(H2);
 
+
 TASK(H1) {
     timing_start(0 | TIMING_POINT_START_INTERRUPT_IN_BLOCK);
     Machine::trigger_interrupt_from_user(37);
     /* IRQ + H2  */
+
+
     timing_dump();
     TerminateTask();
 }
diff --git a/app/benchmark/timing/manual-syswcet.py b/app/benchmark/timing/manual-syswcet.py
index ecdd3d52ba9a97fd558718964fd1100037b13bfc..ff05339bc6877e2f4f2359cd2dd16c205db36a6c 100755
--- a/app/benchmark/timing/manual-syswcet.py
+++ b/app/benchmark/timing/manual-syswcet.py
@@ -85,7 +85,8 @@ def parse_args():
 
   parser.add_argument('-b', '--bench', dest='bench',
                       help='the benchmark under analysis',
-                      choices=['tmr','computation_alarm','aborted_computation'],
+                      choices=['tmr','computation_alarm','aborted_computation', 'copter',
+                               'activate_task', 'wait_event', 'interrupt_reaction'],
                       required=False, default=None)
 
   parser.add_argument('-d', '--dref', dest='dref_file',
@@ -140,10 +141,11 @@ def dref_key(dref_file, key, value):
   if os.path.exists(dref_file):
     with open(dref_file) as fd:
       content += [x.strip() for x in fd.readlines()]
-  line = '\\drefset{/%s/%s}{%s}' %(key, DREF_KEY, value)
+  key = '\\drefset{/%s/%s}' %(key, DREF_KEY)
+  line = '%s{%s}' %(key, value)
   found = False
   for idx in range(0, len(content)):
-    if content[idx].startswith("\\drefset{%s}" % key):
+    if content[idx].startswith(key):
       content[idx] = line
       found = True
       break
@@ -180,7 +182,7 @@ def add_events_with_iat(cy_base, events = []):
       for (iat, cyc, name) in events:
         occ = (int(cy_total) // int(iat)) + 1
         cy_total += occ * cyc
-        occurences[name] = occ
+        occurences[name] = (occ, occ * cyc)
     return cy_total, occurences
 
 
@@ -243,6 +245,101 @@ def main():
 
     dref_key(args.dref_file, "aborted computation", int(cy_total))
 
+  # 4 syscall benchmarks
+  if args.all or args.bench == 'activate_task':
+    args.bench = 'activate_task'
+    cy_timing_0 = get_cycles_from_entry('timing_entry_0', args.bench)
+    dref_key(args.dref_file, "activate 0", int(cy_timing_0))
 
+    cy_timing_1 = get_cycles_from_entry('timing_entry_1', args.bench)
+    cy_Handler13 = get_cycles_from_entry('OSEKOS_TASK_FUNC_Handler13', args.bench)
+    dref_key(args.dref_file, "activate 1", int(cy_timing_1+cy_Handler13))
+
+    cy_timing_2 = get_cycles_from_entry('timing_entry_2', args.bench)
+    cy_Handler12 = get_cycles_from_entry('OSEKOS_TASK_FUNC_Handler12', args.bench)
+    cy_idle = get_cycles_from_entry('__OS_HOOK_PreIdleHook', args.bench)
+
+    dref_key(args.dref_file, "activate 2", int(cy_timing_2+cy_Handler12+cy_idle))
+
+  if args.all or args.bench == 'wait_event':
+    args.bench = 'wait_event'
+    cy_timing_entry = get_cycles_from_entry('timing_entry', args.bench)
+    cy_H2 = get_cycles_from_entry('OSEKOS_TASK_FUNC_H2', args.bench)
+    dref_key(args.dref_file, "wait event", int(cy_timing_entry + cy_H2))
+
+  if args.all or args.bench == 'interrupt_reaction':
+    args.bench = 'interrupt_reaction'
+    cy_ISR = get_cycles_from_entry('irq_entry', args.bench, ["irq_entry : <> : OSEKOS_ISR_ISR1 = 1"])
+    cy_H2  = get_cycles_from_entry('OSEKOS_TASK_FUNC_H2', args.bench)
+
+    dref_key(args.dref_file, "interrupt reaction", int(cy_ISR + cy_H2))
+
+
+  if args.all or args.bench == 'copter':
+    args.bench = 'copter'
+    iat_timer = 100000
+    cy_timer_isr = get_cycles_from_entry('irq_entry', args.bench, ["irq_entry : <> : timer_isr = 1"])
+
+    iat_mavlink = 200000
+    cy_ISR_Mavlink = get_cycles_from_entry('irq_entry', args.bench, ["irq_entry : <> : OSEKOS_ISR_MavlinkRecvHandler = 1"])
+
+    cy_threads = {}
+    for thread in (
+        'SignalGatherInitiateTask',
+        'SignalGatherFinishedTask',
+        'SignalGatherTimeoutTask',
+        'SignalProcessingActuateTask',
+        'SignalProcessingAttitudeTask',
+        'FlightControlTask',
+        'FlightControlAttitudeTask',
+        'FlightControlActuateTask',
+        'MavlinkSendTask',
+        'CopterControlWatchdogTask',
+        'CopterControlTask',
+        ):
+      cy_threads[thread] = get_cycles_from_entry('OSEKOS_TASK_FUNC_'+thread, 'copter')
+
+    cy_signal_processing = cy_threads['SignalGatherInitiateTask'] +\
+                           cy_threads['SignalGatherFinishedTask'] +\
+                           cy_threads['SignalGatherTimeoutTask'] + \
+                           cy_threads['SignalProcessingActuateTask'] +\
+                           cy_threads['SignalProcessingAttitudeTask']
+
+    cy_copter_0,occurences = add_events_with_iat(
+      cy_signal_processing,
+      [(iat_timer, cy_timer_isr, 'timer'), (iat_mavlink, cy_ISR_Mavlink, 'mavlink')]
+    )
+    logging.info("copter 0: %s", occurences)
+    dref_key(args.dref_file, "copter 0", cy_copter_0)
+
+
+    cy_flight_control = cy_threads['FlightControlTask'] + \
+                        cy_threads['FlightControlAttitudeTask'] +\
+                        cy_threads['FlightControlActuateTask'] + \
+                        cy_threads['MavlinkSendTask']
+
+
+    cy_copter_1, occurences = add_events_with_iat(
+      cy_flight_control,
+      [(iat_timer, cy_timer_isr, 'timer'), (3 * iat_timer, cy_signal_processing, 'signal-processing'),
+       (iat_mavlink, cy_ISR_Mavlink, 'mavlink')]
+    )
+
+    logging.info("copter 1: %s", occurences)
+    dref_key(args.dref_file, "copter 1", cy_copter_1)
+
+    cy_rc_control = cy_ISR_Mavlink + \
+                    cy_threads['CopterControlTask']
+
+    cy_copter_2, occurences = add_events_with_iat(
+      cy_rc_control,
+      [(iat_timer, cy_timer_isr, 'timer'),
+         (3 * iat_timer, cy_signal_processing, 'signal-processing'),
+         (9 * iat_timer, cy_flight_control, 'flight-control'),
+       ]
+    )
+
+    logging.info("copter 2: %s", occurences)
+    dref_key(args.dref_file, "copter 2", cy_copter_2)
 if __name__=='__main__':
   main()
diff --git a/app/benchmark/timing/run b/app/benchmark/timing/run
index 1c0344283254bbe4f85a753a954495451de1fc08..ff85235e9426f9241306695411be529b1c5bc517 100755
--- a/app/benchmark/timing/run
+++ b/app/benchmark/timing/run
@@ -38,8 +38,8 @@ make test-$BM &> $TRACE_OUTPUT
 
 out_circuit=0
 # iterate over all circuits dumped by the simulation
-for i in $(grep -P timing-[0-9]+ ${TRACE_OUTPUT} | cut -d' ' -f 2); do 
-  
+for i in $(grep -P timing-[0-9]+ ${TRACE_OUTPUT} | cut -d' ' -f 2); do
+
   # the trace will dump all circuits
   # However, only the current CIRCUIT is required
   if [ "${out_circuit}" -eq "${CIRCUIT}" ]; then
@@ -49,4 +49,8 @@ for i in $(grep -P timing-[0-9]+ ${TRACE_OUTPUT} | cut -d' ' -f 2); do
   out_circuit=$(expr ${out_circuit} + 1)
 done
 
+if [ x"$CIRCUIT" = x"0" ]; then
+    platin blocking-time -i $BM-system.pml --wca-detect-gurobi   --dref-stats $BM.dref
+fi
+
 cd ${RUN_PWD}
diff --git a/app/benchmark/timing/wait-event.cc b/app/benchmark/timing/wait-event.cc
index 476765cf61af288dd137772fb440e94ec45b7214..b2648a343639c22ee7974f8a51f5c6ce6985f7c7 100644
--- a/app/benchmark/timing/wait-event.cc
+++ b/app/benchmark/timing/wait-event.cc
@@ -10,13 +10,18 @@ DeclareEvent(E2);
 
 
 bool done;
+extern "C" {
+    void timing_entry() {
+        timing_start(0);
+        WaitEvent(E1);
+        timing_end(0);
+    }
+}
 
 TASK(H1) {
     ActivateTask(H2);
 
-    timing_start(0);
-    WaitEvent(E1);
-    timing_end(0);
+    timing_entry();
 
     /* ABB Split Point */
     DisableAllInterrupts();
@@ -32,11 +37,3 @@ TASK(H2) {
     SetEvent(H1, E1);
     TerminateTask();
 }
-
-TASK(H3) {
-    TerminateTask();
-}
-
-void PreIdleHook() {
-    Machine::trigger_interrupt_from_user(37);
-}
diff --git a/app/benchmark/timing/wait-event.oil b/app/benchmark/timing/wait-event.oil
index 1995bce4420dcc4d2b3452f44ae2211257c9f860..b6bc685fd098eba87358b9902de40a62aa5ee906 100644
--- a/app/benchmark/timing/wait-event.oil
+++ b/app/benchmark/timing/wait-event.oil
@@ -26,21 +26,13 @@ CPU TestSystem {
         EVENT = E2;
     };
 
-    TASK H3 {
-        SCHEDULE = NON;
-        PRIORITY = 5;
-        ACTIVATION = 1;
-        AUTOSTART = FALSE;
-        EVENT = E2;
+    EVENT E1 {
+      MASK = AUTO;
     };
 
-	EVENT E1 {
-		MASK = AUTO;
-	};
-
-	EVENT E2 {
-		MASK = AUTO;
-	};
+    EVENT E2 {
+      MASK = AUTO;
+    };
 
 };