         opts.use ?= []
         opts.use = [opts.use] unless isArray opts.use
         @use(plugin) for plugin in opts.use
+        @registerQuery(@query) if @query?
 
     initialize: () ->
         do @listen

                @animation.push(newtag._browser.replace.call)

    ontext: (el, text) ->
        @animation.push prepare_cancelable_manip(el, yes).call =>
            @fn.text(el, text)

    onraw: (el, html) ->

    removePlaceholder: -> # create a dom object
        throw new Error "Adapter::removePlaceholder not defined."

    registerQuery: (query) ->
        old_query = @builder.query
        @builder.query = (type, tag, key) ->
            # use changes if they're not synced yet
            if Object.keys(tag._changes ? {}).indexOf(type) is -1
                query.call(this, type, tag, key, old_query)
            else if type is 'attr'
                tag._changes.attr[key]
            else
                tag._changes[type]

    # flow control : eventlisteners

    onadd: (parent, el) ->
