           @settings[flag] = $.extend {}, $.fn.atWho.default, settings
         else
           @settings[flag] = $.extend {}, @settings[flag], settings
+        this.setup_callback_methods_for(flag)
         this
+
+      setup_callback_methods_for: (flag) ->
+        @callbacks[flag] = $.extend {}, DEFAULT_CALLBACKS, this.get_opt("callbacks", {})
+
+      callbacks: (flag) ->
+        @callbacks[flag]
 
       get_opt: (key, default) ->
         try

        @$inputor = $(inputor)
        @mirror = new Mirror(@$inputor)
        @view = new View(this, @$el)
        this.setup_callback_methods()
        this.listen()

      setup_callback_methods: ->
        @callbacks = $.extend {}, DEFAULT_CALLBACKS, this.get_opt("callbacks", {})

      listen: ->
        @$inputor

            q: query.text
            limit: this.get_opt("limit")
          callback = $.proxy(this.render_view, this
          this.callbacks('remote_filter').call(this, params, callback))
        else if (data = this.callbacks('filter').call(this, query.text, origin_data, search_query)
            this.render_view data
        else
            @view.hide()
