Index: /trunk/ppImage/src/ppImage.c
===================================================================
--- /trunk/ppImage/src/ppImage.c	(revision 7676)
+++ /trunk/ppImage/src/ppImage.c	(revision 7677)
@@ -11,5 +11,5 @@
     // Determine camera, format from header if not already defined
     // Construct camera in preparation for reading
-    pmConfig *config = ppImageArguments(&argc, argv);
+    pmConfig *config = ppImageArguments(argc, argv);
     if (config == NULL) {
         psErrorStackPrint(stderr, "");
Index: /trunk/ppImage/src/ppImage.h
===================================================================
--- /trunk/ppImage/src/ppImage.h	(revision 7676)
+++ /trunk/ppImage/src/ppImage.h	(revision 7677)
@@ -13,5 +13,5 @@
 
 // Get the configuration
-pmConfig *ppImageArguments(int *argc, char **argv);
+pmConfig *ppImageArguments(int argc, char **argv);
 
 // Determine what type of camera, and initialise
Index: /trunk/ppImage/src/ppImageArguments.c
===================================================================
--- /trunk/ppImage/src/ppImageArguments.c	(revision 7676)
+++ /trunk/ppImage/src/ppImageArguments.c	(revision 7677)
@@ -6,10 +6,10 @@
 }
 
-pmConfig *ppImageArguments(int *argc, char **argv) {
+pmConfig *ppImageArguments(int argc, char **argv) {
 
     int N;
     bool status;
 
-    if (*argc == 1) usage ();
+    if (argc == 1) usage ();
 
     // load the site-wide configuration information
@@ -30,11 +30,11 @@
 
     // recipe option: -usemask : override MASK setting in phase2.recipe
-    if ((N = psArgumentGet (*argc, argv, "-usemask"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddBool (options, PS_LIST_TAIL, "MASK", PS_META_REPLACE, "", true);
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet(config->argc, config->argv, "-usemask"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddBool (options, PS_LIST_TAIL, "MASK", PS_META_REPLACE, "", true);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    // XXX add other PPIMAGE recipe options here 
+    // XXX add other PPIMAGE recipe options here
 
     // drop the local view on the options (saved on config->arguments)
@@ -42,26 +42,28 @@
 
     // the input file is a required argument; if not found, we will exit
-    status = pmConfigFileSetsMD (config->arguments, argc, argv, "INPUT", "-file", "-list");
+    status = pmConfigFileSetsMD (config->arguments, config, "INPUT", "-file", "-list");
     if (!status) { usage ();}
 
     // if these command-line options are supplied, load the file name lists into config->arguments
     // override any configuration-specified source for these files
-    pmConfigFileSetsMD (config->arguments, argc, argv, "BIAS", "-bias", "-biaslist");
-    pmConfigFileSetsMD (config->arguments, argc, argv, "DARK", "-dark", "-darklist");
-    pmConfigFileSetsMD (config->arguments, argc, argv, "FLAT", "-flat", "-flatlist");
-    pmConfigFileSetsMD (config->arguments, argc, argv, "MASK", "-mask", "-masklist");
-    pmConfigFileSetsMD (config->arguments, argc, argv, "FRINGE", "-fringe", "-fringelist");
+    pmConfigFileSetsMD (config->arguments, config, "BIAS", "-bias", "-biaslist");
+    pmConfigFileSetsMD (config->arguments, config, "DARK", "-dark", "-darklist");
+    pmConfigFileSetsMD (config->arguments, config, "FLAT", "-flat", "-flatlist");
+    pmConfigFileSetsMD (config->arguments, config, "MASK", "-mask", "-masklist");
+    pmConfigFileSetsMD (config->arguments, config, "FRINGE", "-fringe", "-fringelist");
 
     // chip selection is used to limit chips to be processed
-    if ((N = psArgumentGet (*argc, argv, "-chip"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-chip"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "",
+                          config->argv[N]);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    if (*argc != 2) usage ();
+    if (config->argc != 2) usage ();
 
     // Add the input and output images (which remain on the command-line) to the arguments list
-    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "Name of the output image", argv[1]);
+    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "Name of the output image",
+                     config->argv[1]);
 
     return config;
Index: /trunk/ppImage/src/ppTest.c
===================================================================
--- /trunk/ppImage/src/ppTest.c	(revision 7676)
+++ /trunk/ppImage/src/ppTest.c	(revision 7677)
@@ -11,5 +11,5 @@
 // ppImageConfig.c
 //////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    pmConfig *config = pmConfigRead(&argc, argv);
+    pmConfig *config = pmConfigRead(argc, argv);
     if (! config) {
         psErrorStackPrint(stderr, "Can't find site configuration!\n");
@@ -27,7 +27,7 @@
     psMetadataAddS32(config->arguments, PS_LIST_TAIL, "-chip", 0, "Chip number to process (if positive)", -1);
 
-    if (! psArgumentParse(config->arguments, &argc, argv) || argc != 3) {
+    if (! psArgumentParse(config->arguments, &config->argc, config->argv) || argc != 3) {
         printf("\nPan-STARRS Phase 2 processing\n\n");
-        printf("Usage: %s INPUT.fits OUTPUT.fits\n\n", argv[0]);
+        printf("Usage: %s INPUT.fits OUTPUT.fits\n\n", config->argv[0]);
         psArgumentHelp(config->arguments);
         psFree(config->arguments);
@@ -36,6 +36,8 @@
 
     // Add the input and output images (which remain on the command-line) to the arguments list
-    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "-input",  0, "Name of the input image",  argv[1]);
-    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "-output", 0, "Name of the output image", argv[2]);
+    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "-input",  0, "Name of the input image",
+                     config->argv[1]);
+    psMetadataAddStr(config->arguments, PS_LIST_TAIL, "-output", 0, "Name of the output image",
+                     config->argv[2]);
 
     // Define database handle, if used
@@ -103,4 +105,5 @@
     pmFPAview *mosaicView = pmFPAviewAlloc(0);
     pmFPAAddSourceFromView(mosaicFPA, mosaicView, mosaicFormat);
+    psFree(mosaicView);
 #endif
 
@@ -110,7 +113,10 @@
 #if 0
     psArray *chips = fpa->chips;
-    //pmFPAWrite(fpa, outFile, NULL, false);
+    pmFPAWrite(fpa, outFile, NULL, false, false);
     for (int i = 0; i < chips->n; i++) {
+        printf("Chip %d\n", i);
         pmChip *chip = chips->data[i];
+        pmChipRead(chip, inFile, NULL);
+#if 0
         //pmChipRead(chip, inFile, NULL);
         //pmChipWrite(chip, outFile, NULL, false);
@@ -129,17 +135,20 @@
             psFree(readout);
         }
-        pmChipMosaic(mosaicFPA->chips->data[0], chip);
+#endif
+        pmChipMosaic(mosaicFPA->chips->data[i], chip);
+        pmChipWrite(mosaicFPA->chips->data[i], outFile, NULL, true, true);
+        pmChipFreeData(chip);
+        pmChipFreeData(mosaicFPA->chips->data[i]);
     }
 #endif
 
+#if 1
     pmFPAMosaic(mosaicFPA, fpa);
-
-#if 1
     pmFPAWrite(mosaicFPA, outFile, NULL, true, true);
-    pmFPAPrint(stdout, mosaicFPA, true, true);
+    //pmFPAPrint(stdout, mosaicFPA, true, true);
     psFree(mosaicCamera);
     psFree(mosaicFormat);
     psFree(mosaicView);
-    psFree(mosaicFPA);
+    //psFree(mosaicFPA);
 #endif
 
Index: /trunk/psastro/src/psastro.c
===================================================================
--- /trunk/psastro/src/psastro.c	(revision 7676)
+++ /trunk/psastro/src/psastro.c	(revision 7677)
@@ -10,5 +10,5 @@
 
     // load configuration information
-    pmConfig *config = psastroArguments (&argc, argv);
+    pmConfig *config = psastroArguments (argc, argv);
 
     // load identify the data sources
@@ -26,11 +26,11 @@
     psArray *refs = psastroLoadReferences (config);
 
-    psastroMosaicGetRefstars (config, refs); 
+    psastroMosaicGetRefstars (config, refs);
 
     char *mosastro = psMetadataLookupStr (NULL, config->arguments, "MOSASTRO");
     if (mosastro == NULL) {
-	psastroChipAstrom (config, refs);
+        psastroChipAstrom (config, refs);
     } else {
-	psastroMosaicAstrom (config, refs);
+        psastroMosaicAstrom (config, refs);
     }
 
Index: /trunk/psastro/src/psastro.h
===================================================================
--- /trunk/psastro/src/psastro.h	(revision 7676)
+++ /trunk/psastro/src/psastro.h	(revision 7677)
@@ -14,5 +14,5 @@
 # define toSky projection
 
-pmConfig         *psastroArguments (int *argc, char **argv);
+pmConfig         *psastroArguments (int argc, char **argv);
 bool              psastroParseCamera (pmConfig *config);
 bool              psastroDataLoad (pmConfig *config);
Index: /trunk/psastro/src/psastroArguments.c
===================================================================
--- /trunk/psastro/src/psastroArguments.c	(revision 7676)
+++ /trunk/psastro/src/psastroArguments.c	(revision 7677)
@@ -8,10 +8,10 @@
 }
 
-pmConfig *psastroArguments (int *argc, char **argv) {
+pmConfig *psastroArguments (int argc, char **argv) {
 
     bool status;
     int N;
 
-    if (*argc == 1) usage ();
+    if (argc == 1) usage ();
 
     // basic pslib options
@@ -22,12 +22,12 @@
 
     // photcode : used in output to supplement header data (argument or recipe?)
-    if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (argc, argv, "-photcode"))) {
+        psArgumentRemove (N, &argc, argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
+        psArgumentRemove (N, &argc, argv);
     }
 
-    // load config data from default locations 
-    pmConfig *config = pmConfigRead (argc, argv);
+    // load config data from default locations
+    pmConfig *config = pmConfigRead (config->argc, config->argv);
 
     // Storage for other command-line arguments
@@ -39,24 +39,24 @@
 
     // chip selection is used to limit chips to be processed
-    if ((N = psArgumentGet (*argc, argv, "-chip"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "", psStringCopy(argv[N]));
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-chip"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "", psStringCopy(config->argv[N]));
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
     // mosastro mode also specifies output header file
-    if ((N = psArgumentGet (*argc, argv, "-mosastro"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (config->arguments, PS_LIST_TAIL, "MOSASTRO", PS_DATA_STRING, "", psStringCopy(argv[N]));
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-mosastro"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (config->arguments, PS_LIST_TAIL, "MOSASTRO", PS_DATA_STRING, "", psStringCopy(config->argv[N]));
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    status = pmConfigFileSetsMD (config->arguments, argc, argv, "INPUT", "-file", "-list");
+    status = pmConfigFileSetsMD (config->arguments, config, "INPUT", "-file", "-list");
     if (!status) { usage ();}
 
-    if (*argc != 2) usage ();
+    if (config->argc != 2) usage ();
 
     // output positions is fixed
-    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "", argv[2]);
+    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "", config->argv[2]);
 
     psTrace(__func__, 1, "Done with psastroArguments...\n");
Index: /trunk/psphot/src/psphot.c
===================================================================
--- /trunk/psphot/src/psphot.c	(revision 7676)
+++ /trunk/psphot/src/psphot.c	(revision 7677)
@@ -5,5 +5,5 @@
     psTimerStart ("complete");
 
-    psphotErrorRegister();		// register our error codes/messages
+    psphotErrorRegister();              // register our error codes/messages
 
     // basic pslib options
@@ -14,14 +14,14 @@
 
     // load command-line arguments, options, and system config data
-    pmConfig *config = psphotArguments (&argc, argv);
+    pmConfig *config = psphotArguments (argc, argv);
     if (config == NULL) {
-	psErrorStackPrint(stderr, "");
-	exit(1);
+        psErrorStackPrint(stderr, "");
+        exit(1);
     }
 
     // load input data (config and images (signal, noise, mask)
     if (!psphotParseCamera (config)) {
-	psErrorStackPrint(stderr, "");
-	exit(1);
+        psErrorStackPrint(stderr, "");
+        exit(1);
     }
 
Index: /trunk/psphot/src/psphot.h
===================================================================
--- /trunk/psphot/src/psphot.h	(revision 7676)
+++ /trunk/psphot/src/psphot.h	(revision 7677)
@@ -12,5 +12,5 @@
 
 // top-level psphot functions
-pmConfig       *psphotArguments (int *argc, char **argv);
+pmConfig       *psphotArguments (int argc, char **argv);
 bool            psphotParseCamera (pmConfig *config);
 bool            psphotImageLoop (pmConfig *config);
@@ -31,5 +31,5 @@
 pmPSF          *psphotChoosePSF (pmReadout *readout, psArray *sources, psMetadata *recipe);
 bool            psphotPSFstats (pmReadout *readout, psMetadata *recipe, pmPSF *psf);
-bool 	        psphotEnsemblePSF (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, bool final);
+bool            psphotEnsemblePSF (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf, bool final);
 bool            psphotBlendFit (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf);
 bool            psphotReplaceUnfit (psArray *sources);
@@ -40,6 +40,6 @@
 // basic support functions
 void            psphotModelGroupInit (void);
-int 	        psphotSortBySN (const void **a, const void **b);
-int 	        psphotSortByY (const void **a, const void **b);
+int             psphotSortBySN (const void **a, const void **b);
+int             psphotSortByY (const void **a, const void **b);
 bool            psphotGrowthCurve (pmReadout *readout, pmPSF *psf);
 void            psphotTestArguments (int *argc, char **argv);
@@ -48,30 +48,30 @@
 
 // functions to set the correct source pixels
-bool 		psphotInitRadiusPSF (psMetadata *recipe, pmModelType type);
-bool 		psphotCheckRadiusPSF (pmReadout *readout, pmSource *source, pmModel *model);
-bool 		psphotCheckRadiusPSFBlend (pmReadout *readout, pmSource *source, pmModel *model, float dR);
-bool 		psphotInitRadiusEXT (psMetadata *recipe, pmModelType type);
-bool 		psphotCheckRadiusEXT (pmReadout *readout, pmSource *source, pmModel *model);
+bool            psphotInitRadiusPSF (psMetadata *recipe, pmModelType type);
+bool            psphotCheckRadiusPSF (pmReadout *readout, pmSource *source, pmModel *model);
+bool            psphotCheckRadiusPSFBlend (pmReadout *readout, pmSource *source, pmModel *model, float dR);
+bool            psphotInitRadiusEXT (psMetadata *recipe, pmModelType type);
+bool            psphotCheckRadiusEXT (pmReadout *readout, pmSource *source, pmModel *model);
 
 // output functions
-bool 		psphotDumpMoments (psMetadata *recipe, psArray *sources);
+bool            psphotDumpMoments (psMetadata *recipe, psArray *sources);
 psMetadata     *psphotDefineHeader (psMetadata *recipe);
 bool            psphotWeightBias (pmReadout *readout, psArray *sources, psMetadata *recipe, pmPSF *psf);
 
 // PSF / DBL / EXT evaluation functions
-bool 		psphotEvalPSF (pmSource *source, pmModel *model);
-bool 		psphotEvalDBL (pmSource *source, pmModel *model);
-bool 		psphotEvalEXT (pmSource *source, pmModel *model);
+bool            psphotEvalPSF (pmSource *source, pmModel *model);
+bool            psphotEvalDBL (pmSource *source, pmModel *model);
+bool            psphotEvalEXT (pmSource *source, pmModel *model);
 
 //  functions to support the source fitting process
-bool 		psphotInitLimitsPSF (psMetadata *recipe);
-bool		psphotInitLimitsEXT (psMetadata *recipe);
-bool		psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf);
-bool		psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf);
-bool		psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf);
-pmModel	       *psphotFitEXT (pmReadout *readout, pmSource *source);
-psArray	       *psphotFitDBL (pmReadout *readout, pmSource *source);
+bool            psphotInitLimitsPSF (psMetadata *recipe);
+bool            psphotInitLimitsEXT (psMetadata *recipe);
+bool            psphotFitBlend (pmReadout *readout, pmSource *source, pmPSF *psf);
+bool            psphotFitBlob (pmReadout *readout, pmSource *source, psArray *sources, pmPSF *psf);
+bool            psphotFitPSF (pmReadout *readout, pmSource *source, pmPSF *psf);
+pmModel        *psphotFitEXT (pmReadout *readout, pmSource *source);
+psArray        *psphotFitDBL (pmReadout *readout, pmSource *source);
 
 // functions to support simultaneous multi-source fitting
-bool 		psphotFitSet (pmSource *oneSrc, pmModel *oneModel, char *fitset, pmSourceFitMode mode);
+bool            psphotFitSet (pmSource *oneSrc, pmModel *oneModel, char *fitset, pmSourceFitMode mode);
 
Index: /trunk/psphot/src/psphotArguments.c
===================================================================
--- /trunk/psphot/src/psphotArguments.c	(revision 7676)
+++ /trunk/psphot/src/psphotArguments.c	(revision 7677)
@@ -2,19 +2,19 @@
 # include <glob.h>
 
-pmConfig *psphotArguments (int *argc, char **argv) {
+pmConfig *psphotArguments(int argc, char **argv) {
 
     int N;
     bool status;
 
-    if (*argc == 1) {
-	psError(PSPHOT_ERR_ARGUMENTS, true, "Too few arguments: %d", *argc);
-	return NULL;
+    if (argc == 1) {
+        psError(PSPHOT_ERR_ARGUMENTS, true, "Too few arguments: %d", argc);
+        return NULL;
     }
 
-    // load config data from default locations 
+    // load config data from default locations
     pmConfig *config = pmConfigRead(argc, argv);
     if (config == NULL) {
-	psError(PSPHOT_ERR_CONFIG, false, "Can't find site configuration");
-	return NULL;
+        psError(PSPHOT_ERR_CONFIG, false, "Can't find site configuration");
+        return NULL;
     }
 
@@ -29,109 +29,109 @@
 
     // run the test model (requires X,Y coordinate)
-    if ((N = psArgumentGet (*argc, argv, "-modeltest"))) {
-	psMetadataAddBool (options, PS_LIST_TAIL, "TEST_FIT",   0, "", true);
-	psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_X", 0, "", atof(argv[N+1]));
-	psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_Y", 0, "", atof(argv[N+2]));
+    if ((N = psArgumentGet (config->argc, config->argv, "-modeltest"))) {
+        psMetadataAddBool (options, PS_LIST_TAIL, "TEST_FIT",   0, "", true);
+        psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_X", 0, "", atof(argv[N+1]));
+        psMetadataAddF32  (options, PS_LIST_TAIL, "TEST_FIT_Y", 0, "", atof(argv[N+2]));
 
-	psArgumentRemove (N, argc, argv);
-	psArgumentRemove (N, argc, argv);
-	psArgumentRemove (N, argc, argv);
+        psArgumentRemove (N, &config->argc, config->argv);
+        psArgumentRemove (N, &config->argc, config->argv);
+        psArgumentRemove (N, &config->argc, config->argv);
 
-	// specify the modeltest model
-	if ((N = psArgumentGet (*argc, argv, "-model"))) {
-	    psArgumentRemove (N, argc, argv);
-	    psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODEL", 0, "", argv[N]);
-	    psArgumentRemove (N, argc, argv);
-	}
+        // specify the modeltest model
+        if ((N = psArgumentGet (config->argc, config->argv, "-model"))) {
+            psArgumentRemove (N, &config->argc, config->argv);
+            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODEL", 0, "", config->argv[N]);
+            psArgumentRemove (N, &config->argc, config->argv);
+        }
 
-	// specify the test fit mode
-	if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
-	    psArgumentRemove (N, argc, argv);
-	    psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODE", 0, "", argv[N]);
-	    psArgumentRemove (N, argc, argv);
-	}
-	if ((N = psArgumentGet (*argc, argv, "-fitset"))) {
-	    psArgumentRemove (N, argc, argv);
-	    psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_SET", 0, "", argv[N]);
-	    psArgumentRemove (N, argc, argv);
-	}
+        // specify the test fit mode
+        if ((N = psArgumentGet (config->argc, config->argv, "-fitmode"))) {
+            psArgumentRemove (N, &config->argc, config->argv);
+            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_MODE", 0, "", config->argv[N]);
+            psArgumentRemove (N, &config->argc, config->argv);
+        }
+        if ((N = psArgumentGet (config->argc, config->argv, "-fitset"))) {
+            psArgumentRemove (N, &config->argc, config->argv);
+            psMetadataAddStr (options, PS_LIST_TAIL, "TEST_FIT_SET", 0, "", config->argv[N]);
+            psArgumentRemove (N, &config->argc, config->argv);
+        }
     }
 
     // photcode : used in output to supplement header data (argument or recipe?)
-    if ((N = psArgumentGet (*argc, argv, "-photcode"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-photcode"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, "PHOTCODE", PS_META_REPLACE, "", config->argv[N]);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    // break : used from recipe throughout psphotReadout 
-    if ((N = psArgumentGet (*argc, argv, "-break"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, "BREAK_POINT", PS_META_REPLACE, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    // break : used from recipe throughout psphotReadout
+    if ((N = psArgumentGet (config->argc, config->argv, "-break"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, "BREAK_POINT", PS_META_REPLACE, "", config->argv[N]);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    // fitmode : used from recipe throughout psphotReadout 
-    if ((N = psArgumentGet (*argc, argv, "-fitmode"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, "FITMODE", PS_META_REPLACE, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    // fitmode : used from recipe throughout psphotReadout
+    if ((N = psArgumentGet (config->argc, config->argv, "-fitmode"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, "FITMODE", PS_META_REPLACE, "", config->argv[N]);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
     // analysis region : overrides recipe value, used in psphotReadout/psphotEnsemblePSF
-    if ((N = psArgumentGet (*argc, argv, "-region"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, "ANALYSIS_REGION", 0, "", argv[N]);
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-region"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, "ANALYSIS_REGION", 0, "", config->argv[N]);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
     // other arbitrary recipe values: -D key value (all added as string)
-    while ((N = psArgumentGet (*argc, argv, "-D"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (options, PS_LIST_TAIL, argv[N], 0, "", argv[N+1]);
-	psArgumentRemove (N, argc, argv);
-	psArgumentRemove (N, argc, argv);
+    while ((N = psArgumentGet (config->argc, config->argv, "-D"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (options, PS_LIST_TAIL, config->argv[N], 0, "", config->argv[N+1]);
+        psArgumentRemove (N, &config->argc, config->argv);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
     // other arbitrary recipe values: -Df key value (all added as float)
-    while ((N = psArgumentGet (*argc, argv, "-Df"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddF32 (options, PS_LIST_TAIL, argv[N], 0, "", atof(argv[N+1]));
-	psArgumentRemove (N, argc, argv);
-	psArgumentRemove (N, argc, argv);
+    while ((N = psArgumentGet (config->argc, config->argv, "-Df"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddF32 (options, PS_LIST_TAIL, config->argv[N], 0, "", atof(config->argv[N+1]));
+        psArgumentRemove (N, &config->argc, config->argv);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
     // other arbitrary recipe values: -Di key value (all added as int)
-    while ((N = psArgumentGet (*argc, argv, "-Di"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddS32 (options, PS_LIST_TAIL, argv[N], 0, "", atoi(argv[N+1]));
-	psArgumentRemove (N, argc, argv);
-	psArgumentRemove (N, argc, argv);
+    while ((N = psArgumentGet (config->argc, config->argv, "-Di"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddS32 (options, PS_LIST_TAIL, config->argv[N], 0, "", atoi(config->argv[N+1]));
+        psArgumentRemove (N, &config->argc, config->argv);
+        psArgumentRemove (N, &config->argc, config->argv);
     }
-    
+
     // drop the local view on the options (saved on config->arguments)
     psFree (options);
 
     // the input file is a required argument; if not found, we will exit
-    status = pmConfigFileSetsMD (config->arguments, argc, argv, "INPUT", "-file", "-list");
+    status = pmConfigFileSetsMD (config->arguments, config, "INPUT", "-file", "-list");
     if (!status) {
-	psError(PSPHOT_ERR_ARGUMENTS, false, "pmConfigFileSetsMD failed to parse arguments");
-	return NULL;
+        psError(PSPHOT_ERR_ARGUMENTS, false, "pmConfigFileSetsMD failed to parse arguments");
+        return NULL;
     }
 
     // chip selection is used to limit chips to be processed
-    if ((N = psArgumentGet (*argc, argv, "-chip"))) {
-	psArgumentRemove (N, argc, argv);
-	psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "", psStringCopy(argv[N]));
-	psArgumentRemove (N, argc, argv);
+    if ((N = psArgumentGet (config->argc, config->argv, "-chip"))) {
+        psArgumentRemove (N, &config->argc, config->argv);
+        psMetadataAddStr (config->arguments, PS_LIST_TAIL, "CHIP_SELECTIONS", PS_DATA_STRING, "", psStringCopy(config->argv[N]));
+        psArgumentRemove (N, &config->argc, config->argv);
     }
 
-    if (*argc != 2) {
-	psError(PSPHOT_ERR_ARGUMENTS, true, "Expected to see one more argument; saw %d", *argc - 1);
-	return NULL;
+    if (config->argc != 2) {
+        psError(PSPHOT_ERR_ARGUMENTS, true, "Expected to see one more argument; saw %d", config->argc - 1);
+        return NULL;
     }
-    
+
     // output position is fixed
-    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "", argv[1]);
+    psMetadataAddStr (config->arguments, PS_LIST_TAIL, "OUTPUT", 0, "", config->argv[1]);
 
     psTrace(__func__, 1, "Done with psphotArguments...\n");
