Index: /trunk/pswarp/src/pswarpCleanup.c
===================================================================
--- /trunk/pswarp/src/pswarpCleanup.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpCleanup.c	(revision 41510)
@@ -14,20 +14,20 @@
 // Lists of file rules which we may need to save here
 static char *outputFiles[] = {
-  "PSWARP.OUTPUT",
-  "PSWARP.OUTPUT.MASK",
-  "PSWARP.OUTPUT.VARIANCE",
-  "PSWARP.OUTPUT.BKGMODEL",
-  "PSWARP.OUTPUT.SOURCES",
-  "PSPHOT.OUTPUT",
-  "PSPHOT.RESID",
-  "PSPHOT.BACKMDL",
-  "PSPHOT.BACKMDL.STDEV",
-  "PSPHOT.BACKGND",
-  "PSPHOT.BACKSUB",
-  "PSPHOT.PSF.SAVE",
-  "SOURCE.PLOT.MOMENTS",
-  "SOURCE.PLOT.PSFMODEL",
-  "SOURCE.PLOT.APRESID",
-  NULL
+    "PSWARP.OUTPUT",
+    "PSWARP.OUTPUT.MASK",
+    "PSWARP.OUTPUT.VARIANCE",
+    "PSWARP.OUTPUT.BKGMODEL",
+    "PSWARP.OUTPUT.SOURCES",
+    "PSPHOT.OUTPUT",
+    "PSPHOT.RESID",
+    "PSPHOT.BACKMDL",
+    "PSPHOT.BACKMDL.STDEV",
+    "PSPHOT.BACKGND",
+    "PSPHOT.BACKSUB",
+    "PSPHOT.PSF.SAVE",
+    "SOURCE.PLOT.MOMENTS",
+    "SOURCE.PLOT.PSFMODEL",
+    "SOURCE.PLOT.APRESID",
+    NULL
 };
 
@@ -53,4 +53,5 @@
 	psError(psErrorCodeLast(), false, "Unable to read files.");
 	pmFPAfileFreeSetStrict(false);
+	psFree(view);
 	goto DONE;
     }
@@ -63,4 +64,5 @@
 	    psError(psErrorCodeLast(), false, "Unable to read files.");
 	    pmFPAfileFreeSetStrict(false);
+	    psFree(view);
 	    goto DONE;
 	}
@@ -73,4 +75,5 @@
 		psError(psErrorCodeLast(), false, "Unable to read files.");
 		pmFPAfileFreeSetStrict(false);
+		psFree(view);
 		goto DONE;
 	    }
@@ -79,4 +82,5 @@
 	    psError(psErrorCodeLast(), false, "Unable to write files.");
 	    pmFPAfileFreeSetStrict(false);
+	    psFree(view);
 	    goto DONE;
 	}
@@ -85,4 +89,5 @@
 	psError(psErrorCodeLast(), false, "Unable to write files.");
 	pmFPAfileFreeSetStrict(false);
+	psFree(view);
 	goto DONE;
     }
@@ -116,4 +121,8 @@
     psLibFinalize();
 
+    psMemBlock **memblocks;
+    int Nleaks = psMemCheckLeaks (0, &memblocks, stderr, false);
+    fprintf (stderr, "Found %d leaks at %s\n", Nleaks, "ppImage");
+
 DONE:
     exitValue = pswarpExitCode(exitValue);
Index: /trunk/pswarp/src/pswarpDefineLayout.c
===================================================================
--- /trunk/pswarp/src/pswarpDefineLayout.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpDefineLayout.c	(revision 41510)
@@ -82,4 +82,6 @@
 	pswarpBounds *srcBounds = pswarpMakeBounds (input->fpa, frame);
 	pswarpBounds *tgtBounds = pswarpMakeBounds (skycell->fpa, frame);
+
+	psFree (frame);
 
 	// find the output (tgt) chips which overlap the input (src) chips
Index: /trunk/pswarp/src/pswarpLoop.c
===================================================================
--- /trunk/pswarp/src/pswarpLoop.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpLoop.c	(revision 41510)
@@ -221,4 +221,5 @@
 	}
     }
+    psFree (view);
     return true;
 }
Index: /trunk/pswarp/src/pswarpLoopBackground.c
===================================================================
--- /trunk/pswarp/src/pswarpLoopBackground.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpLoopBackground.c	(revision 41510)
@@ -55,4 +55,5 @@
     if (!status) {
         psError(PSWARP_ERR_DATA, true, "number of inputs is not defined (programming error)");
+	psFree (view);
         return false;
     }
@@ -90,15 +91,17 @@
 	pmFPAviewReset (view);
 
-	pmFPAview *view = pmFPAviewAlloc(0);
-	if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+	pmFPAview *viewT2 = pmFPAviewAlloc(0);
+	if (!pmFPAfileIOChecks(config, viewT2, PM_FPA_BEFORE)) {
 	    psError(psErrorCodeLast(), false, "Unable to read files.");
+	    psFree (viewT2);
 	    goto FAIL;
 	}
 
 	pmChip *chip;
-	while ((chip = pmFPAviewNextChip (view, input->fpa, 1)) != NULL) {
+	while ((chip = pmFPAviewNextChip (viewT2, input->fpa, 1)) != NULL) {
 	    if (!chip->process || !chip->file_exists) { continue; }
-	    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+	    if (!pmFPAfileIOChecks(config, viewT2, PM_FPA_BEFORE)) {
 		psError(psErrorCodeLast(), false, "Unable to read files.");
+		psFree (viewT2);
 		goto FAIL;
 	    }
@@ -107,18 +110,20 @@
 	    double xBin = NAN;
 	    double yBin = NAN;
-	    pswarpGetInputScales (&xBin, &yBin, config, view, chip);
+	    pswarpGetInputScales (&xBin, &yBin, config, viewT2, chip);
 	    double fluxRatio = xBin * yBin / (float) (xGrid * yGrid);
 	    
-	    if (!pswarpModifyChipAstrom (config, view, chip, astrom, bilevelAstrometry, xBin, yBin)) {
+	    if (!pswarpModifyChipAstrom (config, viewT2, chip, astrom, bilevelAstrometry, xBin, yBin)) {
 		psError(psErrorCodeLast(), false, "failed to set BKGMODEL astrometry.");
+		psFree (viewT2);
 		goto FAIL;
 	    }
 
 	    pmCell *cell;
-	    while ((cell = pmFPAviewNextCell (view, input->fpa, 1)) != NULL) {
-		psTrace ("pswarp", 4, "ACell %d: %x %x %d\n", view->cell, cell->file_exists, cell->process,psErrorCodeLast());
+	    while ((cell = pmFPAviewNextCell (viewT2, input->fpa, 1)) != NULL) {
+		psTrace ("pswarp", 4, "ACell %d: %x %x %d\n", viewT2->cell, cell->file_exists, cell->process,psErrorCodeLast());
 		if (!cell->process || !cell->file_exists) { continue; }
-		if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) {
+		if (!pmFPAfileIOChecks (config, viewT2, PM_FPA_BEFORE)) {
 		    psError(psErrorCodeLast(), false, "Unable to read files.");
+		    psFree (viewT2);
 		    goto FAIL;
 		}
@@ -126,7 +131,8 @@
 		// process each of the readouts
 		pmReadout *readout;
-		while ((readout = pmFPAviewNextReadout(view, input->fpa, 1)) != NULL) {
-		    if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) {
+		while ((readout = pmFPAviewNextReadout(viewT2, input->fpa, 1)) != NULL) {
+		    if (!pmFPAfileIOChecks(config, viewT2, PM_FPA_BEFORE)) {
 			psError(psErrorCodeLast(), false, "Unable to read files.");
+			psFree (viewT2);
 			goto FAIL;
 		    }
@@ -136,15 +142,15 @@
 
 		    if (astrom != input) {
-		      pmReadout *astromRO = pmFPAviewThisReadout(view, astrom->fpa); // Readout for astrometry
-		      if ((!refcat)&&(astromRO)) {
-			if ((astromRO->parent->parent->hdu->header)&&(output->fpa->analysis)) {
-			  psMetadataItem *refItem = psMetadataLookup(astromRO->parent->parent->hdu->header, "PSREFCAT");
-			  if (refItem) {
-			    refcat = psMetadataLookupStr(NULL, astromRO->parent->parent->hdu->header, "PSREFCAT");
-			    psMetadataAddStr(output->fpa->analysis, PS_LIST_TAIL, "REFERENCE_CATALOG", PS_META_REPLACE,
-					     "Reference catalog used for calibration.", refcat);
-			  }
+			pmReadout *astromRO = pmFPAviewThisReadout(viewT2, astrom->fpa); // Readout for astrometry
+			if ((!refcat)&&(astromRO)) {
+			    if ((astromRO->parent->parent->hdu->header)&&(output->fpa->analysis)) {
+				psMetadataItem *refItem = psMetadataLookup(astromRO->parent->parent->hdu->header, "PSREFCAT");
+				if (refItem) {
+				    refcat = psMetadataLookupStr(NULL, astromRO->parent->parent->hdu->header, "PSREFCAT");
+				    psMetadataAddStr(output->fpa->analysis, PS_LIST_TAIL, "REFERENCE_CATALOG", PS_META_REPLACE,
+						     "Reference catalog used for calibration.", refcat);
+				}
+			    }
 			}
-		      }
 		    }
 		    
@@ -159,24 +165,28 @@
 		    pswarpTransformToTarget (output->fpa, readout, config, true);
 
-		    if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) { // Readout
+		    if (!pmFPAfileIOChecks (config, viewT2, PM_FPA_AFTER)) { // Readout
 			psError(psErrorCodeLast(), false, "Unable to close files.");
+			psFree (viewT2);
 			goto FAIL;
 		    }
 		}
 
-		if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) { // Cell
+		if (!pmFPAfileIOChecks (config, viewT2, PM_FPA_AFTER)) { // Cell
 		    psError(psErrorCodeLast(), false, "Unable to close files.");
+		    psFree (viewT2);
 		    goto FAIL;
 		}
 	    }
 
-	    if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) { // Chip
+	    if (!pmFPAfileIOChecks (config, viewT2, PM_FPA_AFTER)) { // Chip
 		psError(psErrorCodeLast(), false, "Unable to close files.");
+		psFree (viewT2);
 		goto FAIL;
 	    }
 	}
 
-	if (!pmFPAfileIOChecks (config, view, PM_FPA_AFTER)) { // FPA
+	if (!pmFPAfileIOChecks (config, viewT2, PM_FPA_AFTER)) { // FPA
 	    psError(psErrorCodeLast(), false, "Unable to close files.");
+	    psFree (viewT2);
 	    goto FAIL;
 	}
@@ -184,6 +194,8 @@
 	if (!pswarpUpdateMetadata (output->fpa, skycell->fpa, input->fpa, astrom->fpa, config, false)) {
 	    psError(psErrorCodeLast(), false, "problem generating statistics.");
+	    psFree (viewT2);
 	    goto FAIL;
 	}
+	psFree (viewT2);
     }
 
Index: /trunk/pswarp/src/pswarpTransformReadout.c
===================================================================
--- /trunk/pswarp/src/pswarpTransformReadout.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpTransformReadout.c	(revision 41510)
@@ -118,5 +118,5 @@
     psAssert (yGridMax < grid->nYpts, "yGridMax too big\n");
 
-    // fprintf (stderr, "warp %d,%d - %d,%d\n", xGridMin, yGridMin, xGridMax, yGridMax);
+    fprintf (stderr, "warp %d,%d - %d,%d\n", xGridMin, yGridMin, xGridMax, yGridMax);
 
     // create jobs and supply them to the threads
Index: /trunk/pswarp/src/pswarpUpdateMetadata.c
===================================================================
--- /trunk/pswarp/src/pswarpUpdateMetadata.c	(revision 41509)
+++ /trunk/pswarp/src/pswarpUpdateMetadata.c	(revision 41510)
@@ -23,8 +23,8 @@
 
     if ((output)&&(output->analysis)) {    
-      psMetadataItem *refItem = psMetadataLookup(output->analysis, "REFERENCE_CATALOG");
-      if (refItem) {
-	refcat = psMetadataLookupStr (NULL, output->analysis, "REFERENCE_CATALOG");
-      }
+	psMetadataItem *refItem = psMetadataLookup(output->analysis, "REFERENCE_CATALOG");
+	if (refItem) {
+	    refcat = psMetadataLookupStr (NULL, output->analysis, "REFERENCE_CATALOG");
+	}
     }
     pmChip *chip;
@@ -47,5 +47,5 @@
             pmReadout *readout;
             while ((readout = pmFPAviewNextReadout(view, output, 1)) != NULL) {
-	      // skip empty output readouts
+		// skip empty output readouts
                 if (!readout->data_exists) continue;
     
@@ -57,19 +57,19 @@
 		    psArray *covars = psListToArray(covariances); // Array of covariance matrices
 		    if (covars->n) {
-		      psKernel *covar = psImageCovarianceAverage(covars);
-		      psMetadataRemoveKey(readout->analysis, PSWARP_ANALYSIS_COVARIANCES);
+			psKernel *covar = psImageCovarianceAverage(covars);
+			psMetadataRemoveKey(readout->analysis, PSWARP_ANALYSIS_COVARIANCES);
 
-		      // Correct covariance matrix scale for the mean (square root of the) Jacobian
-		      double jacobian = psMetadataLookupF64(NULL, readout->analysis, PSWARP_ANALYSIS_JACOBIAN); // Jacobian
-		      int goodPixels = psMetadataLookupS32(NULL, readout->analysis, PSWARP_ANALYSIS_GOODPIX);   // Good pixels
-		      jacobian /= goodPixels;
-		      readout->covariance = psImageCovarianceScale(covar, jacobian);
-		      psFree(covar);
+			// Correct covariance matrix scale for the mean (square root of the) Jacobian
+			double jacobian = psMetadataLookupF64(NULL, readout->analysis, PSWARP_ANALYSIS_JACOBIAN); // Jacobian
+			int goodPixels = psMetadataLookupS32(NULL, readout->analysis, PSWARP_ANALYSIS_GOODPIX);   // Good pixels
+			jacobian /= goodPixels;
+			readout->covariance = psImageCovarianceScale(covar, jacobian);
+			psFree(covar);
 
-		      if (readout->variance) {
-			psImageCovarianceTransfer(readout->variance, readout->covariance);
-		      }
+			if (readout->variance) {
+			    psImageCovarianceTransfer(readout->variance, readout->covariance);
+			}
 
-		      psFree(covars);
+			psFree(covars);
 		    }
 		}
@@ -94,7 +94,7 @@
 		psArray *chipnames = psMetadataLookupPtr(&status, readout->analysis, PSWARP_ANALYSIS_CHIPNAMES); 
 		for (int i = 0; chipnames && (i < chipnames->n); i++) {
-		  psStringAppend (&keyword, "SRC_%04d", i);
-		  psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "input image", chipnames->data[i]);
-		  psFree (keyword);
+		    psStringAppend (&keyword, "SRC_%04d", i);
+		    psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "input image", chipnames->data[i]);
+		    psFree (keyword);
 		}
 
@@ -102,7 +102,7 @@
 		psArray *chipRegions = psMetadataLookupPtr(&status, readout->analysis, PSWARP_ANALYSIS_CHIPREGIONS); 
 		for (int i = 0; chipRegions && (i < chipRegions->n); i++) {
-		  psStringAppend (&keyword, "SEC_%04d", i);
-		  psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "input image", chipRegions->data[i]);
-		  psFree (keyword);
+		    psStringAppend (&keyword, "SEC_%04d", i);
+		    psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "input image", chipRegions->data[i]);
+		    psFree (keyword);
 		}
 
@@ -110,15 +110,15 @@
 		psArray *backmaps  = psMetadataLookupPtr(&status, readout->analysis, PSWARP_ANALYSIS_BACKMAPS); // 
 		for (int i = 0; backmaps && (i < backmaps->n); i++) {
-		  psPlaneTransform *map = backmaps->data[i];		  
-		  psStringAppend (&keyword, "MPX_%04d", i);
-		  psStringAppend (&mapstring, "[%8.2f,%8.4f,%8.4f]", map->x->coeff[0][0], map->x->coeff[1][0], map->x->coeff[0][1]);
-		  psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "warp to image map", mapstring);
-		  psFree (keyword);
-		  psFree (mapstring);
-		  psStringAppend (&keyword, "MPY_%04d", i);
-		  psStringAppend (&mapstring, "[%8.2f,%8.4f,%8.4f]", map->y->coeff[0][0], map->y->coeff[1][0], map->y->coeff[0][1]);
-		  psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "warp to image map", mapstring);
-		  psFree (keyword);
-		  psFree (mapstring);
+		    psPlaneTransform *map = backmaps->data[i];		  
+		    psStringAppend (&keyword, "MPX_%04d", i);
+		    psStringAppend (&mapstring, "[%8.2f,%8.4f,%8.4f]", map->x->coeff[0][0], map->x->coeff[1][0], map->x->coeff[0][1]);
+		    psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "warp to image map", mapstring);
+		    psFree (keyword);
+		    psFree (mapstring);
+		    psStringAppend (&keyword, "MPY_%04d", i);
+		    psStringAppend (&mapstring, "[%8.2f,%8.4f,%8.4f]", map->y->coeff[0][0], map->y->coeff[1][0], map->y->coeff[0][1]);
+		    psMetadataAddStr(hdu->header, PS_LIST_TAIL, keyword, PS_META_REPLACE, "warp to image map", mapstring);
+		    psFree (keyword);
+		    psFree (mapstring);
 		}
 	    }
@@ -164,4 +164,5 @@
     if (!psMetadataCopy(output->concepts, input->concepts)) {
 	psError(psErrorCodeLast(), false, "Unable to copy FPA concepts from input to output.");
+	psFree(view);
 	return false;
     }
@@ -174,8 +175,8 @@
 
     if (refcat) {
-      if ((output)&&(output->hdu)&&(output->hdu->header)) {
-	psMetadataAddStr(output->hdu->header, PS_LIST_TAIL, "PSREFCAT", PS_META_REPLACE,
-			 "Reference catalog used for calibration", refcat);
-      }
+	if ((output)&&(output->hdu)&&(output->hdu->header)) {
+	    psMetadataAddStr(output->hdu->header, PS_LIST_TAIL, "PSREFCAT", PS_META_REPLACE,
+			     "Reference catalog used for calibration", refcat);
+	}
     }
     
@@ -193,4 +194,5 @@
     }
 
+    psFree(view);
     return true;
 }
