 public class Strongbox {
     
     let keyPrefix: String?
+    
+    private let lock = NSLock()
+    
     public var lastStatus = errSecSuccess
     
     public init() {

     */
    @discardableResult
    public func remove(key: String, accessibility: CFString = kSecAttrAccessibleWhenUnlocked) -> Bool {
        let query = self.query()
        query[kSecAttrService] = hierarchicalKey(key)
        lastStatus = SecItemDelete(query)

    }
    
    private func data(forKey key:String) -> Data? {
        
        // The lock prevents the code to be run simultaneously
        // from multiple threads which may result in crashing
        lock.lock()
        defer { lock.unlock() }
        
        let hierKey = hierarchicalKey(key)
        let query = self.query()
        query.setObject(hierKey, forKey: kSecAttrService as! NSCopying)
