diff --git a/LDLib/LDSnapshotTaker.cpp b/LDLib/LDSnapshotTaker.cpp
index 3a8301c..a30da1e 100644
--- a/LDLib/LDSnapshotTaker.cpp
+++ b/LDLib/LDSnapshotTaker.cpp
@@ -276,6 +276,8 @@ bool LDSnapshotTaker::saveImage(void)
 				stripTrailingPathSeparators(saveDir);
 			}
 		}
+        // Special case for the -ca and -cg options to convert them to proper
+        // argument names
 		for (i = 0; i < count; i++)
 		{
 			char *arg = unhandledArgs->stringAtIndex(i);
@@ -295,7 +297,6 @@ bool LDSnapshotTaker::saveImage(void)
 			{
 				sprintf(newArg, "-%s=%s", CAMERA_GLOBE_KEY, arg + 3);
 				TCUserDefaults::addCommandLineArg(newArg);
-				zoomToFit = true;
 			}
 		}
 		for (i = 0; i < count && (saveSnapshots || !retValue); i++)
@@ -405,27 +406,29 @@ bool LDSnapshotTaker::saveImage(void)
 	return retValue;
 }
 
-bool LDSnapshotTaker::shouldZoomToFit(bool zoomToFit)
+bool LDSnapshotTaker::shouldZoomToFit()
 {
-	char *cameraGlobe = TCUserDefaults::stringForKey(CAMERA_GLOBE_KEY, NULL,
-		false);
-	bool retValue = false;
-
-	if (zoomToFit)
-	{
-		retValue = true;
-	}
-	else if (cameraGlobe)
-	{
-		float globeRadius;
-
-		if (sscanf(cameraGlobe, "%*f,%*f,%f", &globeRadius) == 1)
-		{
-			retValue = true;
-		}
-	}
-	delete cameraGlobe;
-	return retValue;
+    int zoomToFit = TCUserDefaults::longForKey(SAVE_ZOOM_TO_FIT_KEY, -1, false);
+    if (zoomToFit < 0 ) {
+        // default to not ZoomToFit unless we have a reason to do otherwise
+        zoomToFit = 0;
+        // User didn't explicitly specify, default to something sensible based
+        // on the other arguments the user did pass.
+        // -cg should default to ZoomToFit to be compatible with L3P
+        char *cameraGlobe = TCUserDefaults::stringForKey(CAMERA_GLOBE_KEY, NULL,
+            false);
+        if (cameraGlobe) {
+            zoomToFit = 1;
+            delete cameraGlobe;
+        }
+        // But if the center of the model has been specified, ZoomToFit would conflict with it
+        char *modelCenter = TCUserDefaults::stringForKey(MODEL_CENTER_KEY, NULL, false);
+        if (modelCenter) {
+            zoomToFit = 0;
+            delete modelCenter;
+        }
+    }
+    return (bool) zoomToFit;
 }
 
 bool LDSnapshotTaker::saveImage(
@@ -633,7 +636,7 @@ bool LDSnapshotTaker::saveStepImage(
 	{
 		bool saveAlpha = false;
 		TCByte *buffer = grabImage(imageWidth, imageHeight,
-			shouldZoomToFit(zoomToFit), NULL, &saveAlpha);
+			shouldZoomToFit(), NULL, &saveAlpha);
 
 		if (buffer)
 		{
diff --git a/LDLib/LDSnapshotTaker.h b/LDLib/LDSnapshotTaker.h
index 2fda699..9ec26df 100644
--- a/LDLib/LDSnapshotTaker.h
+++ b/LDLib/LDSnapshotTaker.h
@@ -75,7 +75,7 @@ protected:
 	bool canSaveAlpha(void);
 	void renderOffscreenImage(void);
 	bool imageProgressCallback(CUCSTR message, float progress);
-	bool shouldZoomToFit(bool zoomToFit);
+	bool shouldZoomToFit();
 	void grabSetup(void);
 	bool saveStepImage(const char *filename, int imageWidth, int imageHeight,
 		bool zoomToFit);
