diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index d838eff..f2290dd 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1412,6 +1412,9 @@
   ASSERT(function.HasCode());
 
   if (CanOptimizeFunction(function, isolate)) {
+    // Reset usage counter for reoptimization before calling optimizer to
+    // prevent recursive triggering of function optimization.
+    function.set_usage_counter(0);
     const Error& error =
         Error::Handle(Compiler::CompileOptimizedFunction(function));
     if (!error.IsNull()) {
@@ -1419,8 +1422,6 @@
     }
     const Code& optimized_code = Code::Handle(function.CurrentCode());
     ASSERT(!optimized_code.IsNull());
-    // Reset usage counter for reoptimization.
-    function.set_usage_counter(0);
   }
   arguments.SetReturn(Code::Handle(function.CurrentCode()));
 }
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index d488c48..55d37bc 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -369,6 +369,10 @@
         curr_instr->ReplaceWith(div_mod, current_iterator());
         other_binop->ReplaceUsesWith(div_mod);
         other_binop->RemoveFromGraph();
+        // Only one merge possible. Because canonicalization happens later,
+        // more candidates are possible.
+        // TODO(srdjan): Allow merging of trunc-div/mod into truncDivMod.
+        break;
       }
     }
   }
@@ -415,14 +419,18 @@
         ZoneGrowableArray<Value*>* args = new ZoneGrowableArray<Value*>(1);
         args->Add(new Value(curr_instr->value()->definition()));
 
-        // Replace with TruncDivMod.
-        MergedMathInstr* div_mod = new MergedMathInstr(
+        // Replace with SinCos.
+        MergedMathInstr* sin_cos = new MergedMathInstr(
             args,
             curr_instr->DeoptimizationTarget(),
             MergedMathInstr::kSinCos);
-        curr_instr->ReplaceWith(div_mod, current_iterator());
-        other_op->ReplaceUsesWith(div_mod);
+        curr_instr->ReplaceWith(sin_cos, current_iterator());
+        other_op->ReplaceUsesWith(sin_cos);
         other_op->RemoveFromGraph();
+        // Only one merge possible. Because canonicalization happens later,
+        // more candidates are possible.
+        // TODO(srdjan): Allow merging of sin/cos into sincos.
+        break;
       }
     }
   }
diff --git a/tests/language/arithmetic_test.dart b/tests/language/arithmetic_test.dart
index e43dc4a..64ab133 100644
--- a/tests/language/arithmetic_test.dart
+++ b/tests/language/arithmetic_test.dart
@@ -435,10 +435,15 @@
   
   static double sinCosSub(double a) => sin(a) - cos(a);
   
+  static double sinCosAddCos(double a)  => sin(a) * cos(a) + cos(a);
+
   static void testSinCos() {
     var e = sin(1.234) - cos(1.234);
+    var f = sin(1.234) * cos(1.234) + cos(1.234);
+    
     for (var i = 0; i < 20; i++) {
       Expect.approxEquals(e, sinCosSub(1.234));
+      Expect.approxEquals(f, sinCosAddCos(1.234));
     }
     Expect.approxEquals(1.0, sinCosSub(3.14159265));
     Expect.approxEquals(1.0, sinCosSub(3.14159265 / 2.0));
diff --git a/tests/language/modulo_test.dart b/tests/language/modulo_test.dart
index 6dc22cf..f14d3c5 100644
--- a/tests/language/modulo_test.dart
+++ b/tests/language/modulo_test.dart
@@ -24,7 +24,7 @@
     } else {
       Expect.equals(i ~/ 10, noDom(i));
     }
-    Expect.equals((i ~/ 10) + (i ~/ 10) + (i % 10), threeOp(i));
+    Expect.equals((i ~/ 10) + (i % 10) + (i % 10), threeOp(i));
     Expect.equals((i ~/ 10) + (i ~/ 12) + (i % 10) + (i % 12), fourOp(i));
     
     // Zero test is done outside the loop.
@@ -60,7 +60,7 @@
 
 threeOp(a) {
   var x = a ~/ 10;
-  var y = a ~/ 10;
+  var y = a % 10;
   var z = a % 10;
   return x + y + z;
 }
diff --git a/tools/VERSION b/tools/VERSION
index 2d6a7b4..d0a7398 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 1
-PATCH 1
+PATCH 2
 PRERELEASE 0
 PRERELEASE_PATCH 0
