         throw new Error invalid unless correct
         throw new Error abstract if node.abstract()
         exists = _.find @children or [], isEqual
+        @emit "prepend", this, node unless exists?
         (@children ?= []).unshift node unless exists
 
     # Append the supplied node to the array of children nodes of

        return @$prefix unless prefix?
        invalid = "Prefix is not a string"
        throw new Error invalid unless correct
        @emit("prefix", this, @$prefix, prefix)
        @$prefix = prefix.toString()

    # Resolve the specific node by its tag. The method is recursive

        throw new Error invalid unless correct
        throw new Error abstract if node.abstract()
        index = _.findIndex @children or [], isEqual
        @emit "remove", this, node, index if index?
        (@children ?= []).splice index, 1 if index?

    # Prepend the supplied node to the array of children nodes of
