 }
 
 /**
-    Async "Force Remote" Accessor for retreiving latest `Bool` setting for the given key.
+    Async "Force Remote" Accessor for retreiving the latest setting of generic type `T` for given key.
  
-    Calls `refresh`, then if successful `completion` block with the latest remote value will be called.
-    If there is no value for given key on remote it works same as normal accessors (cache, local, fallback).
-    If `refresh` fails it will return `fallback` value in `completion` block.
+    This method will first call `refresh` method after which it will evaluate its success.
  
-    - parameter key: Key for the settings.
-    - parameter fallback: Default value for this setting if refresh not successful.
+    If `refresh` was successful, it will call normal accessor of generic type `T` for given key,
+    which will by its priority order resolve to the latest remote value as a parameter inside `completion` handler.
  
-    - returns: Latest `Bool` setting after successful refresh, otherwise provided `fallback` value.
-*/
-public func ConfigBoolForce(key: String, fallback: Bool, completion: ((forced: Bool) -> Void)) {
+    If `refresh` fails, it will return provided `fallback` value as a parameter inside `completion` block.
+
+    - parameter key: Key for the setting.
+    - parameter fallback: Fallback value of generic type `T` if refresh is not successful.
+*/
+public func ConfigGenericForce<T>(key: String, fallback: T, completion: ((forced: T) -> Void)) {
     MissionControl.refresh({ (innerBlock) in
         do {
             let _ = try innerBlock()
-            completion(forced: ConfigBool(key, fallback: fallback))
-        } catch {
-           completion(forced: fallback)
-        }
-    })
-}
-
-/**
-     Accessor for retreiving `Int` setting for the given key.
-     
-     It will get to proper setting by following this order:
-     1. Remote setting from memory (from last refresh).
-     2. Remote setting from disk cache (if not online).
-     3. Local setting from disk (if provided in `localConfig`).
-     4. Given fallback value (if provided).
-     5. Default fallback value (0)
-     
-     - parameter key: Key for the setting.
-     - parameter fallback: Default value for this setting if not available from configs. Defaults to 0.
-     
-     - returns: `Int` setting for the given key.
-*/
-public func ConfigInt(key: String, fallback: Int = 0) -> Int {
-    if let remoteValue = ACMissionControl.sharedInstance.remoteConfig?[key] as? Int {
-        return remoteValue
-    } else if let cachedValue = ACMissionControl.sharedInstance.cachedConfig?[key] as? Int {
-        return cachedValue
-    } else if let localValue = ACMissionControl.sharedInstance.localConfig?[key] as? Int {
-        return localValue
-    } else {
-        return fallback
-    }
-}
-
-/**
-    Async "Force Remote" Accessor for retreiving latest `Int` setting for the given key.
-
-    Calls `refresh`, then if successful `completion` block with the latest remote value will be called.
-    If there is no value for given key on remote it works same as normal accessors (cache, local, fallback).
-    If `refresh` fails it will return `fallback` value in `completion` block.
-
-    - parameter key: Key for the settings.
-    - parameter fallback: Default value for this setting if refresh not successful.
-
-    - returns: Latest `Int` setting after successful refresh, otherwise provided `fallback` value.
-*/
-public func ConfigIntForce(key: String, fallback: Int, completion: ((forced: Int) -> Void)) {
-    MissionControl.refresh({ (innerBlock) in
-        do {
-            let _ = try innerBlock()
-            completion(forced: ConfigInt(key, fallback: fallback))
+            completion(forced: ConfigGeneric(key, fallback: fallback))
         } catch {
             completion(forced: fallback)
         }

// MARK: - Accessors

/**
    Accessor for retreiving `Bool` setting for the given key.
 
    It will get to proper setting by following this order:
    1. Remote setting from memory (from last refresh).
    2. Remote setting from disk cache (if not online).
    3. Local setting from disk (if provided in `localConfig`).
    4. Given fallback value (if provided).
    5. Default fallback value (false)

    - parameter key: Key for the setting.
    - parameter fallback: Default value for this setting if not available from configs. Defaults to false.

    - returns: `Bool` setting for the given key.
*/
public func ConfigBool(key: String, fallback: Bool = false) -> Bool {
    if let remoteValue = ACMissionControl.sharedInstance.remoteConfig?[key] as? Bool {
        return remoteValue
    } else if let cachedValue = ACMissionControl.sharedInstance.cachedConfig?[key] as? Bool {
        return cachedValue
    } else if let localValue = ACMissionControl.sharedInstance.localConfig?[key] as? Bool {
        return localValue
    } else {
        return fallback

        let cachedConfig = ACMissionControl.sharedInstance.cachedConfig
        let localConfig = ACMissionControl.sharedInstance.localConfig
        let emptyConfig = [String : AnyObject]()
        let resolvedConfig = remoteConfig ?? cachedConfig ?? localConfig ?? emptyConfig
        return resolvedConfig
    }
    
    /// Date of last successful refresh from remote.
