diff --git a/runtime/lib/profiler.dart b/runtime/lib/profiler.dart
index c42e966..2c60141 100644
--- a/runtime/lib/profiler.dart
+++ b/runtime/lib/profiler.dart
@@ -15,7 +15,7 @@
 class _UserTag implements UserTag {
   factory _UserTag(String label) native "UserTag_new";
   String get label native "UserTag_label";
-  void makeCurrent() native "UserTag_makeCurrent";
+  UserTag makeCurrent() native "UserTag_makeCurrent";
 }
 
 patch UserTag getCurrentTag() => _getCurrentTag();
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index 69ca15d..5f68d68 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -135,7 +135,7 @@
 
 
 #define PROFILER_LIB_INTRINSIC_LIST(V)                                         \
-  V(_UserTag, makeCurrent, UserTag_makeCurrent, 1038211262)                    \
+  V(_UserTag, makeCurrent, UserTag_makeCurrent, 2084603703)                    \
   V(::, _getDefaultTag, UserTag_defaultTag, 624228668)                         \
   V(::, _getCurrentTag, Profiler_getCurrentTag, 1559793589)                    \
 
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
index 8229874..f7184d1 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
@@ -345,6 +345,12 @@
     if (member.isInstanceMember()) emitExtraAccessors(member, builder);
   }
 
+  bool _isOperator(FunctionElement member) {
+    // TODO(18740): there must be a better way to know if an element is an
+    // operator.
+    return Elements.operatorNameToIdentifier(member.name) != member.name;
+  }
+
   void addMemberMethod(FunctionElement member, ClassBuilder builder) {
     if (member.isAbstract) return;
     jsAst.Expression code = backend.generatedCode[member];
@@ -359,6 +365,9 @@
                             member.isConstructor() ||
                             member.isAccessor();
     String tearOffName;
+
+    final bool canBeReflected = backend.isAccessibleByReflection(member);
+
     if (isNotApplyTarget) {
       canTearOff = false;
     } else if (member.isInstanceMember()) {
@@ -367,19 +376,21 @@
         isClosure = true;
       } else {
         // Careful with operators.
-        canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler);
+        canTearOff =
+            compiler.codegenWorld.hasInvokedGetter(member, compiler) ||
+            (canBeReflected && !_isOperator(member));
         assert(!needsSuperGetter(member) || canTearOff);
         tearOffName = namer.getterName(member);
       }
     } else {
       canTearOff =
-          compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member);
+          compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member) ||
+          canBeReflected;
       tearOffName = namer.getStaticClosureName(member);
     }
     final bool canBeApplied = compiler.enabledFunctionApply &&
                               compiler.world.getMightBePassedToApply(member);
 
-    final bool canBeReflected = backend.isAccessibleByReflection(member);
     final bool needStructuredInfo =
         canTearOff || canBeReflected || canBeApplied;
     if (!needStructuredInfo) {
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
index 7440372..a959146 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_member_mirrors.dart
@@ -108,6 +108,7 @@
       // Simple name is 'unary-'.
       simpleName = 'unary-';
     } else if (simpleName.startsWith('operator\$')) {
+      // TODO(18740, johnniwinther): this fails for methods like `operator$foo`.
       String str = simpleName.substring(9);
       simpleName = 'operator';
       kind = Dart2JsMethodKind.OPERATOR;
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 2e6ae95..bf495e4 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -322,7 +322,14 @@
     while (!originParameters.isEmpty) {
       ParameterElementX originParameter = originParameters.head;
       ParameterElementX patchParameter = patchParameters.head;
-      originParameter.applyPatch(patchParameter);
+      // TODO(johnniwinther): Remove the conditional patching when we never
+      // resolve the same method twice.
+      if (!originParameter.isPatched) {
+        originParameter.applyPatch(patchParameter);
+      } else {
+        assert(invariant(origin, originParameter.patch == patchParameter,
+               message: "Inconsistent repatch of $originParameter."));
+      }
       DartType originParameterType = originParameter.computeType(compiler);
       DartType patchParameterType = patchParameter.computeType(compiler);
       if (originParameterType != patchParameterType) {
diff --git a/tests/lib/mirrors/get_field_test.dart b/tests/lib/mirrors/get_field_test.dart
new file mode 100644
index 0000000..c88841d
--- /dev/null
+++ b/tests/lib/mirrors/get_field_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@MirrorsUsed(targets: "A")
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class A {
+  foo(y, [x]) => y;
+  operator+(other) => null;
+  get bar => 499;
+  operator$foo([optional = 499]) => optional;
+}
+
+main() {
+  // We are using `getField` to tear off `foo`. We must make sure that all
+  // stub methods are installed.
+  var closure = reflect(new A()).getField(#foo).reflectee;
+  Expect.equals("b", closure("b"));
+
+  closure = reflect(new A()).getField(#operator$foo).reflectee;
+  Expect.equals(499, closure());
+}
diff --git a/tools/VERSION b/tools/VERSION
index f5bb2b3..962d60b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 4
 PATCH 0
 PRERELEASE 6
-PRERELEASE_PATCH 3
+PRERELEASE_PATCH 4
