diff --git a/README.md b/README.md
index b822b9532f7bef3b17de71f5bc5294ee82829357..46c07fcdf4119e967cc87ccd8ecc2fea2b37160b 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.3.5
+Current stable version: 9.3.6
 
 ## Installation
 1. Install the WZL-UDI package via pip
@@ -58,6 +58,9 @@ Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation)
 
 ## Recent changes
 
+**9.3.6** - 2024-03-18
+  - fixed serialization of semantic values
+
 **9.3.5** - 2024-03-18
   - fixed metadata provisioning of arguments and returns
 
diff --git a/setup.py b/setup.py
index 5023de3e0115e6cb18e118a81982881a5c2ec965..d477a6803b2d5cb5f3dbcd2929ebe3173eb983ed 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.3.5',
+      version='9.3.6',
       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/soil/datatype.py b/src/soil/datatype.py
index d9d50785061299d60e6058e9030ccd244d495b3f..fdbede65c9e393dec77efa6c97c822162f117460 100644
--- a/src/soil/datatype.py
+++ b/src/soil/datatype.py
@@ -1,6 +1,9 @@
 import enum
 
+import rdflib
+
 from .error import TypeException
+from .semantics import Namespaces
 
 
 class Datatype(enum.Enum):
@@ -31,3 +34,6 @@ class Datatype(enum.Enum):
         if legacy_mode:
             return ["bool", "int", "double", "string", "time", "enum"][self.value]
         return ["boolean", "int", "float", "string", "time", "enum"][self.value]
+
+    def to_semantic(self):
+        return [rdflib.XSD.boolean, rdflib.XSD.int, rdflib.XSD.float, rdflib.XSD.string, rdflib.XSD.dateTime, rdflib.XSD.string][self.value]
\ No newline at end of file
diff --git a/src/soil/measurement.py b/src/soil/measurement.py
index a2546e7d32de9c71244935a1eb30524a45d61d47..741c16681b9ffba7142dd4e60c88521161019a1a 100644
--- a/src/soil/measurement.py
+++ b/src/soil/measurement.py
@@ -221,7 +221,7 @@ class Measurement(Variable):
             data_graph.add((measurement_subject, Namespaces.qudt.unit, unit_triples[0][2]))
             data_graph.add((measurement_subject, Namespaces.schema.license, Semantics.data_license))
 
-            rdf_value = Variable.serialize_value(data_graph, self.__getitem__('value', 0))
+            rdf_value = self.serialize_value(data_graph, self.__getitem__('value', 0))
 
             data_graph.add((measurement_subject, Namespaces.qudt.value, rdf_value))
             data_graph.add((measurement_subject, Namespaces.schema.dateCreated,
diff --git a/src/soil/parameter.py b/src/soil/parameter.py
index 55949a38cb8ceccaf3c98cc9138e27664f8e5233..70cf90d96a9ee4defe5c83b57db89493ecf685de 100644
--- a/src/soil/parameter.py
+++ b/src/soil/parameter.py
@@ -159,7 +159,7 @@ class Parameter(Variable):
                 result.remove(triples[0])
 
             try:
-                rdf_value = Variable.serialize_value(result, self.__getitem__('value', 0))
+                rdf_value = self.serialize_value(result, self.__getitem__('value', 0))
                 result.add((Semantics.namespace[self._semantic_name], Namespaces.qudt['value'], rdf_value))
             except DeviceException as e:
                 if isinstance(e._predecessor, NotImplementedException):
diff --git a/src/soil/stream.py b/src/soil/stream.py
index 9c9b35c905b62be6426f3174b12eb5c060efe294..ba6b4551159705bb0f43fd00c8629bb804932c7d 100644
--- a/src/soil/stream.py
+++ b/src/soil/stream.py
@@ -129,7 +129,7 @@ class Job(ABC):
 
             # replace value
             data.remove((None, Namespaces.qudt.value, None))
-            data.add((measurement_subject, Namespaces.qudt.value, Variable.serialize_value(data, self.value)))
+            data.add((measurement_subject, Namespaces.qudt.value, self.serialize_value(data, self.value)))
 
             # replace timestamp
             data.remove((None, Namespaces.schema.dateCreated, None))
diff --git a/src/soil/variable.py b/src/soil/variable.py
index c0e59349db581982820e0f12915d1407c5baab6f..1838d66eba612380667d84edbd2a8d27430c3358 100644
--- a/src/soil/variable.py
+++ b/src/soil/variable.py
@@ -289,8 +289,7 @@ class Variable(Element, ABC):
                 except RangeException as e:
                     raise e
 
-    @staticmethod
-    def serialize_value(data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier:
+    def serialize_value(self, data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier:
         if isinstance(value, list):
             blank_node = rdflib.BNode()
             data_graph.add((blank_node, Namespaces.rdf.rest, Namespaces.rdf.nil))
@@ -303,7 +302,7 @@ class Variable(Element, ABC):
                 blank_node = new_blank_node
             return blank_node
         else:
-            return rdflib.Literal(value)
+            return rdflib.Literal(value, datatype=self.datatype.to_semantic())
 
     @staticmethod
     def is_scalar(value):