     }
 
     public func isEmojiRepresentedByString(string: String) -> Bool {
-        return EmojiFetchOperation.emojiDictionary[string] != nil
+        return AllEmojiDictionary[string] != nil
     }
 }
 
 private final class EmojiFetchOperation: NSOperation {
-
-    static let allEmoji: [Emoji] = {
-        guard let path = NSBundle(forClass: EmojiFetchOperation.self).pathForResource("AllEmoji", ofType: "json"),
-            data = NSData(contentsOfFile: path),
-            jsonObject = try? NSJSONSerialization.JSONObjectWithData(data, options: []),
-            jsonDictionaries = jsonObject as? [JSONDictionary] else { return [] }
-
-        return jsonDictionaries.flatMap { Emoji(dictionary: $0) }
-    }()
-
-    static let emojiDictionary: [String: Emoji]  = {
-        var dictionary = Dictionary<String, Emoji>(minimumCapacity:EmojiFetchOperation.allEmoji.count)
-        EmojiFetchOperation.allEmoji.forEach {
-            dictionary[$0.character] = $0
-        }
-        return dictionary
-    }()
-
 
     // MARK: - Properties
 


            return validResult
        }
        guard !cancelled else { return }

        self.results = results
    }
}

    public func query(searchString: String, completion: ([Emoji] -> Void)) {
        cancelFetches()

        let operation = EmojiFetchOperation(searchString: searchString)

        operation.completionBlock = {

            if operation.cancelled {
                return;
            }

            dispatch_async(dispatch_get_main_queue()) {
                completion(operation.results)
            }
        }

        backgroundQueue.addOperation(operation)
    }

    public func cancelFetches() {
