diff --git a/bob/io/stream/stream.py b/bob/io/stream/stream.py
index 505aefd434bb9057b80976124d8f062c4b00aee2..70cf3df397e8adbbaac2ebbf2cd9800a3047b746 100644
--- a/bob/io/stream/stream.py
+++ b/bob/io/stream/stream.py
@@ -862,7 +862,16 @@ class StreamSave(StreamFilter):
             raise ValueError("Output file is not a valid StreamFile.")
 
     def put(self, data, timestamp=None):
-        self.file.put_frame(self.name, data)
+        """Pass data and timestamp to the :obj:`~bob.io.stream.StreamFile` to write to disk.
+
+        Parameters
+        ----------
+        data : :obj:`numpy.ndarray`
+            data to write to file.
+        timestamp : int or float
+            Timestamp of `data`, by default None.
+        """
+        self.file.put_frame(self.name, data, timestamp)
 
 
 ################################################################################
diff --git a/bob/io/stream/stream_file.py b/bob/io/stream/stream_file.py
index e31ad4978547ef80214ced8b459950dceed041d0..34f8e2971cf3c5c4752a0af0e4d1fe3040b35162 100644
--- a/bob/io/stream/stream_file.py
+++ b/bob/io/stream/stream_file.py
@@ -200,7 +200,7 @@ class StreamFile:
         # TODO rotate if requested
         return data
 
-    def put_frame(self, name, data):
+    def put_frame(self, name, data, timestamp=None):
         """Appends `data` (a frame of a stream) to the hdf5 file.
 
         Parameters
@@ -211,3 +211,9 @@ class StreamFile:
             Data frame to append.
         """
         self.hdf5_file.append(name, data)
+        if timestamp is not None:
+            try:
+                previous_timestamps = self.hdf5_file.get_attribute("timestamps", name)
+            except RuntimeError:  # No previous timestamps
+                previous_timestamps = []
+            self.hdf5_file.set_attribute("timestamps", np.append(previous_timestamps, timestamp), name)