 
   # Exposes the core binding routines that can be extended or stripped down.
   exports.binders = Rivets.binders
+
+  # Exposes the components object to be extended.
+  exports.components = Rivets.components
 
   # Exposes the formatters object to be extended.
   exports.formatters = Rivets.formatters

    @bindings = []
    skipNodes = []
    bindingRegExp = @bindingRegExp()

    buildBinding = (node, type, declaration) =>
      options = {}

                for token in restTokens
                  node.parentNode.appendChild (text = document.createTextNode token.value)
                  buildBinding text, 'textNode', token.value if token.type is 1
        else if componentRegExp.test node.tagName
          type = node.tagName.replace(componentRegExp, '').toLowerCase()

          if component = Rivets.components[type]
            attributes = {}
            inflections = {}

            for attribute in node.attributes or []
              if attribute.name in component.attributes
                attributes[attribute.name] = attribute.value
              else
                model = @models
                model = model[key] for key in attribute.value.split('.')
                inflections[attribute.name] = model

            el = component.build.call(attributes)

            models = {}
            models[key] = model for key, model of inflections
            models[key] ?= model for key, model of @models

            (view = new Rivets.View(el, models, @options)).bind()
            node.parentNode.replaceChild el, node
        else if node.attributes?
          for attribute in node.attributes
            if bindingRegExp.test attribute.name
