Index: trunk/ppImage/src/ppImage.c
===================================================================
--- trunk/ppImage/src/ppImage.c	(revision 7647)
+++ 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 7647)
+++ 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 7647)
+++ 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 7647)
+++ 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
 
