diff --git a/README.md b/README.md
index 63f4df74a9ab052bea4e7ead885106dc5dbd73db..8c2e4d49b6f909823659ad4eee6c5cd5922cf6f1 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 [![Build](https://git-ce.rwth-aachen.de/wzl-mq-ms/forschung-lehre/lava/unified-device-interface/python/badges/master/pipeline.svg)](https://git-ce.rwth-aachen.de/wzl-mq-ms/forschung-lehre/lava/unified-device-interface/python/commits/master)
 
 # Python Unified Device Interface
-Current stable version: 9.1.1
+Current stable version: 9.1.2
 
 ## Installation
 1. Install the WZL-UDI package via pip
@@ -58,6 +58,10 @@ Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation)
 
 ## Recent changes
 
+**9.1.2** - 2024-01-19
+  - added "all" query parameter for semantics, to request complete semantic data model
+  - fixed bug when requesting enum or time measurements and parameters
+
 **9.1.1** - 2024-01-18
   - bug fix of subjects of license paths in semantic data packages
 
diff --git a/setup.py b/setup.py
index d00865226c9949323326af45645a4a294c4adada..ec90b99d533467a6fd8b60f9f796f0ec9a26335d 100644
--- a/setup.py
+++ b/setup.py
@@ -4,7 +4,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
     long_description = fh.read()
 
 setup(name='wzl-udi',
-      version='9.1.1',
+      version='9.1.2',
       url='https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python',
       project_urls={
           "Bug Tracker": "https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python/-/issues",
diff --git a/src/http/server.py b/src/http/server.py
index 2cac618899f441802c051e4e94f633bdde0bb5bb..c6a3d2e164cc78fc2304a6d56f87f8de64d1a774 100644
--- a/src/http/server.py
+++ b/src/http/server.py
@@ -193,7 +193,8 @@ class HTTPServer(object):
         # serializing the element
         try:
             if semantic:
-                response = item.serialize_semantics(semantic)
+                recursive = request.query is not None and 'all' in request.query
+                response = item.serialize_semantics(semantic, recursive)
             else:
                 response = item.serialize(keys, self._legacy_mode, HTTP_GET)
             status = 200
diff --git a/src/soil/component.py b/src/soil/component.py
index 4767d0f8b50d8a3e62e9f3fa3ccbd9431eee2f88..8d2e26f6f7f5280ed2fe72d9233d6eca847ec88d 100644
--- a/src/soil/component.py
+++ b/src/soil/component.py
@@ -383,7 +383,7 @@ class Component(Element):
         for child in self.children:
             child.load_semantics(profiles_path, metadata_path, f"{parent_name}{self.uuid[4:].capitalize()}")
 
-    def serialize_semantics(self, kind: str) -> rdflib.Graph:
+    def serialize_semantics(self, kind: str, recursive=False) -> rdflib.Graph:
         if self._metadata_profile is None or self._metadata is None:
             raise SerialisationException('No semantic information have been provided during initialization.')
 
@@ -393,6 +393,11 @@ class Component(Element):
             result = self._metadata
         else:
             raise DeviceException('The provided kind of semantic information cannot be returned.')
+
+        if recursive:
+            for child in self._components + self._measurements + self._parameters:
+                result += child.serialize_semantics(kind, recursive)
+
         return result
 
     def resolve_semantic_path(self, suffix: str) -> (Element, str):
diff --git a/src/soil/element.py b/src/soil/element.py
index 35d614d4a61c56e84f23e209d6920d97db950531..d2a45a8958190c6304fb7827ebe364710e1c1348 100644
--- a/src/soil/element.py
+++ b/src/soil/element.py
@@ -113,7 +113,7 @@ class Element(ABC):
         self._metadata.add((rdflib.URIRef(self.semantic_name), Namespaces.schema.license, Semantics.metadata_license))
 
     @abstractmethod
-    def serialize_semantics(self, kind: str) -> rdflib.Graph:
+    def serialize_semantics(self, kind: str, recursive: bool = False) -> rdflib.Graph:
         ...
 
     def resolve_semantic_path(self, suffix: str) -> ('Element', str):
diff --git a/src/soil/figure.py b/src/soil/figure.py
index c76c0432e5224af169949b816b5d39fbb32c77c3..1b28f0788f105e779aca7288941be9b980b9897b 100644
--- a/src/soil/figure.py
+++ b/src/soil/figure.py
@@ -88,9 +88,9 @@ class Figure(Element, ABC):
                     else:
                         value = self.get()
 
-                    if self._datatype == 'time':
+                    if self._datatype == Datatype.TIME:
                         value = serialize_time(value)
-                    elif self._datatype == 'enum':
+                    elif self._datatype == Datatype.ENUM:
                         value = str(value)
 
                 except Exception as e:
diff --git a/src/soil/function.py b/src/soil/function.py
index 53c2a45cce2a81ae1dd33ffe1283a1e2e6ac5678..fd44b02b2f375c22fd32047b4950609befbc15d1 100644
--- a/src/soil/function.py
+++ b/src/soil/function.py
@@ -191,7 +191,7 @@ class Function(Element):
         # This method does nothing intentionally, as we do not have any semantic definition for function
         pass
 
-    def serialize_semantics(self, kind: str) -> rdflib.Graph:
+    def serialize_semantics(self, kind: str, recursive=False) -> rdflib.Graph:
         # This method does nothing intentionally, as we do not have any semantic definition for function
         return None
 
diff --git a/src/soil/measurement.py b/src/soil/measurement.py
index 6624efad9717fd88de106f396f5699ff5bb34cd9..35adbd3aa3fd7667f992d910956f4348c35f9739 100644
--- a/src/soil/measurement.py
+++ b/src/soil/measurement.py
@@ -172,7 +172,7 @@ class Measurement(Figure):
         except Exception as e:
             raise SerialisationException('{}: The measurement can not be deserialized. {}'.format(uuid, e))
 
-    def serialize_semantics(self, kind: str) -> rdflib.Graph:
+    def serialize_semantics(self, kind: str, recursive=False) -> rdflib.Graph:
         if kind == 'profile':
             result = self._metadata_profile
         elif kind == 'metadata':
diff --git a/src/soil/parameter.py b/src/soil/parameter.py
index 62b094b44b02c54a31767bcf6f79f11c3b81db03..466d78882600c5c7370f1749976fc548f0bebc05 100644
--- a/src/soil/parameter.py
+++ b/src/soil/parameter.py
@@ -136,7 +136,7 @@ class Parameter(Figure):
         else:
             raise ReadOnlyException(self._uuid, self._name)
 
-    def serialize_semantics(self, kind: str) -> rdflib.Graph:
+    def serialize_semantics(self, kind: str, recursive=False) -> rdflib.Graph:
         if kind == 'profile':
             result = self._metadata_profile
         elif kind == 'metadata':