   # 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 ||= {}
+    Batman.Observable.initialize.call @
+    
+    counts = @_batman.preventCounts
     counts[key] ||= 0
     counts[key]++
     @

  # Pass a key and a callback. Whenever the value for that key changes, your
  # callback will be called in the context of the original object.
  observe: (wholeKeypathString, fireImmediately, callback) ->
    Batman._initializeObject @
    @_batman.observers ||= {}
    
    if not callback
      callback = fireImmediately

  # Unblocks a property for firing observers. Every call to prevent
  # must have a matching call to allow.
  allow: (key) ->
    Batman.Observable.initialize.call @
    
    counts = @_batman.preventCounts
    counts[key]-- if counts[key] > 0
    @
  
  # Returns a boolean whether or not the property is currently allowed
  # to fire its observers.
  allowed: (key) ->
    Batman.Observable.initialize.call @
    !(@_batman.preventCounts?[key] > 0)
}

