         return true
     }
 
-    public func subscribe<S: StoreSubscriber>(_ subscriber: S)
+    open func subscribe<S: StoreSubscriber>(_ subscriber: S)
         where S.StoreSubscriberStateType == State {
             subscribe(subscriber, selector: nil)
     }
 
-    public func subscribe<SelectedState, S: StoreSubscriber>
+    open func subscribe<SelectedState, S: StoreSubscriber>
         (_ subscriber: S, selector: ((State) -> SelectedState)?)
         where S.StoreSubscriberStateType == SelectedState {
             if !_isNewSubscriber(subscriber: subscriber) { return }

        return action
    }

    public func dispatch(_ asyncActionCreatorProvider: @escaping AsyncActionCreator) {
        dispatch(asyncActionCreatorProvider, callback: nil)
    }

    public func dispatch(_ actionCreatorProvider: @escaping AsyncActionCreator,
                         callback: DispatchCallback?) {
        actionCreatorProvider(state, self) { actionProvider in
            let action = actionProvider(self.state, self)

    }

    @discardableResult
    open func dispatch(_ action: Action) -> Any {
        let returnValue = dispatchFunction(action)

        return returnValue
    }

    @discardableResult
    open func dispatch(_ actionCreatorProvider: @escaping ActionCreator) -> Any {
        let action = actionCreatorProvider(state, self)

        if let action = action {
