diff --git a/.status b/.status
index 5fc034b..9f3adba 100644
--- a/.status
+++ b/.status
@@ -22,6 +22,7 @@
 build/test/initializer_cycle_error_test: Skip
 build/test/initializer_test: Skip
 build/test/initializer_parts_test: Skip
+build/test/initializer_super_test: Skip
 build/test/initializer_type_filter_test: Skip
 build/test/init_method_test: Skip
 
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0282c7c..0bb8b00 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.1+8
+* Make sure to crawl the entire supertype chain for annotations, and run them
+in reverse order.
+
 ## 0.5.1+7
 
 * Change to source order-crawling of directives instead of alphabetical. The one
diff --git a/lib/src/mirror_loader.dart b/lib/src/mirror_loader.dart
index 1caf144..c847215 100644
--- a/lib/src/mirror_loader.dart
+++ b/lib/src/mirror_loader.dart
@@ -126,12 +126,10 @@
   Iterable<DeclarationMirror> _sortedDeclarationsWithMetadata(
       LibraryMirror lib) {
     return new List()
-      ..addAll(_sortDeclarations(
-          lib, lib.declarations.values.where(
-                  (d) => d is MethodMirror && d.metadata.isNotEmpty)))
-      ..addAll(_sortDeclarations(
-          lib, lib.declarations.values.where(
-                  (d) => d is ClassMirror && d.metadata.isNotEmpty)));
+      ..addAll(_sortDeclarations(lib, lib.declarations.values
+          .where((d) => d is MethodMirror && d.metadata.isNotEmpty)))
+      ..addAll(_sortDeclarations(lib, lib.declarations.values
+          .where((d) => d is ClassMirror && d.metadata.isNotEmpty)));
   }
 
   List<DeclarationMirror> _sortDeclarations(
diff --git a/lib/transformer.dart b/lib/transformer.dart
index 8fec4b7..078c34d 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -215,8 +215,9 @@
       _readAnnotations(method);
     }
     for (var clazz in _classesOfLibrary(library, seen)) {
-      var superClass = clazz.supertype;
-      while (superClass != null) {
+      readSuperClassAnnotations(InterfaceType superClass) {
+        if (superClass == null) return;
+        readSuperClassAnnotations(superClass.superclass);
         if (_readAnnotations(superClass.element) &&
             superClass.element.library != clazz.library) {
           _logger.warning(
@@ -225,8 +226,8 @@
               '${superClass.name} has a dependency on this library '
               '(possibly transitive).');
         }
-        superClass = superClass.superclass;
       }
+      readSuperClassAnnotations(clazz.supertype);
       _readAnnotations(clazz);
     }
   }
diff --git a/pubspec.yaml b/pubspec.yaml
index c2dc506..cf8226b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: initialize
-version: 0.5.1+7
+version: 0.5.1+8
 author: Polymer.dart Authors <web@dartlang.org>
 description: Generic building blocks for doing static initialization.
 homepage: https://github.com/dart-lang/initialize
@@ -26,6 +26,7 @@
       - test/deferred_library_test.dart
       - test/initializer_test.dart
       - test/initializer_parts_test.dart
+      - test/initializer_super_test.dart
       - test/initializer_cycle_error_test.dart
       - test/initializer_custom_filter_test.dart
       - test/initializer_type_filter_test.dart
diff --git a/test/initializer_parts_test.dart b/test/initializer_parts_test.dart
index bfba5e8..fc77886 100644
--- a/test/initializer_parts_test.dart
+++ b/test/initializer_parts_test.dart
@@ -19,7 +19,8 @@
   run().then((_) {
     test('parts', () {
       var expectedNames = [
-        const LibraryIdentifier(#initialize.initializer_parts_test, null, 'initializer_parts_test.dart'),
+        const LibraryIdentifier(#initialize.initializer_parts_test, null,
+            'initializer_parts_test.dart'),
         bar2,
         bar,
         foo,
diff --git a/test/initializer_super_test.dart b/test/initializer_super_test.dart
new file mode 100644
index 0000000..66e6e76
--- /dev/null
+++ b/test/initializer_super_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2015, 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.
+library initialize.initializer_super_test;
+
+import 'package:initialize/src/initialize_tracker.dart';
+import 'package:initialize/initialize.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/compact_vm_config.dart';
+
+main() {
+  useCompactVMConfiguration();
+
+  // Run all initializers.
+  run().then((_) {
+    test('annotations are seen in post-order with superclasses first', () {
+      var expectedNames = [A, C, B, E, D,];
+      expect(InitializeTracker.seen, expectedNames);
+    });
+  });
+}
+
+@initializeTracker
+class D extends E {}
+
+@initializeTracker
+class E extends B {}
+
+@initializeTracker
+class B extends C {}
+
+@initializeTracker
+class C extends A {}
+
+@initializeTracker
+class A {}
diff --git a/tool/all_tests.sh b/tool/all_tests.sh
index 13ed73c..85cc9ec 100755
--- a/tool/all_tests.sh
+++ b/tool/all_tests.sh
@@ -15,6 +15,7 @@
 dart test/initializer_cycle_error_test.dart
 dart test/initializer_test.dart
 dart test/initializer_parts_test.dart
+dart test/initializer_super_test.dart
 dart test/initializer_type_filter_test.dart
 dart test/transformer_test.dart
 
@@ -27,4 +28,5 @@
 dart build/test/initializer_custom_filter_test.initialize.dart
 dart build/test/initializer_test.initialize.dart
 dart build/test/initializer_parts_test.initialize.dart
+dart build/test/initializer_super_test.initialize.dart
 dart build/test/initializer_type_filter_test.initialize.dart
