         cache.setObject(cacheObject, forKey: key)
         
         // Write object to disk (asyncronously)
-        dispatch_async(diskWriteQueue) {
+        dispatch_barrier_async(diskReadWriteQueue) {
             if let path = self.urlForKey(key).path {
                 NSKeyedArchiver.archiveRootObject(cacheObject, toFile: path)
             }

	
	internal let cache = NSCache() // marked internal for testing
	private let fileManager = NSFileManager()
	private let diskWriteQueue: dispatch_queue_t = dispatch_queue_create("com.aschuch.cache.diskWriteQueue", DISPATCH_QUEUE_SERIAL)
	private let diskReadQueue: dispatch_queue_t = dispatch_queue_create("com.aschuch.cache.diskReadQueue", DISPATCH_QUEUE_SERIAL)
    
    /// Typealias to define the reusability in declaration of the closures.
    public typealias CacheBlockClosure = (T, CacheExpiry) -> Void

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