 # order to make that object bindable. It is applied by default to every
 # instance of Batman.Object and subclasses.
 Batman.Observable = {
+  initialize: ->
+    Batman._initializeObject @
+    @_batman.observers ||= {}
+    @_batman.preventCounts ||= {}
+  
   keypath: (string) ->
     new Batman.Keypath(@, string)
   

  # nest prevent counts, so three calls to prevent means you need to
  # make three calls to allow before you can fire observers again.
  prevent: (key) ->
    Batman._initializeObject @
    
    counts = @_batman.preventCounts ||= {}
    counts[key] ||= 0
    counts[key]++
    @

  # its removed. If no callback but a key is passed in, all the observers on
  # that key are removed. If no key is passed in, all observers are removed.
  forget: (key, callback) ->
    Batman.Observable.initialize.call @
    
    if key
      if callback
