Index: trunk/psModules/src/astrom/pmAstrometryObjects.c
===================================================================
--- trunk/psModules/src/astrom/pmAstrometryObjects.c	(revision 31670)
+++ trunk/psModules/src/astrom/pmAstrometryObjects.c	(revision 31671)
@@ -996,5 +996,5 @@
             newStat->center = center;
 
-            if (isfinite(newStat->minMetric) && (newStat->minMetric > 0.0) && (newStat->minMetric < minStat->minMetric)) {
+            if (isfinite(newStat->minMetric) && (newStat->minMetric > 0.0) && (newStat->nSigma >= minSigma) && (newStat->minMetric < minStat->minMetric)) {
                 *minStat = *newStat;
                 psLogMsg ("psModule.astrom", 4, "grid test - offset: %7.2f,%7.2f @ %6.1f deg x %7.3f (%4d pts, %5.1f sig, %5.1f var, %6.3f log metric) *",
@@ -1080,4 +1080,8 @@
     psVector *xHistNew = psVectorSmooth(NULL, xHist, tweakSmooth, tweakNsigma);
     psVector *yHistNew = psVectorSmooth(NULL, yHist, tweakSmooth, tweakNsigma);
+
+    // if we failed to smooth, just use the original vector (probably too narrow a range)
+    if (!xHistNew) xHistNew = psMemIncrRefCounter (xHist);
+    if (!yHistNew) yHistNew = psMemIncrRefCounter (yHist);
 
     // select peak in x and in y
Index: trunk/psModules/src/camera/pmFPAfile.c
===================================================================
--- trunk/psModules/src/camera/pmFPAfile.c	(revision 31670)
+++ trunk/psModules/src/camera/pmFPAfile.c	(revision 31671)
@@ -201,9 +201,10 @@
     newName = psStringCopy(rule);
 
+    bool status = false;
     if (strstr(newName, "{FPA.OBS}")) {
-        char *name = psMetadataLookupStr(NULL, fpa->concepts, "FPA.OBS");
+        char *name = psMetadataLookupStr(&status, fpa->concepts, "FPA.OBS");
         if (name) {
             psStringSubstitute(&newName, name, "{FPA.OBS}");
-        }
+        } 
     }
     if (strstr(newName, "{FPA.NAME}")) {
Index: trunk/psModules/src/imcombine/pmSubtractionMask.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionMask.c	(revision 31670)
+++ trunk/psModules/src/imcombine/pmSubtractionMask.c	(revision 31671)
@@ -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: trunk/psModules/src/imcombine/pmSubtractionMatch.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 31670)
+++ trunk/psModules/src/imcombine/pmSubtractionMatch.c	(revision 31671)
@@ -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: trunk/psModules/src/imcombine/pmSubtractionTypes.h
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionTypes.h	(revision 31670)
+++ trunk/psModules/src/imcombine/pmSubtractionTypes.h	(revision 31671)
@@ -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;
