diff --git a/modules/ansible_generator.py b/modules/ansible_generator.py
index fd53bde2aae182ae6090055db1a841ab6ff17840..daa9a18b0a53f8a1de5a528a122b4038e0867b97 100644
--- a/modules/ansible_generator.py
+++ b/modules/ansible_generator.py
@@ -1,4 +1,4 @@
-from modules.file_manager import load_template, generate_file
+from modules.file_manager import generate_file
 
 def _create_inventory(input_definitions):
     """ Creates an inventory file with host groups. """
@@ -11,9 +11,7 @@ def _create_inventory(input_definitions):
     for router in input_definitions["routers"]:
         router_names.append(router["name"])
 
-    inventory_template = load_template("inventory")
-    output = inventory_template.render(hosts=host_names, routers=router_names)
-    generate_file("provisioning/inventory.ini", output)
+    generate_file("inventory", "provisioning/inventory.ini", hosts=host_names, routers=router_names)
 
 
 def _create_config(input_definitions, flags):
@@ -31,9 +29,7 @@ def _create_config(input_definitions, flags):
         new_router["name"] = router["name"]
         routers.append(new_router)
     
-    config_template = load_template("config")
-    output = config_template.render(hosts=hosts, routers=routers)
-    generate_file("base_provisioning/config.yml", output)
+    generate_file("config", "base_provisioning/config.yml", hosts=hosts, routers=routers)
     
 def _create_config_playbooks(input_definitions, flags):
     """ Generates playbooks and roles for basic device configuration. """
@@ -44,24 +40,15 @@ def _create_config_playbooks(input_definitions, flags):
 def _create_user_playbooks(input_definitions):
     """ Generates template playbooks and roles for users. """
 
-    playbook_template = load_template("playbook")
-    generate_file("provisioning/playbook.yml", playbook_template.render())
+    generate_file("playbook", "provisioning/playbook.yml")
+    generate_file("user_hosts", "provisioning/roles/hosts/tasks/main.yml")
+    generate_file("user_routers", "provisioning/roles/routers/tasks/main.yml")
 
-    user_hosts_template = load_template("user_hosts")
-    generate_file("provisioning/roles/hosts/tasks/main.yml", user_hosts_template.render())
-
-    user_routers_template = load_template("user_routers")
-    generate_file("provisioning/roles/routers/tasks/main.yml", user_routers_template.render())
-
-    user_host_template = load_template("user_separate_hosts")
     for host in input_definitions["hosts"]:
-        output = user_host_template.render(host_name=host["name"])
-        generate_file("provisioning/roles/" + host["name"] + "/tasks/main.yml", output)
+        generate_file("user_separate_hosts", "provisioning/roles/" + host["name"] + "/tasks/main.yml", host_name=host["name"])
 
-    user_router_template = load_template("user_separate_routers")
     for router in input_definitions["routers"]:
-        output = user_router_template.render(router_name=router["name"])
-        generate_file("provisioning/roles/" + router["name"] + "/tasks/main.yml", output)
+        generate_file("user_separate_routers", "provisioning/roles/" + router["name"] + "/tasks/main.yml", router_name=router["name"])
 
 
 
diff --git a/modules/file_manager.py b/modules/file_manager.py
index 974e78e8a597c08806511aefb3228980b39372ab..d31cf25f9178d8c33b0eff5d0cdf88a14aab76d2 100644
--- a/modules/file_manager.py
+++ b/modules/file_manager.py
@@ -20,14 +20,22 @@ def open_yaml(file_name):
         input_file.close()
 
 
-def generate_file(filename, output_string):
-    """
-    Generates a file from output string.
+def generate_file(template, filename, **template_args):
+    """ Generates a file using a template.
     
-    :param filename: name of the file to create
-    :param output_string: string to write to the file
+    :param template: name of the template file
+    :param filename: path to the output file inside the output directory
+    :param template_args: arbitrary number of named args for the template
     """
 
+    inventory_template = _load_template(template)
+    output = inventory_template.render(**template_args)
+    _write_to_file(filename, output)
+
+
+def _write_to_file(filename, output_string):
+    """ Generates a file from output string. """
+
     try:
         new_file = open(OUTPUT_DIRECTORY + "/" + filename, "w")
         new_file.write(output_string)
@@ -36,12 +44,8 @@ def generate_file(filename, output_string):
         raise
 
 
-def load_template(template_name):
-    """
-    Returns a loaded jinja2 template.
-    
-    :param template_name: name of the template file
-    """
+def _load_template(template_name):
+    """ Returns a loaded jinja2 template. """
 
     template_loader = jinja2.FileSystemLoader(searchpath="templates")
     template_env = jinja2.Environment(loader=template_loader, trim_blocks=True, lstrip_blocks=True)
diff --git a/modules/vagrant_generator.py b/modules/vagrant_generator.py
index bd8331eba2a2ad919ecd4a559a90422de31ec372..58abc605d79f3f6703e42d83c8c57e4d9a51c8a5 100644
--- a/modules/vagrant_generator.py
+++ b/modules/vagrant_generator.py
@@ -2,7 +2,7 @@
 
 import jinja2
 
-from modules.file_manager import load_template, generate_file, open_yaml
+from modules.file_manager import generate_file, open_yaml
 
 VAGRANT_MAPPING = open_yaml("conf/vagrant_mapping.yml")
 VIRTUALBOX_MAPPING = open_yaml("conf/virtualbox_mapping.yml")
@@ -169,17 +169,6 @@ def _build_vagrant_definitions(input_definitions, flags):
     return vagrant_definitions
 
 
-def _build_vagrantfile(vagrant_definitions):
-    """
-    Generates the Vagrantfile using the vagrantfile template and vagrant
-    definitions.
-    """
-
-    template = load_template("vagrantfile")
-    output = template.render(defs=vagrant_definitions)
-    generate_file("Vagrantfile", output)
-
-
 def generate_vagrantfile(input_definitions, flags):
     """
     This method is responsible for Vagrantfile generation.
@@ -195,7 +184,7 @@ def generate_vagrantfile(input_definitions, flags):
        raise
 
     try:
-       _build_vagrantfile(vagrant_definitions)
+       generate_file("vagrantfile", "Vagrantfile", defs=vagrant_definitions)
     except Exception:
        print("Could not generate Vagrantfile.")
        raise