diff --git a/modules/ansible_generator.py b/modules/ansible_generator.py
index 74fd818b6b48ee206fa3e6eea2af59b749ed8c8f..928a943aa9d493b47a1c72d471c60365804a2460 100644
--- a/modules/ansible_generator.py
+++ b/modules/ansible_generator.py
@@ -4,6 +4,15 @@ from modules.file_manager import generate_file, copy_template_file,\
     copy_user_provisioning_dir
 from modules.ansible_vars_generator import generate_ansible_vars
 from conf.border_router import BORDER_ROUTER_NAME
+from modules.controller import CONTROLLER_NAME
+
+def _find_windows_boxes(definitions):
+    """Find and return list of host names with windows boxes."""
+    windows_hosts = []
+    for host in definitions["hosts"]:
+        if "windows" in host["base_box"]["image"].lower():
+            windows_hosts.append(host["name"])
+    return windows_hosts
 
 
 def _create_config_playbooks(input_definitions, flags):
@@ -18,14 +27,23 @@ def _create_config_playbooks(input_definitions, flags):
         copy_template_file("routers",
                            "base_provisioning/roles/routers/tasks/main.yml")
 
+    windows_hosts = _find_windows_boxes(input_definitions)
+
     for device in input_definitions["hosts"] + input_definitions["routers"]:
         if "border_router" in flags and flags["border_router"] and\
            device["name"] == BORDER_ROUTER_NAME:
             copy_template_file("br", "base_provisioning/roles/" +
                                device["name"] + "/tasks/main.yml")
         else:
-            copy_template_file("separate_devices", "base_provisioning/roles/" +
-                               device["name"] + "/tasks/main.yml")
+            if device["name"] == CONTROLLER_NAME:
+                copy_template_file("controller", "base_provisioning/roles/" +
+                                   device["name"] + "/tasks/main.yml")
+            elif device["name"] in windows_hosts:
+                copy_template_file("windows_devices", "base_provisioning/roles/" +
+                                   device["name"] + "/tasks/main.yml")
+            else:
+                copy_template_file("separate_devices", "base_provisioning/roles/" +
+                                   device["name"] + "/tasks/main.yml")
 
 
 def _generate_user_playbooks(input_definitions):
diff --git a/templates/controller b/templates/controller
new file mode 100644
index 0000000000000000000000000000000000000000..272ee14f561b8d9e8da475e3212ac3a6ae4ab95b
--- /dev/null
+++ b/templates/controller
@@ -0,0 +1,36 @@
+---
+- name: Adding aliases
+  loop: "{{ aliases | dict2items }}"
+  lineinfile:
+    path: /etc/hosts
+    line: "{{ item.value }} {{ item.key }}"
+
+- name: Configuring routes
+  include_role:
+    name: interface
+  vars:
+    interface_configuration_type: static
+    interface_identification: "{{ interface.interface_ip }}"
+    interface_static_ip: "{{ interface.interface_ip }}"
+    interface_static_netmask: "{{ interface.interface_netmask }}"
+    interface_default_gateway: "{{ interface.interface_default_gateway | default('') }}"
+    interface_routes: "{{ interface.interface_routes | default([]) }}"
+  loop: "{{ routes }}"
+  loop_control:
+    loop_var: interface
+
+- name: Prepare controller
+  hosts: controller
+  become: yes
+  tasks:
+
+    - name: Install pywinrm
+      pip:
+        name: pywinrm
+        executable: "/usr/bin/pip3"
+
+    - name: Add aliases
+      lineinfile:
+        path: /etc/hosts
+        line: '192.168.20.6 win'
+...
\ No newline at end of file
diff --git a/templates/device_configuration b/templates/device_configuration
index 056e19806fae62a00131a4ae13a3c87ec4a7cae8..515b12bd0bad4c6f12f3d271df801f2e0b9d1b6e 100644
--- a/templates/device_configuration
+++ b/templates/device_configuration
@@ -10,12 +10,6 @@
       file: config.yml
       name: config
 
-- name: Configuring hosts
-  hosts: hosts
-  become: yes
-  roles:
-    - hosts
-
 - name: Configuring routers
   hosts: routers
   become: yes
diff --git a/templates/separate_devices b/templates/separate_devices
index 0c8df57912921e8d52cb7064b4265e2233550ac4..a29c0714196e58577b3c4d73093c0cfd76c05442 100644
--- a/templates/separate_devices
+++ b/templates/separate_devices
@@ -1,4 +1,8 @@
 ---
+- name: Install net-tools
+  apt:
+    name: "net-tools"
+
 - name: Adding aliases
   loop: "{{ aliases | dict2items }}"
   lineinfile:
diff --git a/templates/windows_devices b/templates/windows_devices
new file mode 100644
index 0000000000000000000000000000000000000000..1c57881d8451ce8379310271924e029d22e992c0
--- /dev/null
+++ b/templates/windows_devices
@@ -0,0 +1,10 @@
+---
+- name: Hello world
+  hosts: all
+  tasks:
+
+    - name: print hello world
+      debug:
+        msg: "Hello World"
+
+...
\ No newline at end of file