diff --git a/modules/controller.py b/modules/controller.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7ca0b0a318408131d7ed42d5ded0c70a7a5f472
--- /dev/null
+++ b/modules/controller.py
@@ -0,0 +1,28 @@
+"""Contains functions for controller creation."""
+
+
+CONTROLLER_NAME = "controller"
+
+
+def _are_controller_parameters_free(definitions):
+    """Check if controller parameters are not already taken."""
+    for host in definitions["hosts"]:
+        if host["name"] == CONTROLLER_NAME:
+            return False
+        # TODO add other parameters
+
+    return True
+
+
+def create_controller(definitions):
+    """Add the definition of controller to definitions.
+
+    :param definitions: device definition structure
+    """
+
+    # TODO this should be later moved to input check
+    if not _are_controller_parameters_free(definitions):
+        raise ValueError("A device with the same name as border router "
+                         "already exists.")
+
+    return
diff --git a/modules/preprocessing.py b/modules/preprocessing.py
index 2562f20f6d917759a76d65fc64f86e780ac4f4ec..5bebac0b18ca0ec06416cb6034a11104c7736778 100644
--- a/modules/preprocessing.py
+++ b/modules/preprocessing.py
@@ -7,6 +7,7 @@ creation.
 import itertools
 
 from modules.border_router import create_border_router
+from modules.controller import create_controller
 from modules.file_manager import open_yaml, cleanup_and_exit
 
 FLAVORS = open_yaml("conf/flavors.yml")
@@ -106,6 +107,13 @@ def preprocess(definitions, flags):
         cleanup_and_exit("Preprocessing not successful: "
                          "Could not create border router (" + error + ")")
 
+    try:
+        if _find_windows_boxes(definitions):
+            create_controller(definitions)
+    except (ValueError, IndexError) as error:
+        cleanup_and_exit("Preprocessing not successful: "
+                         "Could not create controller (" + error + ")")
+
     try:
         _configure_routers(definitions)
     except Exception: