diff --git a/CHANGELOG.md b/CHANGELOG.md
index 48847ebddc548feb0bf7e3c9a55e0491a4923ce8..b86dca23d7b1a3435b07ba8b2df28529724fe5f1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -34,8 +34,12 @@ release.
 -->
 
 ## [Unreleased]
+### Added
+- Hard coded support for `csminit`ed cubes that have serial numbers that differ from `spiceinit`ed cubes.
+- Added support for scale and offset for GeoDataset objects.
+
 ### Fixed
-- Fixed a bug where scale and offset were not being read or applied to GeoDataset objects.
+- Fixed a bug where scale and offset were being applied backwards to GeoDataset objects.
 
 ## [1.5.5]()
 ### Fixed
diff --git a/plio/io/__init__.py b/plio/io/__init__.py
index b67fa436d6680e82b006dbb2b58874de3be9cbcf..7baf574a6f4f71522f6cd576340f48c2d2397d11 100644
--- a/plio/io/__init__.py
+++ b/plio/io/__init__.py
@@ -6,6 +6,7 @@ try:
     gdal = importlib.import_module('osgeo.gdal')
     osr = importlib.import_module('osgeo.osr')
     ogr = importlib.import_module('osgeo.ogr')
+    gdal.UseExceptions()
 except:
     gdal = osr = ogr = None
 
diff --git a/plio/io/io_gdal.py b/plio/io/io_gdal.py
index f67ca5bdc76f84f588c4280c34c5d9be7ae86d3e..07c83a172c43f3f3917a9bdde1a8c7fa4ed15523 100644
--- a/plio/io/io_gdal.py
+++ b/plio/io/io_gdal.py
@@ -517,7 +517,7 @@ class GeoDataset(object):
         dtype = getattr(np, dtype)
 
         if not pixels:
-            array = (band.ReadAsArray().astype(dtype) + offset) * scale
+            array = band.ReadAsArray().astype(dtype) * scale + offset
             #if self.north_up == False:
             #    array = np.flipud(array)
         else:
@@ -538,7 +538,7 @@ class GeoDataset(object):
 
             if ystart + ycount > ymax:
                 ycount = ymax - ystart
-            array = (band.ReadAsArray(xstart, ystart, xcount, ycount).astype(dtype) + offset) * scale
+            array = band.ReadAsArray(xstart, ystart, xcount, ycount).astype(dtype) * scale + offset
 
         return array
 
diff --git a/plio/io/isis_serial_number.py b/plio/io/isis_serial_number.py
index 725e9a184ce3f31f5eafcd87e77a9c4e136ff56e..1c64a8d6f90268b6788bd08ba4db459c48b5bff6 100644
--- a/plio/io/isis_serial_number.py
+++ b/plio/io/isis_serial_number.py
@@ -36,22 +36,28 @@ def get_isis_translation(label):
     if not isinstance(label, PVLModule):
         label = pvl.load(label)
 
-    # Grab the spacecraft name and run it through the ISIS lookup
-    spacecraft_name = find_in_dict(label, 'SpacecraftName')
-    for row in plio.data_session.query(StringToMission).filter(StringToMission.key==spacecraft_name):
-        spacecraft_name = row.value.lower()
-    # Try and pull an instrument identifier
-    try:
-        instrumentid = find_in_dict(label, 'InstrumentId').capitalize()
-    except:
-        instrumentid = None
-
-    translation = None
-    # Grab the translation PVL object using the lookup
-    for row in plio.data_session.query(Translations).filter(Translations.mission==spacecraft_name,
-                                                            Translations.instrument==instrumentid):
-        # Convert the JSON back to a PVL object
-        translation = PVLModule(row.translation)
+    if find_in_dict(label, 'CsmInfo'):
+        # This cube has been CSM inited, have to load the CSM translation table
+        translation = {"Keyword1": {"InputKey": "CSMPlatformID", "InputGroup": "IsisCube,CsmInfo", "InputPosition": ["IsisCube", "CsmInfo"], "OutputName": "Keyword1", "OutputPosition": ["Group", "SerialNumberKeywords"], "Translation": ["*", "*"]}, "Keyword2": {"InputKey": "CSMInstrumentId", "InputGroup": "IsisCube,CsmInfo", "InputPosition": ["IsisCube", "CsmInfo"], "OutputName": "Keyword2", "OutputPosition": ["Group", "SerialNumberKeywords"], "Translation": ["*", "*"]}, "Keyword3": {"InputKey": "ReferenceTime", "InputGroup": "IsisCube,CsmInfo", "InputPosition": ["IsisCube", "CsmInfo"], "OutputName": "Keyword3", "OutputPosition": ["Group", "SerialNumberKeywords"], "Translation": ["*", "*"]}}
+    else:
+        # Grab the spacecraft name and run it through the ISIS lookup
+        spacecraft_name = find_in_dict(label, 'SpacecraftName')
+        for row in plio.data_session.query(StringToMission).filter(StringToMission.key==spacecraft_name):
+            spacecraft_name = row.value.lower()
+        
+        # Try and pull an instrument identifier
+        try:
+            instrumentid = find_in_dict(label, 'InstrumentId').capitalize()
+        except:
+            instrumentid = None
+
+        translation = None
+        # Grab the translation PVL object using the lookup
+        for row in plio.data_session.query(Translations).filter(Translations.mission==spacecraft_name,
+                                                                Translations.instrument==instrumentid):
+            # Convert the JSON back to a PVL object
+            translation = PVLModule(row.translation)
+
     return translation