diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024.py
index 4bff79a5d7fda3faff10ff487d2ba176d5ffb2d8..fcdfa8788c9cc11c9cdac8c9ee6d4c778fde3ff9 100644
--- a/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024.py
+++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024.py
@@ -1,10 +1,13 @@
-from bob.ip.binseg.configs.datasets.drive1024 import dataset as drive
-from bob.ip.binseg.configs.datasets.stare1024 import dataset as stare
-from bob.ip.binseg.configs.datasets.hrf1024 import dataset as hrf
-from bob.ip.binseg.configs.datasets.chasedb11024 import dataset as chase
-import torch
+#!/usr/bin/env python
+# coding=utf-8
 
-#### Config ####
+"""COVD-IOSTAR (training set) for Vessel Segmentation
+"""
 
-# PyTorch dataset
-dataset = torch.utils.data.ConcatDataset([drive, stare, hrf, chase])
+from bob.ip.binseg.configs.datasets.drive1024 import dataset as _drive
+from bob.ip.binseg.configs.datasets.stare1024 import dataset as _stare
+from bob.ip.binseg.configs.datasets.hrf1024 import dataset as _hrf
+from bob.ip.binseg.configs.datasets.chasedb11024 import dataset as _chase
+
+import torch.utils.data
+dataset = torch.utils.data.ConcatDataset([_drive, _stare, _hrf, _chase])
diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024ssliostar.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024ssliostar.py
index f9a9107f22728289ed3d7cbe22a7e21a2ab56d69..5dbd5b215809d01a1c164a8e14681098074f819d 100644
--- a/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024ssliostar.py
+++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1hrf1024ssliostar.py
@@ -1,35 +1,15 @@
-from bob.ip.binseg.configs.datasets.drive1024 import dataset as drive
-from bob.ip.binseg.configs.datasets.stare1024 import dataset as stare
-from bob.ip.binseg.configs.datasets.hrf1024 import dataset as hrf
-from bob.ip.binseg.configs.datasets.chasedb11024 import dataset as chasedb
-from bob.db.iostar import Database as IOSTAR
-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
 
+"""COVD-IOSTAR + SSL (training set) for Vessel Segmentation
 
-#### Config ####
+* Configuration resolution: 1024 x 1024
 
-# PyTorch dataset
-labeled_dataset = torch.utils.data.ConcatDataset([drive, stare, hrf, chasedb])
+The dataset available in this file is composed of DRIVE, STARE, CHASE-DB1, and
+HRF (with annotated samples) and IOSTAR without labels.
+"""
 
-#### Unlabeled IOSTAR Train ####
-unlabeled_transforms = Compose(
-    [RandomHFlip(), RandomVFlip(), RandomRotation(), ColorJitter(), ToTensor()]
-)
-
-# bob.db.dataset init
-iostarbobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-unlabeled_dataset = UnLabeledBinSegDataset(
-    iostarbobdb, split="train", transform=unlabeled_transforms
-)
-
-# SSL Dataset
-
-dataset = SSLBinSegDataset(labeled_dataset, unlabeled_dataset)
+from bob.ip.binseg.configs.datasets.drivestarechasedb1hrf1024 import dataset as _labelled
+from bob.ip.binseg.configs.datasets.iostarvessel import dataset as _unlabelled
+from bob.ip.binseg.data.utils import SSLDataset
+dataset = SSLDataset(_labelled, _unlabelled)
diff --git a/bob/ip/binseg/configs/datasets/iostarod.py b/bob/ip/binseg/configs/datasets/iostarod.py
index c905a05f3bf667a8295ea5b4f52c27f5648ea59a..78a5e91c091bbac62b1136e0bdbe33a681970ac6 100644
--- a/bob/ip/binseg/configs/datasets/iostarod.py
+++ b/bob/ip/binseg/configs/datasets/iostarod.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
 """IOSTAR (training set) for Optic Disc Segmentation
 
@@ -15,18 +15,18 @@ dataset includes annotations for the optic disc and the artery/vein ratio.
 * Split reference: [MEYER-2017]_
 """
 
-from bob.db.iostar import Database as IOSTAR
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
-
-#### Config ####
-
-transforms = Compose(
-    [RandomHFlip(), RandomVFlip(), RandomRotation(), ColorJitter(), ToTensor()]
+_transforms = Compose(
+    [
+        RandomHFlip(),
+        RandomVFlip(),
+        RandomRotation(),
+        ColorJitter(),
+        ToTensor(),
+    ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_od")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("optic-disc")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarodtest.py b/bob/ip/binseg/configs/datasets/iostarodtest.py
index d4650b3ef1e93706fa923542514af851d90e802a..872600441e9b30c96248a8fd42e7174d2962a04e 100644
--- a/bob/ip/binseg/configs/datasets/iostarodtest.py
+++ b/bob/ip/binseg/configs/datasets/iostarodtest.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-"""IOSTAR (test set) for Optic Disc Segmentation
+"""IOSTAR (training set) for Optic Disc Segmentation
 
 The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
 1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
@@ -15,16 +15,10 @@ dataset includes annotations for the optic disc and the artery/vein ratio.
 * Split reference: [MEYER-2017]_
 """
 
-from bob.db.iostar import Database as IOSTAR
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+_transforms = Compose([ToTensor()])
 
-#### Config ####
-
-transforms = Compose([ToTensor()])
-
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_od")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="test", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("optic-disc")["test"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvessel.py b/bob/ip/binseg/configs/datasets/iostarvessel.py
index 9cda4256077ed73eb58bb58be7c17df8d13bfa8a..c7b44fefb2e9c8edb009d2beee20072173007967 100644
--- a/bob/ip/binseg/configs/datasets/iostarvessel.py
+++ b/bob/ip/binseg/configs/datasets/iostarvessel.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
 """IOSTAR (training set) for Vessel Segmentation
 
@@ -15,18 +15,18 @@ dataset includes annotations for the optic disc and the artery/vein ratio.
 * Split reference: [MEYER-2017]_
 """
 
-from bob.db.iostar import Database as IOSTAR
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
-
-#### Config ####
-
-transforms = Compose(
-    [RandomHFlip(), RandomVFlip(), RandomRotation(), ColorJitter(), ToTensor()]
+_transforms = Compose(
+    [
+        RandomHFlip(),
+        RandomVFlip(),
+        RandomRotation(),
+        ColorJitter(),
+        ToTensor(),
+    ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvessel1168.py b/bob/ip/binseg/configs/datasets/iostarvessel1168.py
index c58bdf6679da1fc33bd5ac44ca893e42134daa10..6fe05ee2d682339b8cd43b34e84f82f69145fefd 100644
--- a/bob/ip/binseg/configs/datasets/iostarvessel1168.py
+++ b/bob/ip/binseg/configs/datasets/iostarvessel1168.py
@@ -1,13 +1,22 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-from bob.db.iostar import Database as IOSTAR
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""IOSTAR (training set) for Vessel Segmentation
+
+The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
+1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
+experts working in the field of retinal image analysis. Additionally the
+dataset includes annotations for the optic disc and the artery/vein ratio.
 
-#### Config ####
+* Reference: [IOSTAR-2016]_
+* Original resolution (height x width): 1024 x 1024
+* Configuration resolution: 1648 x 1168
+* Training samples: 20
+* Split reference: [MEYER-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         RandomRotation(),
         Crop(144, 0, 768, 1024),
@@ -20,8 +29,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvessel544.py b/bob/ip/binseg/configs/datasets/iostarvessel544.py
index 31c513952fdfce41c2f520a197a873775a898fe5..2e48cfd9d694329ca3ff90f28eabe0716599d56e 100644
--- a/bob/ip/binseg/configs/datasets/iostarvessel544.py
+++ b/bob/ip/binseg/configs/datasets/iostarvessel544.py
@@ -1,13 +1,22 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-from bob.db.iostar import Database as IOSTAR
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""IOSTAR (training set) for Vessel Segmentation
+
+The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
+1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
+experts working in the field of retinal image analysis. Additionally the
+dataset includes annotations for the optic disc and the artery/vein ratio.
 
-#### Config ####
+* Reference: [IOSTAR-2016]_
+* Original resolution (height x width): 1024 x 1024
+* Configuration resolution: 544 x 544
+* Training samples: 20
+* Split reference: [MEYER-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Resize(544),
         RandomHFlip(),
@@ -18,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvessel608.py b/bob/ip/binseg/configs/datasets/iostarvessel608.py
index 04280727513fa3faa548f6a2b55d9c165c14e0cc..e5454a9f1a6311700d891dbbd4d65adc17d73255 100644
--- a/bob/ip/binseg/configs/datasets/iostarvessel608.py
+++ b/bob/ip/binseg/configs/datasets/iostarvessel608.py
@@ -1,13 +1,22 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-from bob.db.iostar import Database as IOSTAR
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""IOSTAR (training set) for Vessel Segmentation
+
+The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
+1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
+experts working in the field of retinal image analysis. Additionally the
+dataset includes annotations for the optic disc and the artery/vein ratio.
 
-#### Config ####
+* Reference: [IOSTAR-2016]_
+* Original resolution (height x width): 1024 x 1024
+* Configuration resolution: 700 x 608
+* Training samples: 20
+* Split reference: [MEYER-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Pad((81, 0, 81, 0)),
         Resize(608),
@@ -19,8 +28,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvessel960.py b/bob/ip/binseg/configs/datasets/iostarvessel960.py
index 600a8cff35d3a8993a949fda5f6e7c347a212ec0..e2206848b9d398a98ed219b3021eb4039ee871bf 100644
--- a/bob/ip/binseg/configs/datasets/iostarvessel960.py
+++ b/bob/ip/binseg/configs/datasets/iostarvessel960.py
@@ -1,13 +1,22 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-from bob.db.iostar import Database as IOSTAR
-from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+"""IOSTAR (training set) for Vessel Segmentation
+
+The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
+1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
+experts working in the field of retinal image analysis. Additionally the
+dataset includes annotations for the optic disc and the artery/vein ratio.
 
-#### Config ####
+* Reference: [IOSTAR-2016]_
+* Original resolution (height x width): 1024 x 1024
+* Configuration resolution: 960 x 960
+* Training samples: 20
+* Split reference: [MEYER-2017]_
+"""
 
-transforms = Compose(
+from bob.ip.binseg.data.transforms import *
+_transforms = Compose(
     [
         Resize(960),
         RandomHFlip(),
@@ -18,8 +27,7 @@ transforms = Compose(
     ]
 )
 
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="train", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["train"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/configs/datasets/iostarvesseltest.py b/bob/ip/binseg/configs/datasets/iostarvesseltest.py
index 54a7993e3df0127f420eec5325c276a751b92d75..77051798938841693443a475bf09d31edf6d8b7a 100644
--- a/bob/ip/binseg/configs/datasets/iostarvesseltest.py
+++ b/bob/ip/binseg/configs/datasets/iostarvesseltest.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
-# -*- coding: utf-8 -*-
+# coding=utf-8
 
-"""IOSTAR (test set) for Vessel Segmentation
+"""IOSTAR (training set) for Vessel Segmentation
 
 The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
 1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
@@ -11,20 +11,14 @@ dataset includes annotations for the optic disc and the artery/vein ratio.
 * Reference: [IOSTAR-2016]_
 * Original resolution (height x width): 1024 x 1024
 * Configuration resolution: 1024 x 1024
-* Training samples: 10
+* Test samples: 10
 * Split reference: [MEYER-2017]_
 """
 
-from bob.db.iostar import Database as IOSTAR
 from bob.ip.binseg.data.transforms import *
-from bob.ip.binseg.data.binsegdataset import BinSegDataset
+_transforms = Compose([ToTensor()])
 
-#### Config ####
-
-transforms = Compose([ToTensor()])
-
-# bob.db.dataset init
-bobdb = IOSTAR(protocol="default_vessel")
-
-# PyTorch dataset
-dataset = BinSegDataset(bobdb, split="test", transform=transforms)
+from bob.ip.binseg.data.utils import DelayedSample2TorchDataset
+from bob.ip.binseg.data.iostar import dataset as iostar
+dataset = DelayedSample2TorchDataset(iostar.subsets("vessel")["test"],
+        transform=_transforms)
diff --git a/bob/ip/binseg/data/hrf/__init__.py b/bob/ip/binseg/data/hrf/__init__.py
index e3b3fa804a3ae8f2b0f113f1b0602ae2477ece7f..b3d82263edb75cd42fd1de76145c1dca0829dd9c 100644
--- a/bob/ip/binseg/data/hrf/__init__.py
+++ b/bob/ip/binseg/data/hrf/__init__.py
@@ -38,6 +38,7 @@ def _loader(s):
     return dict(
             data=load_pil_rgb(s["data"]),
             label=load_pil_1(s["label"]),
+            mask=load_pil_1(s["mask"]),
             )
 
 dataset = JSONDataset(protocols=_protocols, root_path=_root_path, loader=_loader)
diff --git a/bob/ip/binseg/data/hrf/test.py b/bob/ip/binseg/data/hrf/test.py
index 881c9a84acd02c0c095f87105df8d48f923fdae9..508280410f19db519c939a747d4661bc3bad0c6b 100644
--- a/bob/ip/binseg/data/hrf/test.py
+++ b/bob/ip/binseg/data/hrf/test.py
@@ -34,13 +34,16 @@ def test_loading():
     def _check_sample(s):
         data = s.data
         assert isinstance(data, dict)
-        nose.tools.eq_(len(data), 2)
+        nose.tools.eq_(len(data), 3)
         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")
+        assert "mask" in data
+        nose.tools.eq_(data["mask"].size, (3504, 2336))
+        nose.tools.eq_(data["mask"].mode, "1")
 
     subset = dataset.subsets("default")
     for s in subset["train"]: _check_sample(s)
@@ -56,12 +59,14 @@ def test_check():
 def test_torch_dataset():
 
     def _check_sample(s):
-        nose.tools.eq_(len(s), 3)
+        nose.tools.eq_(len(s), 4)
         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")
+        nose.tools.eq_(s[3].size, (1648, 1168))
+        nose.tools.eq_(s[3].mode, "1")
 
 
     transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168))])
diff --git a/bob/ip/binseg/data/iostar/__init__.py b/bob/ip/binseg/data/iostar/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..b8e23eb040cd3996a7eaddd0b757fbdf0a510be6
--- /dev/null
+++ b/bob/ip/binseg/data/iostar/__init__.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+"""IOSTAR (training set) for Vessel and Optic-Disc Segmentation
+
+The IOSTAR vessel segmentation dataset includes 30 images with a resolution of
+1024 × 1024 pixels. All the vessels in this dataset are annotated by a group of
+experts working in the field of retinal image analysis. Additionally the
+dataset includes annotations for the optic disc and the artery/vein ratio.
+
+* Reference: [IOSTAR-2016]_
+* Original resolution (height x width): 1024 x 1024
+* Split reference: [MEYER-2017]_
+* Protocol ``vessel``:
+
+  * Training samples: 20 (including labels and masks)
+  * Test samples: 10 (including labels and masks)
+
+* Protocol ``optic-disc``:
+
+  * Training samples: 20 (including labels and masks)
+  * Test samples: 10 (including labels and masks)
+"""
+
+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__, "vessel.json"),
+        pkg_resources.resource_filename(__name__, "optic-disc.json"),
+        ]
+
+_root_path = bob.extension.rc.get('bob.ip.binseg.iostar.datadir',
+        os.path.realpath(os.curdir))
+
+def _loader(s):
+    return dict(
+            data=load_pil_rgb(s["data"]),
+            label=load_pil_1(s["label"]),
+            mask=load_pil_1(s["mask"]),
+            )
+
+dataset = JSONDataset(protocols=_protocols, root_path=_root_path, loader=_loader)
+"""IOSTAR dataset object"""
diff --git a/bob/ip/binseg/data/iostar/default.json b/bob/ip/binseg/data/iostar/default.json
new file mode 100644
index 0000000000000000000000000000000000000000..87f29ad575e071c2abae8118c6b99c3d19dc24b8
--- /dev/null
+++ b/bob/ip/binseg/data/iostar/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/iostar/optic-disc.json b/bob/ip/binseg/data/iostar/optic-disc.json
new file mode 100644
index 0000000000000000000000000000000000000000..7f583b6d8d9fbdde805a4a359857a89a428d84c7
--- /dev/null
+++ b/bob/ip/binseg/data/iostar/optic-disc.json
@@ -0,0 +1,156 @@
+{
+ "train": [
+  [
+   "image/STAR 01_OSC.jpg",
+   "mask_OD/STAR 01_OSC_ODMask.tif",
+   "mask/STAR 01_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 02_ODC.jpg",
+   "mask_OD/STAR 02_ODC_ODMask.tif",
+   "mask/STAR 02_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 03_OSN.jpg",
+   "mask_OD/STAR 03_OSN_ODMask.tif",
+   "mask/STAR 03_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 05_ODC.jpg",
+   "mask_OD/STAR 05_ODC_ODMask.tif",
+   "mask/STAR 05_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 06_ODN.jpg",
+   "mask_OD/STAR 06_ODN_ODMask.tif",
+   "mask/STAR 06_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 08_OSN.jpg",
+   "mask_OD/STAR 08_OSN_ODMask.tif",
+   "mask/STAR 08_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 09_OSN.jpg",
+   "mask_OD/STAR 09_OSN_ODMask.tif",
+   "mask/STAR 09_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 10_OSN.jpg",
+   "mask_OD/STAR 10_OSN_ODMask.tif",
+   "mask/STAR 10_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 13_OSN.jpg",
+   "mask_OD/STAR 13_OSN_ODMask.tif",
+   "mask/STAR 13_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 15_OSN.jpg",
+   "mask_OD/STAR 15_OSN_ODMask.tif",
+   "mask/STAR 15_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 16_OSN.jpg",
+   "mask_OD/STAR 16_OSN_ODMask.tif",
+   "mask/STAR 16_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 17_ODN.jpg",
+   "mask_OD/STAR 17_ODN_ODMask.tif",
+   "mask/STAR 17_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 20_ODC.jpg",
+   "mask_OD/STAR 20_ODC_ODMask.tif",
+   "mask/STAR 20_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 21_OSC.jpg",
+   "mask_OD/STAR 21_OSC_ODMask.tif",
+   "mask/STAR 21_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 24_OSC.jpg",
+   "mask_OD/STAR 24_OSC_ODMask.tif",
+   "mask/STAR 24_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 26_ODC.jpg",
+   "mask_OD/STAR 26_ODC_ODMask.tif",
+   "mask/STAR 26_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 28_ODN.jpg",
+   "mask_OD/STAR 28_ODN_ODMask.tif",
+   "mask/STAR 28_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 30_ODC.jpg",
+   "mask_OD/STAR 30_ODC_ODMask.tif",
+   "mask/STAR 30_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 31_ODN.jpg",
+   "mask_OD/STAR 31_ODN_ODMask.tif",
+   "mask/STAR 31_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 32_ODC.jpg",
+   "mask_OD/STAR 32_ODC_ODMask.tif",
+   "mask/STAR 32_ODC_Mask.tif"
+  ]
+ ],
+ "test": [
+  [
+   "image/STAR 34_ODC.jpg",
+   "mask_OD/STAR 34_ODC_ODMask.tif",
+   "mask/STAR 34_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 36_OSC.jpg",
+   "mask_OD/STAR 36_OSC_ODMask.tif",
+   "mask/STAR 36_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 37_ODN.jpg",
+   "mask_OD/STAR 37_ODN_ODMask.tif",
+   "mask/STAR 37_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 38_ODC.jpg",
+   "mask_OD/STAR 38_ODC_ODMask.tif",
+   "mask/STAR 38_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 39_ODC.jpg",
+   "mask_OD/STAR 39_ODC_ODMask.tif",
+   "mask/STAR 39_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 40_OSC.jpg",
+   "mask_OD/STAR 40_OSC_ODMask.tif",
+   "mask/STAR 40_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 43_OSC.jpg",
+   "mask_OD/STAR 43_OSC_ODMask.tif",
+   "mask/STAR 43_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 44_OSN.jpg",
+   "mask_OD/STAR 44_OSN_ODMask.tif",
+   "mask/STAR 44_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 45_ODC.jpg",
+   "mask_OD/STAR 45_ODC_ODMask.tif",
+   "mask/STAR 45_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 48_OSN.jpg",
+   "mask_OD/STAR 48_OSN_ODMask.tif",
+   "mask/STAR 48_OSN_Mask.tif"
+  ]
+ ]
+}
\ No newline at end of file
diff --git a/bob/ip/binseg/data/iostar/test.py b/bob/ip/binseg/data/iostar/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..b0b026db989176b6f9b652b8be8dacef17688751
--- /dev/null
+++ b/bob/ip/binseg/data/iostar/test.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+# coding=utf-8
+
+
+"""Tests for IOSTAR"""
+
+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("vessel")
+    nose.tools.eq_(len(subset), 2)
+
+    assert "train" in subset
+    nose.tools.eq_(len(subset["train"]), 20)
+    for s in subset["train"]:
+        assert s.key.startswith(os.path.join("image", "STAR "))
+
+    assert "test" in subset
+    nose.tools.eq_(len(subset["test"]), 10)
+    for s in subset["test"]:
+        assert s.key.startswith(os.path.join("image", "STAR "))
+
+    subset = dataset.subsets("optic-disc")
+    nose.tools.eq_(len(subset), 2)
+
+    assert "train" in subset
+    nose.tools.eq_(len(subset["train"]), 20)
+    for s in subset["train"]:
+        assert s.key.startswith(os.path.join("image", "STAR "))
+
+    assert "test" in subset
+    nose.tools.eq_(len(subset["test"]), 10)
+    for s in subset["test"]:
+        assert s.key.startswith(os.path.join("image", "STAR "))
+
+
+@rc_variable_set('bob.ip.binseg.iostar.datadir')
+def test_loading():
+
+    def _check_sample(s):
+        data = s.data
+        assert isinstance(data, dict)
+        nose.tools.eq_(len(data), 3)
+        assert "data" in data
+        nose.tools.eq_(data["data"].size, (1024, 1024))
+        nose.tools.eq_(data["data"].mode, "RGB")
+        assert "label" in data
+        nose.tools.eq_(data["label"].size, (1024, 1024))
+        nose.tools.eq_(data["label"].mode, "1")
+        assert "label" in data
+        nose.tools.eq_(data["label"].size, (1024, 1024))
+        nose.tools.eq_(data["label"].mode, "1")
+
+    subset = dataset.subsets("vessel")
+    for s in subset["train"]: _check_sample(s)
+    for s in subset["test"]: _check_sample(s)
+
+    subset = dataset.subsets("optic-disc")
+    for s in subset["train"]: _check_sample(s)
+    for s in subset["test"]: _check_sample(s)
+
+
+@rc_variable_set('bob.ip.binseg.iostar.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), 4)
+        assert isinstance(s[0], str)
+        nose.tools.eq_(s[1].size, (1024, 1024))
+        nose.tools.eq_(s[1].mode, "RGB")
+        nose.tools.eq_(s[2].size, (1024, 1024))
+        nose.tools.eq_(s[2].mode, "1")
+        nose.tools.eq_(s[3].size, (1024, 1024))
+        nose.tools.eq_(s[3].mode, "1")
+
+    transforms = None
+
+    subset = dataset.subsets("vessel")
+
+    torch_dataset = DelayedSample2TorchDataset(subset["train"], transforms)
+    nose.tools.eq_(len(torch_dataset), 20)
+    for s in torch_dataset: _check_sample(s)
+
+    torch_dataset = DelayedSample2TorchDataset(subset["test"], transforms)
+    nose.tools.eq_(len(torch_dataset), 10)
+    for s in torch_dataset: _check_sample(s)
+
+    subset = dataset.subsets("optic-disc")
+
+    torch_dataset = DelayedSample2TorchDataset(subset["train"], transforms)
+    nose.tools.eq_(len(torch_dataset), 20)
+    for s in torch_dataset: _check_sample(s)
+
+    torch_dataset = DelayedSample2TorchDataset(subset["test"], transforms)
+    nose.tools.eq_(len(torch_dataset), 10)
+    for s in torch_dataset: _check_sample(s)
diff --git a/bob/ip/binseg/data/iostar/vessel.json b/bob/ip/binseg/data/iostar/vessel.json
new file mode 100644
index 0000000000000000000000000000000000000000..7500058bc3cf5229da3c6148a2738a66b8e29e8f
--- /dev/null
+++ b/bob/ip/binseg/data/iostar/vessel.json
@@ -0,0 +1,156 @@
+{
+ "train": [
+  [
+   "image/STAR 01_OSC.jpg",
+   "GT/STAR 01_OSC_GT.tif",
+   "mask/STAR 01_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 02_ODC.jpg",
+   "GT/STAR 02_ODC_GT.tif",
+   "mask/STAR 02_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 03_OSN.jpg",
+   "GT/STAR 03_OSN_GT.tif",
+   "mask/STAR 03_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 05_ODC.jpg",
+   "GT/STAR 05_ODC_GT.tif",
+   "mask/STAR 05_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 06_ODN.jpg",
+   "GT/STAR 06_ODN_GT.tif",
+   "mask/STAR 06_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 08_OSN.jpg",
+   "GT/STAR 08_OSN_GT.tif",
+   "mask/STAR 08_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 09_OSN.jpg",
+   "GT/STAR 09_OSN_GT.tif",
+   "mask/STAR 09_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 10_OSN.jpg",
+   "GT/STAR 10_OSN_GT.tif",
+   "mask/STAR 10_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 13_OSN.jpg",
+   "GT/STAR 13_OSN_GT.tif",
+   "mask/STAR 13_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 15_OSN.jpg",
+   "GT/STAR 15_OSN_GT.tif",
+   "mask/STAR 15_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 16_OSN.jpg",
+   "GT/STAR 16_OSN_GT.tif",
+   "mask/STAR 16_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 17_ODN.jpg",
+   "GT/STAR 17_ODN_GT.tif",
+   "mask/STAR 17_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 20_ODC.jpg",
+   "GT/STAR 20_ODC_GT.tif",
+   "mask/STAR 20_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 21_OSC.jpg",
+   "GT/STAR 21_OSC_GT.tif",
+   "mask/STAR 21_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 24_OSC.jpg",
+   "GT/STAR 24_OSC_GT.tif",
+   "mask/STAR 24_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 26_ODC.jpg",
+   "GT/STAR 26_ODC_GT.tif",
+   "mask/STAR 26_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 28_ODN.jpg",
+   "GT/STAR 28_ODN_GT.tif",
+   "mask/STAR 28_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 30_ODC.jpg",
+   "GT/STAR 30_ODC_GT.tif",
+   "mask/STAR 30_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 31_ODN.jpg",
+   "GT/STAR 31_ODN_GT.tif",
+   "mask/STAR 31_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 32_ODC.jpg",
+   "GT/STAR 32_ODC_GT.tif",
+   "mask/STAR 32_ODC_Mask.tif"
+  ]
+ ],
+ "test": [
+  [
+   "image/STAR 34_ODC.jpg",
+   "GT/STAR 34_ODC_GT.tif",
+   "mask/STAR 34_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 36_OSC.jpg",
+   "GT/STAR 36_OSC_GT.tif",
+   "mask/STAR 36_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 37_ODN.jpg",
+   "GT/STAR 37_ODN_GT.tif",
+   "mask/STAR 37_ODN_Mask.tif"
+  ],
+  [
+   "image/STAR 38_ODC.jpg",
+   "GT/STAR 38_ODC_GT.tif",
+   "mask/STAR 38_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 39_ODC.jpg",
+   "GT/STAR 39_ODC_GT.tif",
+   "mask/STAR 39_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 40_OSC.jpg",
+   "GT/STAR 40_OSC_GT.tif",
+   "mask/STAR 40_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 43_OSC.jpg",
+   "GT/STAR 43_OSC_GT.tif",
+   "mask/STAR 43_OSC_Mask.tif"
+  ],
+  [
+   "image/STAR 44_OSN.jpg",
+   "GT/STAR 44_OSN_GT.tif",
+   "mask/STAR 44_OSN_Mask.tif"
+  ],
+  [
+   "image/STAR 45_ODC.jpg",
+   "GT/STAR 45_ODC_GT.tif",
+   "mask/STAR 45_ODC_Mask.tif"
+  ],
+  [
+   "image/STAR 48_OSN.jpg",
+   "GT/STAR 48_OSN_GT.tif",
+   "mask/STAR 48_OSN_Mask.tif"
+  ]
+ ]
+}
\ No newline at end of file
diff --git a/bob/ip/binseg/engine/evaluator.py b/bob/ip/binseg/engine/evaluator.py
index d6aff378e64cb5e2edb69bc0cb5150acf0f29564..65f1dfc2bacbb668f38020befd01e788e729cacf 100644
--- a/bob/ip/binseg/engine/evaluator.py
+++ b/bob/ip/binseg/engine/evaluator.py
@@ -17,7 +17,6 @@ import bob.io.base
 
 from ..utils.metric import base_metrics
 from ..utils.plot import precision_recall_f1iso_confintval
-from ..utils.summary import summary
 
 import logging
 logger = logging.getLogger(__name__)
diff --git a/bob/ip/binseg/engine/predictor.py b/bob/ip/binseg/engine/predictor.py
index 62446d1549b3da4193a6c81fba026ef99757b176..4e0ddd17924322ef677a4351d2def2629fa2280f 100644
--- a/bob/ip/binseg/engine/predictor.py
+++ b/bob/ip/binseg/engine/predictor.py
@@ -219,5 +219,7 @@ def run(model, data_loader, device, output_folder, overlayed_folder,
     # Save model summary
     summary_path = os.path.join(output_folder, "model-info.txt")
     logger.info(f"Saving model summary at {summary_path}...")
-
-    with open(summary_path, "w") as f: summary(model, f)
+    with open(summary_path, "wt") as f:
+        r, n = summary(model)
+        logger.info(f"Model has {n} parameters...")
+        f.write(r)
diff --git a/bob/ip/binseg/test/test_summary.py b/bob/ip/binseg/test/test_summary.py
index 1c053b4fcddd88e1621d5aea80d26ba5640d4da5..a218141f2c5f7e9b8064fd376bc859ef53f4d496 100644
--- a/bob/ip/binseg/test/test_summary.py
+++ b/bob/ip/binseg/test/test_summary.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
+import os
 import unittest
 from bob.ip.binseg.modeling.driu import build_driu
 from bob.ip.binseg.modeling.driuod import build_driuod
@@ -17,27 +18,32 @@ class Tester(unittest.TestCase):
 
     def test_summary_driu(self):
         model = build_driu()
-        param = summary(model)
+        s, param = summary(model)
+        self.assertIsInstance(s, str)
         self.assertIsInstance(param, int)
 
     def test__summary_driuod(self):
         model = build_driuod()
-        param = summary(model)
+        s, param = summary(model)
+        self.assertIsInstance(s, str)
         self.assertIsInstance(param, int)
 
     def test_summary_hed(self):
         model = build_hed()
-        param = summary(model)
+        s, param = summary(model)
+        self.assertIsInstance(s, str)
         self.assertIsInstance(param, int)
 
     def test_summary_unet(self):
         model = build_unet()
-        param = summary(model)
+        s, param = summary(model)
+        self.assertIsInstance(s, str)
         self.assertIsInstance(param, int)
 
     def test_summary_resunet(self):
         model = build_res50unet()
-        param = summary(model)
+        s, param = summary(model)
+        self.assertIsInstance(s, str)
         self.assertIsInstance(param, int)
 
 
diff --git a/bob/ip/binseg/utils/summary.py b/bob/ip/binseg/utils/summary.py
index 493d9d163833c64f26599a69e087381d54a2a62e..c5222f1a89517b119074dcda2743d411df017d20 100644
--- a/bob/ip/binseg/utils/summary.py
+++ b/bob/ip/binseg/utils/summary.py
@@ -8,20 +8,28 @@ from functools import reduce
 from torch.nn.modules.module import _addindent
 
 
-def summary(model, file=sys.stderr):
-    """Counts the number of paramters in each layers
+def summary(model):
+    """Counts the number of paramters in each model layer
 
     Parameters
     ----------
+
     model : :py:class:`torch.nn.Module`
+        model to summarize
 
     Returns
     -------
-    int
+
+    repr : str
+        a multiline string representation of the network
+
+    nparam : int
         number of parameters
+
     """
 
     def repr(model):
+
         # We treat the extra repr like the sub-module, one item per line
         extra_lines = []
         extra_repr = model.extra_repr()
@@ -50,13 +58,7 @@ def summary(model, file=sys.stderr):
                 main_str += "\n  " + "\n  ".join(lines) + "\n"
 
         main_str += ")"
-        if file is sys.stderr:
-            main_str += ", \033[92m{:,}\033[0m params".format(total_params)
-        else:
-            main_str += ", {:,} params".format(total_params)
+        main_str += ", {:,} params".format(total_params)
         return main_str, total_params
 
-    string, count = repr(model)
-    if file is not None:
-        print(string, file=file)
-    return count
+    return repr(model)
diff --git a/conda/meta.yaml b/conda/meta.yaml
index dd4d78948edae9bc691547907184627f359e9832..acf7858c47747c9f2f700a88e8b80eee7f6877f8 100644
--- a/conda/meta.yaml
+++ b/conda/meta.yaml
@@ -83,7 +83,6 @@ test:
     - bob.db.rimoner3
     - bob.db.drishtigs1
     - bob.db.refuge
-    - bob.db.iostar
 
 about:
   summary: Binary Segmentation Benchmark Package for Bob
diff --git a/doc/api.rst b/doc/api.rst
index 42270a2164228266639e1cc0d923ed6fc2b19b5c..7541a4ed8fec7fa54441e71414f9971a4e75b76a 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -34,6 +34,8 @@ Datasets
    bob.ip.binseg.data.drive
    bob.ip.binseg.data.stare
    bob.ip.binseg.data.chasedb1
+   bob.ip.binseg.data.hrf
+   bob.ip.binseg.data.iostar
 
 
 Engines
@@ -169,7 +171,6 @@ Datasets
    bob.ip.binseg.configs.datasets.iostarvessel
    bob.ip.binseg.configs.datasets.iostarvessel1168
    bob.ip.binseg.configs.datasets.iostarvessel544
-   bob.ip.binseg.configs.datasets.iostarvessel544test
    bob.ip.binseg.configs.datasets.iostarvessel608
    bob.ip.binseg.configs.datasets.iostarvessel960
    bob.ip.binseg.configs.datasets.iostarvesseltest