diff --git a/app/benchmark/timing/CMakeLists.txt b/app/benchmark/timing/CMakeLists.txt
index 4b3c5485ece5d9a3d81c99af046bc8fd11493d10..aee9bb4713366d10cf93f2e7aca110439197fee5 100644
--- a/app/benchmark/timing/CMakeLists.txt
+++ b/app/benchmark/timing/CMakeLists.txt
@@ -1,3 +1,20 @@
+# Evalutation Scenario #1
+DOSEK_BINARY(
+  NAME bench-timing-tmr
+  SYSTEM_DESC tmr.oil
+  LIBS libtest timing
+  SOURCES tmr.cc
+  )
+
+# Evaluation Scenario #2
+
+DOSEK_BINARY(
+  NAME bench-timing-computation_alarm
+  SYSTEM_DESC computation-alarm.oil
+  LIBS libtest timing
+  SOURCES computation-alarm.cc
+)
+
 DOSEK_BINARY(
   NAME bench-timing-activate_task
   SYSTEM_DESC activate-task.oil
@@ -35,12 +52,6 @@ DOSEK_BINARY(
   SOURCES computation-irq.cc
 )
 
-DOSEK_BINARY(
-  NAME bench-timing-tmr
-  SYSTEM_DESC tmr.oil
-  LIBS libtest timing
-  SOURCES tmr.cc
-  )
 
 DOSEK_BINARY(
   NAME bench-timing-aborted_computation
@@ -56,6 +67,7 @@ DOSEK_BINARY(
   SOURCES alarm.cc
 )
 
+
 DOSEK_BINARY(
   NAME bench-timing-copter
   SYSTEM_DESC copter.oil
diff --git a/app/benchmark/timing/computation-alarm.cc b/app/benchmark/timing/computation-alarm.cc
new file mode 100644
index 0000000000000000000000000000000000000000..22374ba0fa2c57cbf88fff0f86493f42a24b0630
--- /dev/null
+++ b/app/benchmark/timing/computation-alarm.cc
@@ -0,0 +1,49 @@
+/**
+ * @file
+ * @ingroup unit_tests
+ * @test Test repeated alarn task activation while performing syscalls
+ */
+
+#include "test/test.h"
+#include "os/os.h"
+#include "timing.h"
+
+
+DeclareTask(Task1);
+DeclareTask(Task4);
+DeclareCounter(C1);
+
+TIMING_MAKE_OS_MAIN( StartOS(0) )
+GENERATE_TIME_CONSUMER(computation_0, 2300)
+GENERATE_TIME_CONSUMER(computation_1, 50)
+
+
+
+extern "C" {
+    noinline void timing_entry(void) {
+        timing_loop_bound(30, 30) for (unsigned i = 0; i < 30; i++) {
+            computation_0();
+        }
+    }
+}
+
+TASK(Task3) {
+    timing_start(0);
+    timing_entry();
+    timing_end(0);
+
+    /* ABB Split Point */
+    DisableAllInterrupts();
+    EnableAllInterrupts();
+
+    /* Dump Timing and shutdown machine. */
+    timing_dump();
+
+    TerminateTask();
+}
+
+
+TASK(Task4) {
+    computation_1();
+    TerminateTask();
+}
diff --git a/app/benchmark/timing/computation-alarm.oil b/app/benchmark/timing/computation-alarm.oil
new file mode 100644
index 0000000000000000000000000000000000000000..f5a28f3d5dfe248f98bc08c6afe229307af4a2ab
--- /dev/null
+++ b/app/benchmark/timing/computation-alarm.oil
@@ -0,0 +1,43 @@
+CPU TestSystem {
+
+    OS TestSystem {
+        STATUS = STANDARD;
+        ERRORHOOK = FALSE;
+        STARTUPHOOK = FALSE;
+        SHUTDOWNHOOK = FALSE;
+        PRETASKHOOK = FALSE;
+        POSTTASKHOOK = FALSE;
+    };
+
+    TASK Task3 {
+        SCHEDULE = FULL;
+        PRIORITY = 1;
+        ACTIVATION = 1;
+        AUTOSTART = TRUE;
+    };
+
+    TASK Task4 {
+        SCHEDULE = FULL;
+        PRIORITY = 4;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+    };
+
+    ALARM A1 {
+        COUNTER = C1;
+        ACTION = ACTIVATETASK {
+            TASK = Task4;
+        };
+        AUTOSTART = TRUE {
+            ALARMTIME = 1;
+            CYCLETIME = 3;
+        };
+    };
+    
+    COUNTER C1 {
+        MAXALLOWEDVALUE = 50000;
+        TICKSPERBASE = 1;
+        MINCYCLE = 1;
+    };
+};
+
diff --git a/app/benchmark/timing/copter.cc b/app/benchmark/timing/copter.cc
index 6d5f7cd9aa46fdad944b64535ac4107a5aaa93be..f49a027ccdfa4c264ac5c5fb928f9266caed6e6e 100644
--- a/app/benchmark/timing/copter.cc
+++ b/app/benchmark/timing/copter.cc
@@ -20,25 +20,16 @@ DeclareResource(SPIBus);
 
 DeclareAlarm(CopterControlWatchdogAlarm);
 
-TEST_MAKE_OS_MAIN( StartOS(0) )
-
-GENERATE_TIME_CONSUMER(calculation, 100)
-GENERATE_TIME_CONSUMER(calculation_short, 10)
-#define calculcation() do {} while(0)
+TIMING_MAKE_OS_MAIN( StartOS(0) )
 
+//GENERATE_TIME_CONSUMER(calculation, 100)
+//GENERATE_TIME_CONSUMER(calculation_short, 10)
+#define calculation() do {} while(0)
+#define calculation_short() do {} while(0)
 
 int round;
 
 TASK(SignalGatherInitiateTask) {
-    /*
-	if (round == 9) {
-            calculation();
-            timing_dump();
-            ShutdownMachine();
-	}
-	calculation();
-    */
-
 	GetResource(SPIBus);
 	calculation();
 	if ((round % 2) == 0) {
@@ -86,14 +77,13 @@ TASK(SignalProcessingAttitudeTask) {
 }
 
 TASK(FlightControlTask) {
-	calculation();
-	ActivateTask(FlightControlAttitudeTask);
-	calculation();
-	ActivateTask(FlightControlActuateTask);
-	calculation();
-	ActivateTask(MavlinkSendTask);
-	calculation();
-	TerminateTask();
+    timing_start(1);
+    calculation();
+    ActivateTask(FlightControlAttitudeTask);
+    ActivateTask(FlightControlActuateTask);
+    ActivateTask(MavlinkSendTask);
+    calculation();
+    TerminateTask();
 }
 
 TASK(FlightControlAttitudeTask) {
@@ -107,36 +97,35 @@ TASK(FlightControlActuateTask) {
 }
 
 TASK(MavlinkSendTask) {
-	calculation();
-	GetResource(SPIBus);
-	calculation();
-	Machine::trigger_interrupt_from_user(37);
-	ReleaseResource(SPIBus);
-	calculation();
-	TerminateTask();
+    calculation();
+    GetResource(SPIBus);
+    calculation_short();
+    Machine::trigger_interrupt_from_user(37);
+    ReleaseResource(SPIBus);
+    calculation();
+    timing_end(1);
+    TerminateTask();
 }
 
 TASK(CopterControlTask) {
-    timing_end(1);
+    timing_end(TIMING_POINT_NO_INTERRUPTS_IN_BLOCK | 2);
 
     calculation();
     SuspendAllInterrupts();
-    calculation();
+    calculation_short();
     ResumeAllInterrupts();
     calculation();
 
     if (round < 5) {
         CancelAlarm(CopterControlWatchdogAlarm);
-        calculation();
         SetRelAlarm(CopterControlWatchdogAlarm, 100, 100);
     }
-	calculation();
-
-	TerminateTask();
+    calculation();
+    TerminateTask();
 }
 
 ISR2(MavlinkRecvHandler) {
-    timing_start(1);
+    timing_start(2);
     calculation_short();
     ActivateTask(CopterControlTask);
     calculation_short();
@@ -149,5 +138,15 @@ TASK(CopterControlWatchdogTask) {
 
 
 void PreIdleHook() {
-	kout << "I" << round << endl;
+    static int count = 0;
+    kout << "---\n";
+    if (++count > 5) {
+        if (timing_print() > 0) {
+            ShutdownMachine();
+        }
+    }
+
+    if (count == 50) {
+        timing_dump();
+    }
 }
diff --git a/app/benchmark/timing/tmr.cc b/app/benchmark/timing/tmr.cc
index 1a31dc76cde6ddeb95a24715f9df7228a2c081f5..fa5a5f6493027b4124789ba0f1fad615b4643fc3 100644
--- a/app/benchmark/timing/tmr.cc
+++ b/app/benchmark/timing/tmr.cc
@@ -12,13 +12,15 @@ GENERATE_TIME_CONSUMER(calculation, 50)
 /* We put the timing circuit into an extra non inlinable function, in
  * order to make tradtional analysis simpler.
  */
-noinline void timing_entry() {
-    timing_start(0);
-
-    timing_loop_bound(2, 3) for (unsigned i = 0; i < 3; i++) {
-        ActivateTask(Calculation);
+extern "C" {
+    noinline void timing_entry() {
+        timing_start(0);
+
+        timing_loop_bound(2, 3) for (unsigned i = 0; i < 3; i++) {
+            ActivateTask(Calculation);
+        }
+        timing_end(0);
     }
-    timing_end(0);
 }
 
 TASK(Control) {
diff --git a/os/timing.cc b/os/timing.cc
index 5a87381853335e0a6ae9be09a0088e6e1d73f588..560e5d13a49d95fbdc19f17c7132b2f664ed2569 100644
--- a/os/timing.cc
+++ b/os/timing.cc
@@ -21,12 +21,16 @@ noinline uint64_t timing_end(int circuit) {
     return delta;
 }
 
-noinline void timing_print() {
+noinline int timing_print() {
+    unsigned found = 0;
     for (unsigned i = 0; i < CIRCUIT_MAX; ++i) {
         if (circuits[i]) {
             kout << "timing-" << i << " " << circuits_duration[i] << endl;
+            circuits[i] = 0;
+            found ++;
         }
     }
+    return found;
 }
 
 }
diff --git a/os/timing.h b/os/timing.h
index fccb5e0c45d4dbf095bfe670897d418a65bb9afa..2c31ec79e1406688425be16c7d55bd77394275bd 100644
--- a/os/timing.h
+++ b/os/timing.h
@@ -7,7 +7,7 @@
 extern "C" {
     extern void timing_start(int circuit);
     extern uint64_t timing_end(int circuit);
-    extern void timing_print();
+    extern int timing_print();
 }
 #define timing_dump() asm volatile("trap 2")
 #define timing_loop_bound(low, high) _Pragma(STRINGIFY(loopbound min low max high))