diff --git a/bob/bio/face/config/database/ijba.py b/bob/bio/face/config/database/ijba.py
new file mode 100644
index 0000000000000000000000000000000000000000..d726635c72877401e4c6b05333eb60e6abded8af
--- /dev/null
+++ b/bob/bio/face/config/database/ijba.py
@@ -0,0 +1,10 @@
+#!/usr/bin/env python
+
+from bob.bio.face.database import IJBABioDatabase
+
+ijba_directory = "[YOUR_IJBA_DIRECTORY]"
+
+database = IJBABioDatabase(
+  original_directory=ijba_directory,
+  protocol='search_split1'
+)
diff --git a/bob/bio/face/database/ijba.py b/bob/bio/face/database/ijba.py
index 711b11f339b1a0bf21647bea0a751730a7b19cb1..ef238df8b27fe4b68e3fa0a71c2cfa577abce0c8 100644
--- a/bob/bio/face/database/ijba.py
+++ b/bob/bio/face/database/ijba.py
@@ -4,33 +4,60 @@
 # Sat 20 Aug 15:43:10 CEST 2016
 
 """
-  IJBA database implementation of bob.bio.base.database.Database interface.
-  It is an extension of an SQL-based database interface, which directly talks to IJBA database, for
+  IJBA database implementation of bob.bio.base.database.BioDatabase interface.
+  It is an extension of the database interface, which directly talks to IJBA database, for
   verification experiments (good to use in bob.bio.base framework).
 """
 
 from .database import FaceBioFile
-from bob.bio.base.database import BioDatabase, BioFile
+from bob.bio.base.database import BioDatabase, BioFileSet
+import os
+
+
+class IJBABioFile(FaceBioFile):
+  def __init__(self, f):
+    super(IJBABioFile, self).__init__(client_id=f.client_id, path=f.path, file_id=f.id)
+    self.f = f
+
+  def make_path(self, directory, extension):
+    # add file ID to the path, so that a unique path is generated (there might be several identities in each physical file)
+    return str(os.path.join(directory or '', self.path + "-" + str(self.id) + (extension or '')))
+
+
+class IJBABioFileSet(BioFileSet):
+  def __init__(self, template):
+    super(IJBABioFileSet, self).__init__(file_set_id = template.id, files = [IJBABioFile(f) for f in template.files], path = template.path)
 
 
 class IJBABioDatabase(BioDatabase):
-    """
-    Implements verification API for querying IJBA database.
-    """
-
-    def __init__(
-            self,
-            **kwargs
-    ):
-        # call base class constructors to open a session to the database
-        super(IJBABioDatabase, self).__init__(name='ijba', **kwargs)
-
-        from bob.db.ijba.query import Database as LowLevelDatabase
-        self.__db = LowLevelDatabase()
-
-    def model_ids_with_protocol(self, groups=None, protocol="search_split1", **kwargs):
-        return self.__db.model_ids(groups=groups, protocol=protocol)
-
-    def objects(self, groups=None, protocol="search_split1", purposes=None, model_ids=None, **kwargs):
-        retval = self.__db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs)
-        return [FaceBioFile(client_id=f.client_id, path=f.path, file_id=f.id) for f in retval]
+  """
+  Implements verification API for querying IJBA database.
+  """
+
+  def __init__(
+      self,
+      **kwargs
+  ):
+    # call base class constructors to open a session to the database
+    super(IJBABioDatabase, self).__init__(name='ijba', models_depend_on_protocol=True, training_depends_on_protocol=True, **kwargs)
+
+    import bob.db.ijba
+    self._db = bob.db.ijba.Database()
+
+  def uses_probe_file_sets(self):
+    return True
+
+  def model_ids_with_protocol(self, groups=None, protocol="search_split1", **kwargs):
+    return self._db.model_ids(groups=groups, protocol=protocol)
+
+  def objects(self, groups=None, protocol="search_split1", purposes=None, model_ids=None, **kwargs):
+    return [IJBABioFile(f) for f in self._db.objects(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids, **kwargs)]
+
+  def object_sets(self, groups=None, protocol="search_split1", purposes=None, model_ids=None):
+    return [IJBABioFileSet(t) for t in self._db.object_sets(groups=groups, protocol=protocol, purposes=purposes, model_ids=model_ids)]
+
+  def annotations(self, biofile):
+    return self._db.annotations(biofile.f)
+
+  def client_id_from_model_id(self, model_id, group='dev'):
+    return self._db.get_client_id_from_model_id(model_id)
diff --git a/bob/bio/face/test/test_databases.py b/bob/bio/face/test/test_databases.py
index f1928301a001fd755a4e2e044b957db9f1212c02..fa8c1b02a1022b2dbdc5a403026cf90006568ef8 100644
--- a/bob/bio/face/test/test_databases.py
+++ b/bob/bio/face/test/test_databases.py
@@ -25,13 +25,14 @@ from bob.bio.base.test.utils import db_available
 from bob.bio.base.test.test_database_implementations import check_database, check_database_zt
 
 
-def _check_annotations(database):
+def _check_annotations(database, require_eyes=True):
     for file in database.all_files():
         annotations = database.annotations(file)
         if annotations is not None:
             assert isinstance(annotations, dict)
-            assert 'reye' in annotations
-            assert 'leye' in annotations
+            if require_eyes:
+              assert 'reye' in annotations
+              assert 'leye' in annotations
 
 
 @db_available('arface')
@@ -119,8 +120,8 @@ def test_gbu():
 def test_ijba():
     database = bob.bio.base.load_resource('ijba', 'database', preferred_package='bob.bio.face')
     try:
-        check_database(database)
-        _check_annotations(database)
+        check_database(database,models_depend=True, training_depends=True)
+        _check_annotations(database, require_eyes=False)
     except IOError as e:
         raise SkipTest(
             "The database could not queried; probably the db.sql3 file is missing. Here is the error: '%s'" % e)
diff --git a/setup.py b/setup.py
index ea630ad3f0a77f6c5b227a1c2829d389fab571c3..13fe295c4ec6f471e67426c4ce6606d2e7e8ece0 100644
--- a/setup.py
+++ b/setup.py
@@ -109,11 +109,12 @@ setup(
 
         'bob.bio.database': [
             'arface            = bob.bio.face.config.database.arface:database',
-            'atnt              = bob.bio.face.config.database.atnt:database',            
+            'atnt              = bob.bio.face.config.database.atnt:database',
             'banca             = bob.bio.face.config.database.banca_english:database',
             'caspeal           = bob.bio.face.config.database.caspeal:database',
             'frgc              = bob.bio.face.config.database.frgc:database',
             'gbu               = bob.bio.face.config.database.gbu:database',
+            'ijba              = bob.bio.face.config.database.ijba:database',
             'lfw-restricted    = bob.bio.face.config.database.lfw_restricted:database',
             'lfw-unrestricted  = bob.bio.face.config.database.lfw_unrestricted:database',
             'mobio-male        = bob.bio.face.config.database.mobio_male:database',  # MOBIO gender-dependent training