diff --git a/model_server/base/roiset.py b/model_server/base/roiset.py
index 5e4a1eb21f40ccb77dcbdf51240f0aac66dbcbfd..9ff9e3e1055a10d8f9e1e8163a36858a0db5a168 100644
--- a/model_server/base/roiset.py
+++ b/model_server/base/roiset.py
@@ -687,7 +687,7 @@ class RoiSet(object):
     def get_object_identities_overlay_map(
             self,
             white_channel,
-            transparency: float = 0.0
+            transparency: float = 0.5
     ) -> InMemoryDataAccessor:
         # TODO: just make resample_to_8bit accessor method
         mono = self.acc_raw.get_mono(channel=white_channel).apply(resample_to_8bit, preserve_dtype=False).data_yxz
@@ -707,8 +707,10 @@ class RoiSet(object):
         assert id_map_yxcz.shape[3] == mono.shape[2]
         assert id_map_yxcz.dtype == mono.dtype
 
-        combined = np.stack([mono, mono, mono], axis=2) + id_map_yxcz
-        return InMemoryDataAccessor(combined)
+        combined = np.stack([mono, mono, mono], axis=2) + transparency * id_map_yxcz
+        combined_8bit = np.clip(combined, 0, 255).round().astype('uint8')
+        assert combined_8bit.max() <= 255
+        return InMemoryDataAccessor(combined_8bit)
 
     def get_serializable_dataframe(self) -> pd.DataFrame:
         return self._df.drop(['expanded_slice', 'slice', 'relative_slice', 'binary_mask'], axis=1)
diff --git a/tests/base/test_roiset.py b/tests/base/test_roiset.py
index ea86a41d71ef531dd4fc286bd776d7522810441f..8edb3d0dec6fe36e9eaae0876796ee7cd32cbf8e 100644
--- a/tests/base/test_roiset.py
+++ b/tests/base/test_roiset.py
@@ -371,7 +371,7 @@ class TestRoiSetMultichannelProducts(BaseTestRoiSetMonoProducts, unittest.TestCa
 
     def test_multichannel_to_label_ids_overlay(self):
         where = output_path / 'multichannel' / 'multichannel_label_ids_overlay'
-        acc_out = self.roiset.get_object_identities_overlay_map(white_channel=3)
+        acc_out = self.roiset.get_object_identities_overlay_map(white_channel=3, transparency=1.0)
         self.assertEqual(acc_out.chroma, 3)
         acc_out.write(where / 'overlay.tif')
 
@@ -381,6 +381,7 @@ class TestRoiSetMultichannelProducts(BaseTestRoiSetMonoProducts, unittest.TestCa
             [3, 2, 0, 1],
             [0, 1, 2, 3],
         )
+        # TODO: move composite writing option to accessor.write
         imwrite(where / 'overlay_rgb.tif', zcyx, metadata={'axes': 'ZCYX', 'mode': 'composite'}, imagej=True)
 
     def test_multichannel_annotated_zstack(self):