diff --git a/extensions/chaeo/test_zstack.py b/extensions/chaeo/test_zstack.py
index 4dfe7ec6007f38cb992fe9c7e69aa3d814662d56..e423d0c5de352d7791c1774f5cf11e79a1b81731 100644
--- a/extensions/chaeo/test_zstack.py
+++ b/extensions/chaeo/test_zstack.py
@@ -5,7 +5,7 @@ import numpy as np
 from conf.testing import output_path
 
 from extensions.chaeo.conf.testing import multichannel_zstack, pixel_classifier, pipeline_params
-from extensions.chaeo.zstack import build_stack_mask
+from extensions.chaeo.zmask import build_zmask_from_object_mask
 from model_server.accessors import generate_file_accessor, InMemoryDataAccessor, write_accessor_data_to_file
 from extensions.ilastik.models import IlastikObjectClassifierModel, IlastikPixelClassifierModel
 
@@ -26,8 +26,7 @@ class TestZStackDerivedDataProducts(unittest.TestCase):
         # write_accessor_data_to_file(output_path / 'obmap.tif', self.obmap)
 
     def test_zmask_makes_correct_boxes(self, mask_type='boxes', filters=None):
-        zmask, meta = build_stack_mask(
-            'test_zmask_with boxes',
+        zmask, meta = build_zmask_from_object_mask(
             self.obmap.get_one_channel_data(0),
             self.stack.get_one_channel_data(0),
             mask_type=mask_type,
diff --git a/extensions/chaeo/zstack.py b/extensions/chaeo/zmask.py
similarity index 88%
rename from extensions/chaeo/zstack.py
rename to extensions/chaeo/zmask.py
index 631522871a9e5cde67b18aa8b9bcc3c4fbacf3b5..0141386b82319c8dfad81d5533b296f7ffa00da4 100644
--- a/extensions/chaeo/zstack.py
+++ b/extensions/chaeo/zmask.py
@@ -6,21 +6,27 @@ from skimage.measure import find_contours, label, regionprops_table
 from model_server.accessors import GenericImageDataAccessor
 
 # build a single boolean 3d mask (objects v. bboxes) and return bounding boxes
-def build_stack_mask(desc, obmap: GenericImageDataAccessor, stack: GenericImageDataAccessor, filters=None, mask_type='contour', expand_box_by=(0, 0)): # TODO: specify boxes data type
+def build_zmask_from_object_mask(
+        obmask: GenericImageDataAccessor,
+        stack: GenericImageDataAccessor,
+        filters=None,
+        mask_type='contour',
+        expand_box_by=(0, 0)
+):
     """
-
+    Given a 2D
     filters: dict of (min, max) tuples
     expand_box_by: (xy, z) pixelsf
     """
 
     # validate inputs
-    # assert len(stack.shape) == 3, stack.shape
     assert stack.chroma == 1
     assert stack.shape_dict['Z'] > 1
-    assert mask_type in ('contours', 'boxes'), mask_type # TODO: replace with call to validator
-
-    assert obmap.is_mask()
-    lamap = label(obmap.data[:, :, 0, 0])
+    assert mask_type in ('contours', 'boxes'), mask_type
+    assert obmask.is_mask()
+    assert obmask.chroma == 1
+    assert obmask.shape_dict['Z'] == 1
+    lamap = label(obmask.data[:, :, 0, 0])
 
     # build object query
     query_str = 'label > 0'  # always true