diff --git a/lib/result.dart b/lib/result.dart
index 903c8a5..db04ae7 100644
--- a/lib/result.dart
+++ b/lib/result.dart
@@ -198,10 +198,10 @@
   bool get isError => true;
   ValueResult get asValue => null;
   ErrorResult get asError => this;
-  void complete(Completer<T> completer) {
+  void complete(Completer completer) {
     completer.completeError(error, stackTrace);
   }
-  void addTo(EventSink<T> sink) {
+  void addTo(EventSink sink) {
     sink.addError(error, stackTrace);
   }
   Future get asFuture => new Future.error(error, stackTrace);
@@ -238,7 +238,7 @@
     return new Stream<T>.eventTransformed(source, _createSink);
   }
 
-  static EventSink _createSink(EventSink<Result> sink) {
+  static EventSink<Result> _createSink(EventSink sink) {
     return new ReleaseSink(sink);
   }
 }
@@ -257,7 +257,7 @@
 
   CaptureSink(EventSink<Result<T>> sink) : _sink = sink;
   void add(T value) { _sink.add(new ValueResult(value)); }
-  void addError(Object error, StackTrace stackTrace) {
+  void addError(Object error, [StackTrace stackTrace]) {
     _sink.add(new ErrorResult(error, stackTrace));
   }
   void close() { _sink.close(); }
@@ -281,7 +281,7 @@
       _sink.addError(error.error, error.stackTrace);
     }
   }
-  void addError(Object error, StackTrace stackTrace) {
+  void addError(Object error, [StackTrace stackTrace]) {
     // Errors may be added by intermediate processing, even if it is never
     // added by CaptureSink.
     _sink.addError(error, stackTrace);
diff --git a/test/result_test.dart b/test/result_test.dart
index d101b48..da6746f 100644
--- a/test/result_test.dart
+++ b/test/result_test.dart
@@ -37,7 +37,7 @@
   });
 
   test("create result error 2", () {
-    Result<bool> result = new ErrorResult<bool>("BAD", stack);
+    Result<bool> result = new ErrorResult("BAD", stack);
     expect(result.isValue, isFalse);
     expect(result.isError, isTrue);
     ErrorResult error = result.asError;
@@ -65,7 +65,7 @@
   test("complete with error", () {
     Result<bool> result = new ErrorResult("BAD", stack);
     Completer c = new Completer<bool>();
-    c.future.then((bool v) { Expect.fail("Unexpected value $v"); },
+    c.future.then((bool v) { fail("Unexpected value $v"); },
                   onError: expectAsync((e, s) {
                     expect(e, equals("BAD"));
                     expect(s, same(stack));
@@ -100,7 +100,7 @@
 
   test("error as future", () {
     Result<bool> result = new ErrorResult("BAD", stack);
-    result.asFuture.then((bool v) { Expect.fail("Unexpected value $v"); },
+    result.asFuture.then((bool v) { fail("Unexpected value $v"); },
                          onError: expectAsync((e, s) {
                            expect(e, equals("BAD"));
                            expect(s, same(stack));
@@ -115,7 +115,7 @@
       ValueResult value = result.asValue;
       expect(value.value, equals(42));
     }), onError: (e, s) {
-      Expect.fail("Unexpected error: $e");
+      fail("Unexpected error: $e");
     });
   });
 
@@ -128,7 +128,7 @@
       expect(error.error, equals("BAD"));
       expect(error.stackTrace, same(stack));
     }), onError: (e, s) {
-      Expect.fail("Unexpected error: $e");
+      fail("Unexpected error: $e");
     });
   });
 
@@ -138,7 +138,7 @@
     Result.release(future).then(expectAsync((v) {
       expect(v, equals(42));
     }), onError: (e, s) {
-      Expect.fail("Unexpected error: $e");
+      fail("Unexpected error: $e");
     });
   });
 
@@ -147,7 +147,7 @@
     Future<Result<bool>> future =
         new Future<Result<bool>>.value(new Result<bool>.error("BAD", stack));
     Result.release(future).then((v) {
-      Expect.fail("Unexpected value: $v");
+      fail("Unexpected value: $v");
     }, onError: expectAsync((e, s) {
       expect(e, equals("BAD"));
       expect(s, same(stack));
@@ -158,7 +158,7 @@
     // An error in the error lane is passed through by release.
     Future<Result<bool>> future = new Future<Result<bool>>.error("BAD", stack);
     Result.release(future).then((v) {
-      Expect.fail("Unexpected value: $v");
+      fail("Unexpected value: $v");
     }, onError: expectAsync((e, s) {
       expect(e, equals("BAD"));
       expect(s, same(stack));
@@ -235,7 +235,8 @@
 
   test("flatten error 1", () {
     Result<int> error = new Result<int>.error("BAD", stack);
-    Result<int> flattened = Result.flatten(error);
+    Result<int> flattened =
+        Result.flatten(new Result<Result<int>>.error(error));
     expectResult(flattened, error);
   });
 
@@ -277,9 +278,9 @@
   void addError(error, [StackTrace stack]) { onError(error, stack); }
   void close() { onDone(); }
 
-  static void _nullData(value) { Expect.fail("Unexpected sink add: $value"); }
+  static void _nullData(value) { fail("Unexpected sink add: $value"); }
   static void _nullError(e, StackTrace s) {
-    Expect.fail("Unexpected sink addError: $e");
+    fail("Unexpected sink addError: $e");
   }
-  static void _nullDone() { Expect.fail("Unepxected sink close"); }
+  static void _nullDone() { fail("Unepxected sink close"); }
 }
