diff --git a/pyproject.toml b/pyproject.toml
index a4c23c482ea8fdaf5fe1a1f2089fc6050221b58d..0b98f4094255c3f97a539a0f7abc71a5fea8b535 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -145,29 +145,29 @@ tbx11k_simplified_v2_f9 = "ptbench.data.tbx11k_simplified_v2.fold_9"
 
 # montgomery-shenzhen aggregated dataset
 montgomery-shenzhen = "ptbench.data.montgomery_shenzhen.default"
-montgomery-shenzhen_f0 = "ptbench.data.montgomery_shenzhen.fold_0"
-montgomery-shenzhen_f1 = "ptbench.data.montgomery_shenzhen.fold_1"
-montgomery-shenzhen_f2 = "ptbench.data.montgomery_shenzhen.fold_2"
-montgomery-shenzhen_f3 = "ptbench.data.montgomery_shenzhen.fold_3"
-montgomery-shenzhen_f4 = "ptbench.data.montgomery_shenzhen.fold_4"
-montgomery-shenzhen_f5 = "ptbench.data.montgomery_shenzhen.fold_5"
-montgomery-shenzhen_f6 = "ptbench.data.montgomery_shenzhen.fold_6"
-montgomery-shenzhen_f7 = "ptbench.data.montgomery_shenzhen.fold_7"
-montgomery-shenzhen_f8 = "ptbench.data.montgomery_shenzhen.fold_8"
-montgomery-shenzhen_f9 = "ptbench.data.montgomery_shenzhen.fold_9"
+montgomery-shenzhen-f0 = "ptbench.data.montgomery_shenzhen.fold_0"
+montgomery-shenzhen-f1 = "ptbench.data.montgomery_shenzhen.fold_1"
+montgomery-shenzhen-f2 = "ptbench.data.montgomery_shenzhen.fold_2"
+montgomery-shenzhen-f3 = "ptbench.data.montgomery_shenzhen.fold_3"
+montgomery-shenzhen-f4 = "ptbench.data.montgomery_shenzhen.fold_4"
+montgomery-shenzhen-f5 = "ptbench.data.montgomery_shenzhen.fold_5"
+montgomery-shenzhen-f6 = "ptbench.data.montgomery_shenzhen.fold_6"
+montgomery-shenzhen-f7 = "ptbench.data.montgomery_shenzhen.fold_7"
+montgomery-shenzhen-f8 = "ptbench.data.montgomery_shenzhen.fold_8"
+montgomery-shenzhen-f9 = "ptbench.data.montgomery_shenzhen.fold_9"
 
 # montgomery-shenzhen-indian aggregated dataset
-mc_ch_in = "ptbench.data.mc_ch_in.default"
-mc_ch_in_f0 = "ptbench.data.mc_ch_in.fold_0"
-mc_ch_in_f1 = "ptbench.data.mc_ch_in.fold_1"
-mc_ch_in_f2 = "ptbench.data.mc_ch_in.fold_2"
-mc_ch_in_f3 = "ptbench.data.mc_ch_in.fold_3"
-mc_ch_in_f4 = "ptbench.data.mc_ch_in.fold_4"
-mc_ch_in_f5 = "ptbench.data.mc_ch_in.fold_5"
-mc_ch_in_f6 = "ptbench.data.mc_ch_in.fold_6"
-mc_ch_in_f7 = "ptbench.data.mc_ch_in.fold_7"
-mc_ch_in_f8 = "ptbench.data.mc_ch_in.fold_8"
-mc_ch_in_f9 = "ptbench.data.mc_ch_in.fold_9"
+montgomery-shenzhen-indian = "ptbench.data.montgomery_shenzhen_indian.default"
+montgomery-shenzhen-indian-f0 = "ptbench.data.montgomery_shenzhen_indian.fold_0"
+montgomery-shenzhen-indian-f1 = "ptbench.data.montgomery_shenzhen_indian.fold_1"
+montgomery-shenzhen-indian-f2 = "ptbench.data.montgomery_shenzhen_indian.fold_2"
+montgomery-shenzhen-indian-f3 = "ptbench.data.montgomery_shenzhen_indian.fold_3"
+montgomery-shenzhen-indian-f4 = "ptbench.data.montgomery_shenzhen_indian.fold_4"
+montgomery-shenzhen-indian-f5 = "ptbench.data.montgomery_shenzhen_indian.fold_5"
+montgomery-shenzhen-indian-f6 = "ptbench.data.montgomery_shenzhen_indian.fold_6"
+montgomery-shenzhen-indian-f7 = "ptbench.data.montgomery_shenzhen_indian.fold_7"
+montgomery-shenzhen-indian-f8 = "ptbench.data.montgomery_shenzhen_indian.fold_8"
+montgomery-shenzhen-indian-f9 = "ptbench.data.montgomery_shenzhen_indian.fold_9"
 
 # montgomery-shenzhen-indian-tbx11k aggregated dataset
 mc_ch_in_11k = "ptbench.data.mc_ch_in_11k.default"
diff --git a/src/ptbench/data/mc_ch_in/__init__.py b/src/ptbench/data/mc_ch_in/__init__.py
deleted file mode 100644
index 662d5c1326651b4d9f48d47bc4b503df23d17216..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
diff --git a/src/ptbench/data/mc_ch_in/default.py b/src/ptbench/data/mc_ch_in/default.py
deleted file mode 100644
index 485173aa82e4a0b5ecf9eae0a62a4de50b1b9663..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/default.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets."""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.default import datamodule as indian_datamodule
-from ..montgomery.default import datamodule as mc_datamodule
-from ..shenzhen.default import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_0.py b/src/ptbench/data/mc_ch_in/fold_0.py
deleted file mode 100644
index db749a38fca70233ecb361aab82907238476ba6e..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_0.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 0)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_0 import datamodule as indian_datamodule
-from ..montgomery.fold_0 import datamodule as mc_datamodule
-from ..shenzhen.fold_0 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_1.py b/src/ptbench/data/mc_ch_in/fold_1.py
deleted file mode 100644
index 033f5bc5e386661b9917ea73872a7a7411730874..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_1.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 1)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_1 import datamodule as indian_datamodule
-from ..montgomery.fold_1 import datamodule as mc_datamodule
-from ..shenzhen.fold_1 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_2.py b/src/ptbench/data/mc_ch_in/fold_2.py
deleted file mode 100644
index bcd7654c5a4f6ed6e515105f77fda6608f289db0..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_2.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 2)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_2 import datamodule as indian_datamodule
-from ..montgomery.fold_2 import datamodule as mc_datamodule
-from ..shenzhen.fold_2 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_3.py b/src/ptbench/data/mc_ch_in/fold_3.py
deleted file mode 100644
index e09e6080393f37f8709ef15f260a1dc8402e5867..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_3.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 3)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_3 import datamodule as indian_datamodule
-from ..montgomery.fold_3 import datamodule as mc_datamodule
-from ..shenzhen.fold_3 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_4.py b/src/ptbench/data/mc_ch_in/fold_4.py
deleted file mode 100644
index cd472c6b7964802eb03a184449e6915451855800..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_4.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 4)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_4 import datamodule as indian_datamodule
-from ..montgomery.fold_4 import datamodule as mc_datamodule
-from ..shenzhen.fold_4 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_5.py b/src/ptbench/data/mc_ch_in/fold_5.py
deleted file mode 100644
index 9afdb1f98a93d35a577e5df2ce8800bb6a5fcbe1..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_5.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 5)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_5 import datamodule as indian_datamodule
-from ..montgomery.fold_5 import datamodule as mc_datamodule
-from ..shenzhen.fold_5 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_6.py b/src/ptbench/data/mc_ch_in/fold_6.py
deleted file mode 100644
index 9246629ec4725088174e75162aa68ed8c9b1cd12..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_6.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 6)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_6 import datamodule as indian_datamodule
-from ..montgomery.fold_6 import datamodule as mc_datamodule
-from ..shenzhen.fold_6 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_7.py b/src/ptbench/data/mc_ch_in/fold_7.py
deleted file mode 100644
index 7f628c9b04e92da8bda3dffb3c5e021c583c489b..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_7.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 7)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_7 import datamodule as indian_datamodule
-from ..montgomery.fold_7 import datamodule as mc_datamodule
-from ..shenzhen.fold_7 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_8.py b/src/ptbench/data/mc_ch_in/fold_8.py
deleted file mode 100644
index 5bc985cb741178abc2c454133521d8b219d5ccbd..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_8.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 8)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_8 import datamodule as indian_datamodule
-from ..montgomery.fold_8 import datamodule as mc_datamodule
-from ..shenzhen.fold_8 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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/mc_ch_in/fold_9.py b/src/ptbench/data/mc_ch_in/fold_9.py
deleted file mode 100644
index 641fdc6746cc5392430d2b3bec435c6886bfff33..0000000000000000000000000000000000000000
--- a/src/ptbench/data/mc_ch_in/fold_9.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Aggregated dataset composed of Montgomery, Shenzhen and Indian datasets
-(cross validation fold 9)"""
-
-from clapper.logging import setup
-from torch.utils.data.dataset import ConcatDataset
-
-from .. import return_subsets
-from ..base_datamodule import BaseDataModule, get_dataset_from_module
-from ..indian.fold_9 import datamodule as indian_datamodule
-from ..montgomery.fold_9 import datamodule as mc_datamodule
-from ..shenzhen.fold_9 import datamodule as ch_datamodule
-
-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,
-    ):
-        self.train_batch_size = train_batch_size
-        self.predict_batch_size = predict_batch_size
-        self.drop_incomplete_batch = drop_incomplete_batch
-        self.multiproc_kwargs = multiproc_kwargs
-
-        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):
-        # Instantiate other datamodules and get their datasets
-
-        module_args = {
-            "train_batch_size": self.train_batch_size,
-            "predict_batch_size": self.predict_batch_size,
-            "drop_incomplete_batch": self.drop_incomplete_batch,
-            "multiproc_kwargs": self.multiproc_kwargs,
-        }
-
-        mc = get_dataset_from_module(mc_datamodule, stage, **module_args)
-        ch = get_dataset_from_module(ch_datamodule, stage, **module_args)
-        indian = get_dataset_from_module(
-            indian_datamodule, stage, **module_args
-        )
-
-        # Combine datasets
-        self.dataset = {}
-        self.dataset["__train__"] = ConcatDataset(
-            [mc["__train__"], ch["__train__"], indian["__train__"]]
-        )
-        self.dataset["train"] = ConcatDataset(
-            [mc["train"], ch["train"], indian["train"]]
-        )
-        self.dataset["__valid__"] = ConcatDataset(
-            [mc["__valid__"], ch["__valid__"], indian["__valid__"]]
-        )
-        self.dataset["validation"] = ConcatDataset(
-            [mc["validation"], ch["validation"], indian["validation"]]
-        )
-        self.dataset["test"] = ConcatDataset(
-            [mc["test"], ch["test"], indian["test"]]
-        )
-
-        (
-            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_shenzhen_indian/__init__.py b/src/ptbench/data/montgomery_shenzhen_indian/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/datamodule.py b/src/ptbench/data/montgomery_shenzhen_indian/datamodule.py
new file mode 100644
index 0000000000000000000000000000000000000000..ea2d2a4f417767cb42641c9e596a24c40a3ab386
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/datamodule.py
@@ -0,0 +1,43 @@
+# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from ..datamodule import ConcatDataModule
+from ..indian.datamodule import RawDataLoader as IndianLoader
+from ..indian.datamodule import make_split as make_indian_split
+from ..montgomery.datamodule import RawDataLoader as MontgomeryLoader
+from ..montgomery.datamodule import make_split as make_montgomery_split
+from ..shenzhen.datamodule import RawDataLoader as ShenzhenLoader
+from ..shenzhen.datamodule import make_split as make_shenzhen_split
+
+
+class DataModule(ConcatDataModule):
+    """Aggregated datamodule composed of Montgomery and Shenzhen datasets."""
+
+    def __init__(self, split_filename: str):
+        montgomery_loader = MontgomeryLoader()
+        montgomery_split = make_montgomery_split(split_filename)
+        shenzhen_loader = ShenzhenLoader()
+        shenzhen_split = make_shenzhen_split(split_filename)
+        indian_loader = IndianLoader()
+        indian_split = make_indian_split(split_filename)
+
+        super().__init__(
+            splits={
+                "train": [
+                    (montgomery_split["train"], montgomery_loader),
+                    (shenzhen_split["train"], shenzhen_loader),
+                    (indian_split["train"], indian_loader),
+                ],
+                "validation": [
+                    (montgomery_split["validation"], montgomery_loader),
+                    (shenzhen_split["validation"], shenzhen_loader),
+                    (indian_split["validation"], indian_loader),
+                ],
+                "test": [
+                    (montgomery_split["test"], montgomery_loader),
+                    (shenzhen_split["test"], shenzhen_loader),
+                    (indian_split["test"], indian_loader),
+                ],
+            }
+        )
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/default.py b/src/ptbench/data/montgomery_shenzhen_indian/default.py
new file mode 100644
index 0000000000000000000000000000000000000000..2b8a8fb25e09b85f372e854a2f2ce29bcdf56ddc
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/default.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("default.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_0.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_0.py
new file mode 100644
index 0000000000000000000000000000000000000000..3d114d07d1c53f869ba710074b254944865cc4bc
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_0.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_0.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_1.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_1.py
new file mode 100644
index 0000000000000000000000000000000000000000..cd3a8cb6d0be1c01e5dbb96d5cc02f724e15e7c4
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_1.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_1.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_2.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_2.py
new file mode 100644
index 0000000000000000000000000000000000000000..44eeda801884db9fcaa58be04de3068ff82325eb
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_2.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_2.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_3.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_3.py
new file mode 100644
index 0000000000000000000000000000000000000000..f24fb314e30df9ab111ac69fd74a7f9a16cdad68
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_3.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_3.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_4.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_4.py
new file mode 100644
index 0000000000000000000000000000000000000000..58456d38e4804c2b68e8759f78e3bf9ea8d547f8
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_4.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_4.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_5.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_5.py
new file mode 100644
index 0000000000000000000000000000000000000000..927967469ff479647670fe0d0978e4b72b965c33
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_5.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_5.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_6.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_6.py
new file mode 100644
index 0000000000000000000000000000000000000000..9566b7cfe5723c1da18d081a2442fb5d13a11d3e
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_6.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_6.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_7.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_7.py
new file mode 100644
index 0000000000000000000000000000000000000000..25cbfe1b2eb0290098e6b54c3ca5a26076482e0c
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_7.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_7.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_8.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_8.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb5332ce050631a6fdf4b590fb4dd5a191fd90bc
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_8.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_8.json")
diff --git a/src/ptbench/data/montgomery_shenzhen_indian/fold_9.py b/src/ptbench/data/montgomery_shenzhen_indian/fold_9.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1626586ff8b263c097ee9b929eea40c42b4ae1e
--- /dev/null
+++ b/src/ptbench/data/montgomery_shenzhen_indian/fold_9.py
@@ -0,0 +1,7 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from .datamodule import DataModule
+
+datamodule = DataModule("fold_9.json")