     /// Adds the resources in data to the pool if needed
     private static func pool(_ json: [JSONObject]) {
         
-        for data in json {
-            if let type = data[Key.type] as? String {
-                if let typePool = Treasure.privateDataPool[type] as? [JSONObject] {
-                    
-                    if let index = typePool.index(where: { (typeData) -> Bool in
-                        if let lhs = typeData[Key.id] as? String, let rhs = data[Key.id] as? String {
-                            return lhs == rhs
+        Treasure.concurrentPoolQueue.async(flags: .barrier) {
+            for data in json {
+                if let type = data[Key.type] as? String {
+                    if let typePool = Treasure.privateDataPool[type] as? [JSONObject] {
+                        
+                        if let index = typePool.index(where: { (typeData) -> Bool in
+                            if let lhs = typeData[Key.id] as? String, let rhs = data[Key.id] as? String {
+                                return lhs == rhs
+                            }
+                            return false
+                        }) {
+                            var currentPool = typePool
+                            let newData = Treasure.replace(currentPool.remove(at: index), with: data)
+                            currentPool.insert(newData, at: index)
+                            Treasure.privateDataPool[type] = currentPool
+                        } else {
+                            var currentPool = typePool
+                            currentPool.append(data)
+                            Treasure.privateDataPool[type] = currentPool
                         }
-                        return false
-                    }) {
-                        var currentPool = typePool
-                        let newData = Treasure.replace(currentPool.remove(at: index), with: data)
-                        currentPool.insert(newData, at: index)
-                        Treasure.privateDataPool[type] = currentPool
+                        
                     } else {
-                        var currentPool = typePool
-                        currentPool.append(data)
-                        Treasure.privateDataPool[type] = currentPool
+                        Treasure.privateDataPool[type] = [data]
                     }
-                    
-                } else {
-                    Treasure.privateDataPool[type] = [data] 
                 }
             }
         }

    
    private static var privateDataPool = JSONObject()
    
    private func initialize() {
        poolData()
    }
    
    private func poolData() {
        
        //Pool top-level data
        if let data = json[Key.data] as? JSONObject {
            Treasure.pool([data])
        } else if let data = json[Key.data] as? [JSONObject] {
            Treasure.pool(data)
        }
        
        //Pool included data
        if let includedData = json[Key.included] as? [JSONObject] {
            Treasure.pool(includedData)
        }
    }

    
    /// The shared data pool of resources for the current lifecycle
    public static var chest: JSONObject {
        var poolCopy: JSONObject!
        
        Treasure.concurrentPoolQueue.sync {
            poolCopy = Treasure.privateDataPool
        }
        
        return poolCopy
    }
    
    /// The full json object received on initialization
