diff --git a/bob/bio/base/test/dummy/extractor.py b/bob/bio/base/test/dummy/extractor.py
index eca7517ca8a46676074f93410d95b98d71757721..dbdf0946a01377dfa9db3ff483391710e20d9990 100644
--- a/bob/bio/base/test/dummy/extractor.py
+++ b/bob/bio/base/test/dummy/extractor.py
@@ -25,3 +25,14 @@ class DummyExtractor (Extractor):
     return data.astype(numpy.float).flatten()
 
 extractor = DummyExtractor()
+
+
+class DummyExtractorMetadata (DummyExtractor):
+
+  def __call__(self, data, metadata=None):
+    """Does nothing, simply converts the data type of the data, ignoring any annotation."""
+    assert metadata is not None
+    assert self.model
+    return data.astype(numpy.float).flatten()
+
+extractor_metadata = DummyExtractorMetadata()
diff --git a/bob/bio/base/test/test_scripts.py b/bob/bio/base/test/test_scripts.py
index 05aa6cad343eb45055c58592d6f3457525fa5e1b..fcf369b7341ab464803ec3013e152ab2238ebd39 100644
--- a/bob/bio/base/test/test_scripts.py
+++ b/bob/bio/base/test/test_scripts.py
@@ -143,6 +143,25 @@ def test_verify_resources():
   _verify(parameters, test_dir, 'test_resource')
 
 
+def test_verify_resources_metadata():
+  test_dir = tempfile.mkdtemp(prefix='bobtest_')
+  # define dummy parameters
+  parameters = [
+      '-d', 'dummy',
+      '-p', 'dummy',
+      '-e', 'dummy_metadata',
+      '-a', 'dummy',
+      '--zt-norm',
+      '--allow-missing-files',
+      '-vs', 'test_resource',
+      '--temp-directory', test_dir,
+      '--result-directory', test_dir,
+      '--preferred-package', 'bob.bio.base'
+  ]
+
+  _verify(parameters, test_dir, 'test_resource')
+
+
 def test_verify_commandline():
   test_dir = tempfile.mkdtemp(prefix='bobtest_')
   # define dummy parameters
diff --git a/bob/bio/base/tools/extractor.py b/bob/bio/base/tools/extractor.py
index 281314677f7a5e8766fcbe8ee92986c91414de64..84705eac55b0cb3f607359ddefbde0c2f40fab4d 100644
--- a/bob/bio/base/tools/extractor.py
+++ b/bob/bio/base/tools/extractor.py
@@ -2,6 +2,7 @@ import bob.io.base
 import os
 
 import logging
+import inspect
 logger = logging.getLogger("bob.bio.base")
 
 from .FileSelector import FileSelector
@@ -90,6 +91,7 @@ def extract(extractor, preprocessor, groups=None, indices = None, allow_missing_
   extractor.load(fs.extractor_file)
   data_files = fs.preprocessed_data_list(groups=groups)
   feature_files = fs.feature_list(groups=groups)
+  metadata = fs.original_data_list(groups=groups)
 
   # select a subset of indices to iterate
   if indices is not None:
@@ -119,7 +121,10 @@ def extract(extractor, preprocessor, groups=None, indices = None, allow_missing_
       # load data
       data = preprocessor.read_data(data_file)
       # extract feature
-      feature = extractor(data)
+      if "metadata" in inspect.getargspec(extractor.__call__).args:
+        feature = extractor(data, metadata=metadata[i])
+      else:
+        feature = extractor(data)
 
       if feature is None:
         if allow_missing_files:
diff --git a/setup.py b/setup.py
index e93fd72f55d01a62b57200f3fb94bdc5b808e3b3..91b66c18d425c6fd5e058cf60e3f795cf3633315 100644
--- a/setup.py
+++ b/setup.py
@@ -99,6 +99,7 @@ setup(
 
       'bob.bio.extractor': [
         'dummy             = bob.bio.base.test.dummy.extractor:extractor', # for test purposes only
+        'dummy_metadata    = bob.bio.base.test.dummy.extractor:extractor_metadata', # for test purposes only
         'linearize         = bob.bio.base.config.extractor.linearize:extractor',
       ],