diff --git a/app/benchmark/timing/CMakeLists.txt b/app/benchmark/timing/CMakeLists.txt
index 8d290d10fd785743cfb80ac4027c22932d8b2ff6..18780337ef52117728044e62098989c443f00335 100644
--- a/app/benchmark/timing/CMakeLists.txt
+++ b/app/benchmark/timing/CMakeLists.txt
@@ -48,3 +48,10 @@ DOSEK_BINARY(
   LIBS libtest timing
   SOURCES alarm.cc
 )
+
+DOSEK_BINARY(
+  NAME bench-timing-copter
+  SYSTEM_DESC copter.oil
+  LIBS libtest timing
+  SOURCES copter.cc
+)
diff --git a/app/benchmark/timing/copter.cc b/app/benchmark/timing/copter.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e9ed02909b018084dc98fbceab75547db83af25a
--- /dev/null
+++ b/app/benchmark/timing/copter.cc
@@ -0,0 +1,150 @@
+#include "os.h"
+#include "test/test.h"
+#include "timing.h"
+#include "machine.h"
+
+//extern "C" volatile uint32_t random_source =0 ;
+DeclareTask(SignalGatherInitiateTask);
+DeclareTask(SignalGatherFinishedTask);
+DeclareTask(SignalGatherTimeoutTask);
+DeclareTask(SignalProcessingActuateTask);
+DeclareTask(SignalProcessingAttitudeTask);
+DeclareTask(ActuateTask);
+DeclareTask(FlightControlAttitudeTask);
+DeclareTask(FlightControlActuateTask);
+DeclareTask(MavlinkSendTask);
+DeclareTask(CopterControlTask);
+DeclareTask(MavlinkRecvHandler);
+
+DeclareResource(SPIBus);
+
+DeclareAlarm(CopterControlWatchdogAlarm);
+
+TEST_MAKE_OS_MAIN( StartOS(0) )
+
+GENERATE_TIME_CONSUMER(calculation, 100)
+GENERATE_TIME_CONSUMER(calculation_short, 10)
+
+
+int round;
+
+TASK(SignalGatherInitiateTask) {
+	if (round == 9) {
+            calculation();
+            timing_dump();
+            ShutdownMachine();
+	}
+	calculation();
+
+	GetResource(SPIBus);
+	calculation();
+	if ((round % 2) == 0) {
+		ActivateTask(SignalGatherTimeoutTask);
+		calculation();
+	} else {
+		ActivateTask(SignalGatherFinishedTask);
+		calculation();
+	}
+	round ++;
+	calculation();
+	ReleaseResource(SPIBus);
+	calculation();
+	TerminateTask();
+}
+
+TASK(SignalGatherFinishedTask) {
+    timing_start(0);
+    calculation();
+    ActivateTask(SignalProcessingAttitudeTask);
+    calculation();
+    ActivateTask(SignalProcessingActuateTask);
+    calculation();
+    timing_end(0);
+    TerminateTask();
+}
+
+TASK(SignalGatherTimeoutTask) {
+	calculation();
+	GetResource(SPIBus);
+	calculation();
+	ReleaseResource(SPIBus);
+	calculation();
+	ChainTask(SignalGatherFinishedTask);
+}
+
+volatile int calculate;
+
+TASK(SignalProcessingActuateTask) {
+	calculation();
+	TerminateTask();
+}
+
+TASK(SignalProcessingAttitudeTask) {
+	calculation();
+	TerminateTask();
+}
+
+TASK(FlightControlTask) {
+	calculation();
+	ActivateTask(FlightControlAttitudeTask);
+	calculation();
+	ActivateTask(FlightControlActuateTask);
+	calculation();
+	ActivateTask(MavlinkSendTask);
+	calculation();
+	TerminateTask();
+}
+
+TASK(FlightControlAttitudeTask) {
+	calculation();
+	TerminateTask();
+}
+
+TASK(FlightControlActuateTask) {
+	calculation();
+	TerminateTask();
+}
+
+TASK(MavlinkSendTask) {
+	calculation();
+	GetResource(SPIBus);
+	calculation();
+	Machine::trigger_interrupt_from_user(37);
+	ReleaseResource(SPIBus);
+	calculation();
+	TerminateTask();
+}
+
+TASK(CopterControlTask) {
+	calculation();
+	SuspendAllInterrupts();
+	calculation();
+	ResumeAllInterrupts();
+	calculation();
+        timing_end(1);
+	if (round < 5) {
+		CancelAlarm(CopterControlWatchdogAlarm);
+		calculation();
+		SetRelAlarm(CopterControlWatchdogAlarm, 100, 100);
+	}
+	calculation();
+
+	TerminateTask();
+}
+
+ISR2(MavlinkRecvHandler) {
+    timing_start(1);
+    calculation_short();
+    ActivateTask(CopterControlTask);
+    calculation_short();
+}
+
+TASK(CopterControlWatchdogTask) {
+	calculation();
+	TerminateTask();
+}
+
+
+void PreIdleHook() {
+	kout << "I" << round << endl;
+}
diff --git a/app/benchmark/timing/copter.oil b/app/benchmark/timing/copter.oil
new file mode 100644
index 0000000000000000000000000000000000000000..f3e528d893bccea635980bf4bef24650aeafcac2
--- /dev/null
+++ b/app/benchmark/timing/copter.oil
@@ -0,0 +1,168 @@
+CPU CopterMock {
+
+    OS Coptermock {
+        STATUS = STANDARD;
+        ERRORHOOK = FALSE;
+        STARTUPHOOK = FALSE;
+        SHUTDOWNHOOK = FALSE;
+        PRETASKHOOK = FALSE;
+        POSTTASKHOOK = FALSE;
+    };
+
+	TASKGROUP SignalGatherGroup {
+		PROMISE = SERIALIZED;
+	};
+
+    TASK SignalGatherInitiateTask {
+        SCHEDULE = FULL;
+        PRIORITY = 24;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+        RESOURCE = SPIBus;
+		TASKGROUP = SignalGatherGroup;
+    };
+
+    TASK SignalGatherFinishedTask {
+        SCHEDULE = FULL;
+        PRIORITY = 25;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+        RESOURCE = SPIBus;
+		TASKGROUP = SignalGatherGroup;
+    };
+
+    TASK SignalGatherTimeoutTask {
+        SCHEDULE = FULL;
+        PRIORITY = 23;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+        RESOURCE = SPIBus;
+		TASKGROUP = SignalGatherGroup;
+    };
+
+    TASK SignalProcessingActuateTask {
+        SCHEDULE = FULL;
+        PRIORITY = 22;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = SignalGatherGroup;
+    };
+
+    TASK SignalProcessingAttitudeTask {
+        SCHEDULE = FULL;
+        PRIORITY = 21;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+	TASKGROUP = SignalGatherGroup;
+    };
+
+    /* Actuate Tasks */
+	TASKGROUP FlightControlGroup {
+		PROMISE = SERIALIZED;
+	};
+
+    TASK FlightControlTask {
+        SCHEDULE = NON;
+        PRIORITY = 11;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = FlightControlGroup;
+    };
+
+    TASK FlightControlAttitudeTask {
+        SCHEDULE = FULL;
+        PRIORITY = 12;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = FlightControlGroup;
+    };
+
+    TASK FlightControlActuateTask {
+        SCHEDULE = FULL;
+        PRIORITY = 13;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = FlightControlGroup;
+    };
+
+    TASK MavlinkSendTask {
+        SCHEDULE = FULL;
+        PRIORITY = 10;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = FlightControlGroup;
+    };
+
+    /* Watchdog Task */
+	TASKGROUP WatchdogGroup {
+		PROMISE = SERIALIZED;
+	};
+    TASK CopterControlWatchdogTask {
+        SCHEDULE = NON;
+        PRIORITY = 1;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = WatchdogGroup;
+    };
+
+    /* Remote Control Task */
+	TASKGROUP MavlinkReceiveGroup {
+		PROMISE = SERIALIZED;
+	};
+
+    TASK CopterControlTask {
+        SCHEDULE = FULL;
+        PRIORITY = 5;
+        ACTIVATION = 1;
+        AUTOSTART = FALSE;
+		TASKGROUP = MavlinkReceiveGroup;
+    };
+    ISR MavlinkRecvHandler {
+        CATEGORY = 2;
+        PRIORITY = 100;
+        DEVICE = 37;
+        TASKGROUP = MavlinkReceiveGroup;
+        MINIAT = 200000;
+    };
+
+    RESOURCE SPIBus {
+        RESOURCEPROPERTY = STANDARD;
+    };
+
+    ALARM SignalGatherAlarm {
+        COUNTER = C1;
+        ACTION = ACTIVATETASK {
+            TASK = SignalGatherInitiateTask;
+        };
+        AUTOSTART = TRUE {
+            ALARMTIME = 10;
+            CYCLETIME = 30;
+        };
+    };
+
+    ALARM FlightControlAlarm {
+        COUNTER = C1;
+        ACTION = ACTIVATETASK {
+            TASK = FlightControlTask;
+        };
+        AUTOSTART = TRUE {
+            ALARMTIME = 10;
+            CYCLETIME = 90;
+        };
+    };
+
+    ALARM CopterControlWatchdogAlarm {
+        COUNTER = C1;
+        ACTION = ACTIVATETASK {
+            TASK = CopterControlWatchdogTask;
+        };
+    };
+
+    COUNTER C1 {
+        MAXALLOWEDVALUE = 50000;
+        TICKSPERBASE = 1;
+        MINCYCLE = 1;
+    };
+
+};
+