something like:

```diff
diff --git a/index.js b/index.js
index ab88c15..f9d28ae 100644
--- a/index.js
+++ b/index.js
@@ -44,7 +44,7 @@ function co(fn) {
       try {
         ret = gen.throw(err);
       } catch (e) {
-        if (!done) throw e;
+        if (!done) return error(e);
         return done(e);
       }
     }
@@ -54,7 +54,7 @@ function co(fn) {
       try {
         ret = gen.next(res);
       } catch (e) {
-        if (!done) throw e;
+        if (!done) return error(e);
         return done(e);
       }
     }
@@ -270,3 +270,21 @@ function isGenerator(obj) {
 function isGeneratorFunction(obj) {
   return obj && obj.constructor && 'GeneratorFunction' == obj.constructor.name;
 }
+
+/**
+ * Throw `err` in a new stack.
+ * 
+ * This is used when co() is invoked
+ * without supplying a callback, which
+ * should only be for demonstrational
+ * purposes.
+ *
+ * @param {Error} err
+ * @api private
+ */
+
+function error(err) {
+  setImmediate(function(){
+    throw err;
+  });
+}
```