Index: /trunk/psphot/src/psphotParseCamera.c
===================================================================
--- /trunk/psphot/src/psphotParseCamera.c	(revision 7345)
+++ /trunk/psphot/src/psphotParseCamera.c	(revision 7346)
@@ -7,5 +7,8 @@
 
     pmFPAfile *input = pmFPAfileFromArgs (&status, config, "PSPHOT.INPUT", "INPUT");
-    if (!status) { psAbort (__func__, "missing INPUT entry"); }
+    if (!status) {
+	psError(PSPHOT_ERR_CONFIG, false, "Failed to build FPA from PSPHOT.INPUT");
+	return status;
+    }
 
     // select recipe options supplied on command line
@@ -62,6 +65,6 @@
     pmFPAfileAddFileNames (config->files, "OUTPUT", output, PM_FPA_MODE_WRITE);
 
-    // Chip selection: turn on only the chips specified
-    char *chipLine = psMetadataLookupStr(NULL, config->arguments, "CHIP_SELECTIONS"); 
+    // Chip selection: turn on only the chips specified (pass status to suppress missing-key log msg)
+    char *chipLine = psMetadataLookupStr(&status, config->arguments, "CHIP_SELECTIONS");
     psArray *chips = psStringSplitArray (chipLine, ",", false);
     if (chips->n > 0) {
@@ -70,6 +73,6 @@
 	    int chipNum = atoi(chips->data[i]);
 	    if (! pmFPASelectChip(input->fpa, chipNum, false)) {
-		psErrorStackPrint(stderr, "Chip number %d doesn't exist in camera.\n", chipNum);
-		exit(EXIT_FAILURE);
+		psError(PS_ERR_IO, false, "Chip number %d doesn't exist in camera.\n", chipNum);
+		return false;
 	    }
         }
@@ -78,4 +81,7 @@
 
     psTrace(__func__, 1, "Done with psphotParseCamera...\n");
+
+    psErrorClear();			// some metadata lookup may have failed
+
     return true;
 }
