diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 02feb06..531e780 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -18,7 +18,6 @@
     show FieldAnalysisData, JFieldAnalysis;
 import '../js_backend/backend.dart' show CodegenInputs;
 import '../js_backend/native_data.dart' show NativeData;
-import '../js_backend/runtime_types_codegen.dart';
 import '../js_model/type_recipe.dart'
     show
         TypeRecipe,
@@ -89,14 +88,8 @@
       List<OptimizationPhase> phases = <OptimizationPhase>[
         // Run trivial instruction simplification first to optimize
         // some patterns useful for type conversion.
-        new SsaInstructionSimplifier(
-            globalInferenceResults,
-            _options,
-            codegen.rtiSubstitutions,
-            closedWorld,
-            typeRecipeDomain,
-            registry,
-            log),
+        new SsaInstructionSimplifier(globalInferenceResults, _options,
+            closedWorld, typeRecipeDomain, registry, log),
         new SsaTypeConversionInserter(closedWorld),
         new SsaRedundantPhiEliminator(),
         new SsaDeadPhiEliminator(),
@@ -104,22 +97,10 @@
             closedWorld.commonElements, closedWorld, log),
         // After type propagation, more instructions can be
         // simplified.
-        new SsaInstructionSimplifier(
-            globalInferenceResults,
-            _options,
-            codegen.rtiSubstitutions,
-            closedWorld,
-            typeRecipeDomain,
-            registry,
-            log),
-        new SsaInstructionSimplifier(
-            globalInferenceResults,
-            _options,
-            codegen.rtiSubstitutions,
-            closedWorld,
-            typeRecipeDomain,
-            registry,
-            log),
+        new SsaInstructionSimplifier(globalInferenceResults, _options,
+            closedWorld, typeRecipeDomain, registry, log),
+        new SsaInstructionSimplifier(globalInferenceResults, _options,
+            closedWorld, typeRecipeDomain, registry, log),
         new SsaTypePropagator(globalInferenceResults,
             closedWorld.commonElements, closedWorld, log),
         // Run a dead code eliminator before LICM because dead
@@ -143,14 +124,8 @@
         new SsaValueRangeAnalyzer(closedWorld, this),
         // Previous optimizations may have generated new
         // opportunities for instruction simplification.
-        new SsaInstructionSimplifier(
-            globalInferenceResults,
-            _options,
-            codegen.rtiSubstitutions,
-            closedWorld,
-            typeRecipeDomain,
-            registry,
-            log),
+        new SsaInstructionSimplifier(globalInferenceResults, _options,
+            closedWorld, typeRecipeDomain, registry, log),
       ];
       phases.forEach(runPhase);
 
@@ -171,14 +146,8 @@
           new SsaGlobalValueNumberer(closedWorld.abstractValueDomain),
           new SsaCodeMotion(closedWorld.abstractValueDomain),
           new SsaValueRangeAnalyzer(closedWorld, this),
-          new SsaInstructionSimplifier(
-              globalInferenceResults,
-              _options,
-              codegen.rtiSubstitutions,
-              closedWorld,
-              typeRecipeDomain,
-              registry,
-              log),
+          new SsaInstructionSimplifier(globalInferenceResults, _options,
+              closedWorld, typeRecipeDomain, registry, log),
           new SsaSimplifyInterceptors(closedWorld, member.enclosingClass),
           new SsaDeadCodeEliminator(closedWorld, this),
         ];
@@ -188,14 +157,8 @@
               closedWorld.commonElements, closedWorld, log),
           // Run the simplifier to remove unneeded type checks inserted by
           // type propagation.
-          new SsaInstructionSimplifier(
-              globalInferenceResults,
-              _options,
-              codegen.rtiSubstitutions,
-              closedWorld,
-              typeRecipeDomain,
-              registry,
-              log),
+          new SsaInstructionSimplifier(globalInferenceResults, _options,
+              closedWorld, typeRecipeDomain, registry, log),
         ];
       }
       phases.forEach(runPhase);
@@ -250,21 +213,14 @@
   final String name = "SsaInstructionSimplifier";
   final GlobalTypeInferenceResults _globalInferenceResults;
   final CompilerOptions _options;
-  final RuntimeTypesSubstitutions _rtiSubstitutions;
   final JClosedWorld _closedWorld;
   final TypeRecipeDomain _typeRecipeDomain;
   final CodegenRegistry _registry;
   final OptimizationTestLog _log;
   HGraph _graph;
 
-  SsaInstructionSimplifier(
-      this._globalInferenceResults,
-      this._options,
-      this._rtiSubstitutions,
-      this._closedWorld,
-      this._typeRecipeDomain,
-      this._registry,
-      this._log);
+  SsaInstructionSimplifier(this._globalInferenceResults, this._options,
+      this._closedWorld, this._typeRecipeDomain, this._registry, this._log);
 
   JCommonElements get commonElements => _closedWorld.commonElements;
 
@@ -1882,15 +1838,6 @@
     return handleInterceptedCall(node);
   }
 
-  bool needsSubstitutionForTypeVariableAccess(ClassEntity cls) {
-    if (_closedWorld.isUsedAsMixin(cls)) return true;
-
-    return _closedWorld.classHierarchy.anyStrictSubclassOf(cls,
-        (ClassEntity subclass) {
-      return !_rtiSubstitutions.isTrivialSubstitution(subclass, cls);
-    });
-  }
-
   @override
   HInstruction visitTypeEval(HTypeEval node) {
     HInstruction environment = node.inputs.single;
diff --git a/pkg/dartdev/README.md b/pkg/dartdev/README.md
index ef1c6c9..eaee08f 100644
--- a/pkg/dartdev/README.md
+++ b/pkg/dartdev/README.md
@@ -9,8 +9,8 @@
 -h, --help                 Print this usage information.
 -v, --verbose              Show additional command output.
     --version              Print the Dart SDK version.
-    --enable-analytics     Enable anonymous analytics.
-    --disable-analytics    Disable anonymous analytics.
+    --enable-analytics     Enable analytics.
+    --disable-analytics    Disable analytics.
 
 Available commands:
   analyze   Analyze the project's Dart code.
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index a8f9780..b72fbba 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -79,9 +79,9 @@
     argParser.addFlag('version',
         negatable: false, help: 'Print the Dart SDK version.');
     argParser.addFlag('enable-analytics',
-        negatable: false, help: 'Enable anonymous analytics.');
+        negatable: false, help: 'Enable analytics.');
     argParser.addFlag('disable-analytics',
-        negatable: false, help: 'Disable anonymous analytics.');
+        negatable: false, help: 'Disable analytics.');
 
     argParser.addFlag('diagnostics',
         negatable: false, help: 'Show tool diagnostic output.', hide: !verbose);
@@ -89,7 +89,7 @@
     argParser.addFlag(
       'analytics',
       negatable: true,
-      help: 'Disable anonymous analytics for this `dart *` run',
+      help: 'Disable analytics for this `dart *` run',
       hide: true,
     );
 
@@ -152,7 +152,7 @@
     } else if (topLevelResults['enable-analytics']) {
       analytics.enabled = true;
 
-      // Alert the user again that anonymous data will be collected.
+      // Alert the user again that data will be collected.
       print(analyticsNoticeOnFirstRunMessage);
       return 0;
     }
diff --git a/pkg/dartdev/lib/src/analytics.dart b/pkg/dartdev/lib/src/analytics.dart
index c9b1edf..e5e10de 100644
--- a/pkg/dartdev/lib/src/analytics.dart
+++ b/pkg/dartdev/lib/src/analytics.dart
@@ -14,11 +14,11 @@
 
 const String analyticsNoticeOnFirstRunMessage = '''
   ╔════════════════════════════════════════════════════════════════════════════╗
-  ║ The Dart tool uses Google Analytics to anonymously report feature usage    ║
-  ║ statistics and to send basic crash reports. This data is used to help      ║
-  ║ improve the Dart platform and tools over time.                             ║
+  ║ The Dart tool uses Google Analytics to report feature usage statistics     ║
+  ║ and to send basic crash reports. This data is used to help improve the     ║
+  ║ Dart platform and tools over time.                                         ║
   ║                                                                            ║
-  ║ To disable reporting of anonymous analytics, run:                          ║
+  ║ To disable reporting of analytics, run:                                    ║
   ║                                                                            ║
   ║   dart --disable-analytics                                                 ║
   ║                                                                            ║
@@ -26,7 +26,7 @@
 ''';
 const String analyticsDisabledNoticeMessage = '''
   ╔════════════════════════════════════════════════════════════════════════════╗
-  ║ Anonymous analytics reporting disabled. In order to enable it, run:        ║
+  ║ Analytics reporting disabled. In order to enable it, run:                  ║
   ║                                                                            ║
   ║   dart --enable-analytics                                                  ║
   ║                                                                            ║
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index a160888..304fc6a 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -45,7 +45,7 @@
     var result = p.runSync(['--disable-analytics']);
     expect(result.stdout, contains('''
   ╔════════════════════════════════════════════════════════════════════════════╗
-  ║ Anonymous analytics reporting disabled. In order to enable it, run:        ║
+  ║ Analytics reporting disabled. In order to enable it, run:                  ║
   ║                                                                            ║
   ║   dart --enable-analytics                                                  ║
   ║                                                                            ║
@@ -55,11 +55,11 @@
     result = p.runSync(['--enable-analytics']);
     expect(result.stdout, contains('''
   ╔════════════════════════════════════════════════════════════════════════════╗
-  ║ The Dart tool uses Google Analytics to anonymously report feature usage    ║
-  ║ statistics and to send basic crash reports. This data is used to help      ║
-  ║ improve the Dart platform and tools over time.                             ║
+  ║ The Dart tool uses Google Analytics to report feature usage statistics     ║
+  ║ and to send basic crash reports. This data is used to help improve the     ║
+  ║ Dart platform and tools over time.                                         ║
   ║                                                                            ║
-  ║ To disable reporting of anonymous analytics, run:                          ║
+  ║ To disable reporting of analytics, run:                                    ║
   ║                                                                            ║
   ║   dart --disable-analytics                                                 ║
   ║                                                                            ║
diff --git a/tools/VERSION b/tools/VERSION
index bab8ea1..c6ee983 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 125
+PRERELEASE 126
 PRERELEASE_PATCH 0
\ No newline at end of file
