Index: trunk/ppStack/src/ppStackCamera.c
===================================================================
--- trunk/ppStack/src/ppStackCamera.c	(revision 40739)
+++ trunk/ppStack/src/ppStackCamera.c	(revision 41529)
@@ -31,5 +31,23 @@
 }
 
-
+pmConfig *pmConfigMakeTemp (pmConfig *config) {
+    pmConfig *altconfig = pmConfigAlloc();
+
+    // these are NULL on pmConfigAlloc
+    altconfig->user   = psMemIncrRefCounter(config->user);   // inherit from primary camera
+    altconfig->site   = psMemIncrRefCounter(config->site);   // inherit from primary camera
+    altconfig->system = psMemIncrRefCounter(config->system); // inherit from primary camera
+
+    psFree (altconfig->files);
+    altconfig->files  = psMemIncrRefCounter(config->files); // inherit from primary camera
+
+    psFree (altconfig->arguments);
+    altconfig->arguments = psMemIncrRefCounter(config->arguments); // inherit from primary camera
+
+    psFree (altconfig->recipes);
+    altconfig->recipes = psMetadataCopy(NULL, config->recipes); // container for camera-specific recipe values (to be dropped)
+
+    return (altconfig);
+}
 
 bool ppStackCamera(pmConfig *config)
@@ -48,12 +66,10 @@
     bool convolve = psMetadataLookupBool(NULL, recipe, "CONVOLVE"); // Convolve images before stack?
 
-    psArray *runImages = pmFPAfileDefineMultipleFromRun(&status, NULL, config,
-                                                        "PPSTACK.INPUT"); // Input images from previous run
+    psArray *runImages = pmFPAfileDefineMultipleFromRun(&status, NULL, config, "PPSTACK.INPUT"); // Input images from previous run
     if (runImages) {
         // Defining files from the RUN metadata
         num = runImages->n;
 
-        psArray *runMasks = pmFPAfileDefineMultipleFromRun(&status, runImages, config,
-                                                           "PPSTACK.INPUT.MASK"); // Input masks
+        psArray *runMasks = pmFPAfileDefineMultipleFromRun(&status, runImages, config, "PPSTACK.INPUT.MASK"); // Input masks
         if (!status) {
             psError(psErrorCodeLast(), false, "Unable to define input masks from RUN metadata.");
@@ -63,6 +79,5 @@
         psFree(runMasks);
 
-        psArray *runVars = pmFPAfileDefineMultipleFromRun(&status, runImages, config,
-                                                          "PPSTACK.INPUT.VARIANCE"); // Input variances
+        psArray *runVars = pmFPAfileDefineMultipleFromRun(&status, runImages, config, "PPSTACK.INPUT.VARIANCE"); // Input variances
         if (!status) {
             psError(psErrorCodeLast(), false, "Unable to define input variances from RUN metadata.");
@@ -75,6 +90,5 @@
         psFree(runVars);
 
-        psArray *runSrc = pmFPAfileDefineMultipleFromRun(&status, runImages, config,
-                                                         "PPSTACK.INPUT.SOURCES"); // Input sources
+        psArray *runSrc = pmFPAfileDefineMultipleFromRun(&status, runImages, config, "PPSTACK.INPUT.SOURCES"); // Input sources
         if (!status) {
             psError(psErrorCodeLast(), false, "Unable to define input sources from RUN metadata.");
@@ -91,6 +105,5 @@
         if (convolve) {
             {
-                psArray *runPSF = pmFPAfileDefineMultipleFromRun(&status, runImages, config,
-                                                         "PPSTACK.INPUT.PSF"); // Input PSFs
+                psArray *runPSF = pmFPAfileDefineMultipleFromRun(&status, runImages, config, "PPSTACK.INPUT.PSF"); // Input PSFs
                 if (!status) {
                     psError(psErrorCodeLast(), false, "Unable to define input PSFs from RUN metadata.");
@@ -105,6 +118,5 @@
             {
 
-                psArray *runKernel = pmFPAfileDefineMultipleFromRun(&status, runImages, config,
-                                                                    "PPSTACK.CONV.KERNEL"); // Conv'n kernels
+                psArray *runKernel = pmFPAfileDefineMultipleFromRun(&status, runImages, config, "PPSTACK.CONV.KERNEL"); // Conv'n kernels
                 if (!status) {
                     psError(psErrorCodeLast(), false,
@@ -158,5 +170,13 @@
 	    psString bkgmodel = psMetadataLookupStr(&mdok, input, "BKGMODEL"); // Name of warped background model
 	    
-            pmFPAfile *imageFile = defineFile(config, NULL, "PPSTACK.INPUT",
+	    // Use a temporary config for all but the first image, keeping the main user,
+	    // site, system, files, arguments entries loaded for the first image.  This
+	    // allows the images to be from different cameras than the first input image.
+	    // NOTE: there is no check that these images match in terms of size, pixel
+	    // scale, etc. That is up to the user.
+	    
+	    pmConfig *tempConfig = (i == 0) ? psMemIncrRefCounter(config) : pmConfigMakeTemp(config);
+
+            pmFPAfile *imageFile = defineFile(tempConfig, NULL, "PPSTACK.INPUT",
                                               image, PM_FPA_FILE_IMAGE); // File for image
             if (!imageFile) {
@@ -166,5 +186,5 @@
 
             if (mask && strlen(mask) > 0 &&
-                !defineFile(config, imageFile, "PPSTACK.INPUT.MASK", mask, PM_FPA_FILE_MASK)) {
+                !defineFile(tempConfig, imageFile, "PPSTACK.INPUT.MASK", mask, PM_FPA_FILE_MASK)) {
                 psError(psErrorCodeLast(), false, "Unable to define file from mask %d (%s)", i, mask);
                 return false;
@@ -173,5 +193,5 @@
             if (variance && strlen(variance) > 0) {
                 haveVariances = true;
-                if (!defineFile(config, imageFile, "PPSTACK.INPUT.VARIANCE", variance,
+                if (!defineFile(tempConfig, imageFile, "PPSTACK.INPUT.VARIANCE", variance,
                                 PM_FPA_FILE_VARIANCE)) {
                     psError(psErrorCodeLast(), false,
@@ -186,5 +206,5 @@
                 } else {
                     havePSFs = true;
-                    if (!defineFile(config, imageFile, "PPSTACK.INPUT.PSF", psf, PM_FPA_FILE_PSF)) {
+                    if (!defineFile(tempConfig, imageFile, "PPSTACK.INPUT.PSF", psf, PM_FPA_FILE_PSF)) {
                         psError(psErrorCodeLast(), false, "Unable to define file from psf %d (%s)", i, psf);
                         return false;
@@ -200,5 +220,5 @@
                 return false;
             }
-            if (!defineFile(config, imageFile, "PPSTACK.INPUT.SOURCES", sources, PM_FPA_FILE_CMF)) {
+            if (!defineFile(tempConfig, imageFile, "PPSTACK.INPUT.SOURCES", sources, PM_FPA_FILE_CMF)) {
                 psError(psErrorCodeLast(), false, "Unable to define file from sources %d (%s)",
                         i, sources);
@@ -207,5 +227,5 @@
 
             if (convolve) {
-                pmFPAfile *kernel = pmFPAfileDefineOutput(config, imageFile->fpa, "PPSTACK.CONV.KERNEL");
+                pmFPAfile *kernel = pmFPAfileDefineOutput(tempConfig, imageFile->fpa, "PPSTACK.CONV.KERNEL");
                 if (!kernel) {
                     psError(psErrorCodeLast(), false,
@@ -221,5 +241,5 @@
 	      psMetadataAddBool(recipe, PS_LIST_TAIL, "BACKGROUND.MODEL", PS_META_REPLACE, "Do photometry on stacked image?", false);
 	    } else {
-	      pmFPAfile *inputBKG = defineFile(config,NULL,"PPSTACK.INPUT.BKGMODEL",bkgmodel, PM_FPA_FILE_IMAGE);
+	      pmFPAfile *inputBKG = defineFile(tempConfig,NULL,"PPSTACK.INPUT.BKGMODEL",bkgmodel, PM_FPA_FILE_IMAGE);
 	      if (!inputBKG) {
 		psMetadataAddBool(recipe, PS_LIST_TAIL, "BACKGROUND.MODEL", PS_META_REPLACE, "Do photometry on stacked image?", false);
@@ -232,4 +252,5 @@
 	      }
 	    } // End bkgmodel
+	    psFree(tempConfig);
             i++;
         }
Index: trunk/ppStack/src/ppStackLoop.c
===================================================================
--- trunk/ppStack/src/ppStackLoop.c	(revision 40739)
+++ trunk/ppStack/src/ppStackLoop.c	(revision 41529)
@@ -3,4 +3,5 @@
 // static functions are defined below
 static int stackSummary(const ppStackOptions *options, const char *place);
+bool pmConfigDumpRecipe (pmConfig *config, char *filename);
 
 bool ppStackLoop(pmConfig *config, ppStackOptions *options)
@@ -282,2 +283,14 @@
     return numGood;
 }
+
+// Test function if needed:
+bool pmConfigDumpRecipe (pmConfig *config, char *filename) {
+
+    psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, PPSTACK_RECIPE); // Recipe for ppSim
+    psAssert (recipe, "oops");
+
+    psMetadataConfigWrite (recipe, filename, NULL);
+
+    return true;
+}
+
Index: trunk/ppStack/src/ppStackSources.c
===================================================================
--- trunk/ppStack/src/ppStackSources.c	(revision 40739)
+++ trunk/ppStack/src/ppStackSources.c	(revision 41529)
@@ -227,7 +227,5 @@
             }
         } else if (strcmp(filter, expFilter) != 0) {
-            psError(PPSTACK_ERR_CONFIG, false, "Filters don't match: %s vs %s", filter, expFilter);
-            psFree(zp);
-            return false;
+	    psWarning("Filters don't match: %s vs %s", filter, expFilter);
         }
 
