diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3149059..c85bbe3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 1.0.1
+
+* Fix `MultiChannel`'s constructor to take a `StreamChannel`. This is
+  technically a breaking change, but since 1.0.0 was only released an hour ago,
+  we're treating it as a bug fix.
+
 ## 1.0.0
 
 * Initial version
diff --git a/lib/src/multi_channel.dart b/lib/src/multi_channel.dart
index e87deb3..cba592a 100644
--- a/lib/src/multi_channel.dart
+++ b/lib/src/multi_channel.dart
@@ -52,12 +52,11 @@
   /// virtual channels may be opened.
   StreamSink get sink;
 
-  /// Creates a new [MultiChannel] that sends messages over [innerStream] and
-  /// [innerSink].
+  /// Creates a new [MultiChannel] that sends and receives messages over
+  /// [inner].
   ///
-  /// The inner streams must take JSON-like objects.
-  factory MultiChannel(Stream innerStream, StreamSink innerSink) =>
-      new _MultiChannel(innerStream, innerSink);
+  /// The inner channel must take JSON-like objects.
+  factory MultiChannel(StreamChannel inner) => new _MultiChannel(inner);
 
   /// Creates a new virtual channel.
   ///
@@ -78,17 +77,12 @@
 /// This is private so that [VirtualChannel] can inherit from [MultiChannel]
 /// without having to implement all the private members.
 class _MultiChannel extends StreamChannelMixin implements MultiChannel {
-  /// The inner stream over which all communication is received.
+  /// The inner channel over which all communication is conducted.
   ///
   /// This will be `null` if the underlying communication channel is closed.
-  Stream _innerStream;
+  StreamChannel _inner;
 
-  /// The inner sink over which all communication is sent.
-  ///
-  /// This will be `null` if the underlying communication channel is closed.
-  StreamSink _innerSink;
-
-  /// The subscription to [_innerStream].
+  /// The subscription to [_inner.stream].
   StreamSubscription _innerStreamSubscription;
 
   Stream get stream => _streamController.stream;
@@ -128,16 +122,16 @@
   /// scheme, but if it has an even id, it's using the remote id scheme.
   var _nextId = 1;
 
-  _MultiChannel(this._innerStream, this._innerSink) {
+  _MultiChannel(this._inner) {
     // The default connection is a special case which has id 0 on both ends.
     // This allows it to begin connected without having to send over an id.
     _streamControllers[0] = _streamController;
     _sinkControllers[0] = _sinkController;
     _sinkController.stream.listen(
-        (message) => _innerSink.add([0, message]),
+        (message) => _inner.sink.add([0, message]),
         onDone: () => _closeChannel(0, 0));
 
-    _innerStreamSubscription = _innerStream.listen((message) {
+    _innerStreamSubscription = _inner.stream.listen((message) {
       var id = message[0];
       var sink = _streamControllers[id];
 
@@ -156,7 +150,7 @@
   }
 
   VirtualChannel virtualChannel([id]) {
-    if (_innerStream == null) {
+    if (_inner == null) {
       throw new StateError("The underlying channel is closed.");
     }
 
@@ -186,7 +180,7 @@
     _streamControllers[inputId] = streamController;
     _sinkControllers[inputId] = sinkController;
     sinkController.stream.listen(
-        (message) => _innerSink.add([outputId, message]),
+        (message) => _inner.sink.add([outputId, message]),
         onDone: () => _closeChannel(inputId, outputId));
 
     return new VirtualChannel._(
@@ -199,20 +193,19 @@
     _streamControllers.remove(inputId).close();
     _sinkControllers.remove(inputId).close();
 
-    if (_innerSink == null) return;
+    if (_inner == null) return;
 
     // A message without data indicates that the virtual channel has been
     // closed.
-    _innerSink.add([outputId]);
+    _inner.sink.add([outputId]);
     if (_streamControllers.isEmpty) _closeInnerChannel();
   }
 
   /// Closes the underlying communication channel.
   void _closeInnerChannel() {
-    _innerSink.close();
+    _inner.sink.close();
     _innerStreamSubscription.cancel();
-    _innerStream = null;
-    _innerSink = null;
+    _inner = null;
     for (var controller in _sinkControllers.values.toList()) {
       controller.close();
     }
diff --git a/pubspec.yaml b/pubspec.yaml
index 5f1a739..09df4a7 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: stream_channel
-version: 1.0.0
+version: 1.0.1
 description: An abstraction for two-way communication channels.
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/stream_channel
diff --git a/test/multi_channel_test.dart b/test/multi_channel_test.dart
index e459412..cc9ed1d 100644
--- a/test/multi_channel_test.dart
+++ b/test/multi_channel_test.dart
@@ -17,8 +17,10 @@
   setUp(() {
     oneToTwo = new StreamController();
     twoToOne = new StreamController();
-    channel1 = new MultiChannel(twoToOne.stream, oneToTwo.sink);
-    channel2 = new MultiChannel(oneToTwo.stream, twoToOne.sink);
+    channel1 = new MultiChannel(
+        new StreamChannel(twoToOne.stream, oneToTwo.sink));
+    channel2 = new MultiChannel(
+        new StreamChannel(oneToTwo.stream, twoToOne.sink));
   });
 
   group("the default virtual channel", () {
