diff --git a/examples/cassini_isis_cmp.ipynb b/examples/cassini_isis_cmp.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..842205f7d8dad327cbbcfb9ecef313dcda451fc5
--- /dev/null
+++ b/examples/cassini_isis_cmp.ipynb
@@ -0,0 +1,253 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Comparing a USGSCSM and ISIS camera for Cassini ISS"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pvl\n",
+    "import numpy as np\n",
+    "import os\n",
+    "import pandas as pd\n",
+    "import knoten\n",
+    "import csmapi\n",
+    "\n",
+    "os.environ['ISISROOT'] = '/usgs/pkgs/isis3.8.0_RC1/install'\n",
+    "from pysis import isis\n",
+    "from pysis.exceptions import ProcessError"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Make a CSM sensor model\n",
+    "Requires N1702360370_1.LBL and N1702360370_1.IMG in data directory"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fileName = 'data/N1702360370_1.LBL'\n",
+    "camera = knoten.csm.create_csm(fileName)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Ingest the image and spiceinit"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Set the output location of the resulting .cub\n",
+    "cub_loc = os.path.splitext(fileName)[0] + '.cub'\n",
+    "\n",
+    "try: \n",
+    "    isis.ciss2isis(from_=fileName, to=cub_loc)\n",
+    "except ProcessError as e:\n",
+    "    print(e.stderr)\n",
+    "\n",
+    "try:\n",
+    "    isis.spiceinit(from_=cub_loc, shape='ellipsoid')\n",
+    "except ProcessError as e:\n",
+    "    print(e.stderr)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Define a function that compares ISIS and USGSCSM pixels"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def check_pixel(camera, cub, line, sample):\n",
+    "    \"\"\"Compares ISIS and USGSCSM pixel.\n",
+    "    \n",
+    "    Takes an image coordinate, projects it to a ground point using ISIS, then projects\n",
+    "    the result back into an image coordinate using USGSCSM and computes the difference\n",
+    "    between image coordinates.\n",
+    "    \"\"\"\n",
+    "    output = isis.campt(from_=cub, line=line, sample=sample)\n",
+    "    pvl_output = pvl.loads(output)\n",
+    "    bodyfixed = pvl_output['GroundPoint']['BodyFixedCoordinate']\n",
+    "    bodyfixed = np.asarray(bodyfixed.value) * 1000\n",
+    "    image_coord = camera.groundToImage(csmapi.EcefCoord(*bodyfixed))\n",
+    "    # (.5,.5) in CSM == (1,1) in ISIS, so we have to subtract (.5,.5) from the ISIS pixels\n",
+    "    line_diff = line - image_coord.line - .5\n",
+    "    sample_diff = sample - image_coord.samp - .5\n",
+    "    return line_diff, sample_diff"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Get the total number of lines / samples"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "isis_label = pvl.load(cub_loc)\n",
+    "n_samples = isis_label['IsisCube']['Core']['Dimensions']['Samples']\n",
+    "n_lines = isis_label['IsisCube']['Core']['Dimensions']['Lines']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Compare top left, top right, bottom left, bottom right, and center pixels using check_pixel"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>line</th>\n",
+       "      <th>sample</th>\n",
+       "      <th>line_diff</th>\n",
+       "      <th>sample_diff</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>-1020.486363</td>\n",
+       "      <td>-1024.409488</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1024.0</td>\n",
+       "      <td>-1020.472731</td>\n",
+       "      <td>1022.315882</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1024.0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>1026.247265</td>\n",
+       "      <td>-1024.418200</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1024.0</td>\n",
+       "      <td>1024.0</td>\n",
+       "      <td>1026.260599</td>\n",
+       "      <td>1022.307325</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>512.0</td>\n",
+       "      <td>512.0</td>\n",
+       "      <td>1.888677</td>\n",
+       "      <td>-2.053929</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     line  sample    line_diff  sample_diff\n",
+       "0     1.0     1.0 -1020.486363 -1024.409488\n",
+       "1     1.0  1024.0 -1020.472731  1022.315882\n",
+       "2  1024.0     1.0  1026.247265 -1024.418200\n",
+       "3  1024.0  1024.0  1026.260599  1022.307325\n",
+       "4   512.0   512.0     1.888677    -2.053929"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pixels_dict = {'line' : [1,1,n_lines, n_lines, n_lines/2],\n",
+    "               'sample' : [1, n_samples, 1, n_samples, n_samples/2]}\n",
+    "\n",
+    "pixels_df = pd.DataFrame.from_dict(pixels_dict)\n",
+    "pixels_df['line_diff'] = np.NaN\n",
+    "pixels_df['sample_diff'] = np.NaN\n",
+    "\n",
+    "for idx, row in pixels_df.iterrows():\n",
+    "    pixels_df.iloc[idx]['line_diff'], pixels_df.iloc[idx]['sample_diff'] = check_pixel(camera, cub_loc, row['line'], row['sample'])\n",
+    "\n",
+    "pixels_df"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.1"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/data/N1702360370_1.IMG b/examples/data/N1702360370_1.IMG
new file mode 100644
index 0000000000000000000000000000000000000000..ef12eeb80485d3a37f96fe9beff8b7d096695915
Binary files /dev/null and b/examples/data/N1702360370_1.IMG differ
diff --git a/examples/data/N1702360370_1.LBL b/examples/data/N1702360370_1.LBL
new file mode 100644
index 0000000000000000000000000000000000000000..6269edb68c147d3cd45a4f2ee584c532525b4582
--- /dev/null
+++ b/examples/data/N1702360370_1.LBL
@@ -0,0 +1,120 @@
+PDS_VERSION_ID = PDS3
+
+/* FILE CHARACTERISTICS */
+
+RECORD_TYPE = FIXED_LENGTH
+RECORD_BYTES = 1048
+FILE_RECORDS = 1028
+
+/* POINTERS TO DATA OBJECTS */
+
+^IMAGE_HEADER = ("N1702360370_1.IMG",1)
+^TELEMETRY_TABLE = ("N1702360370_1.IMG",4)
+^LINE_PREFIX_TABLE = ("N1702360370_1.IMG",5)
+^IMAGE = ("N1702360370_1.IMG",5)
+
+/* IDENTIFICATION DATA ELEMENTS */
+
+ANTIBLOOMING_STATE_FLAG = "OFF"
+BIAS_STRIP_MEAN = 8.850293
+CALIBRATION_LAMP_STATE_FLAG = "N/A"
+COMMAND_FILE_NAME = "trigger_3618_1.ioi"
+COMMAND_SEQUENCE_NUMBER = 3618
+DARK_STRIP_MEAN = 0.269221
+DATA_CONVERSION_TYPE = "TABLE"
+DATA_SET_ID = "CO-S-ISSNA/ISSWA-2-EDR-V1.0"
+DELAYED_READOUT_FLAG = "NO"
+DESCRIPTION = "Incomplete product finalized due to truncated lines."
+DETECTOR_TEMPERATURE = -89.243546 <DEGC>
+EARTH_RECEIVED_START_TIME = 2011-346T22:30:08.981
+EARTH_RECEIVED_STOP_TIME = 2011-346T22:30:49.765
+ELECTRONICS_BIAS = 112
+EXPECTED_MAXIMUM = (62.996498,69.454498)
+EXPECTED_PACKETS = 576
+EXPOSURE_DURATION = 4600.000000
+FILTER_NAME = ("CL1","UV3")
+FILTER_TEMPERATURE = 0.248629
+FLIGHT_SOFTWARE_VERSION_ID = "1.4"
+GAIN_MODE_ID = "29 ELECTRONS PER DN"
+IMAGE_MID_TIME = 2011-346T05:02:22.073
+IMAGE_NUMBER = "1702360370"
+IMAGE_OBSERVATION_TYPE = {"SCIENCE"}
+IMAGE_TIME = 2011-346T05:02:24.373
+INSTRUMENT_DATA_RATE = 182.783997
+INSTRUMENT_HOST_NAME = "CASSINI ORBITER"
+INSTRUMENT_ID = "ISSNA"
+INSTRUMENT_MODE_ID = "FULL"
+INSTRUMENT_NAME = "IMAGING SCIENCE SUBSYSTEM - NARROW ANGLE"
+INST_CMPRS_PARAM = ("N/A","N/A","N/A","N/A")
+INST_CMPRS_RATE = (5.333330,3.631307)
+INST_CMPRS_RATIO = 2.203063
+INST_CMPRS_TYPE = "LOSSLESS"
+LIGHT_FLOOD_STATE_FLAG = "ON"
+METHOD_DESC = "ISSPT2.7;Enceladus;ISS_158EN_ENCEL001_PRIME"
+MISSING_LINES = 31
+MISSING_PACKET_FLAG = "NO"
+MISSION_NAME = "CASSINI-HUYGENS"
+MISSION_PHASE_NAME = "EXTENDED-EXTENDED MISSION"
+OBSERVATION_ID = "ISS_158EN_ENCEL001_PRIME"
+OPTICS_TEMPERATURE = (0.627499,1.905708)
+ORDER_NUMBER = 16
+PARALLEL_CLOCK_VOLTAGE_INDEX = 9
+PREPARE_CYCLE_INDEX = 4
+PRODUCT_CREATION_TIME = 2011-346T15:34:07.000
+PRODUCT_ID = "1_N1702360370.120"
+PRODUCT_VERSION_TYPE = "FINAL"
+READOUT_CYCLE_INDEX = 6
+RECEIVED_PACKETS = 523
+SENSOR_HEAD_ELEC_TEMPERATURE = 1.633024
+SEQUENCE_ID = "S71"
+SEQUENCE_NUMBER = 16
+SEQUENCE_TITLE = "ISS_158EN_ENCEL001_PRIME"
+SHUTTER_MODE_ID = "NACONLY"
+SHUTTER_STATE_ID = "ENABLED"
+SOFTWARE_VERSION_ID = "ISS 11.00 05-24-2006"
+SPACECRAFT_CLOCK_CNT_PARTITION = 1
+SPACECRAFT_CLOCK_START_COUNT = "1702360365.220"
+SPACECRAFT_CLOCK_STOP_COUNT = "1702360370.120"
+START_TIME = 2011-346T05:02:19.773
+STOP_TIME = 2011-346T05:02:24.373
+TARGET_DESC = "Enceladus"
+TARGET_LIST = "N/A"
+TARGET_NAME = "ENCELADUS"
+TELEMETRY_FORMAT_ID = "S&ER3"
+VALID_MAXIMUM = (4095,4095)
+OBJECT = IMAGE_HEADER
+      INTERCHANGE_FORMAT = ASCII
+      HEADER_TYPE = VICAR2
+       BYTES = 3144
+      RECORDS = 1
+      ^DESCRIPTION = "../../label/vicar2.txt"
+END_OBJECT = IMAGE_HEADER
+OBJECT = TELEMETRY_TABLE
+      INTERCHANGE_FORMAT = BINARY
+      ROWS = 1
+      COLUMNS = 2
+      ROW_BYTES = 1048
+      ^STRUCTURE = "../../label/tlmtab.fmt"
+      OBJECT = COLUMN
+            NAME = NULL_PADDING
+            DATA_TYPE = MSB_UNSIGNED_INTEGER
+            START_BYTE = 61
+            BYTES = 987
+      END_OBJECT = COLUMN
+END_OBJECT = TELEMETRY_TABLE
+OBJECT = LINE_PREFIX_TABLE
+      INTERCHANGE_FORMAT = BINARY
+      ROWS = 1024
+      COLUMNS = 7
+      ROW_BYTES = 24
+      ROW_SUFFIX_BYTES = 1024
+      ^LINE_PREFIX_STRUCTURE = "../../label/prefix3.fmt"
+END_OBJECT = LINE_PREFIX_TABLE
+OBJECT = IMAGE
+      LINES = 1024
+      LINE_SAMPLES = 1024
+      SAMPLE_BITS = 8
+      SAMPLE_TYPE = SUN_INTEGER
+      LINE_PREFIX_BYTES = 24
+END_OBJECT = IMAGE
+END