diff --git a/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart b/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
index 9de810b..ef94ed6 100644
--- a/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
+++ b/packages/flutter_tools/lib/src/commands/fuchsia_reload.dart
@@ -4,6 +4,7 @@
 
 import 'dart:async';
 import 'dart:collection';
+import 'dart:convert';
 
 import '../base/common.dart';
 import '../base/file_system.dart';
@@ -41,6 +42,10 @@
     argParser.addOption('gn-target',
       abbr: 'g',
       help: 'GN target of the application, e.g //path/to/app:app.');
+    argParser.addOption('isolate-number',
+      abbr: 'i',
+      help: 'To reload only one instance, specify the isolate number, e.g. '
+            'the number in foo\$main-###### given by --list.');
     argParser.addFlag('list',
       abbr: 'l',
       defaultsTo: false,
@@ -48,10 +53,10 @@
     argParser.addOption('name-override',
       abbr: 'n',
       help: 'On-device name of the application binary.');
-    argParser.addOption('isolate-number',
-      abbr: 'i',
-      help: 'To reload only one instance, specify the isolate number, e.g. '
-            'the number in foo\$main-###### given by --list.');
+    argParser.addFlag('preview-dart-2',
+      abbr: '2',
+      defaultsTo: false,
+      help: 'Preview Dart 2.0 functionality.');
     argParser.addOption('target',
       abbr: 't',
       defaultsTo: flx.defaultMainPath,
@@ -178,6 +183,8 @@
     printTrace('Looing for view $viewFilter');
     final List<int> result = <int>[];
     for (FlutterView v in await _getViews(ports)) {
+      if (v.uiIsolate == null)
+        continue;
       final Uri addr = v.owner.vmService.httpAddress;
       printTrace('At $addr, found view: ${v.uiIsolate.name}');
       if (v.uiIsolate.name.contains(viewFilter))
@@ -355,11 +362,15 @@
     return <String>[path, name];
   }
 
-  Future<List<_PortForwarder>> _forwardPorts(List<int> remotePorts) {
+  Future<List<_PortForwarder>> _forwardPorts(List<int> remotePorts) async {
     final String config = '$_buildDir/ssh-keys/ssh_config';
-    return Future.wait(remotePorts.map((int remotePort) {
-      return _PortForwarder.start(config, _address, remotePort);
-    }));
+    final List<_PortForwarder> forwarders = <_PortForwarder>[];
+    for (int port in remotePorts) {
+      final _PortForwarder f =
+          await _PortForwarder.start(config, _address, port);
+      forwarders.add(f);
+    }
+    return forwarders;
   }
 
   Future<List<int>> _getServicePorts() async {
@@ -421,10 +432,14 @@
       return new _PortForwarder._(null, 0, 0, null, null);
     }
     final List<String> command = <String>[
-        'ssh', '-F', sshConfig, '-nNT',
+        'ssh', '-F', sshConfig, '-nNT', '-vvv',
         '-L', '$localPort:$ipv4Loopback:$remotePort', address];
     printTrace("_PortForwarder running '${command.join(' ')}'");
     final Process process = await processManager.start(command);
+    process.stderr
+        .transform(utf8.decoder)
+        .transform(const LineSplitter())
+        .listen((String data) { printTrace(data); });
     process.exitCode.then((int c) {
       printTrace("'${command.join(' ')}' exited with exit code $c");
     });
@@ -440,7 +455,7 @@
     }
     // Cancel the forwarding request.
     final List<String> command = <String>[
-        'ssh', '-F', _sshConfig, '-O', 'cancel',
+        'ssh', '-F', _sshConfig, '-O', 'cancel', '-vvv',
         '-L', '$_localPort:$ipv4Loopback:$_remotePort', _remoteAddress];
     final ProcessResult result = await processManager.run(command);
     printTrace(command.join(' '));
