Index: trunk/psModules/src/imcombine/pmPSFEnvelope.c
===================================================================
--- trunk/psModules/src/imcombine/pmPSFEnvelope.c	(revision 26893)
+++ trunk/psModules/src/imcombine/pmPSFEnvelope.c	(revision 26916)
@@ -158,5 +158,5 @@
                 goodPSF = false;
             } else {
-                model->modelSetLimits(PM_MODEL_LIMITS_STRICT);
+                model->modelSetLimits(PM_MODEL_LIMITS_MODERATE);
                 for (int j = 0; j < model->params->n && goodPSF; j++) {
                     if (!model->modelLimits(PS_MINIMIZE_PARAM_MIN, j, model->params->data.F32, NULL) ||
@@ -399,4 +399,5 @@
 
     pmSourceFitModelInit(SOURCE_FIT_ITERATIONS, 0.01, VARIANCE_VAL, true);
+    pmModelClassSetLimits(PM_MODEL_LIMITS_STRICT);
 
     pmPSFtry *try = pmPSFtryModel(fakes, modelName, options, 0, 0xff);
Index: trunk/psModules/src/objects/models/pmModel_GAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_GAUSS.c	(revision 26916)
@@ -41,4 +41,8 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0 };
+
+// Moderate parameter limits
+static float *paramsMinModerate = paramsMinLax;
+static float *paramsMaxModerate = paramsMaxLax;
 
 // Strict parameter limits
@@ -375,4 +379,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/models/pmModel_PGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_PGAUSS.c	(revision 26916)
@@ -41,4 +41,8 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0 };
+
+// Moderate parameter limits
+static float *paramsMinModerate = paramsMinLax;
+static float *paramsMaxModerate = paramsMaxLax;
 
 // Strict parameter limits
@@ -425,4 +429,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/models/pmModel_PS1_V1.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_PS1_V1.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_PS1_V1.c	(revision 26916)
@@ -49,4 +49,9 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0, -1.0 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 20.0 };
+
+// Moderate parameter limits
+// Tolerate a small divot (k < 0)
+static float paramsMinModerate[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0, -0.05 };
+static float paramsMaxModerate[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 20.0 };
 
 // Strict parameter limits
@@ -454,4 +459,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/models/pmModel_QGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_QGAUSS.c	(revision 26916)
@@ -46,4 +46,8 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0, 0.1 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 20.0 };
+
+// Moderate parameter limits
+static float *paramsMinModerate = paramsMinLax;
+static float *paramsMaxModerate = paramsMaxLax;
 
 // Strict parameter limits
@@ -446,4 +450,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/models/pmModel_RGAUSS.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_RGAUSS.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_RGAUSS.c	(revision 26916)
@@ -46,4 +46,8 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.5, 0.5, -1.0, 1.25 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 4.0 };
+
+// Moderate parameter limits
+static float *paramsMinModerate = paramsMinLax;
+static float *paramsMaxModerate = paramsMaxLax;
 
 // Strict parameter limits
@@ -440,4 +444,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/models/pmModel_SERSIC.c
===================================================================
--- trunk/psModules/src/objects/models/pmModel_SERSIC.c	(revision 26893)
+++ trunk/psModules/src/objects/models/pmModel_SERSIC.c	(revision 26916)
@@ -49,4 +49,8 @@
 static float paramsMinLax[] = { -1.0e3, 1.0e-2, -100, -100, 0.05, 0.05, -1.0, 0.05 };
 static float paramsMaxLax[] = { 1.0e5, 1.0e8, 1.0e4, 1.0e4, 100, 100, 1.0, 4.0 };
+
+// Moderate parameter limits
+static float *paramsMinModerate = paramsMinLax;
+static float *paramsMaxModerate = paramsMaxLax;
 
 // Strict parameter limits
@@ -429,4 +433,9 @@
         limitsApply = true;
         break;
+      case PM_MODEL_LIMITS_MODERATE:
+        paramsMinUse = paramsMinModerate;
+        paramsMaxUse = paramsMaxModerate;
+        limitsApply = true;
+        break;
       case PM_MODEL_LIMITS_STRICT:
         paramsMinUse = paramsMinStrict;
Index: trunk/psModules/src/objects/pmModel.h
===================================================================
--- trunk/psModules/src/objects/pmModel.h	(revision 26893)
+++ trunk/psModules/src/objects/pmModel.h	(revision 26916)
@@ -48,6 +48,7 @@
     PM_MODEL_LIMITS_NONE,               ///< Apply no limits: suitable for debugging
     PM_MODEL_LIMITS_IGNORE,             ///< Ignore all limits: fit can go to town
-    PM_MODEL_LIMITS_LAX,                ///< Lax limits: attempting to reproduce mildly bad data
-    PM_MODEL_LIMITS_STRICT,             ///< Strict limits: good quality data
+    PM_MODEL_LIMITS_LAX,                ///< Lax limits: attempting to reproduce even bad data
+    PM_MODEL_LIMITS_MODERATE,           ///< Moderate limits: cope with mildly bad data
+    PM_MODEL_LIMITS_STRICT,             ///< Strict limits: insist on good quality data
 } pmModelLimitsType;
 
