diff --git a/bob/bio/base/tools/FileSelector.py b/bob/bio/base/tools/FileSelector.py
index 2a3e56df2983f7390a8faa7dc1ad28d835b04b96..63313a7d493d404afe0194c977b694496faece1b 100644
--- a/bob/bio/base/tools/FileSelector.py
+++ b/bob/bio/base/tools/FileSelector.py
@@ -110,6 +110,10 @@ class FileSelector:
     """Returns the list of original data that can be used for preprocessing."""
     return self.database.original_file_names(self.database.all_files(groups=groups))
 
+  def original_data_list_files(self, groups = None):
+    """Returns the list of original data that can be used for preprocessing."""
+    return (self.database.all_files(groups=groups), self.database.database.original_directory, self.database.database.original_extension)
+
   def annotation_list(self, groups = None):
     """Returns the list of annotations objects."""
     return self.database.all_files(groups=groups)
diff --git a/bob/bio/base/tools/preprocessor.py b/bob/bio/base/tools/preprocessor.py
index 01dea478a7976255216d159ba4d1653d9c1e05b5..86ec390c0f10f2adc4935841a31777341a6a019b 100644
--- a/bob/bio/base/tools/preprocessor.py
+++ b/bob/bio/base/tools/preprocessor.py
@@ -42,7 +42,7 @@ def preprocess(preprocessor, groups = None, indices = None, allow_missing_files
   fs = FileSelector.instance()
 
   # get the file lists
-  data_files = fs.original_data_list(groups=groups)
+  data_files, original_directory, original_extension = fs.original_data_list_files(groups=groups)
   preprocessed_data_files = fs.preprocessed_data_list(groups=groups)
 
   # select a subset of keys to iterate
@@ -60,12 +60,16 @@ def preprocess(preprocessor, groups = None, indices = None, allow_missing_files
   # iterate over the selected files
   for i in index_range:
     preprocessed_data_file = preprocessed_data_files[i]
-    file_name = data_files[i]
+    file_object = data_files[i]
+    file_name = file_object.make_path(original_directory, original_extension)
 
     # check for existence
     if not utils.check_file(preprocessed_data_file, force, 1000):
       logger.debug("... Processing original data file '%s'", file_name)
-      data = preprocessor.read_original_data(file_name)
+      if hasattr(file_object, 'load'):
+        data = file_object.load(original_directory, original_extension)
+      else:
+        data = preprocessor.read_original_data(file_name)
       # create output directory before reading the data file (is sometimes required, when relative directories are specified, especially, including a .. somewhere)
       bob.io.base.create_directories_safe(os.path.dirname(preprocessed_data_file))