       _.each @regions, (region) ->
         region.close()
 
+      @off() # Remove all event listeners
       @remove()
       @unbind()
-      cleanObject()
+      dispose(@)
       return @

  Backbone = require('backbone')
  settings = require('cs!settings')

  cleanObject = (obj) ->
    delete obj[key] for key of obj

  class Region

    initialize: () ->
      @regions = new Regions(@regions, @)

    renderDom: () ->
      @$el?.html(@getTemplate())

    # Update page title
    updateTitle: () ->
      document.title = settings.titlePrefix + @pageTitle if @pageTitle

    getTemplate: () -> @template?(@getTemplateData()) or @template

    getTemplateData: () ->
      data = @model?.toJSON() or @collection?.toJSON() or {}

      if typeof @templateHelpers is 'function'
