 	public func removeObjectForKey(key: String) {
 		cache.removeObjectForKey(key)
 		
-		dispatch_async(diskWriteQueue) {
+		dispatch_barrier_async(diskReadWriteQueue) {
 			let url = self.urlForKey(key)
             let _ = try? self.fileManager.removeItemAtURL(url)
 		}

        
        if possibleObject == nil {
            // Try to load object from disk (synchronously)
            dispatch_sync(diskReadQueue) {
                if let path = self.urlForKey(key).path where self.fileManager.fileExistsAtPath(path) {
                    possibleObject = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as? CacheObject
                }

	public func removeAllObjects(completion: (() -> Void)? = nil) {
		cache.removeAllObjects()
		
		dispatch_barrier_async(diskReadWriteQueue) {
            let keys = self.allKeys()
			
            for key in keys {
