diff --git a/CHANGELOG.md b/CHANGELOG.md
index b1b7350..a5a7e46 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.3.2
+
+* Fix all strong-mode errors and warnings.
+
 ## 1.3.1
 
 * Make `IsolateChannel` slightly more efficient.
diff --git a/lib/src/disconnector.dart b/lib/src/disconnector.dart
index 35ecd1c..beff71d 100644
--- a/lib/src/disconnector.dart
+++ b/lib/src/disconnector.dart
@@ -38,7 +38,7 @@
 
   StreamChannel<T> bind(StreamChannel<T> channel) {
     return channel.changeSink((innerSink) {
-      var sink = new _DisconnectorSink(innerSink);
+      var sink = new _DisconnectorSink<T>(innerSink);
 
       if (_isDisconnected) {
         sink._disconnect();
diff --git a/lib/src/isolate_channel.dart b/lib/src/isolate_channel.dart
index dcb52cb..c725fef 100644
--- a/lib/src/isolate_channel.dart
+++ b/lib/src/isolate_channel.dart
@@ -44,7 +44,7 @@
     // value to be an [IsolateChannel].
     var streamCompleter = new StreamCompleter<T>();
     var sinkCompleter = new StreamSinkCompleter<T>();
-    var channel = new IsolateChannel._(
+    var channel = new IsolateChannel<T>._(
         streamCompleter.stream, sinkCompleter.sink);
 
     // The first message across the ReceivePort should be a SendPort pointing to
@@ -53,10 +53,11 @@
     var subscription;
     subscription = receivePort.listen((message) {
       if (message is SendPort) {
-        var controller = new StreamChannelController(
+        var controller = new StreamChannelController<T>(
             allowForeignErrors: false, sync: true);
-        new SubscriptionStream<T>(subscription).pipe(controller.local.sink);
-        controller.local.stream.listen(message.send,
+        new SubscriptionStream(subscription).pipe(controller.local.sink);
+        controller.local.stream.listen(
+            (data) => message.send(data),
             onDone: receivePort.close);
 
         streamCompleter.setSourceStream(controller.foreign.stream);
@@ -92,10 +93,12 @@
   /// Creates a stream channel that receives messages from [receivePort] and
   /// sends them over [sendPort].
   factory IsolateChannel(ReceivePort receivePort, SendPort sendPort) {
-    var controller = new StreamChannelController(
+    var controller = new StreamChannelController<T>(
         allowForeignErrors: false, sync: true);
     receivePort.pipe(controller.local.sink);
-    controller.local.stream.listen(sendPort.send, onDone: receivePort.close);
+    controller.local.stream.listen(
+        (data) => sendPort.send(data),
+        onDone: receivePort.close);
     return new IsolateChannel._(
         controller.foreign.stream, controller.foreign.sink);
   }
diff --git a/lib/src/json_document_transformer.dart b/lib/src/json_document_transformer.dart
index 19b2e08..c62c597 100644
--- a/lib/src/json_document_transformer.dart
+++ b/lib/src/json_document_transformer.dart
@@ -22,7 +22,7 @@
 /// [FormatException]. If an unencodable object is added to the sink, it
 /// synchronously throws a [JsonUnsupportedObjectError].
 class JsonDocumentTransformer
-    implements StreamChannelTransformer<String, Object> {
+    implements StreamChannelTransformer<Object, String> {
   /// The underlying codec that implements the encoding and decoding logic.
   final JsonCodec _codec;
 
diff --git a/lib/src/stream_channel_transformer.dart b/lib/src/stream_channel_transformer.dart
index be032c6..ac98085 100644
--- a/lib/src/stream_channel_transformer.dart
+++ b/lib/src/stream_channel_transformer.dart
@@ -19,10 +19,10 @@
 /// Transformers must be able to have `bind` called multiple times.
 class StreamChannelTransformer<S, T> {
   /// The transformer to use on the channel's stream.
-  final StreamTransformer _streamTransformer;
+  final StreamTransformer<T, S> _streamTransformer;
 
   /// The transformer to use on the channel's sink.
-  final StreamSinkTransformer _sinkTransformer;
+  final StreamSinkTransformer<S, T> _sinkTransformer;
 
   /// Creates a [StreamChannelTransformer] from existing stream and sink
   /// transformers.
@@ -35,8 +35,9 @@
   /// and all output from its stream is decoded using [Codec.decoder].
   StreamChannelTransformer.fromCodec(Codec<S, T> codec)
       : this(
-          codec.decoder,
-          new StreamSinkTransformer.fromStreamTransformer(codec.encoder));
+          typedStreamTransformer(codec.decoder),
+          StreamSinkTransformer.typed(
+              new StreamSinkTransformer.fromStreamTransformer(codec.encoder)));
 
   /// Transforms the events sent to and emitted by [channel].
   ///
diff --git a/pubspec.yaml b/pubspec.yaml
index c38c167..8410e05 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -6,7 +6,7 @@
 environment:
   sdk: '>=1.8.0 <2.0.0'
 dependencies:
-  async: '^1.8.0'
+  async: '^1.11.0'
   stack_trace: '^1.0.0'
 dev_dependencies:
   test: '^0.12.0'
