diff --git a/resolve/observation.py b/resolve/observation.py
index 50b16a8221f4a7933d3f401d2693b504dc118de4..69735a556c9ccc6ab33efe716f6bb4192b86abe4 100644
--- a/resolve/observation.py
+++ b/resolve/observation.py
@@ -103,23 +103,13 @@ class Observation:
             antpos.append(val)
         pol = Polarization.from_list(dct["polarization"])
         direction = Direction.from_list(dct["direction"])
-        if lo_hi_index is not None:
-            lo, hi = lo_hi_index
-            # FIXME: implement with less code duplication
-            return Observation(
-                AntennaPositions.from_list(antpos),
-                dct["vis"][:, :, lo:hi],
-                dct["weight"][:, :, lo:hi],
-                pol,
-                dct["freq"][lo:hi],
-                direction,
-            )
+        slc = slice(None) if lo_hi_index is None else slice(*lo_hi_index)
         return Observation(
             AntennaPositions.from_list(antpos),
-            dct["vis"],
-            dct["weight"],
+            dct["vis"][..., slc],
+            dct["weight"][..., slc],
             pol,
-            dct["freq"],
+            dct["freq"][slc],
             direction,
         )