diff --git a/include/usgscsm/UsgsAstroSarSensorModel.h b/include/usgscsm/UsgsAstroSarSensorModel.h
index f7cba8dbec338f74739768d55c8b3522f0cdd5b6..3855911d171b88928cd8559a1eb74ee2097f141a 100644
--- a/include/usgscsm/UsgsAstroSarSensorModel.h
+++ b/include/usgscsm/UsgsAstroSarSensorModel.h
@@ -9,6 +9,10 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab
 {
 
   public:
+    enum LookDirection {
+      LEFT  = 0,
+      RIGHT = 1
+    };
 
     UsgsAstroSarSensorModel();
     ~UsgsAstroSarSensorModel() {}
@@ -249,6 +253,7 @@ class UsgsAstroSarSensorModel : public csm::RasterGM, virtual public csm::Settab
     std::vector<double> m_sunPosition;
     std::vector<double> m_sunVelocity;
     double m_wavelength;
+    LookDirection m_lookDirection;
 };
 
 #endif
diff --git a/include/usgscsm/Utilities.h b/include/usgscsm/Utilities.h
index 9765b269d23594a5bdb188c6aa2334204e3ebc22..51fb78d07abab4eb8cb8812a45584199a620f0ad 100644
--- a/include/usgscsm/Utilities.h
+++ b/include/usgscsm/Utilities.h
@@ -102,6 +102,7 @@ std::vector<double> getIntegrationStartTimes(nlohmann::json isd, csm::WarningLis
 std::vector<double> getIntegrationTimes(nlohmann::json isd, csm::WarningList *list=nullptr);
 double getExposureDuration(nlohmann::json isd, csm::WarningList *list=nullptr);
 double getScaledPixelWidth(nlohmann::json isd, csm::WarningList *list=nullptr);
+std::string getLookDirection(nlohmann::json isd, csm::WarningList *list=nullptr);
 std::vector<double> getScaleConversionCoefficients(nlohmann::json isd, csm::WarningList *list=nullptr);
 std::vector<double> getScaleConversionTimes(nlohmann::json isd, csm::WarningList *list=nullptr);
 int getSampleSumming(nlohmann::json isd, csm::WarningList *list=nullptr);
diff --git a/src/UsgsAstroSarSensorModel.cpp b/src/UsgsAstroSarSensorModel.cpp
index b2782cfc2b77376d20940f72d979c20ba137ef1e..8f44b94c7b506436a42e20e4977f975d69633c24 100644
--- a/src/UsgsAstroSarSensorModel.cpp
+++ b/src/UsgsAstroSarSensorModel.cpp
@@ -116,6 +116,7 @@ string UsgsAstroSarSensorModel::constructStateFromIsd(
   state["m_scaleConversionCoefficients"] = getScaleConversionCoefficients(isd, parsingWarnings);
   state["m_scaleConversionTimes"] = getScaleConversionTimes(isd, parsingWarnings);
   state["m_wavelength"] = getWavelength(isd, parsingWarnings);
+  state["m_lookDirection"] = getLookDirection(isd, parsingWarnings);
 
   // Default to identity covariance
   state["m_covariance"] =
@@ -188,6 +189,7 @@ void UsgsAstroSarSensorModel::reset()
   m_nSamples = 0;
   m_exposureDuration = 0;
   m_scaledPixelWidth = 0;
+  m_lookDirection = LookDirection::LEFT;
   m_startingEphemerisTime = 0;
   m_centerEphemerisTime = 0;
   m_endingEphemerisTime = 0;
@@ -229,6 +231,19 @@ void UsgsAstroSarSensorModel::replaceModelState(const string& argState)
   m_nSamples = stateJson["m_nSamples"];
   m_exposureDuration = stateJson["m_exposureDuration"];
   m_scaledPixelWidth = stateJson["m_scaledPixelWidth"];
+  std::string lookStr = stateJson["m_lookDirection"]; 
+  if (lookStr.compare("right") == 0 ) {
+    m_lookDirection = UsgsAstroSarSensorModel::RIGHT; 
+  }
+  else if (lookStr.compare("left") == 0) {
+    m_lookDirection = UsgsAstroSarSensorModel::LEFT; 
+  }
+  else {
+    std::string message = "Could not determine look direction from state";
+    throw csm::Error(csm::Error::INVALID_SENSOR_MODEL_STATE,
+                     message,
+                     "UsgsAstroSarSensorModel::replaceModelState");
+  }
   m_wavelength = stateJson["m_wavelength"];
   m_startingEphemerisTime = stateJson["m_startingEphemerisTime"];
   m_centerEphemerisTime = stateJson["m_centerEphemerisTime"];
@@ -287,6 +302,18 @@ string UsgsAstroSarSensorModel::getModelState() const
   state["m_minElevation"] = m_minElevation;
   state["m_maxElevation"] = m_maxElevation;
   state["m_scaledPixelWidth"] = m_scaledPixelWidth;
+  if (m_lookDirection == 0) {
+    state["m_lookDirection"] = "left";
+  }
+  else if (m_lookDirection == 1) {
+    state["m_lookDirection"] = "right";
+  }
+  else {
+    std::string message = "Could not parse look direction from json state.";
+    throw csm::Error(csm::Error::INVALID_SENSOR_MODEL_STATE,
+                     message,
+                     "UsgsAstroSarSensorModel::getModelState");
+  }
   state["m_wavelength"] = m_wavelength;
   state["m_scaleConversionCoefficients"] = m_scaleConversionCoefficients;
   state["m_scaleConversionTimes"] = m_scaleConversionTimes;
diff --git a/src/Utilities.cpp b/src/Utilities.cpp
index a532b8b83a075973812220f78c6a59bb9febc1cb..08101a85b3b0f719e30631dcf039969706ac7908 100644
--- a/src/Utilities.cpp
+++ b/src/Utilities.cpp
@@ -1215,6 +1215,23 @@ double getScaledPixelWidth(nlohmann::json isd, csm::WarningList *list) {
   return width;
 }
 
+std::string getLookDirection(nlohmann::json isd, csm::WarningList *list) {
+  std::string lookDirection = "";
+  try {
+    lookDirection = isd.at("look_direction");
+  }
+  catch (...) {
+    if (list) {
+      list->push_back(
+        csm::Warning(
+          csm::Warning::DATA_NOT_AVAILABLE,
+          "Could not parse the scaled pixel width.",
+          "Utilities::getScaledPixelWidth()"));
+    }
+  }
+  return lookDirection;
+}
+
 std::vector<double> getScaleConversionTimes(nlohmann::json isd, csm::WarningList *list) {
   std::vector<double> time;
   try {
diff --git a/tests/data/orbitalSar.json b/tests/data/orbitalSar.json
index 95e1a9fe62de76a4f6759e7f5617e5dae0270c91..57aa104657748d3e0d33c8712574d9c4b6ee8a88 100644
--- a/tests/data/orbitalSar.json
+++ b/tests/data/orbitalSar.json
@@ -18,6 +18,7 @@
   "scaled_pixel_width" : 7.5,
   "t0_ephemeris": -0.0025,
   "dt_ephemeris": 0.25,
+  "look_direction": "right",
   "sensor_position": {
     "positions":
       [[3737400.0, 0.0, -0.0],