Index: trunk/ppStack/src/ppStackCamera.c
===================================================================
--- trunk/ppStack/src/ppStackCamera.c	(revision 17257)
+++ trunk/ppStack/src/ppStackCamera.c	(revision 17426)
@@ -72,4 +72,5 @@
 {
     bool haveWeights = false;           // Do we have weight maps?
+    bool havePSF = false;               // Do we have PSFs?
 
     psMetadata *inputs = psMetadataLookupMetadata(NULL, config->arguments, "INPUTS"); // The inputs info
@@ -169,23 +170,30 @@
         // Add the psf file
         if (!psf || strlen(psf) == 0) {
-            psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find PSF %d", i);
-            return false;
+            if (havePSFs) {
+                psError(PS_ERR_UNEXPECTED_NULL, true, "Unable to find PSF %d", i);
+                return false;
+            }
         } else {
-            psArray *psfFiles = psArrayAlloc(1); // Array of filenames for this FPA
-            psfFiles->data[0] = psMemIncrRefCounter(psf);
-            psMetadataAddArray(config->arguments, PS_LIST_TAIL, "PSF.FILENAMES", PS_META_REPLACE,
-                               "Filenames of PSF files", psfFiles);
-            psFree(psfFiles);
-
-            bool status;
-            pmFPAfile *psfFile = pmFPAfileBindFromArgs(&status, imageFile, config, "PPSTACK.INPUT.PSF",
-                                                       "PSF.FILENAMES");
-            if (!status) {
-                psError(PS_ERR_UNKNOWN, false, "Unable to define file from psf %d (%s)", i, psf);
-                return false;
-            }
-            if (psfFile->type != PM_FPA_FILE_PSF) {
-                psError(PS_ERR_IO, true, "PPSTACK.INPUT.PSF is not of type PSF");
-                return false;
+            if (!havePSFs && i != 0) {
+                psWarning("PSF not provided for all inputs --- ignoring.");
+            } else {
+                psArray *psfFiles = psArrayAlloc(1); // Array of filenames for this FPA
+                psfFiles->data[0] = psMemIncrRefCounter(psf);
+                psMetadataAddArray(config->arguments, PS_LIST_TAIL, "PSF.FILENAMES", PS_META_REPLACE,
+                                   "Filenames of PSF files", psfFiles);
+                psFree(psfFiles);
+
+                bool status;
+                pmFPAfile *psfFile = pmFPAfileBindFromArgs(&status, imageFile, config, "PPSTACK.INPUT.PSF",
+                                                           "PSF.FILENAMES");
+                if (!status) {
+                    psError(PS_ERR_UNKNOWN, false, "Unable to define file from psf %d (%s)", i, psf);
+                    return false;
+                }
+                if (psfFile->type != PM_FPA_FILE_PSF) {
+                    psError(PS_ERR_IO, true, "PPSTACK.INPUT.PSF is not of type PSF");
+                    return false;
+                }
+                havePSFs = true;
             }
         }
@@ -233,4 +241,5 @@
 
     psMetadataAddS32(config->arguments, PS_LIST_TAIL, "INPUTS.NUM", 0, "Number of input files", i);
+    psMetadataAddBool(config->arguments, PS_LIST_TAIL, "HAVE.PSF", 0, "Have PSFs available?", havePSFs);
 
     // Output image
