diff --git a/isis/src/galileo/apps/gllssical/gllssical.xml b/isis/src/galileo/apps/gllssical/gllssical.xml
index 9c634bef5629ae7979b4ff6d64c9293e86c25a10..c1e6f5e70f4716d66e6847cd8f553f4c1096a3dd 100644
--- a/isis/src/galileo/apps/gllssical/gllssical.xml
+++ b/isis/src/galileo/apps/gllssical/gllssical.xml
@@ -163,6 +163,9 @@
       Modified code that it doesn't require a camera model to calculate the I/F.
       Fixes #1740.
     </change>
+    <change name="Kristin Berry" date="2021-02-23">
+      Modified code to try to use the camera to get the target-sun distance to calculate the IOF.
+    </change>
   </history>
 
   <groups>     
diff --git a/isis/src/galileo/apps/gllssical/main.cpp b/isis/src/galileo/apps/gllssical/main.cpp
index e442d0b00a13990575bac36210f7102f31112d15..25e06e4f4d49089ba4ce71fd3177338c58375c6b 100644
--- a/isis/src/galileo/apps/gllssical/main.cpp
+++ b/isis/src/galileo/apps/gllssical/main.cpp
@@ -9,10 +9,12 @@ find files of those names at the top level of this repository. **/
 #include "Isis.h"
 #include "ProcessByLine.h"
 #include "Buffer.h"
+#include "Camera.h"
 #include "iTime.h"
 #include "SpecialPixel.h"
 #include "Spice.h"
 #include "TextFile.h"
+#include "NaifStatus.h"
 
 using namespace Isis;
 using namespace std;
@@ -444,31 +446,55 @@ void calculateScaleFactor0(Cube *icube, Cube *gaincube) {
   gainConversion = toDouble(conversionFactors["GainRatios"][getGainModeID(gaincube)-1]);
 
   if (iof) {
-    Pvl *label = icube->label();
-    Spice spicegll(*icube);
-    spicegll.instrumentPosition()->SetAberrationCorrection("LT+S");
-    QString startTime = label->findGroup("Instrument",Pvl::Traverse)["SpacecraftClockStartCount"][0];
-    Isis::FileName sclk(label->findGroup("Kernels",Pvl::Traverse)["SpacecraftClock"][0]);
-    QString sclkName(sclk.expanded());
-    furnsh_c(sclkName.toLatin1().data());
-    double obsStartTime;
-    scs2e_c(-77, startTime.toLatin1().data(), &obsStartTime);
-    spicegll.setTime(obsStartTime);
-    double sunv[3];
-    spicegll.sunPosition(sunv);
-
-    double sunkm = vnorm_c(sunv);
-
-    //  Convert to AU units
-    rsun = sunkm / 1.49597870691E8 / 5.2;
-
-    /*
-     * We are calculating I/F, so scaleFactor0 is:
-     *
-     *         S1       K
-     *      -------- * --- (D/5.2)**2
-     *         A1       Ko
-     */
+    try {
+      Camera *cam;
+      cam = icube->camera();
+      cam->instrumentPosition()->SetAberrationCorrection("LT+S");
+      // Set time to the starting time of the image by setting image.
+      cam->SetImage(0.5, 0.5);
+
+      // rsun converted to AU
+      rsun = cam->sunToBodyDist() / 1.49597870691E8 / 5.2;
+    } 
+    catch (IException &e) {
+      // try original fallback for previously spiceinited data 
+      try {
+        Pvl *label = icube->label();
+        QString startTime = label->findGroup("Instrument",Pvl::Traverse)["SpacecraftClockStartCount"][0];
+
+        Spice spicegll(*icube);
+        spicegll.instrumentPosition()->SetAberrationCorrection("LT+S");
+        Isis::FileName sclk(label->findGroup("Kernels",Pvl::Traverse)["SpacecraftClock"][0]);
+        QString sclkName(sclk.expanded());
+
+        NaifStatus::CheckErrors();
+        furnsh_c(sclkName.toLatin1().data());
+        NaifStatus::CheckErrors();
+
+        double obsStartTime;
+        scs2e_c(-77, startTime.toLatin1().data(), &obsStartTime);
+        spicegll.setTime(obsStartTime);
+        double sunv[3];
+        spicegll.sunPosition(sunv);
+
+        double sunkm = vnorm_c(sunv);
+        
+        //  Convert to AU units
+        rsun = sunkm / 1.49597870691E8 / 5.2;
+      } 
+      catch (IException &e) {
+        QString message = "IOF option does not work with non-spiceinited cubes.";
+        throw IException(e, IException::User, message, _FILEINFO_);
+      }
+    }
+        
+   /*
+    * We are calculating I/F, so scaleFactor0 is:
+    *
+    *         S1       K
+    *      -------- * --- (D/5.2)**2
+    *         A1       Ko
+    */
     scaleFactor0 = (s1 * (cubeConversion / gainConversion) * pow(rsun, 2)) / (scaleFactor);
   }
   else {
diff --git a/isis/src/galileo/apps/gllssical/tsts/default/Makefile b/isis/src/galileo/apps/gllssical/tsts/default/Makefile
index 01f23792ed07b21443c5a89f0c3de39bb5fec13b..54c57bc364959753ba253f8b79dae2a65a918d38 100644
--- a/isis/src/galileo/apps/gllssical/tsts/default/Makefile
+++ b/isis/src/galileo/apps/gllssical/tsts/default/Makefile
@@ -3,7 +3,30 @@ APPNAME = gllssical
 include $(ISISROOT)/make/isismake.tsts
 
 commands:
+	# Test old spiceinited data
 	$(APPNAME) FROM=$(INPUT)/3439R.cub TO=$(OUTPUT)/3439R.cal.cub > /dev/null;
 	catlab FROM=$(OUTPUT)/3439R.cal.cub TO=$(OUTPUT)/3439R.cal.pvl > /dev/null;
 	$(APPNAME) FROM=$(INPUT)/1213r.cub TO=$(OUTPUT)/1213r.cal.cub > /dev/null;
 	catlab FROM=$(OUTPUT)/1213r.cal.cub TO=$(OUTPUT)/1213r.cal.pvl > /dev/null;
+
+	# Test newly re-spiceinited data
+	$(APPNAME) FROM=$(INPUT)/3439R.respiceinit.cub TO=$(OUTPUT)/3439R.respiceinit.cub > /dev/null;
+	catlab FROM=$(OUTPUT)/3439R.respiceinit.cub TO=$(OUTPUT)/3439R.respiceinit.pvl > /dev/null;
+	$(APPNAME) FROM=$(INPUT)/1213r.respiceinit.cub TO=$(OUTPUT)/1213r.respiceinit.cub > /dev/null;
+	catlab FROM=$(OUTPUT)/1213r.respiceinit.cub TO=$(OUTPUT)/1213r.respiceinit.pvl > /dev/null;
+
+	# Test non-spiceinited data: throws an error
+	if [ `$(APPNAME) \
+	  FROM=$(INPUT)/3439R.nospice.cub TO=$(OUTPUT)/broken.cub 2>> $(OUTPUT)/errors_temp.txt > /dev/null` ]; \
+	  then true; \
+	  fi;
+
+	# Remove everything in brackets like filenames/paths from error messages
+	$(SED) 's/\[\([^"]*\)\]//g' $(OUTPUT)/errors_temp.txt \
+	  > $(OUTPUT)/errors.txt; 
+
+	# Cleanup
+	$(RM) $(OUTPUT)/errors_temp.txt;
+	$(RM) $(OUTPUT)/broken.cub;
+
+