diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 893445ba..9864942 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -323,12 +323,6 @@
    */
   final Set<ClassElement> specialOperatorEqClasses = new Set<ClassElement>();
 
-  /**
-   * A set of members that are called from subclasses via super.
-   */
-  final Set<FunctionElement> aliasedSuperMembers =
-      new Setlet<FunctionElement>();
-
   List<CompilerTask> get tasks {
     return <CompilerTask>[builder, optimizer, generator, emitter];
   }
@@ -534,20 +528,6 @@
     return name;
   }
 
-  /**
-   * Record that [method] is called from a subclass via `super`.
-   */
-  void registerAliasedSuperMember(FunctionElement method) {
-    aliasedSuperMembers.add(method);
-  }
-
-  /**
-   * Returns `true` is [member] is called from a subclass via `super`.
-   */
-  bool isAliasedSuperMember(FunctionElement member) {
-    return aliasedSuperMembers.contains(member);
-  }
-
   bool isInterceptedMethod(Element element) {
     if (!element.isInstanceMember) return false;
     if (element.isGenerativeConstructorBody) {
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 5ff2a2d..a318279 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -18,7 +18,6 @@
 
   final String getterPrefix = 'g';
   final String setterPrefix = 's';
-  final String superPrefix = r's$';
   final String callPrefix = ''; // this will create function names $<n>
 
   static const ALPHABET_CHARACTERS = 52;  // a-zA-Z.
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 0fe858b..4eff34a 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -220,7 +220,6 @@
   final String currentIsolate = r'$';
   final String getterPrefix = r'get$';
   final String setterPrefix = r'set$';
-  final String superPrefix = r'super$';
   final String metadataField = '@';
   final String callPrefix = 'call';
   final String callCatchAllName = r'call$catchAll';
@@ -810,14 +809,6 @@
   // TODO(ahe): Remove this method. Use get getNameOfMember instead.
   String getNameOfInstanceMember(Element member) => getNameX(member);
 
-  String getNameOfAliasedSuperMember(Element member) {
-    ClassElement superClass = member.enclosingClass;
-    String className = getNameOfClass(superClass);
-    String memberName = getNameOfMember(member);
-    String proposal = "$superPrefix$className\$$memberName";
-    return getMappedInstanceName(proposal);
-  }
-
   String getNameOfMember(Element member) => getNameX(member);
 
   String getNameOfGlobalField(VariableElement field) => getNameX(field);
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
index 6fa8fa4..802887d 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
@@ -414,7 +414,7 @@
 
   void addMemberMethodFromInfo(MemberInfo info, ClassBuilder builder) {
     final FunctionElement member = info.member;
-    String name = info.name;
+    final String name = info.name;
     final FunctionSignature parameters = info.parameters;
     jsAst.Expression code = info.code;
     final bool needsStubs = info.needsStubs;
@@ -427,13 +427,6 @@
 
     emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
 
-    // If this member is called from a subclass via super, we have to add a
-    // renaming. This is encoded by using two names separated with a : as
-    // the property name.
-    if (backend.isAliasedSuperMember(member)) {
-      name = "$name:${namer.getNameOfAliasedSuperMember(member)}";
-    }
-
     if (!needStructuredInfo) {
       compiler.dumpInfoTask.registerElementAst(member,
           builder.addProperty(name, code));
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index e206f95..b99843c 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -307,6 +307,7 @@
     return js(r'''
         var inheritFrom = function() {
           function tmp() {}
+          function tmp() {}
           var hasOwnProperty = Object.prototype.hasOwnProperty;
           return function (constructor, superConstructor) {
             tmp.prototype = superConstructor.prototype;
@@ -350,25 +351,6 @@
             finishedClassesAccess]);
   }
 
-  List buildSplitOffAliases() {
-    if (backend.aliasedSuperMembers.isEmpty) return [];
-    return [js(r'''
-        var splitOffAliases = function(constructor) {
-          var hasOwnProperty = Object.prototype.hasOwnProperty;
-          var properties = constructor.prototype;
-          for (var member in properties) {
-            if (hasOwnProperty.call(properties, member)) {
-              var s = member.split(':');
-              if (s.length > 1) {
-                properties[s[0]] = properties[s[1]] = properties[member];
-                delete properties[member];
-              }
-            }
-          }
-        }
-      ''')];
-  }
-
   jsAst.Fun get finishClassesFunction {
     // Class descriptions are collected in a JS object.
     // 'finishClasses' takes all collected descriptions and sets up
@@ -536,11 +518,6 @@
         finishedClasses[cls] = true;
 
         var superclass = pendingClasses[cls];
-        var constructor = allClasses[cls];
-
-        // Process aliased members due to super calls. We have to do this early
-        // to ensure that we also hit the object class.
-        if (#) splitOffAliases(constructor);
 
         // The superclass is only false (empty string) for the Dart Object
         // class.  The minifier together with noSuchMethod can put methods on
@@ -548,6 +525,7 @@
         // that we have a string.
         if (!superclass || typeof superclass != "string") return;
         finishClass(superclass);
+        var constructor = allClasses[cls];
         var superConstructor = allClasses[superclass];
 
         if (!superConstructor)
@@ -606,7 +584,6 @@
         }
       }
     }''', [finishedClassesAccess,
-           backend.aliasedSuperMembers.isNotEmpty,
            !nativeClasses.isEmpty,
            interceptorsByTagAccess,
            leafTagsAccess,
@@ -718,7 +695,6 @@
     if (!needsDefineClass) return [];
     return defineClassFunction
     ..add(buildInheritFrom())
-    ..addAll(buildSplitOffAliases())
     ..add(js('$finishClassesName = #', finishClassesFunction))
     ..add(initFinishClasses);
   }
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
index afd0cae..a1d3610 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/reflection_data_parser.dart
@@ -141,16 +141,11 @@
    * [array].
    */
   jsAst.Statement addStubs = js.statement('''
-  function addStubs(descriptor, array, nameTag, isStatic,
+  function addStubs(descriptor, array, name, isStatic,
                     originalDescriptor, functions) {
-    // The name could be an aliased method, which is only resolved later in
-    // finishClasses. We need to use the actual name for the generated stubs.
-    // Note that no getter for the alias is needed, as getter sends via super
-    // are handled via the prototype chain and not using the alias.
-    var name = nameTag.split(':')[0];
     var f, funcs =
-        [originalDescriptor[nameTag] =
-        descriptor[nameTag] = f = ${readFunction("array", "$FUNCTION_INDEX")}];
+        [originalDescriptor[name] =
+        descriptor[name] = f = ${readFunction("array", "$FUNCTION_INDEX")}];
     f.\$stubName = name;
     functions.push(name);
     for (var index = $FUNCTION_INDEX; index < array.length; index += 2) {
@@ -184,7 +179,7 @@
 
     if (getterStubName) {
       f = tearOff(funcs, array, isStatic, name, isIntercepted);
-      descriptor[nameTag].\$getter = f;
+      descriptor[name].\$getter = f;
       f.\$getterStub = true;
       // Used to create an isolate using spawnFunction.
       if (isStatic) #[name] = f;  // embedded globalFunctions.
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 2eaad68..3829edd 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1683,23 +1683,14 @@
         registry.registerDynamicGetter(selector);
         registry.registerGetterForSuperMethod(node.element);
         methodName = backend.namer.invocationName(selector);
-        push(
-          js.js('#.prototype.#.call(#)', [
-            backend.namer.elementAccess(superClass),
-            methodName, visitArguments(node.inputs, start: 0)]),
-          node);
       } else {
-        methodName =
-            backend.namer.getNameOfAliasedSuperMember(superMethod);
-        backend.registerAliasedSuperMember(superMethod);
-        use(node.inputs.first);
-        push(
-          js.js('#.#(#)', [
-            pop(), methodName,
-            visitArguments(node.inputs, start: 1)]),
-          node);
+        methodName = backend.namer.getNameOfInstanceMember(superMethod);
       }
-
+      push(
+          js.js('#.prototype.#.call(#)', [
+              backend.namer.elementAccess(superClass),
+              methodName, visitArguments(node.inputs, start: 0)]),
+          node);
     }
   }
 
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 97f3075..13f87c4 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -15,6 +15,9 @@
 scheduled_test/lib/*: Skip
 polymer/example/scoped_style/*: Skip
 
+[ $runtime == vm ]
+analysis_server/test/integration/asynchrony_test: Skip # Times out due to revert of 41436, see also issue 21564
+
 scheduled_test/test/scheduled_server_test: Pass, Fail # 13524
 scheduled_test/test/scheduled_process_test: Pass, Slow # Issue 9231
 scheduled_test/test/scheduled_stream/stream_matcher_test: Pass, Slow
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a6c7e2a..a2289fd 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -7485,6 +7485,16 @@
   // To suppress missing implicit constructor warnings.
   factory Document._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('Document.pointerlockchangeEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('pointerlockchange');
+
+  @DomName('Document.pointerlockerrorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('pointerlockerror');
+
   /**
    * Static factory designed to expose `readystatechange` events to event
    * handlers that are not necessarily instances of [Document].
@@ -8104,6 +8114,16 @@
   @Experimental() // untriaged
   Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
 
+  @DomName('Document.onpointerlockchange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
+
+  @DomName('Document.onpointerlockerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onPointerLockError => pointerLockErrorEvent.forTarget(this);
+
   @DomName('Document.onratechange')
   @DocsEditable()
   @Experimental() // untriaged
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 168a4c7..601400b 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -8439,6 +8439,16 @@
   // To suppress missing implicit constructor warnings.
   factory Document._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('Document.pointerlockchangeEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> pointerLockChangeEvent = const EventStreamProvider<Event>('pointerlockchange');
+
+  @DomName('Document.pointerlockerrorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> pointerLockErrorEvent = const EventStreamProvider<Event>('pointerlockerror');
+
   /**
    * Static factory designed to expose `readystatechange` events to event
    * handlers that are not necessarily instances of [Document].
@@ -9033,6 +9043,16 @@
   @Experimental() // untriaged
   Stream<Event> get onPlaying => Element.playingEvent.forTarget(this);
 
+  @DomName('Document.onpointerlockchange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onPointerLockChange => pointerLockChangeEvent.forTarget(this);
+
+  @DomName('Document.onpointerlockerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onPointerLockError => pointerLockErrorEvent.forTarget(this);
+
   @DomName('Document.onratechange')
   @DocsEditable()
   @Experimental() // untriaged
diff --git a/tools/VERSION b/tools/VERSION
index 39d7666..5ec591b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 8
 PATCH 0
 PRERELEASE 4
-PRERELEASE_PATCH 4
+PRERELEASE_PATCH 5
diff --git a/tools/dom/scripts/htmleventgenerator.py b/tools/dom/scripts/htmleventgenerator.py
index 66ffaec..372ecca 100644
--- a/tools/dom/scripts/htmleventgenerator.py
+++ b/tools/dom/scripts/htmleventgenerator.py
@@ -126,8 +126,8 @@
   'Document.readystatechange': ('readyStateChange', 'Event'),
   'Document.securitypolicyviolation': ('securityPolicyViolation', 'SecurityPolicyViolationEvent'),
   'Document.selectionchange': ('selectionChange', 'Event'),
-  'Document.webkitpointerlockchange': ('pointerLockChange', 'Event'),
-  'Document.webkitpointerlockerror': ('pointerLockError', 'Event'),
+  'Document.pointerlockchange': ('pointerLockChange', 'Event'),
+  'Document.pointerlockerror': ('pointerLockError', 'Event'),
   'EventSource.open': ('open', 'Event'),
   'FileReader.abort': ('abort', 'ProgressEvent'),
   'FileReader.load': ('load', 'ProgressEvent'),
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 1bc0077..60845a4 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -233,7 +233,6 @@
   'Document.webkitFullscreenEnabled',
   'Document.webkitHidden',
   'Document.webkitIsFullScreen',
-  'Document.webkitPointerLockElement',
   'Document.webkitVisibilityState',
 
   'Element.children',
