Index: /branches/eam_branches/ipp-20140610/psModules/src/config/pmConfig.c
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/config/pmConfig.c	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/config/pmConfig.c	(revision 36916)
@@ -964,4 +964,41 @@
             psMetadataAddMetadata(filerules, PS_LIST_TAIL, rulename, PS_META_REPLACE,
                                   "Original replaced by -R option", newRule);
+        }
+        psFree(camerasIter);
+    }
+
+    // Look for command-line options for files to replace
+    while ((argNum = psArgumentGet(*argc, argv, "-photcode-rule")) > 0) {
+        psArgumentRemove(argNum, argc, argv);
+        if (argNum >= *argc) {
+            psError(PM_ERR_CONFIG, true,
+                    "-photcode-rule provided without new rule.");
+            psFree(config);
+            return NULL;
+        }
+
+        psString newrule = psStringCopy(argv[argNum]); // The filerule, to be modified
+        psArgumentRemove(argNum, argc, argv);
+
+        psMetadata *cameras = psMetadataLookupMetadata(NULL, config->system, "CAMERAS"); // List of cameras
+        if (!cameras) {
+            psError(PM_ERR_CONFIG, false, "Unable to find CAMERAS in the site configuration.\n");
+            return false;
+        }
+
+        psMetadataIterator *camerasIter = psMetadataIteratorAlloc(cameras, PS_LIST_HEAD, NULL); // Iterator
+        psMetadataItem *cameraItem;     // Item from iteration
+        while ((cameraItem = psMetadataGetAndIncrement(camerasIter))) {
+            // Silently ignore problems --- they will be caught later, because if the user wants the nominated
+            // file and it's not available for that camera, then they will know.
+
+            if (cameraItem->type != PS_DATA_METADATA) {
+                psTrace("psModules.config", 2,
+                        "Entry %s in CAMERAS is not of type METADATA --- ignored.", cameraItem->name);
+                continue;
+            }
+            psMetadata *camera = cameraItem->data.md; // Camera configuration
+
+	    psMetadataAddStr (camera, PS_LIST_TAIL, "PHOTCODE.RULE", PS_META_REPLACE, "original replaced by -photcode-rule option", newrule);
         }
         psFree(camerasIter);
Index: /branches/eam_branches/ipp-20140610/psModules/src/objects/Makefile.am
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/objects/Makefile.am	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/objects/Makefile.am	(revision 36916)
@@ -52,7 +52,9 @@
 	pmSourceIO_CMF_PS1_SV1.c \
 	pmSourceIO_CMF_PS1_SV2.c \
+	pmSourceIO_CMF_PS1_SV3.c \
 	pmSourceIO_CMF_PS1_DV1.c \
 	pmSourceIO_CMF_PS1_DV2.c \
 	pmSourceIO_CMF_PS1_DV3.c \
+	pmSourceIO_CMF_PS1_DV4.c \
 	pmSourceIO_MatchedRefs.c \
 	pmSourcePlots.c \
@@ -152,6 +154,8 @@
 pmSourceIO_CMF_PS1_DV2.c \
 pmSourceIO_CMF_PS1_DV3.c \
+pmSourceIO_CMF_PS1_DV4.c \
 pmSourceIO_CMF_PS1_SV1.c \
-pmSourceIO_CMF_PS1_SV2.c
+pmSourceIO_CMF_PS1_SV2.c \
+pmSourceIO_CMF_PS1_SV3.c
 
 pmSourceIO_CMF_PS1_V1.c : pmSourceIO_CMF.c.in mksource.pl
@@ -179,4 +183,7 @@
 	mksource.pl pmSourceIO_CMF.c.in PS1_DV3 pmSourceIO_CMF_PS1_DV3.c
 
+pmSourceIO_CMF_PS1_DV4.c : pmSourceIO_CMF.c.in mksource.pl
+	mksource.pl pmSourceIO_CMF.c.in PS1_DV4 pmSourceIO_CMF_PS1_DV4.c
+
 pmSourceIO_CMF_PS1_SV1.c : pmSourceIO_CMF.c.in mksource.pl
 	mksource.pl pmSourceIO_CMF.c.in PS1_SV1 pmSourceIO_CMF_PS1_SV1.c
@@ -185,3 +192,6 @@
 	mksource.pl pmSourceIO_CMF.c.in PS1_SV2 pmSourceIO_CMF_PS1_SV2.c
 
+pmSourceIO_CMF_PS1_SV3.c : pmSourceIO_CMF.c.in mksource.pl
+	mksource.pl pmSourceIO_CMF.c.in PS1_SV3 pmSourceIO_CMF_PS1_SV3.c
+
 # EXTRA_DIST = pmErrorCodes.h.in pmErrorCodes.dat pmErrorCodes.c.in
Index: /branches/eam_branches/ipp-20140610/psModules/src/objects/pmPSF_IO.c
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/objects/pmPSF_IO.c	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/objects/pmPSF_IO.c	(revision 36916)
@@ -511,11 +511,13 @@
         psMetadataAddF32 (header, PS_LIST_TAIL, "SKY_BIAS", PS_DATA_F32, "sky bias level", psf->skyBias);
 
-	float PSF_APERTURE =  psMetadataLookupF32(&status, roAnalysis, "PSF_APERTURE");
-	if (status) {
+	if (roAnalysis) {
+	  float PSF_APERTURE =  psMetadataLookupF32(&status, roAnalysis, "PSF_APERTURE");
+	  if (status) {
 	    psMetadataAddF32 (header, PS_LIST_TAIL, "PSF_APERTURE", PS_DATA_F32, "aperture for psf objects", PSF_APERTURE);
-	}
-	float PSF_FIT_RADIUS =  psMetadataLookupF32(&status, roAnalysis, "PSF_FIT_RADIUS");
-	if (status) {
+	  }
+	  float PSF_FIT_RADIUS =  psMetadataLookupF32(&status, roAnalysis, "PSF_FIT_RADIUS");
+	  if (status) {
 	    psMetadataAddF32 (header, PS_LIST_TAIL, "PSF_FIT_RADIUS", PS_DATA_F32, "aperture for psf objects", PSF_FIT_RADIUS);
+	  }
 	}
 
Index: /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.c
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.c	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.c	(revision 36916)
@@ -365,5 +365,5 @@
 # define PM_SOURCES_WRITE(NAME,TYPE)					\
     if (!strcmp (exttype, NAME)) {					\
-	status &= pmSourcesWrite_##TYPE(file->fits, readout, sources, file->header, outhead, dataname, recipe); \
+	status = pmSourcesWrite_##TYPE(file->fits, readout, sources, file->header, outhead, dataname, recipe); \
 	if (xsrcname) {							\
 	    status &= pmSourcesWrite_##TYPE##_XSRC(file->fits, readout, sources, file->header, xsrcname, recipe); \
@@ -589,5 +589,5 @@
 
             // these are case-sensitive since the EXTYPE is case-sensitive
-            status = true;
+            status = false;
 	    PM_SOURCES_WRITE("SMPDATA",   SMPDATA);
 	    PM_SOURCES_WRITE("PS1_DEV_0", PS1_DEV_0);
@@ -601,7 +601,9 @@
 	    PM_SOURCES_WRITE("PS1_SV1",   CMF_PS1_SV1);
 	    PM_SOURCES_WRITE("PS1_SV2",   CMF_PS1_SV2);
+	    PM_SOURCES_WRITE("PS1_SV3",   CMF_PS1_SV3);
 	    PM_SOURCES_WRITE("PS1_DV1",   CMF_PS1_DV1);
 	    PM_SOURCES_WRITE("PS1_DV2",   CMF_PS1_DV2);
 	    PM_SOURCES_WRITE("PS1_DV3",   CMF_PS1_DV3);
+	    PM_SOURCES_WRITE("PS1_DV4",   CMF_PS1_DV4);
 
 	    psFree (outhead);
@@ -1121,7 +1123,9 @@
 	    PM_SOURCES_READ_PSF("PS1_SV1",   CMF_PS1_SV1);
 	    PM_SOURCES_READ_PSF("PS1_SV2",   CMF_PS1_SV2);
+	    PM_SOURCES_READ_PSF("PS1_SV3",   CMF_PS1_SV3);
 	    PM_SOURCES_READ_PSF("PS1_DV1",   CMF_PS1_DV1);
 	    PM_SOURCES_READ_PSF("PS1_DV2",   CMF_PS1_DV2);
 	    PM_SOURCES_READ_PSF("PS1_DV3",   CMF_PS1_DV3);
+	    PM_SOURCES_READ_PSF("PS1_DV4",   CMF_PS1_DV4);
 
             long *sourceIndex = NULL;
Index: /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.h
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.h	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO.h	(revision 36916)
@@ -40,7 +40,9 @@
 MK_PROTO(CMF_PS1_SV1);
 MK_PROTO(CMF_PS1_SV2);
+MK_PROTO(CMF_PS1_SV3);
 MK_PROTO(CMF_PS1_DV1);
 MK_PROTO(CMF_PS1_DV2);
 MK_PROTO(CMF_PS1_DV3);
+MK_PROTO(CMF_PS1_DV4);
 
 int pmSourceGetDophotType (pmSource *source);
Index: /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO_CMF.c.in
===================================================================
--- /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 36915)
+++ /branches/eam_branches/ipp-20140610/psModules/src/objects/pmSourceIO_CMF.c.in	(revision 36916)
@@ -358,5 +358,5 @@
         @ALL@     axes.theta        = axes.theta * PS_RAD_DEG;
 	
-	@>PS1_V4,>PS1_SV2,>PS1_DV3@ if (model->params->n >= PM_PAR_7) {
+	@>PS1_V4,>PS1_SV2,>PS1_DV3@ if (model->params->n > PM_PAR_7) {
 	@>PS1_V4,>PS1_SV2,>PS1_DV3@     PAR[PM_PAR_7] = psMetadataLookupF32 (&status, row, "PSF_CORE");
 	@>PS1_V4,>PS1_SV2,>PS1_DV3@ } 
