diff --git a/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py b/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py
index c2d041a9f4c68b2d85a47dc02e5b5e70382ef26c..e09f9b033536d776a1d045c68d1abb58a796fd91 100644
--- a/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py
+++ b/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py
@@ -26,7 +26,7 @@ from bob.ip.binseg.configs.datasets.hrf608 import dataset as _hrf
 _labelled = torch.utils.data.ConcatDataset([_drive, _chase, _iostar, _hrf])
 
 # Use STARE without labels in this setup
-from .stare import dataset as _unlabelled
+from bob.ip.binseg.configs.datasets.stare import dataset as _unlabelled
 
 from bob.ip.binseg.data.utils import SSLDataset
 dataset = SSLDataset(_labelled, _unlabelled)
diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py b/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py
deleted file mode 100644
index 1a7274ee91793f350c1819ca7726532ee3d384ab..0000000000000000000000000000000000000000
--- a/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive
-from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare
-from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chase
-import torch
-
-#### Config ####
-
-# PyTorch dataset
-dataset = torch.utils.data.ConcatDataset([drive, stare, chase])
diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py
index 3bb4f28e4f3b75acea6c62011527ef801d331739..b6258f3fe4c6e6c85ce1a59b931924510ef00a8b 100644
--- a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py
+++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py
@@ -1,10 +1,13 @@
-from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive
-from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare
-from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chase
-from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as iostar
-import torch
+#!/usr/bin/env python
+# coding=utf-8
 
-#### Config ####
+"""COVD-HRF (training set) for Vessel Segmentation
+"""
 
-# PyTorch dataset
-dataset = torch.utils.data.ConcatDataset([drive, stare, chase, iostar])
+from bob.ip.binseg.configs.datasets.drive1168 import dataset as _drive
+from bob.ip.binseg.configs.datasets.stare1168 import dataset as _stare
+from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as _chase
+from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as _iostar
+
+import torch.utils.data
+dataset = torch.utils.data.ConcatDataset([_drive, _stare, _chase, _iostar])
diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py
index 3b3d2f2ef4a130d540cf956186655496f31e46cb..9cf7b838c43042962f7fa7dda2abccc845032778 100644
--- a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py
+++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py
@@ -1,43 +1,20 @@
-from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive
-from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare
-from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chasedb
-from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as iostar
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-import torch
-from bob.ip.binseg.data.binsegdataset import (
-    BinSegDataset,
-    SSLBinSegDataset,
-    UnLabeledBinSegDataset,
-)
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
+"""HRF (SSL training set) for Vessel Segmentation
 
-#### Config ####
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3504
+x 2336. One set of ground-truth vessel annotations is available.
 
-# PyTorch dataset
-labeled_dataset = torch.utils.data.ConcatDataset([drive, stare, iostar, chasedb])
+* Reference: [HRF-2013]_
+* Configuration resolution: 1168 x 1648
 
-#### Unlabeled HRF TRAIN ####
-unlabeled_transforms = Compose(
-    [
-        RandomRotation(),
-        Crop(0, 108, 2336, 3296),
-        Resize((1168)),
-        RandomHFlip(),
-        RandomVFlip(),
-        ColorJitter(),
-        ToTensor(),
-    ]
-)
+The dataset available in this file is composed of STARE, CHASE-DB1, IOSTAR
+vessel and CHASE-DB1 (with annotated samples) and HRF without labels.
+"""
 
-# bob.db.dataset init
-hrfbobdb = HRF(protocol="default")
-
-# PyTorch dataset
-unlabeled_dataset = UnLabeledBinSegDataset(
-    hrfbobdb, split="train", transform=unlabeled_transforms
-)
-
-# SSL Dataset
-
-dataset = SSLBinSegDataset(labeled_dataset, unlabeled_dataset)
+from bob.ip.binseg.configs.datasets.drivestarechasedb1iostar1168 import dataset as _labelled
+from bob.ip.binseg.configs.datasets.hrf1168 import dataset as _unlabelled
+from bob.ip.binseg.data.utils import SSLDataset
+dataset = SSLDataset(_labelled, _unlabelled)
diff --git a/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py b/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py
index e01d70e8864af57af2875512a089a897f8a61651..1306a2f41ace4223cb924b60434c010b92c7e3a8 100644
--- a/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py
+++ b/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py
@@ -23,16 +23,7 @@ The dataset available in this file is composed of STARE, CHASE-DB1, IOSTAR
 vessel and HRF (with annotated samples) and CHASE-DB1 without labels.
 """
 
-# Labelled bits
-import torch.utils.data
-from bob.ip.binseg.configs.datasets.drive960 import dataset as _drive
-from bob.ip.binseg.configs.datasets.stare960 import dataset as _stare
-from bob.ip.binseg.configs.datasets.hrf960 import dataset as _hrf
-from bob.ip.binseg.configs.datasets.iostarvessel960 import dataset as _iostar
-_labelled = torch.utils.data.ConcatDataset([_drive, _stare, _hrf, _iostar])
-
-# Use CHASE-DB1 without labels in this setup
+from bob.ip.binseg.configs.datasets.drivestareiostarhrf960 import dataset as _labelled
 from bob.ip.binseg.configs.datasets.chasedb1 import dataset as _unlabelled
-
 from bob.ip.binseg.data.utils import SSLDataset
 dataset = SSLDataset(_labelled, _unlabelled)
diff --git a/bob/ip/binseg/configs/datasets/hrf.py b/bob/ip/binseg/configs/datasets/hrf.py
index b13302096e74d5e9306b25a2c5fb7970ffeb890c..95df5b007538576ab45f8d050daf0ccbd5fefbd3 100644
--- a/bob/ip/binseg/configs/datasets/hrf.py
+++ b/bob/ip/binseg/configs/datasets/hrf.py
@@ -1,13 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (training set) for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3504
+x 2336. One set of ground-truth vessel annotations is available.
 
-#### Config ####
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 2336 x 3296 (after specific cropping and rescaling)
+* Training samples: 15
+* Split reference: [ORLANDO-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Crop(0, 108, 2336, 3296),
         RandomHFlip(),
@@ -18,8 +26,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf1024.py b/bob/ip/binseg/configs/datasets/hrf1024.py
index e07bd883ee7a4f9bc7bfeb2d196f09af03b01875..a1d7cb36f144ccd7741886c490fe01b9d7585dc4 100644
--- a/bob/ip/binseg/configs/datasets/hrf1024.py
+++ b/bob/ip/binseg/configs/datasets/hrf1024.py
@@ -1,13 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (training set) for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3504
+x 2336. One set of ground-truth vessel annotations is available.
 
-#### Config ####
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 1024 x ? (after specific padding and rescaling)
+* Training samples: 15
+* Split reference: [ORLANDO-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Pad((0, 584, 0, 584)),
         Resize((1024)),
@@ -19,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf1168.py b/bob/ip/binseg/configs/datasets/hrf1168.py
index 64ebef45239073173a0890133634e2cbc9a5ff0f..67ece23f361a288247984b9a36e14f78fa511a55 100644
--- a/bob/ip/binseg/configs/datasets/hrf1168.py
+++ b/bob/ip/binseg/configs/datasets/hrf1168.py
@@ -4,23 +4,18 @@
 """HRF (training set) for Vessel Segmentation
 
 The database includes 15 images of each healthy, diabetic retinopathy (DR), and
-glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3504
 x 2336. One set of ground-truth vessel annotations is available.
 
 * Reference: [HRF-2013]_
 * Original resolution (height x width): 2336 x 3504
-* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling)
+* Configuration resolution: 1168 x 1648 (after specific padding and rescaling)
 * Training samples: 15
 * Split reference: [ORLANDO-2017]_
 """
 
-from bob.db.hrf import Database as HRF
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
-
-#### Config ####
-
-transforms = Compose(
+_transforms = Compose(
     [
         Crop(0, 108, 2336, 3296),  #(upper, left, height, width)
         Resize((1168)),  # applies to the smaller edge
@@ -32,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf1168test.py b/bob/ip/binseg/configs/datasets/hrf1168test.py
index 86d968f46f24ca4deaacb95ff71d9e4185dd352e..d73da151cbaa28bcc9e33573bbe224911a6832b4 100644
--- a/bob/ip/binseg/configs/datasets/hrf1168test.py
+++ b/bob/ip/binseg/configs/datasets/hrf1168test.py
@@ -1,16 +1,23 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (test set) for Vessel Segmentation
 
-#### Config ####
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+x 2336. One set of ground-truth vessel annotations is available.
 
-transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168)), ToTensor()])
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling)
+* Test samples: 30
+* Split reference: [ORLANDO-2017]_
+"""
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168)), ToTensor()])
 
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="test", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf544.py b/bob/ip/binseg/configs/datasets/hrf544.py
index 6cd9ccf0ef2f7283034afcb3089a3a5618600b2c..d45b424728e8d01ede9ab33c2b7ffaf4034ec40a 100644
--- a/bob/ip/binseg/configs/datasets/hrf544.py
+++ b/bob/ip/binseg/configs/datasets/hrf544.py
@@ -1,13 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (training set) for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+x 2336. One set of ground-truth vessel annotations is available.
 
-#### Config ####
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 544 x 544 (after specific padding and rescaling)
+* Test samples: 30
+* Split reference: [ORLANDO-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Resize((363)),
         Pad((0, 90, 0, 91)),
@@ -19,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf544test.py b/bob/ip/binseg/configs/datasets/hrf544test.py
index 45a3e61df22e8a99c3ea199652815ccc4e3c0148..16102bf817e8141be1993f8ff617316d4cb9753d 100644
--- a/bob/ip/binseg/configs/datasets/hrf544test.py
+++ b/bob/ip/binseg/configs/datasets/hrf544test.py
@@ -1,16 +1,29 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (test set) for Vessel Segmentation
 
-#### Config ####
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+x 2336. One set of ground-truth vessel annotations is available.
 
-transforms = Compose([Resize((363)), Pad((0, 90, 0, 91)), ToTensor()])
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 544 x 544 (after specific padding and rescaling)
+* Test samples: 30
+* Split reference: [ORLANDO-2017]_
+"""
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
+    [
+        Resize((363)),
+        Pad((0, 90, 0, 91)),
+        ToTensor(),
+    ]
+)
 
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="test", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf608.py b/bob/ip/binseg/configs/datasets/hrf608.py
index 7b232ea769872ec68247f31ac29f8235dc598bde..a1d4fbf900141676fe470eebb075d3a5a390f86a 100644
--- a/bob/ip/binseg/configs/datasets/hrf608.py
+++ b/bob/ip/binseg/configs/datasets/hrf608.py
@@ -1,13 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (training set) for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+x 2336. One set of ground-truth vessel annotations is available.
 
-#### Config ####
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 608 x 608 (after specific padding and rescaling)
+* Training samples: 15
+* Split reference: [ORLANDO-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Pad((0, 345, 0, 345)),
         Resize(608),
@@ -19,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrf960.py b/bob/ip/binseg/configs/datasets/hrf960.py
index 059a831c63fbccdb884b1133fde8f9d7ccc24d93..2dd12ef62976ec0994be4eb2925f7f5e371177c5 100644
--- a/bob/ip/binseg/configs/datasets/hrf960.py
+++ b/bob/ip/binseg/configs/datasets/hrf960.py
@@ -1,13 +1,21 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
-from bob.db.hrf import Database as HRF
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""HRF (training set) for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+x 2336. One set of ground-truth vessel annotations is available.
 
-#### Config ####
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 960 x 960 (after specific padding and rescaling)
+* Training samples: 15
+* Split reference: [ORLANDO-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Pad((0, 584, 0, 584)),
         Resize((960)),
@@ -19,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/hrftest.py b/bob/ip/binseg/configs/datasets/hrftest.py
index d106365a05e1e245a3d3073d1c25ec9489b883a4..0ae5d7630dbb870d19ab33a86980c5610866b8f5 100644
--- a/bob/ip/binseg/configs/datasets/hrftest.py
+++ b/bob/ip/binseg/configs/datasets/hrftest.py
@@ -4,26 +4,20 @@
 """HRF (test set) for Vessel Segmentation
 
 The database includes 15 images of each healthy, diabetic retinopathy (DR), and
-glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3304
+glaucomatous eyes.  It contains 45 eye fundus images with a resolution of 3504
 x 2336. One set of ground-truth vessel annotations is available.
 
 * Reference: [HRF-2013]_
 * Original resolution (height x width): 2336 x 3504
-* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling)
+* Configuration resolution: 2336 x 3296 (after specific cropping and rescaling)
 * Test samples: 30
 * Split reference: [ORLANDO-2017]_
 """
 
-from bob.db.hrf import Database as HRF
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+_transforms = Compose([Crop(0, 108, 2336, 3296), ToTensor()])
 
-#### Config ####
-
-transforms = Compose([Crop(0, 108, 2336, 3296), ToTensor()])
-
-# bob.db.dataset init
-bobdb = HRF(protocol="default")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="test", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.hrf import dataset as hrf
+dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/data/hrf/__init__.py b/bob/ip/binseg/data/hrf/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e3b3fa804a3ae8f2b0f113f1b0602ae2477ece7f
--- /dev/null
+++ b/bob/ip/binseg/data/hrf/__init__.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+"""HRF dataset for Vessel Segmentation
+
+The database includes 15 images of each healthy, diabetic retinopathy (DR), and
+glaucomatous eyes.  It contains a total  of 45 eye fundus images with a
+resolution of 3304 x 2336. One set of ground-truth vessel annotations is
+available.
+
+* Reference: [HRF-2013]_
+* Original resolution (height x width): 2336 x 3504
+* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling)
+* Split reference: [ORLANDO-2017]_
+* Protocol ``default``:
+
+  * Training samples: 15 (including labels)
+  * Test samples: 30 (including labels)
+
+"""
+
+import os
+import pkg_resources
+
+import bob.extension
+
+from ..jsondataset import JSONDataset
+from ..loader import load_pil_rgb, load_pil_1
+
+_protocols = [
+        pkg_resources.resource_filename(__name__, "default.json"),
+        ]
+
+_root_path = bob.extension.rc.get('bob.ip.binseg.hrf.datadir',
+        os.path.realpath(os.curdir))
+
+def _loader(s):
+    return dict(
+            data=load_pil_rgb(s["data"]),
+            label=load_pil_1(s["label"]),
+            )
+
+dataset = JSONDataset(protocols=_protocols, root_path=_root_path, loader=_loader)
+"""HRF dataset object"""
diff --git a/bob/ip/binseg/data/hrf/default.json b/bob/ip/binseg/data/hrf/default.json
new file mode 100644
index 0000000000000000000000000000000000000000..87f29ad575e071c2abae8118c6b99c3d19dc24b8
--- /dev/null
+++ b/bob/ip/binseg/data/hrf/default.json
@@ -0,0 +1,231 @@
+{
+ "train": [
+  [
+   "images/01_dr.JPG",
+   "manual1/01_dr.tif",
+   "mask/01_dr_mask.tif"
+  ],
+  [
+   "images/02_dr.JPG",
+   "manual1/02_dr.tif",
+   "mask/02_dr_mask.tif"
+  ],
+  [
+   "images/03_dr.JPG",
+   "manual1/03_dr.tif",
+   "mask/03_dr_mask.tif"
+  ],
+  [
+   "images/04_dr.JPG",
+   "manual1/04_dr.tif",
+   "mask/04_dr_mask.tif"
+  ],
+  [
+   "images/05_dr.JPG",
+   "manual1/05_dr.tif",
+   "mask/05_dr_mask.tif"
+  ],
+  [
+   "images/01_g.jpg",
+   "manual1/01_g.tif",
+   "mask/01_g_mask.tif"
+  ],
+  [
+   "images/02_g.jpg",
+   "manual1/02_g.tif",
+   "mask/02_g_mask.tif"
+  ],
+  [
+   "images/03_g.jpg",
+   "manual1/03_g.tif",
+   "mask/03_g_mask.tif"
+  ],
+  [
+   "images/04_g.jpg",
+   "manual1/04_g.tif",
+   "mask/04_g_mask.tif"
+  ],
+  [
+   "images/05_g.jpg",
+   "manual1/05_g.tif",
+   "mask/05_g_mask.tif"
+  ],
+  [
+   "images/01_h.jpg",
+   "manual1/01_h.tif",
+   "mask/01_h_mask.tif"
+  ],
+  [
+   "images/02_h.jpg",
+   "manual1/02_h.tif",
+   "mask/02_h_mask.tif"
+  ],
+  [
+   "images/03_h.jpg",
+   "manual1/03_h.tif",
+   "mask/03_h_mask.tif"
+  ],
+  [
+   "images/04_h.jpg",
+   "manual1/04_h.tif",
+   "mask/04_h_mask.tif"
+  ],
+  [
+   "images/05_h.jpg",
+   "manual1/05_h.tif",
+   "mask/05_h_mask.tif"
+  ]
+ ],
+ "test": [
+  [
+   "images/06_dr.JPG",
+   "manual1/06_dr.tif",
+   "mask/06_dr_mask.tif"
+  ],
+  [
+   "images/07_dr.JPG",
+   "manual1/07_dr.tif",
+   "mask/07_dr_mask.tif"
+  ],
+  [
+   "images/08_dr.JPG",
+   "manual1/08_dr.tif",
+   "mask/08_dr_mask.tif"
+  ],
+  [
+   "images/09_dr.JPG",
+   "manual1/09_dr.tif",
+   "mask/09_dr_mask.tif"
+  ],
+  [
+   "images/10_dr.JPG",
+   "manual1/10_dr.tif",
+   "mask/10_dr_mask.tif"
+  ],
+  [
+   "images/11_dr.JPG",
+   "manual1/11_dr.tif",
+   "mask/11_dr_mask.tif"
+  ],
+  [
+   "images/12_dr.JPG",
+   "manual1/12_dr.tif",
+   "mask/12_dr_mask.tif"
+  ],
+  [
+   "images/13_dr.JPG",
+   "manual1/13_dr.tif",
+   "mask/13_dr_mask.tif"
+  ],
+  [
+   "images/14_dr.JPG",
+   "manual1/14_dr.tif",
+   "mask/14_dr_mask.tif"
+  ],
+  [
+   "images/15_dr.JPG",
+   "manual1/15_dr.tif",
+   "mask/15_dr_mask.tif"
+  ],
+  [
+   "images/06_g.jpg",
+   "manual1/06_g.tif",
+   "mask/06_g_mask.tif"
+  ],
+  [
+   "images/07_g.jpg",
+   "manual1/07_g.tif",
+   "mask/07_g_mask.tif"
+  ],
+  [
+   "images/08_g.jpg",
+   "manual1/08_g.tif",
+   "mask/08_g_mask.tif"
+  ],
+  [
+   "images/09_g.jpg",
+   "manual1/09_g.tif",
+   "mask/09_g_mask.tif"
+  ],
+  [
+   "images/10_g.jpg",
+   "manual1/10_g.tif",
+   "mask/10_g_mask.tif"
+  ],
+  [
+   "images/11_g.jpg",
+   "manual1/11_g.tif",
+   "mask/11_g_mask.tif"
+  ],
+  [
+   "images/12_g.jpg",
+   "manual1/12_g.tif",
+   "mask/12_g_mask.tif"
+  ],
+  [
+   "images/13_g.jpg",
+   "manual1/13_g.tif",
+   "mask/13_g_mask.tif"
+  ],
+  [
+   "images/14_g.jpg",
+   "manual1/14_g.tif",
+   "mask/14_g_mask.tif"
+  ],
+  [
+   "images/15_g.jpg",
+   "manual1/15_g.tif",
+   "mask/15_g_mask.tif"
+  ],
+  [
+   "images/06_h.jpg",
+   "manual1/06_h.tif",
+   "mask/06_h_mask.tif"
+  ],
+  [
+   "images/07_h.jpg",
+   "manual1/07_h.tif",
+   "mask/07_h_mask.tif"
+  ],
+  [
+   "images/08_h.jpg",
+   "manual1/08_h.tif",
+   "mask/08_h_mask.tif"
+  ],
+  [
+   "images/09_h.jpg",
+   "manual1/09_h.tif",
+   "mask/09_h_mask.tif"
+  ],
+  [
+   "images/10_h.jpg",
+   "manual1/10_h.tif",
+   "mask/10_h_mask.tif"
+  ],
+  [
+   "images/11_h.jpg",
+   "manual1/11_h.tif",
+   "mask/11_h_mask.tif"
+  ],
+  [
+   "images/12_h.jpg",
+   "manual1/12_h.tif",
+   "mask/12_h_mask.tif"
+  ],
+  [
+   "images/13_h.jpg",
+   "manual1/13_h.tif",
+   "mask/13_h_mask.tif"
+  ],
+  [
+   "images/14_h.jpg",
+   "manual1/14_h.tif",
+   "mask/14_h_mask.tif"
+  ],
+  [
+   "images/15_h.jpg",
+   "manual1/15_h.tif",
+   "mask/15_h_mask.tif"
+  ]
+ ]
+}
\ No newline at end of file
diff --git a/bob/ip/binseg/data/hrf/test.py b/bob/ip/binseg/data/hrf/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..1cb21407c872611dc772ac9c5c50c8dcee309c8d
--- /dev/null
+++ b/bob/ip/binseg/data/hrf/test.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+
+"""Tests for STARE"""
+
+import os
+import nose.tools
+
+from ..utils import rc_variable_set, DelayedSample2TorchDataset
+from ..transforms import Compose, Crop, Resize
+from . import dataset
+
+
+def test_protocol_consitency():
+
+    subset = dataset.subsets("default")
+    nose.tools.eq_(len(subset), 2)
+
+    assert "train" in subset
+    nose.tools.eq_(len(subset["train"]), 15)
+    for s in subset["train"]:
+        assert s.key.startswith(os.path.join("images", "0"))
+
+    assert "test" in subset
+    nose.tools.eq_(len(subset["test"]), 30)
+    for s in subset["test"]:
+        assert s.key.startswith("images")
+
+
+@rc_variable_set('bob.ip.binseg.hrf.datadir')
+def test_loading():
+
+    def _check_sample(s):
+        data = s.data
+        assert isinstance(data, dict)
+        nose.tools.eq_(len(data), 2)
+        assert "data" in data
+        nose.tools.eq_(data["data"].size, (3504, 2336))
+        nose.tools.eq_(data["data"].mode, "RGB")
+        assert "label" in data
+        nose.tools.eq_(data["label"].size, (3504, 2336))
+        nose.tools.eq_(data["label"].mode, "1")
+
+    subset = dataset.subsets("default")
+    for s in subset["train"]: _check_sample(s)
+    for s in subset["test"]: _check_sample(s)
+
+
+@rc_variable_set('bob.ip.binseg.stare.datadir')
+def test_check():
+    nose.tools.eq_(dataset.check(), 0)
+
+
+@rc_variable_set('bob.ip.binseg.stare.datadir')
+def test_torch_dataset():
+
+    def _check_sample(s):
+        nose.tools.eq_(len(s), 3)
+        assert isinstance(s[0], str)
+        nose.tools.eq_(s[1].size, (1648, 1168))
+        nose.tools.eq_(s[1].mode, "RGB")
+        nose.tools.eq_(s[2].size, (1648, 1168))
+        nose.tools.eq_(s[2].mode, "1")
+
+
+    transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168))])
+
+    subset = dataset.subsets("default")
+
+    torch_dataset = DelayedSample2TorchDataset(subset["train"], transforms)
+    nose.tools.eq_(len(torch_dataset), 15)
+    for s in torch_dataset: _check_sample(s)
+
+    torch_dataset = DelayedSample2TorchDataset(subset["test"], transforms)
+    nose.tools.eq_(len(torch_dataset), 30)
+    for s in torch_dataset: _check_sample(s)
diff --git a/bob/ip/binseg/data/jsondataset.py b/bob/ip/binseg/data/jsondataset.py
index 99c554bfec6fe6482719aecfcbc27e05d4a08a89..6ce86a20cf0c8576fc423d38db2cdd8b8da30fc5 100644
--- a/bob/ip/binseg/data/jsondataset.py
+++ b/bob/ip/binseg/data/jsondataset.py
@@ -122,6 +122,8 @@ class JSONDataset:
 
         """
 
+        logger.info(f"Checking dataset at '{self.root_path}'...")
+
         errors = 0
         for proto in self.protocols:
             logger.info(f"Checking protocol '{proto}'...")
diff --git a/bob/ip/binseg/script/dataset.py b/bob/ip/binseg/script/dataset.py
index b00d225e5af13faf394ec945acbc91986b4eee59..940f9ef072a14bdc3c95078f7c336cb705742d4c 100644
--- a/bob/ip/binseg/script/dataset.py
+++ b/bob/ip/binseg/script/dataset.py
@@ -113,13 +113,16 @@ def check(dataset, **kwargs):
     if dataset:  #check only some
         to_check = [k for k in to_check if k.group("name") in dataset]
 
-    if not dataset:
+    if not to_check:
         click.echo("No configured datasets matching specifications")
         click.echo("Try bob binseg dataset list --help to get help in "
                 "configuring a dataset")
     else:
+        errors = 0
         for k in to_check:
             click.echo(f"Checking \"{k.group('name')}\" dataset...")
             module = importlib.import_module(f"...data.{k.group('name')}",
                     __name__)
-            module.dataset.check()
+            errors += module.dataset.check()
+        if not errors:
+            click.echo(f"No errors reported")
diff --git a/conda/meta.yaml b/conda/meta.yaml
index 1b1a76156dcc2f110a57c85302c8a6c28cdb4002..dd4d78948edae9bc691547907184627f359e9832 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -79,7 +79,6 @@ test:
     - sphinx
     - sphinx_rtd_theme
     - sphinxcontrib-programoutput
-    - bob.db.hrf
     - bob.db.drionsdb
     - bob.db.rimoner3
     - bob.db.drishtigs1
diff --git a/develop.cfg b/develop.cfg
index 9229bdf942a37e259b48ae2e724027d8b228f214..0bc61a9ea2ad1c927e7929eaf7f711c715a2e5a8 100644
--- a/develop.cfg
+++ b/develop.cfg
@@ -4,10 +4,6 @@
 [buildout]
 parts = scripts
 eggs = bob.ip.binseg
-       bob.db.drive
-       bob.db.stare
-       bob.db.chasedb1
-       bob.db.hrf
        bob.db.drionsdb
        bob.db.rimoner3
        bob.db.drishtigs1
@@ -16,11 +12,7 @@ eggs = bob.ip.binseg
 extensions = bob.buildout
              mr.developer
 auto-checkout = *
-develop = src/bob.db.drive
-          src/bob.db.stare
-          src/bob.db.chasedb1
-          src/bob.db.hrf
-          src/bob.db.drionsdb
+develop = src/bob.db.drionsdb
           src/bob.db.rimoner3
           src/bob.db.drishtigs1
           src/bob.db.refuge
@@ -33,10 +25,6 @@ verbose = true
 newest = false
 
 [sources]
-bob.db.drive      = git git@gitlab.idiap.ch:bob/bob.db.drive
-bob.db.stare      = git git@gitlab.idiap.ch:bob/bob.db.stare
-bob.db.chasedb1   = git git@gitlab.idiap.ch:bob/bob.db.chasedb1
-bob.db.hrf        = git git@gitlab.idiap.ch:bob/bob.db.hrf
 bob.db.drionsdb   = git git@gitlab.idiap.ch:bob/bob.db.drionsdb
 bob.db.rimoner3   = git git@gitlab.idiap.ch:bob/bob.db.rimoner3
 bob.db.drishtigs1 = git git@gitlab.idiap.ch:bob/bob.db.drishtigs1
diff --git a/doc/api.rst b/doc/api.rst
index 19afcc1e21c9179c45331f74c22352b15830f263..b16d442273fe8504f81627ae0d97f994db6cf8ef 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -148,7 +148,6 @@ Datasets
    bob.ip.binseg.configs.datasets.drive960
    bob.ip.binseg.configs.datasets.drivechasedb1iostarhrf608
    bob.ip.binseg.configs.datasets.drivechasedb1iostarhrf608sslstare
-   bob.ip.binseg.configs.datasets.drivestarechasedb11168
    bob.ip.binseg.configs.datasets.drivestarechasedb1hrf1024
    bob.ip.binseg.configs.datasets.drivestarechasedb1hrf1024ssliostar
    bob.ip.binseg.configs.datasets.drivestarechasedb1iostar1168