diff --git a/README.md b/README.md
index dfe08b16bbd4993c40756d6c08e0704195ee7f2d..4fd613affd8134ecce06932c252fe75deb2efc0b 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.2
+Current stable version: 9.3.3
 
 ## 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.3** - 2024-03-15
+  - fixed streaming functions
+
 **9.3.2** - 2024-03-14
   - fixed semantic name resolution (again)
 
diff --git a/setup.py b/setup.py
index 1169d5df9e927885f9ea5d88e9b90f595984a783..e85302ea5f6430b9c632edc48908fa79ca676145 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.2',
+      version='9.3.3',
       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 cfe5c2bde54dca94acbdc90f483ef2c8b5b21b19..c8a653e770397fc3f19c65ec3af082cc086f41ab 100644
--- a/src/http/server.py
+++ b/src/http/server.py
@@ -273,9 +273,10 @@ class HTTPServer(object):
                     try:
                         async for item in item.invoke_generator(data["arguments"], legacy_mode=self._legacy_mode):
                             self._publisher.publish('/'.join(uuids), json.dumps(item))
-                        response = {}
-                    except StopAsyncIteration:
-                        pass
+                    except RuntimeError as e:
+                        if not isinstance(e.__cause__, StopAsyncIteration):
+                            raise e
+                    response = {}
                 else:
                     response = await item.invoke(data["arguments"], legacy_mode=self._legacy_mode)
                 status = 200
diff --git a/src/soil/function.py b/src/soil/function.py
index fb4b4ec1ebf02c42354d78484f00109eba045f22..da5fde67c74197f271783e61e3de2ce08d5df44c 100644
--- a/src/soil/function.py
+++ b/src/soil/function.py
@@ -117,7 +117,6 @@ class Function(Element):
         return returns
 
     async def invoke_generator(self, arguments: List[Variable], legacy_mode: bool = False) -> Dict[str, List[Dict[str, Any]]]:
-        returns = {"returns": []}
         args = {}
         if self._implementation is None:
             raise NotImplementedException(self._uuid, self._name)
@@ -146,7 +145,7 @@ class Function(Element):
                     except StopIteration as e:
                         raise e
         except StopIteration or StopAsyncIteration as e:
-            raise e
+            raise StopAsyncIteration()
         except Exception as e:
             raise DeviceException(str(e), predecessor=e)
 
diff --git a/src/soil/stream.py b/src/soil/stream.py
index 1aba0ee20d36ba6c4539332061a552fed4f78484..9c9b35c905b62be6426f3174b12eb5c060efe294 100644
--- a/src/soil/stream.py
+++ b/src/soil/stream.py
@@ -9,10 +9,12 @@ from wzl.mqtt.exceptions import ClientNotFoundError
 
 from .component import Component
 from .event import Event
+from . import variable
 from .variable import Variable
 from .semantics import Namespaces
 from ..utils import root_logger
 from ..utils import serialize
+from ..utils.resources import ResourceType
 
 logger = root_logger.get(__name__)
 
@@ -105,7 +107,7 @@ class Job(ABC):
         try:
             uuids = self.topic.split('/')
             element = model.__getitem__(uuids)
-            return element.semantic_name, element.serialize_semantics('data')
+            return element.semantic_name, element.serialize_semantics(ResourceType.data)
         except Exception:
             return "", rdflib.Graph()
 
@@ -114,7 +116,7 @@ class Job(ABC):
             data = self._retrieve_metadata(model)
             data['uuid'] = self.topic
             data['value'] = self.value
-            data['timestamp'] = figure.serialize_time(datetime.datetime.now())
+            data['timestamp'] = variable.serialize_time(datetime.datetime.now())
             return data
         except Exception as e:
             raise JobError()