docs: function(options){
    
    options = typeof options === 'undefined' ? {} : options;
    options.tweets = typeof options.tweets === 'undefined' ? require('./data/tweets.json') : options.tweets;
    options.singleRun = typeof options.singleRun === 'undefined' ? true : options.singleRun;
    options.tweetDelay = typeof options.tweetDelay === 'undefined' ? 100 : options.tweetDelay;
    
    this.currentTweetIndex = 0;
  
    EventEmitter.call(this);
    
    //following method are directly attached (on the prototype, they would be erased by EventEmitter's prototype)
    this.start = function(){
      
      //don't do anything if already connected
      if(this.abortedBy === null){
        return this;
      }
      
      var that = this;
      this.abortedBy = null;
    
      var emitTweetCb = function(){
        var that = this;
        nextLoop(function(){
          //only send tweet if the stream hasn't been stopped
          if(that.abortedBy === null){
            //emit the tweet
            if(options.tweets[that.currentTweetIndex]){
              options.tweets[that.currentTweetIndex].$index = that.currentTweetIndex;
              that.emit('tweet',options.tweets[that.currentTweetIndex]);
              that.currentTweetIndex++;
            }
            //case we are at the end of the tweets
            if(that.currentTweetIndex >= options.tweets.length){
              //in singleRun restart from 0
              if(options.singleRun === false){
                that.currentTweetIndex = 0;
              }
              else{
                that._twitterDisconnect();
                return false;//dont recall the callback for the next tick
              }
            }
            emitTweetCb.call(that);
          }
        },1*options.tweetDelay);
      };
      
      nextLoop(function(){
        that.emit('connect');
      },0);
      nextLoop(function(){
        that.emit('connected');
      },1*options.tweetDelay);
      nextLoop(function(){
        emitTweetCb.call(that);
      },2*options.tweetDelay);
      
      return this;
    };
    
    this.stop = function(){
      this.abortedBy = 'twit-client';
      return this;
    };
    
    this._twitterDisconnect = function(){
      this.abortedBy = 'twitter';
      this.emit('disconnect');
      return this;
    };
    
  }