   ProtoViews: {}
   Views: {}
 
+  preventMultibind: true
   warnOnMultibind: true
-  preventMultibind: true
   groupBindingLog: true
 
   viewInstances: null
 
   viewsManagementInitialize: ->
     @viewInstances = []
+    @warnOnMultibind = DEBUG_MODE and @warnOnMultibind
     @on 'start', @viewsManagementStart, @
     @on 'stop', @viewsManagementStop, @
     return

  bindViews: ($root = $('html'), checkRoot = true) ->
    if @groupBindingLog
      console?.groupCollapsed? 'bindViews on', $root
    boundViews = []
    sortedViews = _.sortBy(_.pairs(@Views), (p) -> -p[1].priority or 0)
    for [viewName, viewClass] in sortedViews when viewClass::el
      if checkRoot
        @_bindViews boundViews, $root.filter(viewClass::el), viewClass, viewName
      @_bindViews boundViews, $root.find(viewClass::el), viewClass, viewName
    if @groupBindingLog
      console?.groupEnd?()
    boundViews

  _bindViews: (boundViews, $elements, viewClass, viewName) ->
    $elements.each (index, el) =>
      if view = @bindView(el, viewClass, viewName)
        boundViews.push view
    return

  bindView: (element, viewClass, viewName) ->
    if @canBind(element, viewClass)
      view = new viewClass(el: element)
      if viewName and not viewClass.silent
        cout 'info', "Bound view #{viewName}:", view
      @viewInstances.push view
      view

  canBind: (element, viewClass) ->
    if @warnOnMultibind or @preventMultibind
      views = @getViewsOnElement(element)
      l = views.length
      if l > 0

      view.undelegateEvents()
      view.leave context
    @viewInstances = _.without(@viewInstances, views...)
    if DEBUG_MODE
      cout 'info', @_plurMessage('Unbound %count% view%s%:', views.length), views
    return

  getViewsOnElement: (element) ->
