 
 extension Options {
 
-    func query() -> [String: Any] {
+    func query(exactly: Bool = false) -> [String: Any] {
         var query = [String: Any]()
 
         query[Class] = itemClass.rawValue
-        query[AttributeSynchronizable] = attributes[AttributeSynchronizable] ?? SynchronizableAny
         if let accessGroup = self.accessGroup {
             query[AttributeAccessGroup] = accessGroup
+        }
+        if exactly {
+            query[AttributeSynchronizable] = attributes[AttributeSynchronizable] ?? SynchronizableAny
+        } else {
+            query[AttributeSynchronizable] = SynchronizableAny
         }
 
         switch itemClass {

    }

    public func getData(_ key: String) throws -> Data? {
        var query = options.query()

        query[MatchLimit] = MatchLimitOne
        query[ReturnData] = kCFBooleanTrue

    // MARK:

    public func get(_ key: String) throws -> String? {
        return try getString(key, exactly: false)
    }

    public func get(exactly key: String) throws -> String? {
        return try getString(key, exactly: true)
    }

    public func getString(_ key: String) throws -> String? {
        return try getString(key, exactly: false)
    }

    public func getString(exactly key: String) throws -> String? {
        return try getString(key, exactly: true)
    }

    private func getString(_ key: String, exactly: Bool = false) throws -> String? {
        guard let data = try getData(key, exactly: exactly) else  {
            return nil
        }
        guard let string = String(data: data, encoding: .utf8) else {
