diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b4d1d1ca583eb211cc4b0a5ab9b2243c715bb45e..49337196592599a11942ecd8fc24a4230c5a196d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,20 +2,20 @@
 # See https://pre-commit.com/hooks.html for more hooks
 repos:
   - repo: https://github.com/timothycrosley/isort
-    rev: 5.10.1
+    rev: 5.12.0
     hooks:
       - id: isort
         args: [--settings-path, "pyproject.toml"]
   - repo: https://github.com/psf/black
-    rev: 22.3.0
+    rev: 23.1.0
     hooks:
       - id: black
   - repo: https://github.com/pycqa/flake8
-    rev: 3.9.2
+    rev: 6.0.0
     hooks:
       - id: flake8
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.2.0
+    rev: v4.4.0
     hooks:
       - id: check-ast
       - id: check-case-conflict
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 1201d1cfff885a7a554cb8ac11eca142401d266d..4f9034370f5d9846ae1f9a32fe15c85a47efa499 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -21,6 +21,7 @@ requirements:
     - python {{ python }}
     - setuptools {{ setuptools }}
     - pip {{ pip }}
+    - clapp
     - bob.extension
     - bob.io.base
     - bob.pipelines
@@ -38,6 +39,7 @@ requirements:
   run:
     - python
     - setuptools
+    - clapp
     - bob.extension
     - bob.io.base
     - bob.pipelines
diff --git a/doc/catalog.json b/doc/catalog.json
index d502c82dc61d364048fac634fef3c9e8332b15c3..dd43c091dfe3c5bae160dc2654f27945069a4bde 100644
--- a/doc/catalog.json
+++ b/doc/catalog.json
@@ -4,5 +4,11 @@
       "latest": "https://www.idiap.ch/software/bob/docs/bob/bob.extension/master"
     },
     "sources": {}
+  },
+  "bob.pad.face": {
+    "versions": {
+      "latest": "https://www.idiap.ch/software/bob/docs/bob/bob.pad.face/master/sphinx"
+    },
+    "sources": {}
   }
 }
diff --git a/pyproject.toml b/pyproject.toml
index 971265f780d7c96db274b1385161c59880aba729..4e422d3c1ccae2c0eb2a8d3033ccee4bd45a2747 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -26,6 +26,7 @@
     ]
     dependencies = [
         "setuptools",
+        "clapp",
         "bob.extension",
         "bob.io.base",
         "bob.pipelines",
@@ -57,7 +58,6 @@
         "auto-intersphinx",
         "sphinxcontrib-programoutput",
         "matplotlib",
-        "bob.pad.face",
         ]
     test = [
         "pytest",
diff --git a/src/bob/pad/base/database/csv_dataset.py b/src/bob/pad/base/database/csv_dataset.py
index 1ece2a1c52fcaceb4819c4d350d1a7ad6c7e8432..53033bf36c706a4aa10cda27ff9210462f54699a 100644
--- a/src/bob/pad/base/database/csv_dataset.py
+++ b/src/bob/pad/base/database/csv_dataset.py
@@ -4,7 +4,7 @@
 
 from bob.bio.base.database.legacy import check_parameters_for_validity
 from bob.pad.base.pipelines.abstract_classes import Database
-from bob.pipelines.datasets import FileListDatabase
+from bob.pipelines.dataset import FileListDatabase
 
 
 def validate_pad_sample(sample):
diff --git a/src/bob/pad/base/script/cross.py b/src/bob/pad/base/script/cross.py
index a3ab03e2c50b5a0271b2a4a33262d129bf6d216d..7aa903eb606e97088940c6d3b042b3de8fb7b8a7 100644
--- a/src/bob/pad/base/script/cross.py
+++ b/src/bob/pad/base/script/cross.py
@@ -10,7 +10,7 @@ import click
 import jinja2
 import yaml
 
-from exposed.click import log_parameters, verbosity_option
+from clapp.click import log_parameters, verbosity_option
 from tabulate import tabulate
 
 from bob.bio.base.score.load import get_negatives_positives, load_score
diff --git a/src/bob/pad/base/script/finalize_scores.py b/src/bob/pad/base/script/finalize_scores.py
index 7d81e0b9a54ca12cbdf2a903b1af7a514d1fe0c6..0a3c3855888d7c52b290c4d0b8481fac63a239b3 100644
--- a/src/bob/pad/base/script/finalize_scores.py
+++ b/src/bob/pad/base/script/finalize_scores.py
@@ -4,7 +4,7 @@ import logging
 
 import click
 
-from exposed.click import log_parameters, verbosity_option
+from clapp.click import log_parameters, verbosity_option
 
 logger = logging.getLogger(__name__)
 
diff --git a/src/bob/pad/base/script/pad.py b/src/bob/pad/base/script/pad.py
index 518ebb2a50ea9e1bfa7b8f8c9ce93003f243eb44..20d18609e626bae1dba7b9e24fd3566a1b17240c 100644
--- a/src/bob/pad/base/script/pad.py
+++ b/src/bob/pad/base/script/pad.py
@@ -3,8 +3,8 @@
 import click
 import pkg_resources
 
+from clapp.click import AliasedGroup
 from click_plugins import with_plugins
-from exposed.click import AliasedGroup
 
 
 @with_plugins(pkg_resources.iter_entry_points("bob.pad.cli"))
diff --git a/src/bob/pad/base/script/pad_commands.py b/src/bob/pad/base/script/pad_commands.py
index b8227131279b3699e1ac867de4a2bf1d6b09ba6a..354a768afe1cdf79adb35bf8ad70d7114263856c 100644
--- a/src/bob/pad/base/script/pad_commands.py
+++ b/src/bob/pad/base/script/pad_commands.py
@@ -9,7 +9,7 @@ from functools import partial
 import click
 import numpy
 
-from exposed.click import verbosity_option
+from clapp.click import verbosity_option
 
 import bob.measure.script.figure as measure_figure
 
diff --git a/src/bob/pad/base/script/run_pipeline.py b/src/bob/pad/base/script/run_pipeline.py
index f8f7e77fe635fa6c049b22a23f09e97167f57857..58eec8325b4b58104a8583114ac4b91fc46f061c 100644
--- a/src/bob/pad/base/script/run_pipeline.py
+++ b/src/bob/pad/base/script/run_pipeline.py
@@ -5,7 +5,7 @@ import logging
 
 import click
 
-from exposed.click import (
+from clapp.click import (
     ConfigCommand,
     ResourceOption,
     log_parameters,
diff --git a/tests/test_pipelines.py b/tests/test_pipelines.py
index 39c8efdabc64a5da1cd3ea7556be8925c505322c..7df7aa4659277e3d28cf1890e4d898710ab4e711 100644
--- a/tests/test_pipelines.py
+++ b/tests/test_pipelines.py
@@ -59,7 +59,6 @@ class DummyPadDatabase(Database):
 
 
 def dummy_pipeline():
-
     classifier = mario.wrap(
         ["sample"],
         LinearDiscriminantAnalysis(),
@@ -81,7 +80,6 @@ pipeline = dummy_pipeline()
 
 
 def test_run_pipeline():
-
     for options in [
         ["--no-dask", "--memory"],
         ["--no-dask"],