diff --git a/CHANGELOG.md b/CHANGELOG.md
index be288d9..b481d29 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.5.1+5
+
+* Fix an issue where for certain programs the transformer could fail,
+  [33](https://github.com/dart-lang/polymer-dart/issues/33).
+
+
 ## 0.5.1+4
 
 * Update to use mock dart sdk from `code_transformers` and update the `analyzer`
diff --git a/lib/build/initializer_plugin.dart b/lib/build/initializer_plugin.dart
index f70e885..466065f 100644
--- a/lib/build/initializer_plugin.dart
+++ b/lib/build/initializer_plugin.dart
@@ -231,7 +231,7 @@
       var element = expression.bestElement;
       if (element == null || !element.isPublic) {
         logger.error('Private constants are not supported in intializer '
-        'constructors, found $element.');
+            'constructors, found $element.');
       }
       libraryPrefixes.putIfAbsent(
           element.library, () => 'i${libraryPrefixes.length}');
diff --git a/lib/src/mirror_loader.dart b/lib/src/mirror_loader.dart
index bda2704..ba49566 100644
--- a/lib/src/mirror_loader.dart
+++ b/lib/src/mirror_loader.dart
@@ -45,8 +45,8 @@
       // they were seen.
       // TODO(jakemac): This is an approximation of what we actually want.
       // https://github.com/dart-lang/initialize/issues/25
-      var relativeLibraryUris = new List.from(libraries.keys.where(
-              (uri) => uri.scheme != 'package' && uri.scheme != 'dart'));
+      var relativeLibraryUris = new List.from(libraries.keys
+          .where((uri) => uri.scheme != 'package' && uri.scheme != 'dart'));
 
       for (var import in relativeLibraryUris.reversed) {
         // Always load the package: version of a library if available for
@@ -74,7 +74,6 @@
     return queue;
   }
 
-
   /// Whether [uri] is an http URI that contains a 'packages' segment, and
   /// therefore could be converted into a 'package:' URI.
   bool _isHttpStylePackageUrl(Uri uri) {
@@ -87,8 +86,8 @@
   }
 
   Uri _packageUriFor(Uri httpUri) {
-    var packagePath = httpUri.path.substring(
-        httpUri.path.lastIndexOf('packages/') + 'packages/'.length);
+    var packagePath = httpUri.path
+        .substring(httpUri.path.lastIndexOf('packages/') + 'packages/'.length);
     return Uri.parse('package:$packagePath');
   }
 
diff --git a/lib/transformer.dart b/lib/transformer.dart
index 76cc98c..caae7a6 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -62,8 +62,8 @@
         var document = parse(html);
         var originalDartFile =
             _findMainScript(document, transform.primaryInput.id, transform);
-        return _buildBootstrapFile(transform, primaryId: originalDartFile).then(
-            (AssetId newDartFile) {
+        return _buildBootstrapFile(transform, primaryId: originalDartFile)
+            .then((AssetId newDartFile) {
           return _replaceEntryWithBootstrap(transform, document,
               transform.primaryInput.id, originalDartFile, newDartFile);
         });
@@ -233,8 +233,21 @@
 
   bool _readAnnotations(Element element) {
     var found = false;
-    element.metadata.where((ElementAnnotation meta) {
+    if (element.metadata.isEmpty) return found;
+
+    var metaNodes;
+    var node = element.node;
+    if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
+      metaNodes = node.parent.parent.metadata;
+    } else if (node is ClassDeclaration || node is FunctionDeclaration) {
+      metaNodes = node.metadata;
+    } else {
+      return found;
+    }
+
+    metaNodes.where((Annotation metaNode) {
       // First filter out anything that is not a Initializer.
+      var meta = metaNode.elementAnnotation;
       var e = meta.element;
       if (e is PropertyAccessorElement) {
         return _isInitializer(e.variable.evaluationResult.value.type);
@@ -242,12 +255,14 @@
         return _isInitializer(e.returnType);
       }
       return false;
-    }).where((ElementAnnotation meta) {
+    }).where((Annotation metaNode) {
+      var meta = metaNode.elementAnnotation;
       _seenAnnotations.putIfAbsent(element, () => new Set<ElementAnnotation>());
       return !_seenAnnotations[element].contains(meta);
-    }).forEach((ElementAnnotation meta) {
+    }).forEach((Annotation metaNode) {
+      var meta = metaNode.elementAnnotation;
       _seenAnnotations[element].add(meta);
-      _initQueue.addLast(new InitializerData._(element, meta));
+      _initQueue.addLast(new InitializerData._(node, metaNode));
       found = true;
     });
     return found;
@@ -310,8 +325,8 @@
       _logger.error("Can't import `${id}` from `${_newEntryPoint}`");
     } else if (path.url.split(id.path)[0] ==
         path.url.split(_newEntryPoint.path)[0]) {
-      var relativePath = path.url.relative(
-          id.path, from: path.url.dirname(_newEntryPoint.path));
+      var relativePath = path.url.relative(id.path,
+          from: path.url.dirname(_newEntryPoint.path));
       buffer.write("import '${relativePath}'");
     } else {
       _logger.error("Can't import `${id}` from `${_newEntryPoint}`");
@@ -388,71 +403,59 @@
     return (new List.from(library.imports)
       ..addAll(library.exports)
       ..sort((a, b) {
-      // dart: imports don't have a uri
-      if (a.uri == null && b.uri != null) return -1;
-      if (b.uri == null && a.uri != null) return 1;
-      if (a.uri == null && b.uri == null) {
-        return getLibrary(a).name.compareTo(getLibrary(b).name);
-      }
+        // dart: imports don't have a uri
+        if (a.uri == null && b.uri != null) return -1;
+        if (b.uri == null && a.uri != null) return 1;
+        if (a.uri == null && b.uri == null) {
+          return getLibrary(a).name.compareTo(getLibrary(b).name);
+        }
 
-      // package: imports next
-      var aIsPackage = a.uri.startsWith('package:');
-      var bIsPackage = b.uri.startsWith('package:');
-      if (aIsPackage && !bIsPackage) {
-        return -1;
-      } else if (bIsPackage && !aIsPackage) {
-        return 1;
-      } else if (bIsPackage && aIsPackage) {
-        return a.uri.compareTo(b.uri);
-      }
+        // package: imports next
+        var aIsPackage = a.uri.startsWith('package:');
+        var bIsPackage = b.uri.startsWith('package:');
+        if (aIsPackage && !bIsPackage) {
+          return -1;
+        } else if (bIsPackage && !aIsPackage) {
+          return 1;
+        } else if (bIsPackage && aIsPackage) {
+          return a.uri.compareTo(b.uri);
+        }
 
-      // And finally compare based on the relative uri if both are file paths.
-      var aUri = path.url.relative(a.source.uri.path,
-          from: path.url.dirname(library.source.uri.path));
-      var bUri = path.url.relative(b.source.uri.path,
-          from: path.url.dirname(library.source.uri.path));
-      return aUri.compareTo(bUri);
-    })).map(getLibrary);
+        // And finally compare based on the relative uri if both are file paths.
+        var aUri = path.url.relative(a.source.uri.path,
+            from: path.url.dirname(library.source.uri.path));
+        var bUri = path.url.relative(b.source.uri.path,
+            from: path.url.dirname(library.source.uri.path));
+        return aUri.compareTo(bUri);
+      })).map(getLibrary);
   }
 }
 
 /// An [Initializer] annotation and the target of that annotation.
 class InitializerData {
-  /// The target [Element] of the annotation.
-  final Element targetElement;
-
-  /// The [ElementAnnotation] representing the annotation itself.
-  final ElementAnnotation annotationElement;
-
-  AstNode _targetNode;
-
   /// The target [AstNode] of the annotation.
-  // TODO(jakemac): We at least cache this for now, but  ideally `targetElement`
-  // would actually be the getter, and `targetNode` would be the property.
-  AstNode get targetNode {
-    if (_targetNode == null) _targetNode = targetElement.node;
-    return _targetNode;
-  }
+  final AstNode targetNode;
 
   /// The [Annotation] representing the annotation itself.
-  Annotation get annotationNode {
-    var annotatedNode;
+  final Annotation annotationNode;
+
+  /// The [ElementAnnotation] representing the annotation itself.
+  ElementAnnotation get annotationElement => annotationNode.elementAnnotation;
+
+  /// The target [Element] of the annotation.
+  Element get targetElement {
     if (targetNode is SimpleIdentifier &&
         targetNode.parent is LibraryIdentifier) {
-      annotatedNode = targetNode.parent.parent;
+      return targetNode.parent.parent.element;
     } else if (targetNode is ClassDeclaration ||
         targetNode is FunctionDeclaration) {
-      annotatedNode = targetNode;
+      return targetNode.element;
     } else {
       return null;
     }
-    if (annotatedNode is! AnnotatedNode) return null;
-    var astMeta = annotatedNode.metadata;
-
-    return astMeta.firstWhere((m) => m.elementAnnotation == annotationElement);
   }
 
-  InitializerData._(this.targetElement, this.annotationElement);
+  InitializerData._(this.targetNode, this.annotationNode);
 }
 
 // Reads a file list from a barback settings configuration field.
diff --git a/pubspec.yaml b/pubspec.yaml
index b10df23..8d17859 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: initialize
-version: 0.5.1+4
+version: 0.5.1+5
 author: Polymer.dart Authors <web@dartlang.org>
 description: Generic building blocks for doing static initialization.
 homepage: https://github.com/dart-lang/initialize
