diff --git a/newmodeljsonparse.py b/newmodeljsonparse.py
index d0b5accaa191b62ddcdf2ef7fb49caa42764bc71..3f79f25c28560afc194f91ac836db89dbe3a5f0c 100644
--- a/newmodeljsonparse.py
+++ b/newmodeljsonparse.py
@@ -76,12 +76,13 @@ class Function:
 
 def dimensionchange(string):
     dimarr = string["dimension"]
-    if dimarr:
-        value = dimarr[0]
-    else:
-        value = 0
-    newdimension = {"dimension": value}
-    string.update(newdimension)
+    if type(dimarr) == list:
+        if dimarr:
+            value = dimarr[0]
+        else:
+            value = 0
+        newdimension = {"dimension": value}
+        string.update(newdimension)
 
 
 def getdatatypes(argarray):
@@ -97,14 +98,14 @@ def getdatatypes(argarray):
 
 def changerange(string):
     #print(type(string["range"][0]))
-    if string["range"] != "[None, None]":
+    if iskeythere(string, "range"):
         rangeval = string["range"]
         rangetuple = (rangeval[0], rangeval[1])
     #print(rangetuple)
         string.update({"range": rangetuple})
         #print(string["range"])
     else:
-        del string["range"]
+        string.update({"range": (None, None)})
    # print(string)
 
 def getParameters(parametersDict):
@@ -134,6 +135,8 @@ def getMeasurements(measurementsDict):
             obj["value"] = getdefaultvalue(obj["dimension"], obj["datatype"])
             #if i["range"]:
             changerange(obj)
+            if not iskeythere(obj, "unit"):
+                obj["unit"] = "UNITLESS"
             obj = json.dumps(i)
             measurementobji = json.loads(obj, object_hook=measurementJsonDecod)
             measurementobj.append(measurementobji)
@@ -197,7 +200,7 @@ def getInterfaceparam(list1, interface, searched, jsoncomponents, searchinglist)
     else:
         return list1
 
-def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters):
+def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone):
     for obj in jsoninterfaces:
         rootobj = {}
         if obj["elementType"] == "interface":
@@ -206,6 +209,8 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur
                     rootobj = search
         else:
             rootobj = obj
+        if obj["name"] in list(interfacesreturn.keys()):
+            continue
         objcomponentslist = getInterfaceparam([], rootobj, "components", jsoncomponents, jsoncomponents)
         if obj["name"] not in interfacesreturn.keys():
             interfacesreturn[str(obj["name"])] = wf.openobject(obj["name"], rootobj["description"])
@@ -222,6 +227,7 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur
             #             wf.writebasecomponent(componenttypesdict[str(obj["name"])], componenttypesdict[str(search["name"])], search["name"])
             #wf.writecomponents(interfacestypesdict[str(obj["name"])], objcomponentslist, interfacestypesdict)
             objmeasurementlist = getInterfaceparam([], rootobj, "measurements", jsoncomponents, jsonmeasurements)
+            print(objmeasurementlist)
             measurementsobjs = getMeasurements(objmeasurementlist)
             #print(objmeasurementlist)
             # print(interfacesreturn)
@@ -231,41 +237,73 @@ def buildComponents(interfacesreturn, jsoninterfaces, jsoncomponents, jsonmeasur
             parameterobjs = getParameters(objparameterlist)
             # print(objparameterlist)
             wf.writeparameter(parameterobjs, interfacesreturn[str(obj["name"])])
-            if len(objcomponentslist) <= 0:
-                return interfacesreturn
-            else:
-                for component in objcomponentslist:
-                    return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters)
-        else:
-            if len(objcomponentslist) > 0:
-                return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters)
-            else:
-
-
-
+            buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone)
+    return interfacesreturn
+    #     if len(objcomponentslist) > 0:
+    #         print("I got called")
+    #         objcomponentsclone = objcomponentslist
+    #     if len(objcomponentslist) == 0:
+    #         if len(objcomponentsclone) > 0:
+    #             print(" I got called")
+    #             print(objcomponentslist)
+    #             return buildComponents(interfacesreturn, objcomponentsclone, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone)
+    #     else:
+    #             return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone)
+    #
+    # else:
+    #     if len(objcomponentslist) > 0:
+    #         return buildComponents(interfacesreturn, objcomponentslist, jsoncomponents, jsonmeasurements, jsonparameters, objcomponentsclone)
+    #     else:
+    #         return interfacesreturn
+
+
+
+
+def instantiateComponents(typesdict, interfaces, jsoncomponents, headnode, instantiatedict):
+        count = 0
+        countcomponent = 0
+        for interface in interfaces:
+            # root = {}
+            # if interface["elementType"] == "interface":
+            #     for component in jsoncomponents:
+            #         if interface["rootComponent"] == component["uuid"]:
+            #             root = component
+            # else:
+            root = interface
+
+            components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents)
+            if interface["name"] in list(instantiatedict.keys()):
+                count += 1
+            # dictname = str(interface["name"]) + str(count)
+            # if interface["elementType"] == "interface":
+            #     instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count)
+            # else:
+            instantiatedict[str(interface["name"])] = wf.writeobjects(typesdict[str(interface["name"])], interface["name"], instantiatedict[str(headnode["name"])], count)
+            # for component in components:
+            #     if component["name"] in list(instantiatedict.keys()):
+            #         countcomponent += 1
+                #dictnamecomponent = str(component["name"]) + str(count)
+                # instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent)
+            if len(components) > 0:
+                instantiateComponents(typesdict,components , jsoncomponents, interface, instantiatedict)
+
+        return instantiatedict
 
 def instantiate(typesdict, interfaces, jsoncomponents):
-    count = 0
-    countcomponent = 0
     instantiatedict = {}
+    #print(interfaces)
     for interface in interfaces:
         root = {}
+        count = 0
         for component in jsoncomponents:
             if interface["rootComponent"] == component["uuid"]:
                 root = component
-
         components = getInterfaceparam([], root, "components", jsoncomponents, jsoncomponents)
-        if interface["name"] in list(instantiatedict.keys()):
-            count += 1
-        dictname = str(interface["name"]) + str(count)
-        instantiatedict[str(dictname)] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count)
-        for component in components:
-            if component["name"] in list(instantiatedict.keys()):
-                countcomponent += 1
-            dictnamecomponent = str(component["name"]) + str(count)
-            instantiatedict[dictnamecomponent] = wf.writeobjects(typesdict[str(component["name"])], component["name"], instantiatedict[dictname], countcomponent)
-
-    return instantiatedict
+        #dictname = str(interface["name"]) + str(count)
+        instantiatedict[str(interface["name"])] = wf.writeinterface(typesdict[str(interface["name"])], interface["name"], count)
+        instantiateComponents(typesdict, components, jsoncomponents, interface, instantiatedict)
+
+
 
 def main():
     try:
@@ -331,7 +369,7 @@ def main():
         #     parameterobjs = getParameters(objparameterlist)
         #     wf.writemeasurement(parameterobjs, interfacestypesdict[str(obj["name"])])
 
-        typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters)
+        typesdict = buildComponents({}, jsoninterfaces, jsoncomponents, jsonmeasurements, jsonparameters, [])
         print(typesdict)
         intantiateddict = instantiate(typesdict, jsoninterfaces, jsoncomponents)