Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotArguments.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotArguments.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotArguments.c	(revision 36161)
@@ -217,5 +217,5 @@
     pmConfigFileSetsMD (config->arguments, &argc, argv, "PSPHOT.PSF", "-psf",      "-psflist");
     pmConfigFileSetsMD (config->arguments, &argc, argv, "SRC",        "-src",      "-srclist");
-    pmConfigFileSetsMD (config->arguments, &argc, argv, "FORCE",      "-force",    "-forcelist");
+    // XXX allow this format? pmConfigFileSetsMD (config->arguments, &argc, argv, "FORCE",      "-force",    "-forcelist");
     pmConfigFileSetsMD (config->arguments, &argc, argv, "EXPNUM",     "-expnum",   "-expnumlist");
 
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForce.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForce.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForce.c	(revision 36161)
@@ -20,5 +20,5 @@
 
     // call psphot for each readout
-    if (!psphotImageLoop (config, PSPHOT_FORCED)) {
+    if (!psphotImageLoop (config, PSPHOT_FULL_FORCE)) {
         psErrorStackPrint(stderr, "Error in the psphot image loop\n");
         exit (psphotGetExitStatus());
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceArguments.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceArguments.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceArguments.c	(revision 36161)
@@ -7,5 +7,5 @@
 
     int N;
-    bool status, status1, status2;
+    bool status, status1, status2, status3;
 
     // load config data from default locations
@@ -73,16 +73,13 @@
     pmConfigFileSetsMD (config->arguments, &argc, argv, "VARIANCE",   "-variance", "-variancelist");
 
-    // XXX make psf model optional?
-    status = pmConfigFileSetsMD (config->arguments, &argc, argv, "PSPHOT.PSF", "-psf",      "-psflist");
-    if (!status) {
-        psError(PSPHOT_ERR_ARGUMENTS, true, "No psf model is supplied (use -psf)");
-	usage(argv[0], config->arguments, config, PS_EXIT_CONFIG_ERROR);
-    }
-
-    status1 = pmConfigFileSetsMD (config->arguments, &argc, argv, "SRC", "-src", "-srclist");
+    pmConfigFileSetsMD (config->arguments, &argc, argv, "PSPHOT.PSF", "-psf",      "-psflist");
+
+    status1 = pmConfigFileSetsMD (config->arguments, &argc, argv, "SRC",     "-src",     "-srclist");
     status2 = pmConfigFileSetsMD (config->arguments, &argc, argv, "SRCTEXT", "-srctext", "-srctextlist");
+    status3 = pmConfigFileSetsMD (config->arguments, &argc, argv, "FORCE",   "-force",   "-forcelist");
     
-    if (!status1 && !status2) {
-        psError(PSPHOT_ERR_ARGUMENTS, true, "No source list is supplied (use one of -src, -srctext, -srclist, or -srctextlist)");
+    if (!(status1 || status2 || status3)) {
+      // XXX require -force version?
+        psError(PSPHOT_ERR_ARGUMENTS, true, "No source list is supplied (use one of -force, -forcelist, -src, -srctext, -srclist, or -srctextlist)");
 	usage(argv[0], config->arguments, config, PS_EXIT_CONFIG_ERROR);
     }
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceReadout.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceReadout.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotFullForceReadout.c	(revision 36161)
@@ -56,4 +56,12 @@
     psphotMergeSources (config, view, filerule);
 
+    // construct sources and measure moments and other basic stats (saved on detections->newSources)
+    // all sources use the auto-scaled window appropriate to a PSF, except for the saturated
+    // stars : these use a larger window (3x the basic window)
+    if (!psphotSourceStats (config, view, filerule, true)) { // pass 1
+        psError(PSPHOT_ERR_UNKNOWN, false, "failure to generate sources");
+        return psphotReadoutCleanup (config, view, filerule);
+    }
+
     // generate a psf model for any readouts which need one
     // psphotFullForcePSF (config, view, filerule);
@@ -61,5 +69,5 @@
     // sources; we should mark with a flag bit the ones we actually want to use as PSF
     // stars (this means we need to supply this info in the load).
-    psphotChoosePSF (config, view, filerule, true);
+    psphotChoosePSF (config, view, filerule, false);
 
     // Construct an initial model for each object, set the radius to fitRadius, set circular
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotGalaxyShape.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotGalaxyShape.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotGalaxyShape.c	(revision 36161)
@@ -11,4 +11,11 @@
     psMetadata *recipe  = psMetadataLookupPtr (&status, config->recipes, PSPHOT_RECIPE);
     psAssert (recipe, "missing recipe?");
+
+    // perform full non-linear fits / extended source analysis?
+    // XXX for this to be true for psphotFullForce??
+    if (!psMetadataLookupBool (&status, recipe, "GALAXY_SHAPES")) {
+	psLogMsg ("psphot", PS_LOG_INFO, "skipping galaxy shape measurements\n");
+	return true;
+    }
 
     int num = psphotFileruleCount(config, filerule);
@@ -78,49 +85,9 @@
     assert (status);
 
-    // source fitting parameters for extended source fits
-    int fitIter = psMetadataLookupS32(&status, recipe, "EXT_FIT_ITER"); // Max number of fit iterations
-    assert (status && fitIter > 0);
-
-    float fitMinTol = psMetadataLookupF32 (&status, recipe, "EXT_FIT_MIN_TOL"); // Fit tolerance
-    if (!status || !isfinite(fitMinTol) || fitMinTol <= 0) {
-	fitMinTol = psMetadataLookupF32 (&status, recipe, "PSF_FIT_TOL"); // Fit tolerance
-	if (!status || !isfinite(fitMinTol) || fitMinTol <= 0) {
-	    psAbort("PSF_FIT_MIN_TOL (and PSF_FIT_TOL) not defined or positive");
-	}
-    }
-
-    float fitMaxTol = psMetadataLookupF32 (&status, recipe, "EXT_FIT_MAX_TOL"); // Fit tolerance
-    if (!status || !isfinite(fitMaxTol) || fitMaxTol <= 0) {
-	fitMaxTol = 1.0;
-    }
-
-    bool chisqConvergence = psMetadataLookupBool (&status, recipe, "LMM_FIT_CHISQ_CONVERGENCE"); // Fit tolerance
-    if (!status) {
-	// default to the old method (chisqConvergence)
-	chisqConvergence = true;
-    }
-
-    int gainFactorMode = psMetadataLookupS32 (&status, recipe, "LMM_FIT_GAIN_FACTOR_MODE"); // Fit tolerance
-    if (!status) {
-	// default to the old method (chisqConvergence)
-	gainFactorMode = 0;
-    }
-
-    // perform full extended source non-linear fits?
-    bool isInteractive = psMetadataLookupBool (&status, recipe, "EXTENDED_SOURCE_FITS_INTERACTIVE");
-    if (!status) isInteractive = false;
-
     // Define source fitting parameters for extended source fits
+    // we are not doing LMM fitting, so most options are irrelevant
     pmSourceFitOptions *fitOptions = pmSourceFitOptionsAlloc();
     fitOptions->mode           = PM_SOURCE_FIT_EXT_AND_SKY;
-    fitOptions->saveCovariance = true;  // XXX make this a user option?
     fitOptions->covarFactor    = psImageCovarianceFactorForAperture(readout->covariance, 10.0); // Covariance matrix
-    fitOptions->nIter          = fitIter;
-    fitOptions->minTol         = fitMinTol;
-    fitOptions->maxTol         = fitMaxTol;
-
-    fitOptions->gainFactorMode   = gainFactorMode;
-    fitOptions->chisqConvergence = chisqConvergence;
-    fitOptions->isInteractive    = isInteractive;
 
     // source analysis is done in S/N order (brightest first)
Index: /branches/eam_branches/ipp-20130904/psphot/src/psphotMergeSources.c
===================================================================
--- /branches/eam_branches/ipp-20130904/psphot/src/psphotMergeSources.c	(revision 36160)
+++ /branches/eam_branches/ipp-20130904/psphot/src/psphotMergeSources.c	(revision 36161)
@@ -188,5 +188,5 @@
     psFree (detections);
 
-    if (!extCMF && !extSourcesTXT) {
+    if (!(extCMF || extCFF || extSourcesTXT)) {
         psLogMsg ("psphot", 3, "no external sources for this readout");
         return true;
@@ -194,8 +194,9 @@
 
     int nCMF = extCMF        ? extCMF->allSources->n        : 0;
-    int nTXT = extSourcesTXT ? extSourcesTXT->n : 0;
-
-    psLogMsg ("psphot", 3, "%d external sources (%d cmf, %d text) merged to yield %ld total sources",
-              nCMF + nTXT, nCMF, nTXT, sources->n);
+    int nCFF = extCFF        ? extCFF->allSources->n        : 0;
+    int nTXT = extSourcesTXT ? extSourcesTXT->n             : 0;
+
+    psLogMsg ("psphot", 3, "%d external sources (%d cmf, %d cff, %d text) merged to yield %ld total sources",
+              nCMF + nCFF + nTXT, nCMF, nCFF, nTXT, sources->n);
     return true;
 }
