     this
 
   one: (ev, callback) ->
-    @bind ev, ->
-      @unbind(ev, arguments.callee)
+    @bind ev, handler = ->
+      @unbind(ev, handler)
       callback.apply(this, arguments)
 
   trigger: (args...) ->

    this

  one: (events, callback) ->
    @bind events, =>
      @unbind(events, arguments.callee)
      callback.apply(this, arguments)

  trigger: (args...) ->

  listenToOnce: (obj, events, callback) ->
    listeningToOnce = @listeningToOnce or= []
    listeningToOnce.push obj
    obj.bind events, handler = =>
      idx = listeningToOnce.indexOf(obj)
      listeningToOnce.splice(idx, 1) unless idx is -1
      obj.unbind(events, handler)
      callback.apply(obj, arguments)

  stopListening: (obj, events, callback) ->
