diff --git a/modules/base/pymod/table.py b/modules/base/pymod/table.py
index d1bd691a301113ac387eca86dd6e0ff848c602ab..45e4b61541f197491c9140dc331efc207861cf8a 100644
--- a/modules/base/pymod/table.py
+++ b/modules/base/pymod/table.py
@@ -820,6 +820,12 @@ Statistics for column %(col)s
     return filt_tab
 
 
+  def _EvaluateEqualNone(self, lhs, rhs):
+    return (lhs==None or lhs==float('NaN')) == (rhs==None or rhs==float('NaN'))
+ 
+  def _EvaluateNonEqualNone(self, lhs, rhs):
+    return (lhs==None or lhs==float('NaN')) != (rhs==None or rhs==float('NaN'))
+ 
   def _EvaluateAnd(self, lhs, rhs):
     return lhs and rhs
 
@@ -845,20 +851,43 @@ Statistics for column %(col)s
     return lhs>=rhs
 
   def _EvaluateAdd(self, lhs, rhs):
+    if lhs==None or lhs==float('NaN') or rhs==None or rhs==float('NaN'):
+      return None
     return lhs+rhs
 
   def _EvaluateSubtract(self, lhs, rhs):
+    if lhs==None or lhs==float('NaN') or rhs==None or rhs==float('NaN'):
+      return None
     return lhs-rhs
 
   def _EvaluateMultiply(self, lhs, rhs):
+    if lhs==None or lhs==float('NaN') or rhs==None or rhs==float('NaN'):
+      return None
     return lhs*rhs
 
   def _EvaluateDivide(self, lhs, rhs):
+    if lhs==None or lhs==float('NaN') or rhs==None or rhs==float('NaN'):
+      return None
     return lhs/rhs
 
 
   def _EvaluateOperator(self, op, lhs, rhs):
-    if op=='and':
+
+    if op=='+':
+      return self._EvaluateAdd(lhs, rhs)
+    elif op=='-':
+      return self._EvaluateSubtract(lhs, rhs)
+    elif op=='/':
+      return self._EvaluateDivide(lhs, rhs)
+    elif op=='*':
+      return self._EvaluateMultiply(lhs, rhs)
+    elif lhs==None or lhs==float('NaN') or rhs==None or rhs==float('NaN'):
+      if op=='=':
+        return self._EvaluateEqualNone(lhs,rhs)
+      elif op=='!=':
+        return self._EvaluateNonEqualNone(lhs,rhs)
+      return None
+    elif op=='and':
       return self._EvaluateAnd(lhs, rhs)
     elif op=='or':
       return self._EvaluateOr(lhs, rhs)
@@ -874,14 +903,7 @@ Statistics for column %(col)s
       return self._EvaluateLowerEqual(lhs, rhs)
     elif op=='>=':
       return self._EvaluateGreaterEqual(lhs, rhs)
-    elif op=='+':
-      return self._EvaluateAdd(lhs, rhs)
-    elif op=='-':
-      return self._EvaluateSubtract(lhs, rhs)
-    elif op=='/':
-      return self._EvaluateDivide(lhs, rhs)
-    elif op=='*':
-      return self._EvaluateMultiply(lhs, rhs)
+
     else:
       raise ValueError('Unknown operator: '+op)
 
@@ -897,7 +919,10 @@ Statistics for column %(col)s
           raise ValueError('Cannot evaluate operator on less than two operands!')
         rhs=stack.pop()
         lhs=stack.pop()
-        stack.append(self._EvaluateOperator(exp, lhs, rhs))
+        result=self._EvaluateOperator(exp, lhs, rhs)
+        if result==None:
+          return False
+        stack.append(result)
       else:
         stack.append(exp)
     if len(stack)>1:
@@ -962,6 +987,7 @@ Statistics for column %(col)s
     float_expression=re.compile('[-+]?[0-9]*\.[0-9]+(?:[eE][-+]?[0-9]+)?$')
     int_expression=re.compile('[-+]?[0-9]+(?:[eE][-+]?[0-9]+)?$')
     bool_expression=re.compile('true$|True$|false$|False$')
+    none_expression=re.compile('None$|none$|nan$|NAN$|NaN$')
 
     if re.match(float_expression,operand):
       return float(operand)
@@ -971,6 +997,8 @@ Statistics for column %(col)s
       if operand == 'false' or operand == 'False':
         return False
       return True
+    elif re.match(none_expression,operand):
+      return None
     return operand
 
     #If nothing above matches, operand must be a string, full string
@@ -1208,8 +1236,6 @@ Statistics for column %(col)s
     for row in self.rows:
       for ti, ei in zip(tab_indices, exp_indices):
         rpn_expression[ei] = row[ti]
-      if None in rpn_expression:
-        continue
       if self._EvaluateRPN(list(rpn_expression), valid_operators):
         selected_tab.AddRow(row)