diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2206513..a5040e3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.15.2+6
+
+* Fix a deadlock that occurred occasionally when a declaring transformer was
+  followed by a lazy transformer (most commonly `$dart2js`).
+
 ## 0.15.2+5
 
 * If a transformer requests a non-existent asset from another package, it will
diff --git a/lib/src/graph/transform_node.dart b/lib/src/graph/transform_node.dart
index f715814..61bab3f 100644
--- a/lib/src/graph/transform_node.dart
+++ b/lib/src/graph/transform_node.dart
@@ -334,6 +334,13 @@
       // transformation.
       _restartRun();
     } else if (input.state.isAvailable) {
+      if (_state == _State.DECLARED) {
+        // If we're passing through this input and its contents don't matter,
+        // update the pass-through controller.
+        var controller = _passThroughControllers[input.id];
+        if (controller != null) controller.setAvailable(input.asset);
+      }
+
       if (_state == _State.DECLARED && _canRunDeclaringEagerly) {
         // If [this] is fully declared but hasn't started applying, this input
         // becoming available may mean that all inputs are available, in which
@@ -358,6 +365,10 @@
       }
     } else {
       if (_forced) input.force();
+
+      var controller = _passThroughControllers[input.id];
+      if (controller != null) controller.setDirty();
+
       if (_state == _State.APPLYING && !_applyController.addedId(input.id) &&
           (_forced || !input.isLazy)) {
         // If the input hasn't yet been added to the transform's input stream,
diff --git a/pubspec.yaml b/pubspec.yaml
index 81ef584..41e7cdf 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -7,7 +7,7 @@
 #
 # When the minor or patch version of this is upgraded, you *must* update that
 # version constraint in pub to stay in sync with this.
-version: 0.15.2+5
+version: 0.15.2+6
 
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://github.com/dart-lang/barback
diff --git a/test/package_graph/declaring_transformer_test.dart b/test/package_graph/declaring_transformer_test.dart
index 88f2a83..aa830df 100644
--- a/test/package_graph/declaring_transformer_test.dart
+++ b/test/package_graph/declaring_transformer_test.dart
@@ -165,6 +165,35 @@
     buildShouldSucceed();
   });
 
+  // Regression test for #64.
+  test("a declaring transformer's output passes through a lazy transformer",
+      () {
+    var declaring = new DeclaringRewriteTransformer("one", "two");
+    initGraph(["app|foo.one"], {"app": [
+      [declaring],
+      [new LazyRewriteTransformer("two", "three")]
+    ]});
+
+    updateSources(["app|foo.one"]);
+    // Give the transformers time to declare their assets.
+    schedule(pumpEventQueue);
+
+    expectAsset("app|foo.one", "foo");
+    expectAsset("app|foo.two", "foo.two");
+    expectAsset("app|foo.three", "foo.two.three");
+    buildShouldSucceed();
+
+    modifyAsset("app|foo.one", "bar");
+    updateSources(["app|foo.one"]);
+
+    expectAsset("app|foo.one", "bar");
+    expectAsset("app|foo.two", "bar.two");
+    expectAsset("app|foo.three", "bar.two.three");
+    buildShouldSucceed();
+
+    expect(declaring.numRuns, completion(equals(2)));
+  });
+
   test("a declaring transformer following a lazy transformer runs eagerly once "
       "its input is available", () {
     var declaring = new DeclaringRewriteTransformer("two", "three");
