diff --git a/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java b/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java
index 53a5cd7222ebe2351dc3e846af1b0bec87b6b0b3..9d3481c2fbc4e1ee4c58dadf8a884c0e0e73b9fb 100644
--- a/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java
+++ b/src/test/java/de/hhu/stups/codegenerator/java/TestMachines.java
@@ -765,4 +765,9 @@ public class TestMachines extends TestJava {
         testJava("drone/DroneCommunicator_Mockup");
     }
 
+    @Test
+    public void testDroneMainController() throws Exception {
+        testJava("drone/DroneMainController");
+    }
+
 }
\ No newline at end of file
diff --git a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch
new file mode 100644
index 0000000000000000000000000000000000000000..7733c48bb01205a5926b77a80a3726c6eec4d76e
--- /dev/null
+++ b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneMainController.mch
@@ -0,0 +1,100 @@
+MACHINE DroneMainController
+INCLUDES DroneSafetyController, DroneCommunicator_Mockup
+
+OPERATIONS
+
+Controller_Init = BEGIN EXTERNAL_Init END;
+
+Controller_open_link = BEGIN EXTERNAL_open_link END;
+
+Controller_register_sensors = BEGIN EXTERNAL_register_sensors END;
+
+Controller_Takeoff =
+  BEGIN
+    take_off;
+    EXTERNAL_Drone_Takeoff;
+    flying
+  END;
+
+  Controller_Landing =
+  BEGIN
+    landing;
+    EXTERNAL_Drone_Land;
+    landed
+  END;
+
+  Controller_DOWN(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    DOWN(dist);
+    EXTERNAL_Drone_Down(dist)
+  END;
+
+Controller_UP(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    UP(dist);
+    EXTERNAL_Drone_Up(dist)
+  END;
+
+Controller_LEFT(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    LEFT(dist);
+    EXTERNAL_Drone_Left(dist)
+  END;
+
+Controller_RIGHT(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    RIGHT(dist);
+    EXTERNAL_Drone_Right(dist)
+  END;
+
+Controller_BACKWARD(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    BACKWARD(dist);
+    EXTERNAL_Drone_Backward(dist)
+  END;
+
+Controller_FORWARD(dist) =
+  SELECT
+	dist: INTEGER
+  THEN
+    FORWARD(dist);
+    EXTERNAL_Drone_Forward(dist)
+  END;
+
+Controller_OBSERVE =
+  VAR dist_forward, dist_backward, dist_up, dist_down, dist_left, dist_right
+  IN
+	dist_forward <-- EXTERNAL_Drone_GetFrontDistance;
+	dist_backward <-- EXTERNAL_Drone_GetBackDistance;
+	dist_up <-- EXTERNAL_Drone_GetUpDistance;
+	dist_down <-- EXTERNAL_Drone_GetDownDistance;
+	dist_left <-- EXTERNAL_Drone_GetLeftDistance;
+	dist_right <-- EXTERNAL_Drone_GetRightDistance;
+	observe({UP_SENSOR |-> dist_up, DOWN_SENSOR |-> dist_down, LEFT_SENSOR |-> dist_left, RIGHT_SENSOR |-> dist_right, FORWARD_SENSOR |-> dist_forward, BACKWARD_SENSOR |-> dist_backward})
+  END;
+
+Controller_SYNC_POS =
+  VAR x, y, z
+  IN
+	x <-- EXTERNAL_Drone_GetX;
+	y <-- EXTERNAL_Drone_GetY;
+	z <-- EXTERNAL_Drone_GetZ;
+	setCoordinates(x, y, z)
+  END;
+
+Controller_CLOSE_LINK =
+  BEGIN
+    EXTERNAL_close_link
+  END
+
+END
\ No newline at end of file
diff --git a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch
index ca8182ab9dc15858665c73dc912ffcb63ac1b785..aeec532cc9bab0dcb2d5fc6d16cf516896272b93 100644
--- a/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch
+++ b/src/test/resources/de/hhu/stups/codegenerator/drone/DroneSafetyController.mch
@@ -166,6 +166,16 @@ OPERATIONS
     THEN
       sensor_data := data ||
       updated := TRUE
-    END
+    END;
 
+  setCoordinates(newX, newY, newZ) =
+  SELECT
+    newX : INTEGER &
+    newY : INTEGER &
+    newZ : INTEGER
+  THEN
+    x := newX ||
+    y := newY ||
+    z := newZ
+  END
 END