Index: /trunk/psphot/src/psphot.h
===================================================================
--- /trunk/psphot/src/psphot.h	(revision 11200)
+++ /trunk/psphot/src/psphot.h	(revision 11201)
@@ -98,2 +98,5 @@
 bool psphotFitSummary ();
 bool psphotMergeSources (psArray *oldSources, psArray *newSources);
+
+bool psphotSaveExtSources (pmReadout *readout);
+bool psphotLoadExtSources (pmReadout *readout, psArray *sources);
Index: /trunk/psphot/src/psphotArguments.c
===================================================================
--- /trunk/psphot/src/psphotArguments.c	(revision 11200)
+++ /trunk/psphot/src/psphotArguments.c	(revision 11201)
@@ -103,4 +103,5 @@
     pmConfigFileSetsMD (config->arguments, config, "WEIGHT", "-weight", "-weightlist");
     pmConfigFileSetsMD (config->arguments, config, "PSF",    "-psf", "-psflist");
+    pmConfigFileSetsMD (config->arguments, config, "SRC",    "-src", "-srclist");
 
     // the input file is a required argument; if not found, we will exit
Index: /trunk/psphot/src/psphotMergeSources.c
===================================================================
--- /trunk/psphot/src/psphotMergeSources.c	(revision 11200)
+++ /trunk/psphot/src/psphotMergeSources.c	(revision 11201)
@@ -10,2 +10,51 @@
     return true;
 }
+
+// XXX this is something of a hack: external sources are loaded with the same functions used to
+// read and write the sources.  These use the readout->analysis entry PSPHOT.SOURCES.  at the
+// beginning of psphotReadout, we need to rename any such entry for later use by
+// psphotLoadExtSources below
+
+bool psphotSaveExtSources (pmReadout *readout) {
+
+    psArray *sources = psMetadataLookupPtr (NULL, readout->analysis, "PSPHOT.SOURCES");
+    if (!sources) return true;
+
+    psLogMsg ("psphot", 3, "%ld external sources loaded, saved for later use", sources->n);
+    psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSPHOT.EXTSRC", PS_DATA_ARRAY, "external sources", sources);
+
+    psMetadataRemoveKey (readout->analysis, "PSPHOT.SOURCES");
+
+    return true;
+}
+
+// merge the externally supplied sources with the existing sources.  mark them as having 
+// mode PM_SOURCE_MODE_EXTERNAL
+bool psphotLoadExtSources (pmReadout *readout, psArray *sources) {
+
+    psArray *extSources = psMetadataLookupPtr (NULL, readout->analysis, "PSPHOT.EXTSRC");
+    if (!extSources) return true;
+
+    for (int i = 0; i < extSources->n; i++) {
+	pmSource *source = extSources->data[i];
+	source->mode |= PM_SOURCE_MODE_EXTERNAL;
+	pmModel *model = source->modelPSF;
+
+	float xpos = model->params->data.F32[PM_PAR_XPOS];
+	float ypos = model->params->data.F32[PM_PAR_YPOS];
+
+	source->peak = pmPeakAlloc(xpos, ypos, 1.0, PM_PEAK_LONE);
+	source->peak->xf = xpos;
+	source->peak->yf = ypos;
+	source->peak->flux = 1.0;
+	
+	// drop the loaded source modelPSF
+	psFree (source->modelPSF);
+	source->modelPSF = NULL;
+    }
+
+    psphotMergeSources (sources, extSources);
+    psLogMsg ("psphot", 3, "%ld external sources merged to yield %ld total sources", extSources->n, sources->n);
+
+    return true;
+}
Index: /trunk/psphot/src/psphotParseCamera.c
===================================================================
--- /trunk/psphot/src/psphotParseCamera.c	(revision 11200)
+++ /trunk/psphot/src/psphotParseCamera.c	(revision 11201)
@@ -20,8 +20,9 @@
     pmFPAfileBindFromArgs (NULL, input, config, "INPUT.MASK", "MASK");
     pmFPAfileBindFromArgs (NULL, input, config, "INPUT.WEIGHT", "WEIGHT");
-    
-    // optionally load the PSF Model
-    pmFPAfile *psfInput = pmFPAfileBindFromArgs (NULL, input, config, "INPUT.PSF", "PSF");
-    if (psfInput == NULL) {
+
+    // optionally load the PSF Model and/or fixed stars
+    pmFPAfileBindFromArgs (NULL, input, config, "INPUT.PSF", "PSF");
+    pmFPAfile *srcInput = pmFPAfileBindFromArgs (NULL, input, config, "INPUT.SRC", "SRC");
+    if (!srcInput) {
 	fprintf (stderr, "!");
     }
Index: /trunk/psphot/src/psphotReadout.c
===================================================================
--- /trunk/psphot/src/psphotReadout.c	(revision 11200)
+++ /trunk/psphot/src/psphotReadout.c	(revision 11201)
@@ -8,4 +8,5 @@
     // find the currently selected readout
     pmReadout  *readout = pmFPAfileThisReadout (config->files, view, "PSPHOT.INPUT");
+    psphotSaveExtSources (readout);
 
     // optional break-point for processing
@@ -79,5 +80,8 @@
     }
 
-    // construct an initial PSF model for each object 
+    // include externally-supplied sources
+    psphotLoadExtSources (readout, sources);
+
+    // construct an initial model for each object 
     psphotGuessModels (readout, sources, recipe, psf);
 
