Index: trunk/ppImage/src/ppFocus.c
===================================================================
--- trunk/ppImage/src/ppFocus.c	(revision 7748)
+++ trunk/ppImage/src/ppFocus.c	(revision 7749)
@@ -17,12 +17,4 @@
     }
 
-    // define recipe options
-    // define the active I/O files
-    ppImageOptions *options = ppFocusParseCamera(config);
-    if (options == NULL) {
-        psErrorStackPrint(stderr, "");
-        exit(1);
-    }
-    
     // we search the argument data for the named fileset (argname)
     psArray *infiles = psMetadataLookupPtr(NULL, config->arguments, "INPUT");
@@ -38,5 +30,14 @@
     for (int i = 0; i < infiles->n; i++) {
 
+	// define recipe options
+	// define the active I/O files
+	ppImageOptions *options = ppFocusParseCamera(config, i);
+	if (options == NULL) {
+	    psErrorStackPrint(stderr, "");
+	    exit(1);
+	}
+
 	// Image Arithmetic Loop
+	// XXX ppFocus REQUIRES photom: for it to be true?
 	if (!ppImageLoop(config, options)) {
 	    psErrorStackPrint(stderr, "");
@@ -48,6 +49,6 @@
 	ppFocusGetFWHM (config, focus, fwhm);
 
-	// silently ignore failure for (i == infiles->n)
-	pmFPAfileDefineSingleFromArgs (NULL, config, "PPIMAGE.INPUT", "INPUT", i+1);
+	ppFocusDropCamera (config);
+	psFree (options);
     }
 
@@ -57,5 +58,5 @@
 
     // Cleaning up
-    ppImageCleanup(config, options);
+    ppImageCleanup(config, NULL);
     return EXIT_SUCCESS;
 }
Index: trunk/ppImage/src/ppFocusGetFWHM.c
===================================================================
--- trunk/ppImage/src/ppFocusGetFWHM.c	(revision 7748)
+++ trunk/ppImage/src/ppFocusGetFWHM.c	(revision 7749)
@@ -11,5 +11,5 @@
     int FWHMnum;
 
-    pmFPAfile *input = psMetadataLookupPtr (&status, config->files, "PPIMAGE.INPUT");
+    pmFPAfile *input = psMetadataLookupPtr (&status, config->files, "PSPHOT.OUTPUT");
     if (!status) {
 	psErrorStackPrint(stderr, "Can't find input data!\n");
@@ -45,5 +45,8 @@
 		// in this example, we use the supplied PSPHOT.HEADER data in which FWHM_X,Y are supplied
 		header = psMetadataLookupPtr (&status, readout->analysis, "PSPHOT.HEADER");
-		if (header == NULL) continue;
+		if (header == NULL) {
+		    psError(PS_ERR_IO, false, "Missing header in ppFocus");
+		    continue;
+		}
 
 		FWHM_X = psMetadataLookupF32 (&status, header, "FWHM_X");
@@ -52,4 +55,6 @@
 		FWHMsum += 0.5*(FWHM_X + FWHM_Y);
 		FWHMnum ++;
+
+		psLogMsg ("ppFocus", 4, "focus pt: %f,%f, fwhm sum: %f, fwhm num: %d\n", FWHM_X, FWHM_Y, FWHMsum, FWHMnum);
 	    }
 	}
@@ -67,5 +72,6 @@
     psVectorExtend (focus, 10, 1);
 
-    psMetadataRemoveKey (config->files, "PPIMAGE.INPUT");
+    psLogMsg ("ppFocus", 4, "focus: %f, fwhm: %f (%d,%d)\n", FOCUS, FWHM, FWHMnum);
+
     psFree (view);
     return true;
Index: trunk/ppImage/src/ppFocusParseCamera.c
===================================================================
--- trunk/ppImage/src/ppFocusParseCamera.c	(revision 7748)
+++ trunk/ppImage/src/ppFocusParseCamera.c	(revision 7749)
@@ -2,5 +2,5 @@
 
 // XXX clean up error checks: return NULL, not psAbort
-ppImageOptions *ppFocusParseCamera (pmConfig *config) {
+ppImageOptions *ppFocusParseCamera (pmConfig *config, int entry) {
 
     bool status = false;
@@ -8,5 +8,5 @@
     // the first input image defines the camera, and all recipes and options that follow
     // select only the first file from the INPUT array
-    pmFPAfile *input = pmFPAfileDefineSingleFromArgs (&status, config, "PPIMAGE.INPUT", "INPUT", 0);
+    pmFPAfile *input = pmFPAfileDefineSingleFromArgs (&status, config, "PPIMAGE.INPUT", "INPUT", entry);
     if (!status) {
 	psError(PS_ERR_IO, false, "Failed to build FPA from PPIMAGE.INPUT");
@@ -103,2 +103,36 @@
     return (options);
 }
+
+// remove from config all pmFPAfiles which could have been added (ignore missing entries)
+void ppFocusDropCamera (pmConfig *config) {
+
+    psMetadataRemoveKey (config->files, "PPIMAGE.INPUT");
+
+    psMetadataRemoveKey (config->files, "PPIMAGE.BIAS");
+    psMetadataRemoveKey (config->files, "PPIMAGE.DARK");
+    psMetadataRemoveKey (config->files, "PPIMAGE.MASK");
+    psMetadataRemoveKey (config->files, "PPIMAGE.FLAT");
+
+    psMetadataRemoveKey (config->files, "PPIMAGE.OUTPUT");
+    psMetadataRemoveKey (config->files, "PPIMAGE.OUTPUT.CHIP");
+    psMetadataRemoveKey (config->files, "PPIMAGE.OUTPUT.FPA1");
+    psMetadataRemoveKey (config->files, "PPIMAGE.OUTPUT.FPA2");
+
+    psMetadataRemoveKey (config->files, "PPIMAGE.BIN1");
+    psMetadataRemoveKey (config->files, "PPIMAGE.BIN2");
+    
+    psMetadataRemoveKey (config->files, "PPIMAGE.JPEG1");
+    psMetadataRemoveKey (config->files, "PPIMAGE.JPEG2");
+
+    psMetadataRemoveKey (config->files, "PSPHOT.INPUT");
+    psMetadataRemoveKey (config->files, "PSPHOT.OUTPUT");
+    psMetadataRemoveKey (config->files, "PSPHOT.RESID");
+    psMetadataRemoveKey (config->files, "PSPHOT.BACKMDL");
+    psMetadataRemoveKey (config->files, "PSPHOT.BACKGND");
+    psMetadataRemoveKey (config->files, "PSPHOT.BACKSUB");
+    psMetadataRemoveKey (config->files, "PSPHOT.PSF.LOAD");
+    psMetadataRemoveKey (config->files, "PSPHOT.PSF.SAVE");
+
+    return;
+}
+
Index: trunk/ppImage/src/ppImage.h
===================================================================
--- trunk/ppImage/src/ppImage.h	(revision 7748)
+++ trunk/ppImage/src/ppImage.h	(revision 7749)
@@ -47,7 +47,9 @@
 // functions used by ppFocus
 pmConfig *ppFocusArguments(int argc, char **argv);
-ppImageOptions *ppFocusParseCamera (pmConfig *config);
+ppImageOptions *ppFocusParseCamera (pmConfig *config, int entry);
 bool ppFocusGetFWHM (pmConfig *config, psVector *focus, psVector *fwhm);
 bool ppFocusFitFWHM (pmConfig *config, psVector *focus, psVector *fwhm);
 
+void ppFocusDropCamera (pmConfig *config);
+
 #endif
