diff --git a/pyproject.toml b/pyproject.toml
index 6e06b1c9d195618427c18658bfc8a393496a09b4..107619fda093873189adc614ea440c6d06079545 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -82,28 +82,28 @@ alexnet_pre = "ptbench.configs.models.alexnet_pretrained"
 densenet = "ptbench.configs.models.densenet"
 densenet_pre = "ptbench.configs.models.densenet_pretrained"
 # montgomery dataset (and cross-validation folds)
-montgomery = "ptbench.configs.datasets.montgomery.default"
-montgomery_rgb = "ptbench.configs.datasets.montgomery.rgb"
-montgomery_f0 = "ptbench.configs.datasets.montgomery.fold_0"
-montgomery_f1 = "ptbench.configs.datasets.montgomery.fold_1"
-montgomery_f2 = "ptbench.configs.datasets.montgomery.fold_2"
-montgomery_f3 = "ptbench.configs.datasets.montgomery.fold_3"
-montgomery_f4 = "ptbench.configs.datasets.montgomery.fold_4"
-montgomery_f5 = "ptbench.configs.datasets.montgomery.fold_5"
-montgomery_f6 = "ptbench.configs.datasets.montgomery.fold_6"
-montgomery_f7 = "ptbench.configs.datasets.montgomery.fold_7"
-montgomery_f8 = "ptbench.configs.datasets.montgomery.fold_8"
-montgomery_f9 = "ptbench.configs.datasets.montgomery.fold_9"
-montgomery_f0_rgb = "ptbench.configs.datasets.montgomery.fold_0_rgb"
-montgomery_f1_rgb = "ptbench.configs.datasets.montgomery.fold_1_rgb"
-montgomery_f2_rgb = "ptbench.configs.datasets.montgomery.fold_2_rgb"
-montgomery_f3_rgb = "ptbench.configs.datasets.montgomery.fold_3_rgb"
-montgomery_f4_rgb = "ptbench.configs.datasets.montgomery.fold_4_rgb"
-montgomery_f5_rgb = "ptbench.configs.datasets.montgomery.fold_5_rgb"
-montgomery_f6_rgb = "ptbench.configs.datasets.montgomery.fold_6_rgb"
-montgomery_f7_rgb = "ptbench.configs.datasets.montgomery.fold_7_rgb"
-montgomery_f8_rgb = "ptbench.configs.datasets.montgomery.fold_8_rgb"
-montgomery_f9_rgb = "ptbench.configs.datasets.montgomery.fold_9_rgb"
+montgomery = "ptbench.data.montgomery.default"
+montgomery_rgb = "ptbench.data.montgomery.rgb"
+montgomery_f0 = "ptbench.data.montgomery.fold_0"
+montgomery_f1 = "ptbench.data.montgomery.montgomery.fold_1"
+montgomery_f2 = "ptbench.data.montgomery.fold_2"
+montgomery_f3 = "ptbench.data.montgomery.fold_3"
+montgomery_f4 = "ptbench.data.montgomery.fold_4"
+montgomery_f5 = "ptbench.data.montgomery.fold_5"
+montgomery_f6 = "ptbench.data.montgomery.fold_6"
+montgomery_f7 = "ptbench.data.montgomery.fold_7"
+montgomery_f8 = "ptbench.data.montgomery.fold_8"
+montgomery_f9 = "ptbench.data.montgomery.fold_9"
+montgomery_f0_rgb = "ptbench.data.montgomery.fold_0_rgb"
+montgomery_f1_rgb = "ptbench.data.montgomery.fold_1_rgb"
+montgomery_f2_rgb = "ptbench.data.montgomery.fold_2_rgb"
+montgomery_f3_rgb = "ptbench.data.montgomery.fold_3_rgb"
+montgomery_f4_rgb = "ptbench.data.montgomery.fold_4_rgb"
+montgomery_f5_rgb = "ptbench.data.montgomery.fold_5_rgb"
+montgomery_f6_rgb = "ptbench.data.montgomery.fold_6_rgb"
+montgomery_f7_rgb = "ptbench.data.montgomery.fold_7_rgb"
+montgomery_f8_rgb = "ptbench.data.montgomery.fold_8_rgb"
+montgomery_f9_rgb = "ptbench.data.montgomery.fold_9_rgb"
 # extended montgomery dataset (with radiological signs)
 montgomery_rs = "ptbench.configs.datasets.montgomery_RS.default"
 montgomery_rs_f0 = "ptbench.configs.datasets.montgomery_RS.fold_0"
diff --git a/src/ptbench/configs/datasets/montgomery/__init__.py b/src/ptbench/configs/datasets/montgomery/__init__.py
deleted file mode 100644
index 86070a90d32c2eca2e4b165831005cd630471682..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-
-def _maker(protocol, resize_size=512, cc_size=512, RGB=False):
-    from torchvision import transforms
-
-    from ....data.montgomery import dataset as raw
-    from ....data.transforms import ElasticDeformation, RemoveBlackBorders
-    from .. import make_dataset as mk
-
-    post_transforms = []
-    if RGB:
-        post_transforms = [
-            transforms.Lambda(lambda x: x.convert("RGB")),
-            transforms.ToTensor(),
-        ]
-
-    return mk(
-        [raw.subsets(protocol)],
-        [
-            RemoveBlackBorders(),
-            transforms.Resize(resize_size),
-            transforms.CenterCrop(cc_size),
-        ],
-        [ElasticDeformation(p=0.8)],
-        post_transforms,
-    )
diff --git a/src/ptbench/configs/datasets/montgomery/default.py b/src/ptbench/configs/datasets/montgomery/default.py
deleted file mode 100644
index b00437e20d6d2fb4e55d2e10680d098478685e96..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/default.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (default protocol)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("default")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_0.py b/src/ptbench/configs/datasets/montgomery/fold_0.py
deleted file mode 100644
index a1d712372ceb82669a0c64d48680d73f5117be75..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_0.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 0)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_0")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_0_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_0_rgb.py
deleted file mode 100644
index 059dba2e9ccf4b86ded7fd453eb75f24e44224d1..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_0_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 0, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_0", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_1.py b/src/ptbench/configs/datasets/montgomery/fold_1.py
deleted file mode 100644
index 4ee7db38fcb04d3ba8a53ecb5ebd8259a10de337..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_1.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 1)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_1")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_1_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_1_rgb.py
deleted file mode 100644
index 9bc9214c19569fb6db99db2210f2ac4becb91fb7..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_1_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 1, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_1", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_2.py b/src/ptbench/configs/datasets/montgomery/fold_2.py
deleted file mode 100644
index 6574b5de62a77dd8de866e84ef8715ce8946a5c2..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_2.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 2)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_2")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_2_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_2_rgb.py
deleted file mode 100644
index 3423c925e07045e110ed9448577062a751abbb68..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_2_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 2, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_2", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_3.py b/src/ptbench/configs/datasets/montgomery/fold_3.py
deleted file mode 100644
index 99d94f141b1882b8f37f932fc6b25d69f049af97..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_3.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 3)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_3")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_3_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_3_rgb.py
deleted file mode 100644
index c1873c5389dc718fdc4c9116f9aacb164351444d..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_3_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 3, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_3", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_4.py b/src/ptbench/configs/datasets/montgomery/fold_4.py
deleted file mode 100644
index 42584bad7ebb2e0e83233f8e2f6f9f4adea86c57..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_4.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 4)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_4")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_4_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_4_rgb.py
deleted file mode 100644
index ed76962e9dbd92120125f80d6162a24ce4ccca1a..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_4_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 4, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_4", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_5.py b/src/ptbench/configs/datasets/montgomery/fold_5.py
deleted file mode 100644
index bb05a3f94a10efacf2060953c6530fef2f6836ba..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_5.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 5)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_5")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_5_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_5_rgb.py
deleted file mode 100644
index a65fd2c77ec0d4febda6fe16f01fdb7f2b08f4b4..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_5_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 5, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_5", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_6.py b/src/ptbench/configs/datasets/montgomery/fold_6.py
deleted file mode 100644
index bbd97489573f4c1c60d6a59a9bdb24fe5e5e4b1d..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_6.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 6)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_6")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_6_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_6_rgb.py
deleted file mode 100644
index 89c7df33784af40b484a13d501887d3e4ec4ee00..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_6_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 6, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_6", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_7.py b/src/ptbench/configs/datasets/montgomery/fold_7.py
deleted file mode 100644
index 00ed7d68d846bfcf83f8da53b03a5b3116cc44d2..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_7.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 7)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_7")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_7_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_7_rgb.py
deleted file mode 100644
index 01a7c829e0928d845b78d9ab1d80c59b1b9a61a5..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_7_rgb.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-
-"""Montgomery dataset for TB detection (cross validation fold 7, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_7", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_8.py b/src/ptbench/configs/datasets/montgomery/fold_8.py
deleted file mode 100644
index 96f49d744aa370bf892a5cf807fc32938a129c72..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_8.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 8)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_8")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_8_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_8_rgb.py
deleted file mode 100644
index b9a2a55659c6c89e21337d085fb19b37fecba508..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_8_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 8, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_8", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/fold_9.py b/src/ptbench/configs/datasets/montgomery/fold_9.py
deleted file mode 100644
index 114392e4d35e1ca022b4e2a9b9372880efe657e1..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_9.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 9)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_9")
diff --git a/src/ptbench/configs/datasets/montgomery/fold_9_rgb.py b/src/ptbench/configs/datasets/montgomery/fold_9_rgb.py
deleted file mode 100644
index df5340cb2655312c3e6d2f3df066c1b9b29874ca..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/fold_9_rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (cross validation fold 9, RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_9", RGB=True)
diff --git a/src/ptbench/configs/datasets/montgomery/rgb.py b/src/ptbench/configs/datasets/montgomery/rgb.py
deleted file mode 100644
index 880ae2d14b4fad5984871b2b09a19e743ebadb39..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/montgomery/rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Montgomery dataset for TB detection (default protocol, converted in RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.montgomery` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("default", RGB=True)
diff --git a/src/ptbench/data/montgomery/__init__.py b/src/ptbench/data/montgomery/__init__.py
index 38b50a26f241e57c53f7be0fbf211055d754ee08..65239cbf5d908075346675ad10e7c86569383f77 100644
--- a/src/ptbench/data/montgomery/__init__.py
+++ b/src/ptbench/data/montgomery/__init__.py
@@ -22,6 +22,7 @@ import importlib.resources
 import os
 
 from ...utils.rc import load_rc
+from .. import make_dataset
 from ..dataset import JSONDataset
 from ..loader import load_pil_baw, make_delayed
 
@@ -55,9 +56,33 @@ def _loader(context, sample):
     return make_delayed(sample, _raw_data_loader)
 
 
-dataset = JSONDataset(
+json_dataset = JSONDataset(
     protocols=_protocols,
     fieldnames=("data", "label"),
     loader=_loader,
 )
 """Montgomery dataset object."""
+
+
+def _maker(protocol, resize_size=512, cc_size=512, RGB=False):
+    from torchvision import transforms
+
+    from ..transforms import ElasticDeformation, RemoveBlackBorders
+
+    post_transforms = []
+    if RGB:
+        post_transforms = [
+            transforms.Lambda(lambda x: x.convert("RGB")),
+            transforms.ToTensor(),
+        ]
+
+    return make_dataset(
+        [json_dataset.subsets(protocol)],
+        [
+            RemoveBlackBorders(),
+            transforms.Resize(resize_size),
+            transforms.CenterCrop(cc_size),
+        ],
+        [ElasticDeformation(p=0.8)],
+        post_transforms,
+    )
diff --git a/src/ptbench/data/montgomery/default.py b/src/ptbench/data/montgomery/default.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f5c0809869be5f011880e808e160024b3c1c1b0
--- /dev/null
+++ b/src/ptbench/data/montgomery/default.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (default protocol)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("default")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_0.py b/src/ptbench/data/montgomery/fold_0.py
new file mode 100644
index 0000000000000000000000000000000000000000..c60791be50ccd5186ce8e4af263efb7d7513b07a
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_0.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 0)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_0")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_0_rgb.py b/src/ptbench/data/montgomery/fold_0_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e8b0c8914b6a63dd9ab854984ff2bc51cb4e255
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_0_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 0, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_0", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_1.py b/src/ptbench/data/montgomery/fold_1.py
new file mode 100644
index 0000000000000000000000000000000000000000..d6627e673978bcf960b8fb5f72add7cb4a13a141
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_1.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 1)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_1")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_1_rgb.py b/src/ptbench/data/montgomery/fold_1_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..bc47a322c3fd779e3bc19924f6d7ac7c13e71847
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_1_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 1, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_1", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_2.py b/src/ptbench/data/montgomery/fold_2.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c5f4a66fd2af0b9f26b67241f45c630f69bd06a
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_2.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 2)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_2")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_2_rgb.py b/src/ptbench/data/montgomery/fold_2_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..b81a877b2bc7372a99812a27935e6daf42401568
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_2_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 2, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_2", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_3.py b/src/ptbench/data/montgomery/fold_3.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e685d7e3baa3a23924c62a77ffc61bf51e12056
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_3.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 3)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_3")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_3_rgb.py b/src/ptbench/data/montgomery/fold_3_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..7b600371c8d434d79049c6e6423b36e99f2a32cb
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_3_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 3, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_3", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_4.py b/src/ptbench/data/montgomery/fold_4.py
new file mode 100644
index 0000000000000000000000000000000000000000..9459cb938605df06823a86a96fbd1cf374fe9738
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_4.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 4)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_4")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_4_rgb.py b/src/ptbench/data/montgomery/fold_4_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..3eb136f654ab8d8d648468948e05dad774d85076
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_4_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 4, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_4", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_5.py b/src/ptbench/data/montgomery/fold_5.py
new file mode 100644
index 0000000000000000000000000000000000000000..147690f6d54f15d50b52f88288dbc8a41dfb7f33
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_5.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 5)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_5")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_5_rgb.py b/src/ptbench/data/montgomery/fold_5_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..3e7cb73f6957086b99147812b07f733dc51af9ec
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_5_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 5, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_5", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_6.py b/src/ptbench/data/montgomery/fold_6.py
new file mode 100644
index 0000000000000000000000000000000000000000..69f24390ac01271c3e961950d429d973e535c380
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_6.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 6)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_6")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_6_rgb.py b/src/ptbench/data/montgomery/fold_6_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..ff3a8cdb0c00f511f4ebb7abcfabb10ae7853e99
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_6_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 6, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_6", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_7.py b/src/ptbench/data/montgomery/fold_7.py
new file mode 100644
index 0000000000000000000000000000000000000000..20ba9d3a7da5ffcb8673e685a0534d82fdb7ed2b
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_7.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 7)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_7")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_7_rgb.py b/src/ptbench/data/montgomery/fold_7_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..05664b06ab6393911a77b32418d6f2afb9d455fa
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_7_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 7, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_7", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_8.py b/src/ptbench/data/montgomery/fold_8.py
new file mode 100644
index 0000000000000000000000000000000000000000..e92ff959a9b1028c174c95719867f5086831d6c9
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_8.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 8)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_8")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_8_rgb.py b/src/ptbench/data/montgomery/fold_8_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..b7d59359dcde32694affea0e3df88ad747f48e31
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_8_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 8, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_8", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_9.py b/src/ptbench/data/montgomery/fold_9.py
new file mode 100644
index 0000000000000000000000000000000000000000..81bbf72e78826f7e9560189be149d51cb729064e
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_9.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 9)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_9")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/fold_9_rgb.py b/src/ptbench/data/montgomery/fold_9_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..e961e08ffe49a94001252c641ba8bee86758b44f
--- /dev/null
+++ b/src/ptbench/data/montgomery/fold_9_rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (cross validation fold 9, RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_9", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule
diff --git a/src/ptbench/data/montgomery/rgb.py b/src/ptbench/data/montgomery/rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..c162126648f0baae5a921fa7f009da171fb8ccc7
--- /dev/null
+++ b/src/ptbench/data/montgomery/rgb.py
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Montgomery dataset for TB detection (default protocol, converted in RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.montgomery` for dataset details
+"""
+
+from clapper.logging import setup
+
+from .. import return_subsets
+from ..base_datamodule import BaseDataModule
+from . import _maker
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("default", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule