diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index a181567..f076a8a 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -9,7 +9,7 @@
 import '../js/js.dart' as js;
 import '../serialization/serialization.dart';
 import '../util/util.dart';
-import '../js_emitter/model.dart';
+import '../js_emitter/model.dart' show Fragment;
 
 import 'namer.dart';
 
@@ -230,7 +230,7 @@
   // Each resource has a distinct name.
   String name;
   List<Fragment> fragments;
-  Map<Library, List<js.Property>> holderCode;
+  Map<Entity, List<js.Property>> holderCode;
   js.Statement _statement;
 
   @override
@@ -507,8 +507,8 @@
   void registerHolders() {
     // Register all holders used in all [DeferredHolderResource]s.
     for (var resource in holderResources) {
-      resource.holderCode.forEach((library, properties) {
-        String holderName = globalObjectNameForEntity(library.element);
+      resource.holderCode.forEach((entity, properties) {
+        String holderName = globalObjectNameForEntity(entity);
         registerHolderUseOrUpdate(resource.name, holderName,
             properties: properties);
       });
@@ -769,7 +769,7 @@
   final List<DeferredHolderResource> holderResources = [];
   final Set<String> _uniqueHolders = {};
   final List<String> _holders = [];
-  final Map<Library, String> _libraryMap = {};
+  final Map<Entity, String> _entityMap = {};
   final JCommonElements _commonElements;
 
   LegacyDeferredHolderExpressionFinalizerImpl(this._commonElements) {
@@ -844,9 +844,9 @@
   /// Registers an [Entity] with a specific [holder].
   void registerHolderUse(String holder, Object data) {
     if (_uniqueHolders.add(holder)) _holders.add(holder);
-    if (data != null && data is Library) {
-      assert(!_libraryMap.containsKey(data) || _libraryMap[data] == holder);
-      _libraryMap[data] = holder;
+    if (data != null && data is Entity) {
+      assert(!_entityMap.containsKey(data) || _entityMap[data] == holder);
+      _entityMap[data] = holder;
     }
   }
 
@@ -890,9 +890,9 @@
 
   /// Registers all of the holders used by a given [DeferredHolderResource].
   void registerHolders(DeferredHolderResource resource) {
-    for (var library in resource.holderCode.keys) {
-      var holder = globalObjectForLibrary(library.element);
-      registerHolderUse(holder, library);
+    for (var entity in resource.holderCode.keys) {
+      var holder = globalObjectForEntity(entity);
+      registerHolderUse(holder, entity);
     }
   }
 
@@ -917,9 +917,9 @@
     }
 
     final holderCode = resource.holderCode;
-    holderCode.forEach((library, properties) {
-      assert(_libraryMap.containsKey(library));
-      var holder = _libraryMap[library];
+    holderCode.forEach((entity, properties) {
+      assert(_entityMap.containsKey(entity));
+      var holder = _entityMap[entity];
       assert(codePerHolder.containsKey(holder));
       codePerHolder[holder].addAll(properties);
     });
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index bf57340..3cc03f9 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -827,7 +827,7 @@
 
   /// Adds code to a finalizer.
   void addCodeToFinalizer(void Function(js.Node) addCode, js.Node fragmentCode,
-      Map<Library, List<js.Property>> holderCode) {
+      Map<Entity, List<js.Property>> holderCode) {
     addCode(fragmentCode);
     for (var properties in holderCode.values) {
       for (var property in properties) {
@@ -839,7 +839,7 @@
   /// Finalizes the code for a fragment, and optionally finalizes holders.
   /// Finalizing holders must be the last step of the emitter.
   void finalizeCode(String resourceName, js.Node code,
-      Map<Library, List<js.Property>> holderCode,
+      Map<Entity, List<js.Property>> holderCode,
       {bool finalizeHolders: false}) {
     StringReferenceFinalizer stringFinalizer =
         StringReferenceFinalizerImpl(_options.enableMinification);
@@ -871,21 +871,23 @@
   /// into a map keyed by [Entity] because we don't yet know anything about the
   /// structure of the underlying holders and thus we cannot emit this code
   /// directly into the ast.
-  Map<Library, List<js.Property>> emitHolderCode(List<Library> libraries) {
-    Map<Library, List<js.Property>> holderCode = {};
+  Map<Entity, List<js.Property>> emitHolderCode(List<Library> libraries) {
+    Map<Entity, List<js.Property>> holderCode = {};
     for (Library library in libraries) {
       for (StaticMethod method in library.statics) {
         Map<js.Name, js.Expression> propertyMap = emitStaticMethod(method);
         propertyMap.forEach((js.Name key, js.Expression value) {
           var property = new js.Property(js.quoteName(key), value);
-          (holderCode[library] ??= []).add(property);
+          Entity holderKey =
+              method is StaticStubMethod ? method.library : method.element;
+          (holderCode[holderKey] ??= []).add(property);
           registerEntityAst(method.element, property, library: library.element);
         });
       }
       for (Class cls in library.classes) {
         js.Expression constructor = emitConstructor(cls);
         var property = new js.Property(js.quoteName(cls.name), constructor);
-        (holderCode[library] ??= []).add(property);
+        (holderCode[cls.element] ??= []).add(property);
         registerEntityAst(cls.element, property, library: library.element);
       }
     }
diff --git a/tools/VERSION b/tools/VERSION
index d064fce..94fff25 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 241
+PRERELEASE 242
 PRERELEASE_PATCH 0
\ No newline at end of file
