diff --git a/plio/examples/ControlNetworks/apollo_out_v5.net b/plio/examples/ControlNetworks/apollo_out_v5.net
new file mode 100644
index 0000000000000000000000000000000000000000..e831141ed5e1e9b2f58783cc28af2bc81f8f7a43
Binary files /dev/null and b/plio/examples/ControlNetworks/apollo_out_v5.net differ
diff --git a/plio/io/ControlNetFileHeaderV0005_pb2.py b/plio/io/ControlNetFileHeaderV0005_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..26201ce1ad92e5b128e16ff8e8d36715d3834fb8
--- /dev/null
+++ b/plio/io/ControlNetFileHeaderV0005_pb2.py
@@ -0,0 +1,119 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: ControlNetFileHeaderV0005.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='ControlNetFileHeaderV0005.proto',
+  package='Isis',
+  syntax='proto2',
+  serialized_options=None,
+  serialized_pb=_b('\n\x1f\x43ontrolNetFileHeaderV0005.proto\x12\x04Isis\"\xb8\x01\n\x19\x43ontrolNetFileHeaderV0005\x12\x11\n\tnetworkId\x18\x01 \x02(\t\x12\x12\n\ntargetName\x18\x02 \x02(\t\x12\x0f\n\x07\x63reated\x18\x03 \x01(\t\x12\x14\n\x0clastModified\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x10\n\x08userName\x18\x06 \x01(\t\x12\x11\n\tnumPoints\x18\x07 \x01(\x05\x12\x13\n\x0btargetRadii\x18\n \x03(\x01')
+)
+
+
+
+
+_CONTROLNETFILEHEADERV0005 = _descriptor.Descriptor(
+  name='ControlNetFileHeaderV0005',
+  full_name='Isis.ControlNetFileHeaderV0005',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='networkId', full_name='Isis.ControlNetFileHeaderV0005.networkId', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='targetName', full_name='Isis.ControlNetFileHeaderV0005.targetName', index=1,
+      number=2, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='created', full_name='Isis.ControlNetFileHeaderV0005.created', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='lastModified', full_name='Isis.ControlNetFileHeaderV0005.lastModified', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='description', full_name='Isis.ControlNetFileHeaderV0005.description', index=4,
+      number=5, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='userName', full_name='Isis.ControlNetFileHeaderV0005.userName', index=5,
+      number=6, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='numPoints', full_name='Isis.ControlNetFileHeaderV0005.numPoints', index=6,
+      number=7, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='targetRadii', full_name='Isis.ControlNetFileHeaderV0005.targetRadii', index=7,
+      number=10, type=1, cpp_type=5, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto2',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=42,
+  serialized_end=226,
+)
+
+DESCRIPTOR.message_types_by_name['ControlNetFileHeaderV0005'] = _CONTROLNETFILEHEADERV0005
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ControlNetFileHeaderV0005 = _reflection.GeneratedProtocolMessageType('ControlNetFileHeaderV0005', (_message.Message,), dict(
+  DESCRIPTOR = _CONTROLNETFILEHEADERV0005,
+  __module__ = 'ControlNetFileHeaderV0005_pb2'
+  # @@protoc_insertion_point(class_scope:Isis.ControlNetFileHeaderV0005)
+  ))
+_sym_db.RegisterMessage(ControlNetFileHeaderV0005)
+
+
+# @@protoc_insertion_point(module_scope)
diff --git a/plio/io/ControlPointFileEntryV0005_pb2.py b/plio/io/ControlPointFileEntryV0005_pb2.py
new file mode 100644
index 0000000000000000000000000000000000000000..6b845df7b588d845ade6c72563ab8258804438ce
--- /dev/null
+++ b/plio/io/ControlPointFileEntryV0005_pb2.py
@@ -0,0 +1,634 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: ControlPointFileEntryV0005.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='ControlPointFileEntryV0005.proto',
+  package='Isis',
+  syntax='proto2',
+  serialized_options=None,
+  serialized_pb=_b('\n ControlPointFileEntryV0005.proto\x12\x04Isis\"\x82\x0e\n\x1a\x43ontrolPointFileEntryV0005\x12\n\n\x02id\x18\x01 \x02(\t\x12\x38\n\x04type\x18\x02 \x02(\x0e\x32*.Isis.ControlPointFileEntryV0005.PointType\x12\x13\n\x0b\x63hooserName\x18\x03 \x01(\t\x12\x10\n\x08\x64\x61tetime\x18\x04 \x01(\t\x12\x10\n\x08\x65\x64itLock\x18\x05 \x01(\x08\x12\x0e\n\x06ignore\x18\x06 \x01(\x08\x12\x16\n\x0ejigsawRejected\x18\x07 \x01(\x08\x12\x16\n\x0ereferenceIndex\x18\x08 \x01(\x05\x12N\n\x16\x61prioriSurfPointSource\x18\t \x01(\x0e\x32..Isis.ControlPointFileEntryV0005.AprioriSource\x12\"\n\x1a\x61prioriSurfPointSourceFile\x18\n \x01(\t\x12K\n\x13\x61prioriRadiusSource\x18\x0b \x01(\x0e\x32..Isis.ControlPointFileEntryV0005.AprioriSource\x12\x1f\n\x17\x61prioriRadiusSourceFile\x18\x0c \x01(\t\x12\x1b\n\x13latitudeConstrained\x18\r \x01(\x08\x12\x1c\n\x14longitudeConstrained\x18\x0e \x01(\x08\x12\x19\n\x11radiusConstrained\x18\x0f \x01(\x08\x12\x10\n\x08\x61prioriX\x18\x10 \x01(\x01\x12\x10\n\x08\x61prioriY\x18\x11 \x01(\x01\x12\x10\n\x08\x61prioriZ\x18\x12 \x01(\x01\x12\x18\n\x0c\x61prioriCovar\x18\x13 \x03(\x01\x42\x02\x10\x01\x12\x11\n\tadjustedX\x18\x14 \x01(\x01\x12\x11\n\tadjustedY\x18\x15 \x01(\x01\x12\x11\n\tadjustedZ\x18\x16 \x01(\x01\x12\x19\n\radjustedCovar\x18\x17 \x03(\x01\x42\x02\x10\x01\x12:\n\x03log\x18\x18 \x03(\x0b\x32-.Isis.ControlPointFileEntryV0005.PointLogData\x12:\n\x08measures\x18\x19 \x03(\x0b\x32(.Isis.ControlPointFileEntryV0005.Measure\x1al\n\x0cPointLogData\x12\x16\n\x0e\x64oubleDataType\x18\x01 \x01(\x05\x12\x17\n\x0f\x64oubleDataValue\x18\x02 \x01(\x01\x12\x14\n\x0c\x62oolDataType\x18\x03 \x01(\x05\x12\x15\n\rboolDataValue\x18\x04 \x01(\x08\x1a\x83\x05\n\x07Measure\x12\x14\n\x0cserialnumber\x18\x01 \x02(\t\x12\x42\n\x04type\x18\x02 \x02(\x0e\x32\x34.Isis.ControlPointFileEntryV0005.Measure.MeasureType\x12\x0e\n\x06sample\x18\x03 \x01(\x01\x12\x0c\n\x04line\x18\x04 \x01(\x01\x12\x16\n\x0esampleResidual\x18\x05 \x01(\x01\x12\x14\n\x0clineResidual\x18\x06 \x01(\x01\x12\x13\n\x0b\x63hoosername\x18\x07 \x01(\t\x12\x10\n\x08\x64\x61tetime\x18\x08 \x01(\t\x12\x10\n\x08\x65\x64itLock\x18\t \x01(\x08\x12\x0e\n\x06ignore\x18\n \x01(\x08\x12\x16\n\x0ejigsawRejected\x18\x0b \x01(\x08\x12\x10\n\x08\x64iameter\x18\x0c \x01(\x01\x12\x15\n\rapriorisample\x18\r \x01(\x01\x12\x13\n\x0b\x61prioriline\x18\x0e \x01(\x01\x12\x13\n\x0bsamplesigma\x18\x0f \x01(\x01\x12\x11\n\tlinesigma\x18\x10 \x01(\x01\x12\x44\n\x03log\x18\x11 \x03(\x0b\x32\x37.Isis.ControlPointFileEntryV0005.Measure.MeasureLogData\x1an\n\x0eMeasureLogData\x12\x16\n\x0e\x64oubleDataType\x18\x01 \x01(\x05\x12\x17\n\x0f\x64oubleDataValue\x18\x02 \x01(\x01\x12\x14\n\x0c\x62oolDataType\x18\x03 \x01(\x05\x12\x15\n\rboolDataValue\x18\x04 \x01(\x08\"U\n\x0bMeasureType\x12\r\n\tCandidate\x10\x00\x12\n\n\x06Manual\x10\x01\x12\x13\n\x0fRegisteredPixel\x10\x02\x12\x16\n\x12RegisteredSubPixel\x10\x03\"X\n\tPointType\x12\x08\n\x04\x46ree\x10\x02\x12\x0f\n\x0b\x43onstrained\x10\x03\x12\t\n\x05\x46ixed\x10\x04\x12\x10\n\x0cobsolete_Tie\x10\x00\x12\x13\n\x0fobsolete_Ground\x10\x01\"\x82\x01\n\rAprioriSource\x12\x08\n\x04None\x10\x00\x12\x08\n\x04User\x10\x01\x12\x15\n\x11\x41verageOfMeasures\x10\x02\x12\r\n\tReference\x10\x03\x12\r\n\tEllipsoid\x10\x04\x12\x07\n\x03\x44\x45M\x10\x05\x12\x0b\n\x07\x42\x61semap\x10\x06\x12\x12\n\x0e\x42undleSolution\x10\x07')
+)
+
+
+
+_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURETYPE = _descriptor.EnumDescriptor(
+  name='MeasureType',
+  full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='Candidate', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Manual', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='RegisteredPixel', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='RegisteredSubPixel', index=3, number=3,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=1529,
+  serialized_end=1614,
+)
+_sym_db.RegisterEnumDescriptor(_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURETYPE)
+
+_CONTROLPOINTFILEENTRYV0005_POINTTYPE = _descriptor.EnumDescriptor(
+  name='PointType',
+  full_name='Isis.ControlPointFileEntryV0005.PointType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='Free', index=0, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Constrained', index=1, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Fixed', index=2, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='obsolete_Tie', index=3, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='obsolete_Ground', index=4, number=1,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=1616,
+  serialized_end=1704,
+)
+_sym_db.RegisterEnumDescriptor(_CONTROLPOINTFILEENTRYV0005_POINTTYPE)
+
+_CONTROLPOINTFILEENTRYV0005_APRIORISOURCE = _descriptor.EnumDescriptor(
+  name='AprioriSource',
+  full_name='Isis.ControlPointFileEntryV0005.AprioriSource',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='None', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='User', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='AverageOfMeasures', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Reference', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Ellipsoid', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='DEM', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='Basemap', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='BundleSolution', index=7, number=7,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=1707,
+  serialized_end=1837,
+)
+_sym_db.RegisterEnumDescriptor(_CONTROLPOINTFILEENTRYV0005_APRIORISOURCE)
+
+
+_CONTROLPOINTFILEENTRYV0005_POINTLOGDATA = _descriptor.Descriptor(
+  name='PointLogData',
+  full_name='Isis.ControlPointFileEntryV0005.PointLogData',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='doubleDataType', full_name='Isis.ControlPointFileEntryV0005.PointLogData.doubleDataType', index=0,
+      number=1, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='doubleDataValue', full_name='Isis.ControlPointFileEntryV0005.PointLogData.doubleDataValue', index=1,
+      number=2, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='boolDataType', full_name='Isis.ControlPointFileEntryV0005.PointLogData.boolDataType', index=2,
+      number=3, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='boolDataValue', full_name='Isis.ControlPointFileEntryV0005.PointLogData.boolDataValue', index=3,
+      number=4, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto2',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=860,
+  serialized_end=968,
+)
+
+_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURELOGDATA = _descriptor.Descriptor(
+  name='MeasureLogData',
+  full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureLogData',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='doubleDataType', full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureLogData.doubleDataType', index=0,
+      number=1, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='doubleDataValue', full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureLogData.doubleDataValue', index=1,
+      number=2, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='boolDataType', full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureLogData.boolDataType', index=2,
+      number=3, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='boolDataValue', full_name='Isis.ControlPointFileEntryV0005.Measure.MeasureLogData.boolDataValue', index=3,
+      number=4, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto2',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1417,
+  serialized_end=1527,
+)
+
+_CONTROLPOINTFILEENTRYV0005_MEASURE = _descriptor.Descriptor(
+  name='Measure',
+  full_name='Isis.ControlPointFileEntryV0005.Measure',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='serialnumber', full_name='Isis.ControlPointFileEntryV0005.Measure.serialnumber', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='type', full_name='Isis.ControlPointFileEntryV0005.Measure.type', index=1,
+      number=2, type=14, cpp_type=8, label=2,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='sample', full_name='Isis.ControlPointFileEntryV0005.Measure.sample', index=2,
+      number=3, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='line', full_name='Isis.ControlPointFileEntryV0005.Measure.line', index=3,
+      number=4, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='sampleResidual', full_name='Isis.ControlPointFileEntryV0005.Measure.sampleResidual', index=4,
+      number=5, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='lineResidual', full_name='Isis.ControlPointFileEntryV0005.Measure.lineResidual', index=5,
+      number=6, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='choosername', full_name='Isis.ControlPointFileEntryV0005.Measure.choosername', index=6,
+      number=7, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='datetime', full_name='Isis.ControlPointFileEntryV0005.Measure.datetime', index=7,
+      number=8, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='editLock', full_name='Isis.ControlPointFileEntryV0005.Measure.editLock', index=8,
+      number=9, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='ignore', full_name='Isis.ControlPointFileEntryV0005.Measure.ignore', index=9,
+      number=10, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='jigsawRejected', full_name='Isis.ControlPointFileEntryV0005.Measure.jigsawRejected', index=10,
+      number=11, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='diameter', full_name='Isis.ControlPointFileEntryV0005.Measure.diameter', index=11,
+      number=12, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='apriorisample', full_name='Isis.ControlPointFileEntryV0005.Measure.apriorisample', index=12,
+      number=13, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriline', full_name='Isis.ControlPointFileEntryV0005.Measure.aprioriline', index=13,
+      number=14, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='samplesigma', full_name='Isis.ControlPointFileEntryV0005.Measure.samplesigma', index=14,
+      number=15, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='linesigma', full_name='Isis.ControlPointFileEntryV0005.Measure.linesigma', index=15,
+      number=16, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='log', full_name='Isis.ControlPointFileEntryV0005.Measure.log', index=16,
+      number=17, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURELOGDATA, ],
+  enum_types=[
+    _CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURETYPE,
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto2',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=971,
+  serialized_end=1614,
+)
+
+_CONTROLPOINTFILEENTRYV0005 = _descriptor.Descriptor(
+  name='ControlPointFileEntryV0005',
+  full_name='Isis.ControlPointFileEntryV0005',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='id', full_name='Isis.ControlPointFileEntryV0005.id', index=0,
+      number=1, type=9, cpp_type=9, label=2,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='type', full_name='Isis.ControlPointFileEntryV0005.type', index=1,
+      number=2, type=14, cpp_type=8, label=2,
+      has_default_value=False, default_value=2,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='chooserName', full_name='Isis.ControlPointFileEntryV0005.chooserName', index=2,
+      number=3, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='datetime', full_name='Isis.ControlPointFileEntryV0005.datetime', index=3,
+      number=4, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='editLock', full_name='Isis.ControlPointFileEntryV0005.editLock', index=4,
+      number=5, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='ignore', full_name='Isis.ControlPointFileEntryV0005.ignore', index=5,
+      number=6, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='jigsawRejected', full_name='Isis.ControlPointFileEntryV0005.jigsawRejected', index=6,
+      number=7, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='referenceIndex', full_name='Isis.ControlPointFileEntryV0005.referenceIndex', index=7,
+      number=8, type=5, cpp_type=1, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriSurfPointSource', full_name='Isis.ControlPointFileEntryV0005.aprioriSurfPointSource', index=8,
+      number=9, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriSurfPointSourceFile', full_name='Isis.ControlPointFileEntryV0005.aprioriSurfPointSourceFile', index=9,
+      number=10, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriRadiusSource', full_name='Isis.ControlPointFileEntryV0005.aprioriRadiusSource', index=10,
+      number=11, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriRadiusSourceFile', full_name='Isis.ControlPointFileEntryV0005.aprioriRadiusSourceFile', index=11,
+      number=12, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=_b("").decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='latitudeConstrained', full_name='Isis.ControlPointFileEntryV0005.latitudeConstrained', index=12,
+      number=13, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='longitudeConstrained', full_name='Isis.ControlPointFileEntryV0005.longitudeConstrained', index=13,
+      number=14, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='radiusConstrained', full_name='Isis.ControlPointFileEntryV0005.radiusConstrained', index=14,
+      number=15, type=8, cpp_type=7, label=1,
+      has_default_value=False, default_value=False,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriX', full_name='Isis.ControlPointFileEntryV0005.aprioriX', index=15,
+      number=16, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriY', full_name='Isis.ControlPointFileEntryV0005.aprioriY', index=16,
+      number=17, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriZ', full_name='Isis.ControlPointFileEntryV0005.aprioriZ', index=17,
+      number=18, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='aprioriCovar', full_name='Isis.ControlPointFileEntryV0005.aprioriCovar', index=18,
+      number=19, type=1, cpp_type=5, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=_b('\020\001'), file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='adjustedX', full_name='Isis.ControlPointFileEntryV0005.adjustedX', index=19,
+      number=20, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='adjustedY', full_name='Isis.ControlPointFileEntryV0005.adjustedY', index=20,
+      number=21, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='adjustedZ', full_name='Isis.ControlPointFileEntryV0005.adjustedZ', index=21,
+      number=22, type=1, cpp_type=5, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='adjustedCovar', full_name='Isis.ControlPointFileEntryV0005.adjustedCovar', index=22,
+      number=23, type=1, cpp_type=5, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=_b('\020\001'), file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='log', full_name='Isis.ControlPointFileEntryV0005.log', index=23,
+      number=24, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _descriptor.FieldDescriptor(
+      name='measures', full_name='Isis.ControlPointFileEntryV0005.measures', index=24,
+      number=25, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[_CONTROLPOINTFILEENTRYV0005_POINTLOGDATA, _CONTROLPOINTFILEENTRYV0005_MEASURE, ],
+  enum_types=[
+    _CONTROLPOINTFILEENTRYV0005_POINTTYPE,
+    _CONTROLPOINTFILEENTRYV0005_APRIORISOURCE,
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto2',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=43,
+  serialized_end=1837,
+)
+
+_CONTROLPOINTFILEENTRYV0005_POINTLOGDATA.containing_type = _CONTROLPOINTFILEENTRYV0005
+_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURELOGDATA.containing_type = _CONTROLPOINTFILEENTRYV0005_MEASURE
+_CONTROLPOINTFILEENTRYV0005_MEASURE.fields_by_name['type'].enum_type = _CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURETYPE
+_CONTROLPOINTFILEENTRYV0005_MEASURE.fields_by_name['log'].message_type = _CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURELOGDATA
+_CONTROLPOINTFILEENTRYV0005_MEASURE.containing_type = _CONTROLPOINTFILEENTRYV0005
+_CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURETYPE.containing_type = _CONTROLPOINTFILEENTRYV0005_MEASURE
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['type'].enum_type = _CONTROLPOINTFILEENTRYV0005_POINTTYPE
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['aprioriSurfPointSource'].enum_type = _CONTROLPOINTFILEENTRYV0005_APRIORISOURCE
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['aprioriRadiusSource'].enum_type = _CONTROLPOINTFILEENTRYV0005_APRIORISOURCE
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['log'].message_type = _CONTROLPOINTFILEENTRYV0005_POINTLOGDATA
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['measures'].message_type = _CONTROLPOINTFILEENTRYV0005_MEASURE
+_CONTROLPOINTFILEENTRYV0005_POINTTYPE.containing_type = _CONTROLPOINTFILEENTRYV0005
+_CONTROLPOINTFILEENTRYV0005_APRIORISOURCE.containing_type = _CONTROLPOINTFILEENTRYV0005
+DESCRIPTOR.message_types_by_name['ControlPointFileEntryV0005'] = _CONTROLPOINTFILEENTRYV0005
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+ControlPointFileEntryV0005 = _reflection.GeneratedProtocolMessageType('ControlPointFileEntryV0005', (_message.Message,), dict(
+
+  PointLogData = _reflection.GeneratedProtocolMessageType('PointLogData', (_message.Message,), dict(
+    DESCRIPTOR = _CONTROLPOINTFILEENTRYV0005_POINTLOGDATA,
+    __module__ = 'ControlPointFileEntryV0005_pb2'
+    # @@protoc_insertion_point(class_scope:Isis.ControlPointFileEntryV0005.PointLogData)
+    ))
+  ,
+
+  Measure = _reflection.GeneratedProtocolMessageType('Measure', (_message.Message,), dict(
+
+    MeasureLogData = _reflection.GeneratedProtocolMessageType('MeasureLogData', (_message.Message,), dict(
+      DESCRIPTOR = _CONTROLPOINTFILEENTRYV0005_MEASURE_MEASURELOGDATA,
+      __module__ = 'ControlPointFileEntryV0005_pb2'
+      # @@protoc_insertion_point(class_scope:Isis.ControlPointFileEntryV0005.Measure.MeasureLogData)
+      ))
+    ,
+    DESCRIPTOR = _CONTROLPOINTFILEENTRYV0005_MEASURE,
+    __module__ = 'ControlPointFileEntryV0005_pb2'
+    # @@protoc_insertion_point(class_scope:Isis.ControlPointFileEntryV0005.Measure)
+    ))
+  ,
+  DESCRIPTOR = _CONTROLPOINTFILEENTRYV0005,
+  __module__ = 'ControlPointFileEntryV0005_pb2'
+  # @@protoc_insertion_point(class_scope:Isis.ControlPointFileEntryV0005)
+  ))
+_sym_db.RegisterMessage(ControlPointFileEntryV0005)
+_sym_db.RegisterMessage(ControlPointFileEntryV0005.PointLogData)
+_sym_db.RegisterMessage(ControlPointFileEntryV0005.Measure)
+_sym_db.RegisterMessage(ControlPointFileEntryV0005.Measure.MeasureLogData)
+
+
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['aprioriCovar']._options = None
+_CONTROLPOINTFILEENTRYV0005.fields_by_name['adjustedCovar']._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/plio/io/io_controlnetwork.py b/plio/io/io_controlnetwork.py
index b9c6fefe72b453bdb151d22397d23ba14ccf73d3..24a0d05e54c5f9be2b45cbad059af9a9f20af814 100644
--- a/plio/io/io_controlnetwork.py
+++ b/plio/io/io_controlnetwork.py
@@ -3,8 +3,11 @@ from time import gmtime, strftime
 import pandas as pd
 import numpy as np
 import pvl
+import struct
 
 from plio.io import ControlNetFileV0002_pb2 as cnf
+from plio.io import ControlNetFileHeaderV0005_pb2 as cnh5
+from plio.io import ControlPointFileEntryV0005_pb2 as cnp5
 from plio.utils.utils import xstr, find_in_dict
 
 HEADERSTARTBYTE = 65536
@@ -192,23 +195,47 @@ class IsisStore(object):
             self.point_attrs = [i for i in cnf._CONTROLPOINTFILEENTRYV0002.fields_by_name if i != 'measures']
             self.measure_attrs = [i for i in cnf._CONTROLPOINTFILEENTRYV0002_MEASURE.fields_by_name]
 
-        cols = self.point_attrs + self.measure_attrs
+            cp = cnf.ControlPointFileEntryV0002()
+            self._handle.seek(header_start_byte)
+            pbuf_header = cnf.ControlNetFileHeaderV0002()
+            pbuf_header.ParseFromString(self._handle.read(header_bytes))
+
+            self._handle.seek(point_start_byte)
+            cp = cnf.ControlPointFileEntryV0002()
+            pts = []
+            for s in pbuf_header.pointMessageSizes:
+                cp.ParseFromString(self._handle.read(s))
+                pt = [getattr(cp, i) for i in self.point_attrs if i != 'measures']
+
+                for measure in cp.measures:
+                    meas = pt + [getattr(measure, j) for j in self.measure_attrs]
+                    pts.append(meas)
+
+        elif version == 5:
+            self.point_attrs = [i for i in cnp5._CONTROLPOINTFILEENTRYV0005.fields_by_name if i != 'measures']
+            self.measure_attrs = [i for i in cnp5._CONTROLPOINTFILEENTRYV0005_MEASURE.fields_by_name]
+
+            cp = cnp5.ControlPointFileEntryV0005()
+            self._handle.seek(header_start_byte)
+            pbuf_header = cnh5.ControlNetFileHeaderV0005()
+            pbuf_header.ParseFromString(self._handle.read(header_bytes))
+
+            self._handle.seek(point_start_byte)
+            cp = cnp5.ControlPointFileEntryV0005()
+            pts = []
+            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))
+                pt = [getattr(cp, i) for i in self.point_attrs if i != 'measures']
+
+                for measure in cp.measures:
+                    meas = pt + [getattr(measure, j) for j in self.measure_attrs]
+                    pts.append(meas)
+
+                byte_count += 4 + message_size
 
-        cp = cnf.ControlPointFileEntryV0002()
-        self._handle.seek(header_start_byte)
-        pbuf_header = cnf.ControlNetFileHeaderV0002()
-        pbuf_header.ParseFromString(self._handle.read(header_bytes))
-
-        self._handle.seek(point_start_byte)
-        cp = cnf.ControlPointFileEntryV0002()
-        pts = []
-        for s in pbuf_header.pointMessageSizes:
-            cp.ParseFromString(self._handle.read(s))
-            pt = [getattr(cp, i) for i in self.point_attrs if i != 'measures']
-
-            for measure in cp.measures:
-                meas = pt + [getattr(measure, j) for j in self.measure_attrs]
-                pts.append(meas)
+        cols = self.point_attrs + self.measure_attrs
         df = IsisControlNetwork(pts, columns=cols)
         df.header = pvl_header
         return df
diff --git a/plio/io/tests/test_io_controlnetwork.py b/plio/io/tests/test_io_controlnetwork.py
index fc3d05d5080296246398c00f5532537dca3b1680..1ff1da297d507eca4eca408e63c5d4bdfe770848 100644
--- a/plio/io/tests/test_io_controlnetwork.py
+++ b/plio/io/tests/test_io_controlnetwork.py
@@ -14,15 +14,13 @@ from plio.examples import get_path
 
 import pytest
 
-@pytest.fixture
-def apollo_cnet():
-    return get_path('apollo_out.net')
-
 sys.path.insert(0, os.path.abspath('..'))
 
-
-def test_cnet_read(apollo_cnet):
-    df = io_controlnetwork.from_isis(apollo_cnet)
+@pytest.mark.parametrize('cnet_file',
+                         (get_path('apollo_out.net'), get_path('apollo_out_v5.net'))
+)
+def test_cnet_read(cnet_file):
+    df = io_controlnetwork.from_isis(cnet_file)
     assert len(df) == find_in_dict(df.header, 'NumberOfMeasures')
     assert isinstance(df, io_controlnetwork.IsisControlNetwork)
     assert len(df.groupby('id')) == find_in_dict(df.header, 'NumberOfPoints')