diff --git a/model_server/base/roiset.py b/model_server/base/roiset.py
index 2b5d461310ea24a5d7ec47a748dc859d5b12e80c..510b9fe3ea43884dcb200195270d370f219c6715 100644
--- a/model_server/base/roiset.py
+++ b/model_server/base/roiset.py
@@ -864,7 +864,8 @@ class RoiSet(object):
             if self.is_3d and make_3d:
                 return patch
             elif self.is_3d:
-                return patch[:, :, :, roi.zi: roi.zi + 1]
+                rzi = roi.zi - roi.z0
+                return patch[:, :, rzi: rzi + 1]
             else:
                 return np.expand_dims(patch, 2)
 
diff --git a/tests/base/test_roiset.py b/tests/base/test_roiset.py
index 733cf3d85153aa962188b7b0052f3be9a3142418..a07336545bf27f1e85dcfd679e26578f95bc817e 100644
--- a/tests/base/test_roiset.py
+++ b/tests/base/test_roiset.py
@@ -302,7 +302,7 @@ class TestRoiSet3dProducts(unittest.TestCase):
                     'is_patch_mask': True,
                 },
                 '2d_masks': {
-                    'make_3d': True,
+                    'make_3d': False,
                     'is_patch_mask': True,
                 },
             },
@@ -322,7 +322,7 @@ class TestRoiSet3dProducts(unittest.TestCase):
 
         self.assertTrue(any([_get_nz_from_file(f) > 1 for f in res['patches_3d']]))
         self.assertTrue(any([_get_nz_from_file(f) > 1 for f in res['patches_3d_masks']]))
-        self.assertTrue(any([_get_nz_from_file(f) == 1 for f in res['patches_2d_masks']]))
+        self.assertTrue(all([_get_nz_from_file(f) == 1 for f in res['patches_2d_masks']]))
 
 
     def test_run_export_mono_3d_labels_overlay(self):