Index: src/sas/qtgui/Perspectives/Fitting/ComplexConstraint.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ComplexConstraint.py	(revision ecc5d043d6933e0e4e9f6695fd4729a511e4addf)
+++ src/sas/qtgui/Perspectives/Fitting/ComplexConstraint.py	(revision 09e0c32bd64ebeb6310f7132410b87353c04c1d5)
@@ -82,5 +82,4 @@
         ttip = "Add constraints between all identically named parameters in both fitpages"
         self.actionAddAll.setToolTip(ttip)
-        #self.actionAddAll.setStatusTip(ttip)
         self.actionAddAll.triggered.connect(self.onSetAll)
         all_menu.addAction(self.actionAddAll)
Index: src/sas/qtgui/Perspectives/Fitting/Constraint.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/Constraint.py	(revision ecc5d043d6933e0e4e9f6695fd4729a511e4addf)
+++ src/sas/qtgui/Perspectives/Fitting/Constraint.py	(revision 09e0c32bd64ebeb6310f7132410b87353c04c1d5)
@@ -12,8 +12,9 @@
         self._value_ex = value_ex
         self._func = func
-        self.active = True
         self._min = min
         self._max = max
         self._operator = operator
+        self.validate = True
+        self.active = True
 
     @property
Index: src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py	(revision ecc5d043d6933e0e4e9f6695fd4729a511e4addf)
+++ src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py	(revision 09e0c32bd64ebeb6310f7132410b87353c04c1d5)
@@ -79,4 +79,6 @@
         self.tblConstraints.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
         self.tblConstraints.setEnabled(False)
+        header = self.tblConstraints.horizontalHeaderItem(0)
+        header.setToolTip("Double click to edit.")
 
         self.tblConstraints.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
@@ -307,6 +309,8 @@
         # No check on function here - trust the user (R)
         if function != constraint.func:
-            #from sas.sascalc.fit.expression import compile_constraints
+            # This becomes rather difficult to validate now.
+            # Turn off validation for Edit Constraint
             constraint.func = function
+            constraint.validate = False
 
     def onTabCellEntered(self, row, column):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision ecc5d043d6933e0e4e9f6695fd4729a511e4addf)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 09e0c32bd64ebeb6310f7132410b87353c04c1d5)
@@ -714,4 +714,7 @@
         # what is the parameter to constraint to?
         constraint.value = param_used
+
+        # Should the new constraint be validated?
+        constraint.validate = mc_widget.validate
 
         # Create a new item and add the Constraint object as a child
@@ -843,4 +846,6 @@
         constraint.value_ex = updated_param_used
         constraint.value = param_used
+        # Should the new constraint be validated?
+        constraint.validate = mc_widget.validate
 
         # Which row is the constrained parameter in?
@@ -3684,8 +3689,9 @@
                 value_ex = constraint.value_ex
                 param = constraint.param
-
-                cons = (value, param, value_ex, func)
-
-            param_list.append([param_name, param_checked, param_value, param_error, param_min, param_max, cons])
+                validate = constraint.validate
+
+                cons = (value, param, value_ex, validate, func)
+
+            param_list.append([param_name, param_checked, param_value,param_error, param_min, param_max, cons])
 
         def gatherPolyParams(row):
@@ -3935,9 +3941,10 @@
             # constraints
             cons = param_dict[param_name][4+ioffset]
-            if cons is not None and len(cons)==4:
+            if cons is not None and len(cons)==5:
                 value = cons[0]
                 param = cons[1]
                 value_ex = cons[2]
-                function = cons[3]
+                validate = cons[3]
+                function = cons[4]
                 constraint = Constraint()
                 constraint.value = value
@@ -3945,4 +3952,5 @@
                 constraint.param = param
                 constraint.value_ex = value_ex
+                constraint.validate = validate
                 self.addConstraintToRow(constraint=constraint, row=row)
 
Index: src/sas/qtgui/Perspectives/Fitting/MultiConstraint.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/MultiConstraint.py	(revision baeac95a855b6fc0dabd8f734a6796a896125f45)
+++ src/sas/qtgui/Perspectives/Fitting/MultiConstraint.py	(revision 09e0c32bd64ebeb6310f7132410b87353c04c1d5)
@@ -31,13 +31,17 @@
         self.params = params
         self.parent = parent
+        # Text of the constraint
         self.function = None
+        # Should this constraint be validated?
+        self.validate = True
 
         self.input_constraint = constraint
         if self.input_constraint is not None:
             variable = constraint.value
-            #variable = func[func.index('.')+1:]
             self.function = constraint.func
             self.params.append(variable)
             self.model_name = constraint.value_ex
+            # Passed constraint may be too complex for simple validation
+            self.validate = constraint.validate
         else:
             self.model_name = self.params[1]
@@ -97,4 +101,7 @@
         Add visual cues when formula is incorrect
         """
+        # Don't validate if requested
+        if not self.validate: return
+
         formula_is_valid = False
         formula_is_valid = self.validateConstraint(self.txtConstraint.text())
