diff --git a/bob/bio/base/pipelines/vanilla_biometrics/legacy.py b/bob/bio/base/pipelines/vanilla_biometrics/legacy.py
index 41f6a4d816959fad83b9871f08e6c0481ab01902..fa64f218519688ae19487c843cebb03a73ec11b2 100644
--- a/bob/bio/base/pipelines/vanilla_biometrics/legacy.py
+++ b/bob/bio/base/pipelines/vanilla_biometrics/legacy.py
@@ -182,11 +182,14 @@ class _NonPickableWrapper:
 
 
 class _Preprocessor(_NonPickableWrapper, TransformerMixin, BaseEstimator):
-    def transform(self, X, annotations):
-        return [self.instance(data, annot) for data, annot in zip(X, annotations)]
+    def transform(self, X, annotations=None):
+        if annotations is None:
+            return [self.instance(data) for data in X]
+        else:
+            return [self.instance(data, annot) for data, annot in zip(X, annotations)]
 
     def _more_tags(self):
-        return {"stateless": True}
+        return {"stateless": True, "requires_fit": False}
 
 
 def _get_pickable_method(method):
@@ -199,11 +202,11 @@ def _get_pickable_method(method):
 
 
 class Preprocessor(CheckpointMixin, SampleMixin, _Preprocessor):
-    def __init__(self, callable, **kwargs):
+    def __init__(self, callable, transform_extra_arguments=(("annotations", "annotations"),), **kwargs):
         instance = callable()
         super().__init__(
             callable=callable,
-            transform_extra_arguments=(("annotations", "annotations"),),
+            transform_extra_arguments=transform_extra_arguments,
             load_func=_get_pickable_method(instance.read_data),
             save_func=_get_pickable_method(instance.write_data),
             **kwargs,