   $extendsEnumerable(@::)
   propertyClass: Batman.Property
   hasKey: (key) ->
-    if pairs = @_storage[key]
+    if pairs = @_storage[@hashKeyFor(key)]
       for pair in pairs
         return true if @equality(pair[0], key)
     return false
   get: (key) ->
-    if pairs = @_storage[key]
+    if pairs = @_storage[@hashKeyFor(key)]
       for pair in pairs
         return pair[1] if @equality(pair[0], key)
   set: (key, val) ->
-    pairs = @_storage[key] ||= []
+    pairs = @_storage[@hashKeyFor(key)] ||= []
     for pair in pairs
       if @equality(pair[0], key)
         return pair[1] = val


  isEqual: (other) ->
    @constructor is other.constructor and @base is other.base and @key is other.key

  accessor: ->
    accessors = @base._batman?.get('keyAccessors')

  # Apply mixins to instances of this class.
  @mixin: -> @classMixin.apply @prototype, arguments
  mixin: @classMixin
  
  counter = 0
  _objectID: ->
    @_objectID = -> c
    c = counter++
  
  hashKey: ->
    return if typeof @isEqual is 'function'
    @hashKey = -> key
    key = "<Batman.Object #{@_objectID()}>"
  

  # Accessor implementation. Accessors are used to create properties on a class or prototype which can be fetched
  # with get, but are computed instead of just stored. This is a batman and old browser friendly version of
