Fix all strong-mode warnings.
diff --git a/.analysis_options b/.analysis_options
new file mode 100644
index 0000000..a10d4c5
--- /dev/null
+++ b/.analysis_options
@@ -0,0 +1,2 @@
+analyzer:
+  strong-mode: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 30762a0..dc0b45b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.9.7+1
+
+* Fix all strong-mode warnings.
+
 # 0.9.7
 
 * Fix a bug in `FileWatcher` where events could be added after watchers were
diff --git a/lib/src/directory_watcher/linux.dart b/lib/src/directory_watcher/linux.dart
index f327bb0..f33a554 100644
--- a/lib/src/directory_watcher/linux.dart
+++ b/lib/src/directory_watcher/linux.dart
@@ -128,9 +128,9 @@
 
   /// The callback that's run when a batch of changes comes in.
   void _onBatch(List<FileSystemEvent> batch) {
-    var files = new Set();
-    var dirs = new Set();
-    var changed = new Set();
+    var files = new Set<String>();
+    var dirs = new Set<String>();
+    var changed = new Set<String>();
 
     // inotify event batches are ordered by occurrence, so we treat them as a
     // log of what happened to a file. We only emit events based on the
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index d263f2f..6f3ff02 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -6,6 +6,8 @@
 import 'dart:io';
 import 'dart:collection';
 
+import 'package:async/async.dart';
+
 /// Returns `true` if [error] is a [FileSystemException] for a missing
 /// directory.
 bool isDirectoryNotFoundException(error) {
@@ -29,17 +31,18 @@
 /// If [broadcast] is true, a broadcast stream is returned. This assumes that
 /// the stream returned by [future] will be a broadcast stream as well.
 /// [broadcast] defaults to false.
-Stream futureStream(Future<Stream> future, {bool broadcast: false}) {
+Stream/*<T>*/ futureStream/*<T>*/(Future<Stream/*<T>*/> future,
+    {bool broadcast: false}) {
   var subscription;
-  StreamController controller;
+  StreamController/*<T>*/ controller;
 
-  future = future.catchError((e, stackTrace) {
+  future = DelegatingFuture.typed(future.catchError((e, stackTrace) {
     // Since [controller] is synchronous, it's likely that emitting an error
     // will cause it to be cancelled before we call close.
     if (controller != null) controller.addError(e, stackTrace);
     if (controller != null) controller.close();
     controller = null;
-  });
+  }));
 
   onListen() {
     future.then((stream) {
diff --git a/pubspec.yaml b/pubspec.yaml
index c0152e0..ce64478 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: watcher
-version: 0.9.8-dev
+version: 0.9.7+1
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/watcher
 description: >
@@ -12,6 +12,7 @@
   collection: '^1.0.0'
   path: '>=0.9.0 <2.0.0'
 dev_dependencies:
+  async: '^1.8.0'
   benchmark_harness: '^1.0.4'
   scheduled_test: '^0.12.0'
   test: '^0.12.0'