docs: function(options) {
      var self = this;
  
      self.setMaxListeners(0);
  
      self.options            = (typeof options != 'undefined') ? options : {};
      var loggerClass         = self.options.loggerClass || require('./modules/logger');
      self.logger             = new loggerClass(options);
      self.options.options    = self.options.options || {};
      self.options.connection = self.options.connection || {};
      self.debugDetails       = (self.options.options && (typeof self.options.options.debugDetails != 'undefined')) ? self.options.options.debugDetails : false;
      self.emitSelf           = (self.options.options && (typeof self.options.options.emitSelf != 'undefined')) ? self.options.options.emitSelf : false;
      self.reconnect          = (typeof self.options.connection.reconnect != 'undefined') ? self.options.connection.reconnect : true;
      self.stream             = stream.createStream({ parsePrefix: true }).on('data', this._handleMessage.bind(this));
      self.socket             = null;
      self.connected          = false;
      self.currentChannels    = [];
      self.lastPing           = new Date();
      self.latency            = new Date();
      self.moderators         = {};
      self.myself             = '';
      self.port               = 443;
      self.server             = 'irc.twitch.tv';
      self.twitchClient       = self.options.options.tc || 0;
      self.selfData           = {};
      self.userData           = {};
  
      self.gracefulReconnection = false;
  
      self.logger.dev('Created a new client instance on pid ' + process.pid);
      self.logger.dev('Memory rss: ' + process.memoryUsage().rss);
      self.logger.dev('Memory heap total: ' + process.memoryUsage().heapTotal);
      self.logger.dev('Memory heap used : ' + process.memoryUsage().heapUsed);
  
      var exitOnError = (self.options.options && (typeof self.options.options.exitOnError != 'undefined')) ? self.options.options.exitOnError : true;
  
      process.on('uncaughtException', function (err) {
          self.logger.crash(err.stack);
          self.emit('crash', err.message, err.stack);
          if (exitOnError) { process.exit(); }
      });
  
      // Making sure the client connection is still alive..
      setInterval(function() {
          if (self.connected) {
              if (((new Date()-self.lastPing)/1000) > 360) {
                  self.socket.forceDisconnect(false);
                  if (self.reconnect) { setTimeout(function() {self.connect();}, 2000); }
              }
          }
      }, 10000);
  
      events.call(self);
  }