       Tracker.prototype = {
         tick: function() {
           var next;
-          if (this.send) {
+          if (this.throw) {
+            next = this.iterator.throw(this.result);
+            this.throw = false;
+          } else {
             next = this.iterator.next(this.result);
-          } else {
-            next = this.iterator.next();
-            this.send = true;
           }
 
           if (next.done) {
             this.win(next.value);
           } else {
-            next.value.promise.then(this.thenHandle, this.failHandle);
+            next.value.then(this.thenHandle, this.failHandle);
           }
         }
       };
 
       return async;
     }())
-  "
+  " 
 
   stream: -> "
     (function(){


UTILITIES =

  async: -> "
    (function(){
      var async = function(generator) {

          self.tick();
        };

        this.failHandle = function(err) {
          self.result = err;
          self.throw = true;
          self.tick();
        };

        this.throw    = false;
        this.result   = undefined;

        this.iterator = undefined;
