diff --git a/model_server/base/accessors.py b/model_server/base/accessors.py
index 5be57a4bb054628791bd4de8727bd20fc8671195..98aba201cb11906d4f46fb730c25c713ed81362e 100644
--- a/model_server/base/accessors.py
+++ b/model_server/base/accessors.py
@@ -51,6 +51,9 @@ class GenericImageDataAccessor(ABC):
 
 
     def get_zi(self, zi: int):
+        """
+        Return a new accessor of a specific z-coordinate
+        """
         return self._derived_accessor(
             self.data.take(
                 indices=[zi],
@@ -58,8 +61,14 @@ class GenericImageDataAccessor(ABC):
             )
         )
 
+    def get_mip(self):
+        """
+        Return a new accessor of maximum intensity projection (MIP) along z-axis
+        """
+        return self.apply(lambda x: x.max(axis=self._ga('Z'), keepdims=True))
+
 
-    def get_mono(self, channel: int, mip: bool = False, squeeze=False):
+    def get_mono(self, channel: int, mip: bool = False):
         return self.get_channels([channel], mip=mip)
 
     @property
@@ -79,7 +88,7 @@ class GenericImageDataAccessor(ABC):
     def _gc(self, channels):
         return self.get_channels(list(channels))
 
-    def _unique(self):
+    def unique(self):
         return np.unique(self.data, return_counts=True)
 
     @property
@@ -153,6 +162,14 @@ class GenericImageDataAccessor(ABC):
             func(self.data)
         )
 
+    @property
+    def info(self):
+        return {
+            'shape_dict': self.shape_dict,
+            'dtype': str(self.dtype),
+            'filepath': '',
+        }
+
 class InMemoryDataAccessor(GenericImageDataAccessor):
     def __init__(self, data):
         self._data = self.conform_data(data)
@@ -172,6 +189,12 @@ class GenericImageFileAccessor(GenericImageDataAccessor): # image data is loaded
     def read(fp: Path):
         return generate_file_accessor(fp)
 
+    @property
+    def info(self):
+        d = super().info
+        d['filepath'] = self.fpath.__str__()
+        return d
+
 class TifSingleSeriesFileAccessor(GenericImageFileAccessor):
     def __init__(self, fpath: Path):
         super().__init__(fpath)
@@ -273,7 +296,7 @@ class CziImageFileAccessor(GenericImageFileAccessor):
 
 def write_accessor_data_to_file(fpath: Path, acc: GenericImageDataAccessor, mkdir=True) -> bool:
     """
-    Export an image accessor to file.
+    Export an image accessor to file
     :param fpath: complete path including filename and extension
     :param acc: image accessor to be written
     :param mkdir: create any needed subdirectories in fpath if True
@@ -320,7 +343,7 @@ def write_accessor_data_to_file(fpath: Path, acc: GenericImageDataAccessor, mkdi
 def generate_file_accessor(fpath):
     """
     Given an image file path, return an image accessor, assuming the file is a supported format and represents
-    a single position array, which may be single or multi-channel, single plane or z-stack.
+    a single position array, which may be single or multichannel, single plane or z-stack.
     """
     if str(fpath).upper().endswith('.TIF') or str(fpath).upper().endswith('.TIFF'):
         return TifSingleSeriesFileAccessor(fpath)
@@ -470,7 +493,6 @@ def make_patch_stack_from_file(fpath):  # interpret t-dimension as patch positio
     return PatchStack(pyxcz)
 
 
-
 class Error(Exception):
     pass