diff --git a/src/main.py b/src/main.py
index f3ef87cc7114dd1a1ba72ecc7a7a02ba90b0578e..2f9278cc98b77d494f98f91d57990e46e1e05a87 100644
--- a/src/main.py
+++ b/src/main.py
@@ -88,6 +88,7 @@ async def validate(model: str, files: list[UploadFile], semantic: bool = False):
         if files[0].filename.endswith('json'):
             json_files = {file.filename[:-5]: json.loads((await file.read()).decode('utf-8')) for file in files}
             translated_files = translate.translate_files_to_text(json_files)
+            # TODO: Mapping
             for filename in translated_files:
                 with open(os.path.join(in_path, f'{filename}.soil'), 'wb') as outfile:
                     outfile.write(translated_files[filename].encode('utf-8'))
diff --git a/src/translate.py b/src/translate.py
index 4c3d39b345a17e25522287ead90071aaf670f839..748b0f6484ed56832b17c9d459948faed55fb740 100644
--- a/src/translate.py
+++ b/src/translate.py
@@ -80,7 +80,14 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any
     custom_descriptions = {}
     temp_output = element["elementType"] + " " + element["name"].replace(" ", "") + " "
     if element['elementType'] == 'component' and 'baseComponent' in element:
-        temp_output += "extends " + get_element_type_name(element["baseComponent"], filename, files) + " "
+        temp_output += "extends " + element['baseComponent']['name'] + " "
+
+    if (element["elementType"] == "component" or
+            element["elementType"] == "function" or
+            element["elementType"] == "variable"):
+        if element['semanticDefinition'] is not None:
+            temp_output += f"defines <{element['semanticDefinition']}> "
+
     temp_output += "{\n"
 
     if element["elementType"] == "interface":
@@ -94,7 +101,7 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any
         return temp_output + "}\n\n"
 
     for key in element:
-        if key in ["uuid", "cardOpen", "elementType", "constant"]:
+        if key in ["baseComponent", "uuid", "cardOpen", "elementType", "constant", "semanticDefinition"]:
             continue
         elif key in ["arguments", "returns", "components", "parameters", "functions", "measurements"]:
             if len(element[key]):
@@ -109,6 +116,13 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any
         elif key == "streams":
             if len(element[key]) > 0:
                 temp_output += "   streams:\n" + streams_to_text(element[key])
+        elif key == "unit":
+            # Probably too hacky to just check if the unit string contains ':'
+            # to determine if it is a semantic unit or not
+            if ':' in element['unit']:
+                temp_output += f"   unit: <{element['unit']}>\n"
+            else:
+                temp_output += f"   unit: {element['unit']}\n"
         elif key == "range":
             if element["datatype"] != "enum":
                 minimum = '' if element["range"][0] is None else str(element["range"][0])