         _OverrideIfOperatorOrAppend.build(expression).with comps.multiplication.build()
 
       invoke: (expression)->
-        traversal = _FinalOpenSubExpressionApplcation.build((expression)=>
-          @appendAction(expression))
-        new_exp = traversal.invoke(expression)
-        if traversal.wasFound()
-          new_exp
-        else
-          @appendAction(expression)
+        _FinalOpenSubExpressionApplcation.build((expr)=> @appendAction(expr)).
+          invokeOrDefault(expression)
 
     class_mixer(AppendMultiplication)
 
+
+    class AppendDivision
+      invoke: (expression)->
+        _FinalOpenSubExpressionApplcation.build((expr)=>
+          _OverrideIfOperatorOrAppend.build(expr).with comps.division.build()).
+          invokeOrDefault(expression)
+    class_mixer(AppendDivision)
+
+
     class AppendAddition
-      appendAction: (expression)->
-        _OverrideIfOperatorOrAppend.build(expression).with comps.addition.build()
-      invoke: (expression)->
-        traversal = _FinalOpenSubExpressionApplcation.build((expression)=>
-          @appendAction(expression))
-        new_exp = traversal.invoke(expression)
-        if traversal.wasFound()
-          new_exp
-        else
-          @appendAction(expression)
+      invoke: (expression)->
+        _FinalOpenSubExpressionApplcation.build(
+          (expression)->
+            _OverrideIfOperatorOrAppend.build(expression).with comps.addition.build()
+          ).invokeOrDefault(expression)
+
     class_mixer(AppendAddition)
 
 
-    class Subtraction
-      invoke: (expression)->
-        _OverrideIfOperatorOrAppend.build(expression).
-          with comps.subtraction.build()
-    class_mixer(Subtraction)
+    class AppendSubtraction
+      invoke: (expression)->
+        _FinalOpenSubExpressionApplcation.build(
+          (expression)->
+            _OverrideIfOperatorOrAppend.build(expression).with comps.subtraction.build()
+          ).invokeOrDefault(expression)
+
+    class_mixer(AppendSubtraction)
 
     class Negation
       invoke: (expression)->

        else
          base = expression.last()

        expression.replaceLast(
          comps.exponentiation.build(base: base, power: comps.blank.build()))

    class_mixer(ExponentiateLast)


          new_last = comps.number.build(value: 0)
          new_last = new_last.futureAsDecimal()
          expression.append(new_last)

      invoke: (expression)->
        _FinalOpenSubExpressionApplcation.build((expr)=> @onFinalExpression(expr)).
          invokeOrDefault(expression)

    class_mixer(AppendDecimal)

    class AppendNumber
      initialize: (@opts)->
