diff --git a/functions/classes.py b/functions/classes.py
index c86206f196a3f028bfb1b10fdaa9de0a01004940..00df6998df423f85de2d4a821f169381afcddbf9 100644
--- a/functions/classes.py
+++ b/functions/classes.py
@@ -50,9 +50,9 @@ class LegoComponent:
 
 
 
-    def clone(self, new_label: str = None) -> LegoComponent:
+    def clone(self, new_label: Optional[str] = None) -> LegoComponent:
         if new_label is None:
-            new_label = self.properties.label
+            new_label = self.properties['label']
         clone = LegoComponent(None, None, self.properties)
         clone.properties['label'] = new_label
         return clone
@@ -68,7 +68,6 @@ class LegoComponent:
     def to_dict(self) -> Dict:
         dict_ = {
             "uuid": self.uuid,
-            "label": self.label,
             "properties": self.properties,
             "layer": self.layer,
         }
@@ -93,10 +92,16 @@ class LegoAssembly:
         self.uuid: uuid.UUID = uuid.uuid4()
         self.parent: None | LegoAssembly = None
         self.properties: dict = {}
+        self.layer: AggregationLayer = layer
         if label is not None:
             self.properties['label'] = label
-        self.layer: AggregationLayer = layer
-        self.properties.update(properties)
+        for prop in properties:
+            if isinstance(prop, dict):
+                self.properties.update(prop)
+            else:
+                raise ValueError(f"Unexpected argument type: {type(properties)}")
+        for key, value in kwargs.items():
+            self.properties[key] = value
         self.components: List[LegoComponent] = []
         self.assemblies: List[LegoAssembly] = []
 
@@ -249,6 +254,3 @@ class KPIEncoder(json.JSONEncoder):
             return "kpi-" + str(o)
         if isinstance(o, (AggregationLayer)):
             return "kpi-" + o.properties.label
-        return super().default(o)
-
-pass
\ No newline at end of file