diff --git a/README.md b/README.md
index a68702266abe93f363a8b328ebc98b2bdab51d98..fee64ae59b441aca5ee6458183cbe03d17cf2f01 100644
--- a/README.md
+++ b/README.md
@@ -36,4 +36,17 @@ Remove the docker container and the docker image:
 ```
 docker container rm -f icg
 docker rmi icg:0.1
-```
\ No newline at end of file
+```
+
+Usage from command line
+------------
+Usage: python main.py [-h] [-d dir] model
+- -h  prints usage
+- -d dir loads metamodel from \<dir>
+- --single or --single_mmodel   use the single (non-split) metamodel
+- model  the model to be loaded
+` py .\main.py -d <doml_folder> --single <metamodel_file_path>`
+
+Example:
+
+` py .\main.py -d icgparser/doml --single icgparser/doml/nginx-openstack_v2.domlx`
\ No newline at end of file
diff --git a/api/InfrastructureTemplateController.py b/api/InfrastructureTemplateController.py
index 6fcdfeba3d130006612ebeeeb5cb09e54e1db64e..efac34ef411ee1ecfaa4da44dae5a7cd279d468b 100644
--- a/api/InfrastructureTemplateController.py
+++ b/api/InfrastructureTemplateController.py
@@ -5,7 +5,6 @@ import uuid
 
 from fastapi import APIRouter, Body
 from fastapi.responses import FileResponse
-
 from controller.PluginOrchestrator import create_infrastructure_files
 from icgparser import ModelParser
 
@@ -30,7 +29,7 @@ def create_iac_from_doml(data: str = Body(..., media_type="application/xml")):
     f = open(temp_model_file_path, "w")
     f.write(data)
     f.close()
-    ModelParser.parse_model(temp_model_file_path)
+    ModelParser.parse_model(temp_model_file_path, False)
     with open("input_file_generated/ir.json") as json_file:
         data = json.load(json_file)
         template_generated_folder = create_infrastructure_files(data)
diff --git a/icgparser/ModelParser.py b/icgparser/ModelParser.py
index 668f6d046e6f71e308202b7941ad24ebdc876475..91c8eafe443db4618df9b51060520b12887a111b 100644
--- a/icgparser/ModelParser.py
+++ b/icgparser/ModelParser.py
@@ -98,7 +98,8 @@ def model_handler(obj, model_root, level, intermediate_repr):
 
 def concrete_infra_handler(obj, model_root, level, intermediate_repr):
     # output prefix
-    append_in_file(intermediate_repr, f'{level * spaces}{{{newline}{level * spaces}{spaces}"programming_language": "terraform",')
+    append_in_file(intermediate_repr,
+                   f'{level * spaces}{{{newline}{level * spaces}{spaces}"programming_language": "terraform",')
     # handle contents
     for x in obj.eContents:
         handle_obj(x, model_root, level + 1, intermediate_repr)
@@ -118,7 +119,8 @@ def property_handler(obj, model_root, level, intermediate_repr):
 
 def provider_handler(obj, model_root, level, intermediate_repr):
     # output prefix
-    append_in_file(intermediate_repr, f'{level * spaces}"data": {{{newline}{level * spaces}{spaces}"provider": "{obj.name}",')
+    append_in_file(intermediate_repr,
+                   f'{level * spaces}"data": {{{newline}{level * spaces}{spaces}"provider": "{obj.name}",')
     # handle contents
     for x in obj.eContents:
         handle_obj(x, model_root, level + 1, intermediate_repr)
@@ -139,7 +141,8 @@ def concrete_vm_handler(obj, model_root, level, intermediate_repr):
     append_in_file(intermediate_repr, f'{level * spaces}"image" :     "{extract_image_name(obj)}",')
     for iface in obj.maps.ifaces:
         append_in_file(intermediate_repr, f'{level * spaces}"address" :     "{iface.endPoint}",')
-        append_in_file(intermediate_repr, f'{level * spaces}"network_name" :     "{extract_concrete_network_name(iface.belongsTo)}"')
+        append_in_file(intermediate_repr,
+                       f'{level * spaces}"network_name" :     "{extract_concrete_network_name(iface.belongsTo)}"')
     # output suffix
     level = level - 1
     append_in_file(intermediate_repr, f'{level * spaces}}}]')
@@ -169,17 +172,10 @@ def handle_obj(obj, model_root, level, intermediate_repr):
         logging.warning(f'Class {obj.eClass.name} has no handler')
 
 
-# -------------------------------------------------------------------------
-# Parse parameters
-# -------------------------------------------------------------------------
-skip_next = False
-doml_directory = "icgparser/doml"
-
-
 # -------------------------------------------------------------------------
 # Load each part of the DOML metamodel and register them
 # -------------------------------------------------------------------------
-def load_metamodel(load_split_model):
+def load_metamodel(load_split_model, doml_directory="icgparser/doml"):
     global_registry[Ecore.nsURI] = Ecore  # Load the Ecore metamodel first
     rset = ResourceSet()
     if load_split_model:
@@ -201,8 +197,7 @@ def load_metamodel(load_split_model):
 # Finally load the model and print it out
 # -------------------------------------------------------------------------
 
-def parse_model(model):
-    load_split_model = None
+def parse_model(model, load_split_model, doml_directory="icgparser/doml"):
     rset = load_metamodel(load_split_model)
     doml_model_resource = rset.get_resource(URI(model))
     doml_model = doml_model_resource.contents[0]
@@ -219,11 +214,13 @@ def parse_model(model):
     create_file("input_file_generated/ir.json")
     handle_obj(doml_model, doml_model, 0, intermediate_repr_file_path)
 
+
 def create_file(file_name):
     f = open(file_name, "w")
     f.write("")
     f.close()
 
+
 def append_in_file(file_name, data):
     f = open(file_name, "a")
     f.write(data)
diff --git a/main.py b/main.py
index 2b9b6301438563ffdad254912f0f2dc157e16f7d..b06359a31092bdd8caa189614378a7bcc2b06ad6 100644
--- a/main.py
+++ b/main.py
@@ -1,6 +1,12 @@
+import json
 import logging
+import sys
+
 from fastapi import FastAPI
+
 import api.InfrastructureTemplateController
+from api.InfrastructureTemplateController import compress_file
+from controller.PluginOrchestrator import create_infrastructure_files
 from icgparser import ModelParser
 
 fast_api = FastAPI()
@@ -8,6 +14,50 @@ fast_api = FastAPI()
 fast_api.include_router(api.InfrastructureTemplateController.api_router)
 logging.getLogger().setLevel(logging.INFO)
 
+#-------------------------------------------------------------------------
+# Parse parameters
+#-------------------------------------------------------------------------
+skip_next = False
+doml_directory = "./doml"
+model_filename = "./nginx-openstack_v2_multiecores.domlx"
+load_split_model = True
+output_file_name = "iac_files.tar.gz"
+
+# get metamodel directory from command line
+def param_dir(pos, list):
+    global doml_directory
+    global skip_next
+    doml_directory = list[pos+1]
+    print(f"    doml_directory = {doml_directory} model_filename = {model_filename}")
+    skip_next = True
+
+def param_help(pos, list):
+    print(f"\nUsage: {sys.argv[0]} [-h] [-d <doml_directory>] [--single] <model_filename>\n")
+    sys.exit()
+
+# indicate to load the single-file metamodel (doml.ecore) instead of the split one
+def param_single(pos, list):
+    global load_split_model
+    print(f"--> param_single({pos},{list}")
+    load_split_model = False
+
+options = {'-d': param_dir, '-h': param_help, '--single_mmodel': param_single, '--single': param_single, '--output': output_file_name}
+argc = len(sys.argv)
+paramlist = sys.argv[1:]
+for i, param in enumerate(paramlist):
+    print(f"i={i} param={param} skip_next={skip_next}")
+    if param in options:
+        options[param](i, paramlist)
+        continue
+    if skip_next:
+        skip_next = False
+        continue
+    else:
+        model_filename = param
+
 if __name__ == '__main__':
-    logging.info("Starting ICG application")
-    ModelParser.parse_model("icgparser/doml/nginx-openstack_v2.domlx")
+    ModelParser.parse_model(model_filename, load_split_model, doml_directory)
+    with open("input_file_generated/ir.json") as json_file:
+        data = json.load(json_file)
+        template_generated_folder = create_infrastructure_files(data)
+        compress_file_folder = compress_file(template_generated_folder, output_file_name)