         on: (name, callback, context) ->
             return this if (!eventsApi(this, 'on', name, [callback, context]) || !callback)
 
-            this._events || (this._events = {});
-            events = this._events[name] || (this._events[name] = []);
+            this._listeners || (this._listeners = {});
+            events = this._listeners[name] || (this._listeners[name] = []);
             events.push
                 callback: callback
                 context: context

        # callbacks for the event. If `name` is null, removes all bound
        # callbacks for all events.
        off: (name, callback, context) ->
            return this if (!this._events || !eventsApi(this, 'off', name, [callback, context]))

            if (!name && !callback && !context)
                this._events = undefined;
                return this;

            names = if name then [name] else Object.keys(this._events);

            for name, i in names
                if (events = this._events[name])
                    this._events[name] = retain = []
                    if (callback || context)
                        for ev, j in events
                            if ((callback && callback isnt ev.callback && callback isnt ev.callback._callback) || (context && context isnt ev.context))
                                retain.push ev

                    delete this._events[name] if (!retain.length)

            this


        delegate: ->
            delegateEvents(this.delegators, arguments) if this.delegators and this.delegators.size() > 0

            return this if (!this._listeners)

            event = arguments[arguments.length - 1]
            event.delegator = this
            
            listeners = this._listeners[event.name]
            listeners_for_all = this._listeners.all

            triggerEvents(listeners, arguments) if (listeners)
            triggerEvents(listeners_for_all, arguments) if (listeners_for_all)
            
            this

