Save work
diff --git a/analyzer_plugin/lib/src/file_tracker.dart b/analyzer_plugin/lib/src/file_tracker.dart
index 0f06975..2a04625 100644
--- a/analyzer_plugin/lib/src/file_tracker.dart
+++ b/analyzer_plugin/lib/src/file_tracker.dart
@@ -12,10 +12,15 @@
 
   FileTracker(this._fileHasher);
 
-  _RelationshipTracker _dartToDart = new _RelationshipTracker();
-  _RelationshipTracker _dartToHtml = new _RelationshipTracker();
+  final _dartToDart = new _RelationshipTracker();
+  final _dartToHtml = new _RelationshipTracker();
 
-  Set<String> _dartFilesWithDartTemplates = new HashSet<String>();
+  final _dartFilesWithDartTemplates = new HashSet<String>();
+  final _htmlHashes = <String, ApiSignature>{};
+
+  void htmlChanged(String path) {
+    _htmlHashes[path] = _fileHasher.getContentHash(path);
+  }
 
   void setDartHtmlTemplates(String dartPath, List<String> htmlPaths) {
     return _dartToHtml.setFileReferencesFiles(dartPath, htmlPaths);
@@ -85,13 +90,17 @@
 
   ApiSignature getHtmlSignature(String htmlPath, String dartPath) {
     final signature = new ApiSignature();
-    signature.addBytes(_fileHasher.getContentHash(htmlPath).toByteList());
+    signature.addBytes(_htmlHashes[htmlPath].toByteList());
     signature.addBytes(_fileHasher.getUnitElementHash(dartPath).toByteList());
     for (final subHtmlPath in getHtmlPathsAffectingDartContext(dartPath)) {
-      signature.addBytes(_fileHasher.getContentHash(subHtmlPath).toByteList());
+      signature.addBytes(_htmlHashes[subHtmlPath].toByteList());
     }
     return signature;
   }
+
+  String getHtmlContentHash(String htmlPath) {
+    return _htmlHashes[htmlPath].toHex() + '.ngunlinked';
+  }
 }
 
 class _RelationshipTracker {