diff --git a/plio/io/io_controlnetwork.py b/plio/io/io_controlnetwork.py
index 62544caa0acc6ab09d8c7333cc057dcd29b4afcb..e01dea5ec51f6dce596ee308cee1ec9f5db7fd18 100644
--- a/plio/io/io_controlnetwork.py
+++ b/plio/io/io_controlnetwork.py
@@ -169,7 +169,7 @@ class IsisStore(object):
             self._handle.seek(point_start_byte)
             cp = cnp5.ControlPointFileEntryV0005()
             pts = []
-            byte_count = 0;
+            byte_count = 0
             while byte_count < find_in_dict(pvl_header, 'PointsBytes'):
                 message_size = struct.unpack('I', self._handle.read(4))[0]
                 cp.ParseFromString(self._handle.read(message_size))
@@ -185,6 +185,9 @@ class IsisStore(object):
 
         cols = self.point_attrs + self.measure_attrs
         df = IsisControlNetwork(pts, columns=cols)
+        # Convert the (0.5, 0.5) origin pixels back to (0,0) pixels
+        df['line'] -= 0.5
+        df['sample'] -= 0.5
         df.header = pvl_header
         return df
 
@@ -259,8 +262,9 @@ class IsisStore(object):
                     if attr in g.columns:
                         setattr(measure_spec, attr, attrtype(m[attr]))
                 measure_spec.serialnumber = m.serialnumber
-                measure_spec.sample = m.x
-                measure_spec.line = m.y
+                # ISIS pixels are centered on (0.5, 0.5). NDArrays are (0,0) based.
+                measure_spec.sample = m.x + 0.5 
+                measure_spec.line = m.y + 0.5
                 measure_spec.type = m.measuretype
                 measure_iterable.append(measure_spec)
                 self.nmeasures += 1