         }
         
         /// Stored an entity in the pool
-        public func pool<M: Model>(_ instance: M, hash: Int? = nil) {
+        public func pool<M: Model>(_ instance: M) {
             objectPoolMutationLock.lock()
             defer { objectPoolMutationLock.unlock() }
             

            
            // Only pool it if the instance is not invalidated
            if !invalidatedObjectIds.contains(instance._id) {
                storage[instance._id] = (instance: Weak(instance), instantiation: Date(), hash: hash ?? storage[instance._id]?.hash /* existing hash fallback */)
            }
            
        }
        
        internal func existingHash(for instance: Model) -> Int? {
            objectPoolMutationLock.lock()
            defer { objectPoolMutationLock.unlock() }
            
            return storage[instance._id]?.hash
        }
        
        internal func updateHash(for instance: Model, with newHash: Int?) {
            objectPoolMutationLock.lock()
            defer { objectPoolMutationLock.unlock() }
            
            self.storage[instance._id]?.hash = newHash
        }
        
        /// Invalidates the given ObjectId. Called when removing an object

        private var objectPoolMutationLock = NSRecursiveLock()
        
        /// The internal storage that's used to hold metadata and references to objects
        internal private(set) var storage = [ObjectId: (instance: Weak<AnyObject>, instantiation: Date)](minimumCapacity: 1000)
        
        /// A set of entity's ObjectIds that are invalidated because they were removed
        private var invalidatedObjectIds = Set<ObjectId>()
