             key # this should be a tag
 
     register: (type, checker) ->
-        unless type is 'new' or type is 'end'
-            throw new Error "only type 'new' or 'end' allowed."
+        unless type is 'new' or type is 'end' or type is 'ready'
+            throw new Error "only type 'ready', 'new' or 'end' allowed."
         @checkers[type] ?= []
         @checkers[type].push checker
 
     approve: (type, parent, tag, callback) ->
         checkers = @checkers[type]?.slice?() ? []
-
-        if type is 'new'
-            next = (tag) ->
-                checker = checkers.shift() ? callback
-                checker(parent, tag, next)
-
-        else if type is 'end'
-            [callback, tag] = [tag, parent] # shift arguments
-            next = (tag) ->
-                checker = checkers.shift() ? callback
-                checker(tag, next)
-        else
-            throw new Error "type '#{type}' not supported."
+        switch type
+            when 'new'
+                next = (tag) ->
+                    checker = checkers.shift() ? callback
+                    checker(parent, tag, next)
+
+            when 'ready', 'end'
+                [callback, tag] = [tag, parent] # shift arguments
+                next = (tag) ->
+                    checker = checkers.shift() ? callback
+                    checker(tag, next)
+            else
+                throw new Error "type '#{type}' not supported."
         # start
         next(tag)
 

            @closed = yes
        this

    # intern getter to let intern tag structure stay in sync with eg dom
    query: (type, tag, key) ->
        if type is 'attr'

        @emit 'remove', this
        this

    ready: (callback) =>
        return callback?.call(this) if @isready
        @once 'ready', callback


class Builder extends EventEmitter
