         delegate: ->
             delegateEvents(this.delegators, arguments) if this.delegators and this.delegators.size() > 0
 
-            return this if (!this._events)
+            return this if (!this._listeners)
 
             event = arguments[arguments.length - 1]
+            event.delegator = this
             
-            events = this._events[event.name]
-            allEvents = this._events.all
+            listeners = this._listeners[event.name]
+            listeners_for_all = this._listeners.all
 
-            triggerEvents(events, arguments) if (events)
-            triggerEvents(allEvents, arguments) if (allEvents)
+            triggerEvents(listeners, arguments) if (listeners)
+            triggerEvents(listeners_for_all, arguments) if (listeners_for_all)
             
             this
 

        # 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



            delegateEvents(this.delegators, args) if this.delegators and this.delegators.size() > 0
            
            return this if not this._listeners

            return this if (!eventsApi(this, 'trigger', name, args))

            listeners = this._listeners[name]
            listeners_for_all = this._listeners.all

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

