Index: trunk/ppImage/src/ppImageLoop.c
===================================================================
--- trunk/ppImage/src/ppImageLoop.c	(revision 13837)
+++ trunk/ppImage/src/ppImageLoop.c	(revision 13901)
@@ -27,5 +27,5 @@
             return false;
         }
-	stats = psMetadataAlloc();
+        stats = psMetadataAlloc();
         psFree(resolved);
     }
@@ -34,5 +34,6 @@
     if (!status) {
         psErrorStackPrint(stderr, "Can't find input data!\n");
-        exit(EXIT_FAILURE);
+        ppImageCleanup(config, options);
+        exit(PS_EXIT_PROG_ERROR);
     }
 
@@ -42,5 +43,5 @@
     // files associated with the science image
     if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-	psFree (view);
+        psFree (view);
         return false;
     }
@@ -53,5 +54,5 @@
 
         if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-	    psFree (view);
+            psFree (view);
             return false;
         }
@@ -63,5 +64,5 @@
             }
             if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-		psFree (view);
+                psFree (view);
                 return false;
             }
@@ -78,5 +79,5 @@
             while ((readout = pmFPAviewNextReadout (view, input->fpa, 1)) != NULL) {
                 if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
-		    psFree (view);
+                    psFree (view);
                     return false;
                 }
@@ -88,5 +89,5 @@
                 if (!ppImageDetrendReadout(config, options, view)) {
                     psError(PS_ERR_UNKNOWN, false, "Unable to detrend readout.\n");
-		    psFree (view);
+                    psFree (view);
                     return false;
                 }
@@ -99,5 +100,5 @@
             pmChip *fringe = pmFPAfileThisChip(config->files, view, "PPIMAGE.FRINGE");
             if (!ppImageDetrendFringeSolve(chip, fringe, options)) {
-		psFree (view);
+                psFree (view);
                 return false;
             }
@@ -116,5 +117,5 @@
                 pmCell *fringeCell = pmFPAfileThisCell(config->files, view, "PPIMAGE.FRINGE");
                 if (!ppImageDetrendFringeGenerate(cell, fringeCell)) {
-		    psFree (view);
+                    psFree (view);
                     return false;
                 }
@@ -127,20 +128,20 @@
                 if (!mdok || !output) {
                     psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find file PPIMAGE.OUTPUT.\n");
-		    psFree (view);
-                    return false;
-                }
-
-                if (!ppStats(stats, 
-			     output->fpa, 
-			     view,
-			     options->satMask | options->badMask | options->maskValue,
-			     config)) {
+                    psFree (view);
+                    return false;
+                }
+
+                if (!ppStats(stats,
+                             output->fpa,
+                             view,
+                             options->satMask | options->badMask | options->maskValue,
+                             config)) {
                     psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to generate stats for image.\n");
-		    psFree (stats);
-		    psFree (view);
-                    return false;
-                }
-            }
-	    
+                    psFree (stats);
+                    psFree (view);
+                    return false;
+                }
+            }
+
             // Add MD5 information for cell
             pmHDU *hdu = pmHDUFromCell(cell); // HDU that owns the cell
@@ -162,17 +163,17 @@
         }
 
-        if (!ppImageMosaicChip(config, view, "PPIMAGE.OUTPUT.CHIP", "PPIMAGE.OUTPUT")) {
+        if (!ppImageMosaicChip(config, options, view, "PPIMAGE.CHIP", "PPIMAGE.OUTPUT")) {
             psError(PS_ERR_UNKNOWN, false, "Unable to mosaic chip.\n");
-	    psFree (view);
+            psFree (view);
             return false;
         }
         if (!ppImageRebinChip(config, view, "PPIMAGE.BIN1")) {
             psError(PS_ERR_UNKNOWN, false, "Unable to bin chip.\n");
-	    psFree (view);
+            psFree (view);
             return false;
         }
         if (!ppImageRebinChip(config, view, "PPIMAGE.BIN2")) {
             psError(PS_ERR_UNKNOWN, false, "Unable to bin chip.\n");
-	    psFree (view);
+            psFree (view);
             return false;
         }
@@ -181,8 +182,8 @@
         if (options->doPhotom) {
             if (!ppImagePhotom(config, view)) {
-		psError(PS_ERR_UNKNOWN, false, "error running photometry.\n");
-		psFree (view);
-		return false;
-	    }
+                psError(PS_ERR_UNKNOWN, false, "error running photometry.\n");
+                psFree (view);
+                return false;
+            }
         }
 
@@ -195,5 +196,5 @@
 
             if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-		psFree(view);
+                psFree(view);
                 return false;
             }
@@ -202,5 +203,5 @@
         // Close chip
         if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-	    psFree(view);
+            psFree(view);
             return false;
         }
@@ -221,21 +222,21 @@
 
     // XXX an optional full-scale FPA mosaic could happen here
-    // it would require us to NOT free PPIMAGE.OUTPUT.CHIP until here
-    // ppImageMosaicFPA (config, "PPIMAGE.OUTPUT.FPA", "PPIMAGE.OUTPUT.CHIP");
-    ppImageMosaicFPA(config, "PPIMAGE.OUTPUT.FPA1", "PPIMAGE.BIN1");
-    ppImageMosaicFPA(config, "PPIMAGE.OUTPUT.FPA2", "PPIMAGE.BIN2");
+    // it would require us to NOT free PPIMAGE.CHIP until here
+    // ppImageMosaicFPA (config, "PPIMAGE.OUTPUT.FPA", "PPIMAGE.CHIP");
+    ppImageMosaicFPA(config, options, "PPIMAGE.OUTPUT.FPA1", "PPIMAGE.BIN1");
+    ppImageMosaicFPA(config, options, "PPIMAGE.OUTPUT.FPA2", "PPIMAGE.BIN2");
 
     // we perform astrometry on all chips after sources have been detected
     if (options->doAstromChip || options->doAstromMosaic) {
         if (!ppImageAstrom(config)) {
-	    psError(PS_ERR_UNKNOWN, false, "error running astrometry.\n");
-	    psFree(view);
-	    return false;
-	}
+            psError(PS_ERR_UNKNOWN, false, "error running astrometry.\n");
+            psFree(view);
+            return false;
+        }
     }
 
     // Close FPA
     if (!pmFPAfileIOChecks(config, view, PM_FPA_AFTER)) {
-	psFree(view);
+        psFree(view);
         return false;
     }
