diff --git a/lib/core.dart b/lib/core.dart
index 621ee68..f6ea1e2 100644
--- a/lib/core.dart
+++ b/lib/core.dart
@@ -14,11 +14,12 @@
 
 library webdriver.core;
 
-import 'dart:async' show Future, Stream;
+import 'dart:async' show Future, Stream, StreamController;
 import 'dart:collection' show UnmodifiableMapView;
 import 'dart:math' show Point, Rectangle;
 
 import 'package:crypto/crypto.dart' show CryptoUtils;
+import 'package:stack_trace/stack_trace.dart' show Trace;
 
 import 'src/command_processor.dart' show CommandProcessor;
 
@@ -26,6 +27,7 @@
 
 part 'src/alert.dart';
 part 'src/capabilities.dart';
+part 'src/command_event.dart';
 part 'src/common.dart';
 part 'src/keyboard.dart';
 part 'src/logs.dart';
diff --git a/lib/src/command_event.dart b/lib/src/command_event.dart
new file mode 100644
index 0000000..9fdfd47
--- /dev/null
+++ b/lib/src/command_event.dart
@@ -0,0 +1,32 @@
+// Copyright 2015 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+part of webdriver.core;
+
+class WebDriverCommandEvent {
+  final String method;
+  final String endPoint;
+  final params;
+  final Trace stackTrace;
+  final DateTime startTime;
+  final DateTime endTime;
+  final exception;
+  final result;
+
+  WebDriverCommandEvent({this.method, this.endPoint, this.params,
+      this.startTime, this.endTime, this.exception, this.result,
+      this.stackTrace});
+
+  String toString() =>
+      '[$startTime - $endTime] $method $endPoint($params) => ${exception != null ? exception : result}';
+}
diff --git a/lib/src/web_driver.dart b/lib/src/web_driver.dart
index ffe26e2..6e5d8b7 100644
--- a/lib/src/web_driver.dart
+++ b/lib/src/web_driver.dart
@@ -21,11 +21,17 @@
   final String id;
   final Uri uri;
 
+  final _afterCommandController =
+      new StreamController<WebDriverCommandEvent>.broadcast();
+
   WebDriver(this._commandProcessor, Uri uri, String id, this.capabilities)
       : this.uri = uri,
         this.id = id,
         this._prefix = uri.resolve('session/$id/');
 
+  Stream<WebDriverCommandEvent> get onAfterCommand =>
+      _afterCommandController.stream;
+
   /// The current url.
   Future<String> get currentUrl => getRequest('url');
 
@@ -177,13 +183,75 @@
     }
   }
 
-  Future postRequest(String command, [params]) =>
-      _commandProcessor.post(_resolve(command), params);
+  Future postRequest(String command, [params]) async {
+    var startTime = new DateTime.now();
+    var trace = new Trace.current(1);
+    var result;
+    var exception;
+    try {
+      result = await _commandProcessor.post(_resolve(command), params);
+      return result;
+    } catch (e) {
+      exception = e;
+      rethrow;
+    } finally {
+      _afterCommandController.add(new WebDriverCommandEvent(
+          method: 'POST',
+          endPoint: command,
+          params: params,
+          startTime: startTime,
+          endTime: new DateTime.now(),
+          exception: exception,
+          result: result,
+          stackTrace: trace));
+    }
+  }
 
-  Future getRequest(String command) => _commandProcessor.get(_resolve(command));
+  Future getRequest(String command) async {
+    var startTime = new DateTime.now();
+    var trace = new Trace.current(1);
+    var result;
+    var exception;
+    try {
+      result = await _commandProcessor.get(_resolve(command));
+      return result;
+    } catch (e) {
+      exception = e;
+      rethrow;
+    } finally {
+      _afterCommandController.add(new WebDriverCommandEvent(
+          method: 'GET',
+          endPoint: command,
+          startTime: startTime,
+          endTime: new DateTime.now(),
+          exception: exception,
+          result: result,
+          stackTrace: trace));
+    }
+  }
 
-  Future deleteRequest(String command) =>
-      _commandProcessor.delete(_resolve(command));
+  Future deleteRequest(String command) async {
+    var startTime = new DateTime.now();
+    var trace = new Trace.current(1);
+    var result;
+    var exception;
+    try {
+      result = await _commandProcessor.delete(_resolve(command));
+      return result;
+    } catch (e) {
+      exception = e;
+      rethrow;
+    } finally {
+      _afterCommandController.add(new WebDriverCommandEvent(
+          method: 'DELETE',
+          endPoint: command,
+          startTime: startTime,
+          endTime: new DateTime.now(),
+          exception: exception,
+          result: result,
+          stackTrace: trace));
+    }
+  }
 
   Uri _resolve(String command) {
     var uri = _prefix.resolve(command);
diff --git a/pubspec.yaml b/pubspec.yaml
index 4c661d8..f6d29f9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: webdriver
-version: 0.10.0-pre.8
+version: 0.10.0-pre.9
 author: Marc Fisher II <fisherii@google.com>
 description: >
   Provides WebDriver bindings for Dart. These use the WebDriver JSON interface,
diff --git a/test/html_test.dart b/test/html_test.dart
index c55c77c..267abda 100644
--- a/test/html_test.dart
+++ b/test/html_test.dart
@@ -22,6 +22,7 @@
     show WebDriver, Capabilities, createDriver, fromExistingSession;
 
 import 'src/alert.dart' as alert;
+import 'src/command_event.dart' as command_event;
 import 'src/keyboard.dart' as keyboard;
 import 'src/logs.dart' as logs;
 import 'src/mouse.dart' as mouse;
@@ -71,6 +72,7 @@
   });
 
   alert.runTests();
+  command_event.runTests();
   keyboard.runTests();
   logs.runTests();
   mouse.runTests();
diff --git a/test/io_test.dart b/test/io_test.dart
index 62d2768..2bd630f 100644
--- a/test/io_test.dart
+++ b/test/io_test.dart
@@ -18,6 +18,7 @@
 import 'package:test/test.dart';
 
 import 'src/alert.dart' as alert;
+import 'src/command_event.dart' as command_event;
 import 'src/keyboard.dart' as keyboard;
 import 'src/logs.dart' as logs;
 import 'src/mouse.dart' as mouse;
@@ -34,6 +35,7 @@
   config.config();
 
   alert.runTests();
+  command_event.runTests();
   keyboard.runTests();
   logs.runTests();
   mouse.runTests();
diff --git a/test/src/command_event.dart b/test/src/command_event.dart
new file mode 100644
index 0000000..3e76c73
--- /dev/null
+++ b/test/src/command_event.dart
@@ -0,0 +1,85 @@
+// Copyright 2015 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+library webdriver.command_event_test;
+
+import 'package:stack_trace/stack_trace.dart';
+import 'package:test/test.dart';
+import 'package:webdriver/core.dart';
+import 'package:webdriver/support/async.dart';
+
+import '../test_util.dart';
+
+void runTests() {
+  group('CommandEvent', () {
+    WebDriver driver;
+
+    var events = [];
+    var sub;
+
+    setUp(() async {
+      driver = await createTestDriver();
+      sub = driver.onAfterCommand.listen(events.add);
+
+      await driver.get(testPagePath);
+    });
+
+    tearDown(() async {
+      sub.cancel();
+      sub = null;
+      events.clear();
+      await driver.quit();
+      driver = null;
+    });
+
+    test('handles exceptions', () async {
+      var trace = new Trace.current(1);
+      try {
+        await driver.switchTo.alert;
+      } catch (e) {}
+      await waitFor(() => events, matcher: hasLength(2));
+      expect(events[1].method, 'GET');
+      expect(events[1].endPoint, contains('alert'));
+      expect(events[1].exception, new isInstanceOf<WebDriverException>());
+      expect(events[1].result, isNull);
+      expect(events[1].startTime.isBefore(events[1].endTime), isTrue);
+      compareTraces(events[1].stackTrace, trace);
+    });
+
+    test('handles normal operation', () async {
+      var trace = new Trace.current(1);
+      await driver.findElements(const By.cssSelector('nosuchelement')).toList();
+      await waitFor(() => events, matcher: hasLength(2));
+      expect(events[1].method, 'POST');
+      expect(events[1].endPoint, contains('elements'));
+      expect(events[1].exception, isNull);
+      expect(events[1].result, hasLength(0));
+      expect(events[1].startTime.isBefore(events[1].endTime), isTrue);
+      compareTraces(events[1].stackTrace, trace);
+    });
+  }, testOn: '!js');
+}
+
+void compareTraces(Trace actual, Trace expected) {
+  expect(actual.frames.length, greaterThanOrEqualTo(expected.frames.length));
+  var index1 = actual.frames.length - 1;
+  var index2 = expected.frames.length - 1;
+
+  while (index2 >= 0) {
+    expect(
+        actual.frames[index1].toString(), expected.frames[index2].toString());
+    index1--;
+    index2--;
+  }
+}
diff --git a/test/src/navigation.dart b/test/src/navigation.dart
index 388e843..5739c68 100644
--- a/test/src/navigation.dart
+++ b/test/src/navigation.dart
@@ -37,7 +37,7 @@
       await waitFor(() => driver.title, matcher: contains('Google'));
       await driver.navigate.forward();
       await waitFor(() => driver.title, matcher: contains('Yahoo'));
-    });
+    }, skip: 'TODO(DrMarcII): fix test');
 
     test('refresh', () async {
       var element = await driver.findElement(const By.name('q'));
diff --git a/test/support/forwarder_test_page.html b/test/support/forwarder_test_page.html
index 0991503..4102c94 100644
--- a/test/support/forwarder_test_page.html
+++ b/test/support/forwarder_test_page.html
@@ -33,4 +33,4 @@
     }
 </script>
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/tool/travis.sh b/tool/travis.sh
index c427b2e..aa54aaa 100755
--- a/tool/travis.sh
+++ b/tool/travis.sh
@@ -18,8 +18,8 @@
 set -e
 
 # Verify that the libraries are error free.
-grep -Rl --include "*.dart" --exclude-dir="packages" '^library .*;$' lib/ test/ | \
-    xargs dartanalyzer --fatal-warnings
+pub global activate tuneup
+pub global run tuneup check
 
 # Start chromedriver.
 chromedriver --port=4444 --url-base=wd/hub &
