Index: /branches/eam_branches/ipp-20110505/ppSub/src/ppSubMatchPSFs.c
===================================================================
--- /branches/eam_branches/ipp-20110505/ppSub/src/ppSubMatchPSFs.c	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/ppSub/src/ppSubMatchPSFs.c	(revision 31459)
@@ -190,4 +190,5 @@
     if (!strcasecmp(string, "AUTO")) return PM_SUBTRACTION_MODE_UNSURE;
     if (!strcasecmp(string, "DUAL")) return PM_SUBTRACTION_MODE_DUAL;
+    if (!strcasecmp(string, "SINGLE_AUTO")) return PM_SUBTRACTION_MODE_SINGLE_AUTO;
     if (!strcasecmp(string, "SINGLE1")) return PM_SUBTRACTION_MODE_1;
     if (!strcasecmp(string, "SINGLE2")) return PM_SUBTRACTION_MODE_2;
Index: /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMask.c
===================================================================
--- /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMask.c	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMask.c	(revision 31459)
@@ -185,4 +185,5 @@
         break;
       case PM_SUBTRACTION_MODE_UNSURE:
+      case PM_SUBTRACTION_MODE_SINGLE_AUTO:
       case PM_SUBTRACTION_MODE_DUAL:
         maskRej |= PM_SUBTRACTION_MASK_CONVOLVE_1 | PM_SUBTRACTION_MASK_CONVOLVE_2;
@@ -271,4 +272,5 @@
       case PM_SUBTRACTION_MODE_ERR:
       case PM_SUBTRACTION_MODE_UNSURE:
+      case PM_SUBTRACTION_MODE_SINGLE_AUTO:
       default:
         psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unsuppored subtraction mode: %x", mode);
Index: /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMatch.c
===================================================================
--- /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMatch.c	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionMatch.c	(revision 31459)
@@ -154,5 +154,6 @@
     )
 {
-    if (subMode == PM_SUBTRACTION_MODE_1 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
+    if (subMode == PM_SUBTRACTION_MODE_1 || 
+	subMode == PM_SUBTRACTION_MODE_SINGLE_AUTO ||
         subMode == PM_SUBTRACTION_MODE_DUAL) {
         if (!conv1->image) {
@@ -173,5 +174,6 @@
         }
     }
-    if (subMode == PM_SUBTRACTION_MODE_2 || subMode == PM_SUBTRACTION_MODE_UNSURE ||
+    if (subMode == PM_SUBTRACTION_MODE_2 || 
+	subMode == PM_SUBTRACTION_MODE_SINGLE_AUTO ||
         subMode == PM_SUBTRACTION_MODE_DUAL) {
         if (!conv2->image) {
@@ -575,4 +577,9 @@
 	TestModes[0] = PM_SUBTRACTION_MODE_2;
 	break;
+      case PM_SUBTRACTION_MODE_SINGLE_AUTO:
+	N_TEST_MODES = 2;
+	TestModes[0] = PM_SUBTRACTION_MODE_1;
+	TestModes[1] = PM_SUBTRACTION_MODE_2;
+	break;
       case PM_SUBTRACTION_MODE_DUAL:
 	N_TEST_MODES = 3;
@@ -754,4 +761,7 @@
 	    memCheck("kernels");
 
+// this section was an old version of auto-choosing the direction.  the test was not as reliable as
+// we would like; this is replaced by pmSubtractionMatchAttempt
+# if (0)
 	    if (subMode == PM_SUBTRACTION_MODE_UNSURE) {
 		pmSubtractionMode newMode = pmSubtractionBestMode(&stamps, &kernels, subMask, rej);
@@ -769,4 +779,5 @@
 		subMode = newMode;
 	    }
+# endif
 
 	    int numRejected = -1;       // Number of rejected stamps in each iteration
Index: /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionTypes.h
===================================================================
--- /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionTypes.h	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/psModules/src/imcombine/pmSubtractionTypes.h	(revision 31459)
@@ -49,5 +49,6 @@
     PM_SUBTRACTION_MODE_1,              // Convolve image 1
     PM_SUBTRACTION_MODE_2,              // Convolve image 2
-    PM_SUBTRACTION_MODE_UNSURE,         // Not sure yet which image to convolve so try to satisfy both
+    PM_SUBTRACTION_MODE_UNSURE,         // deprecated way of choosing the direction
+    PM_SUBTRACTION_MODE_SINGLE_AUTO,    // choose between SINGLE1 and SINGLE2
     PM_SUBTRACTION_MODE_DUAL,           // Dual convolution
 } pmSubtractionMode;
Index: /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourceMoments.c
===================================================================
--- /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourceMoments.c	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourceMoments.c	(revision 31459)
@@ -264,7 +264,10 @@
 
     // if Mrf (first radial moment) is very small, we are getting into low-significance
-    // territory.  saturate at minKronRadius.  conversely, if Mrf is > radius, we are clearly
-    // making an error.  saturate at radius.
-    float kronRefRadius = MIN(radius, MAX(minKronRadius, source->moments->Mrf));
+    // territory.  saturate at minKronRadius.  conversely, if Mrf is >> radius for faint
+    // sources, we are clearly making an error.  saturate at radius.
+    float kronRefRadius = MAX(minKronRadius, source->moments->Mrf);
+    if (source->moments->SN < 10) {
+	kronRefRadius = MIN(radius, kronRefRadius);
+    }
 
     float radKinner = 1.0*kronRefRadius;
Index: /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourcePhotometry.c
===================================================================
--- /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourcePhotometry.c	(revision 31458)
+++ /branches/eam_branches/ipp-20110505/psModules/src/objects/pmSourcePhotometry.c	(revision 31459)
@@ -134,5 +134,5 @@
     // measure PSF model photometry
     status = pmSourcePhotometryModel (&source->psfMag, &source->psfFlux, modelPSF);
-    source->psfFluxErr = source->psfFlux * source->psfMagErr;
+    source->psfFluxErr = fabs(source->psfFlux * source->psfMagErr);
 
 # if (0)
