             }
     }
 
-    public func unsubscribe(_ subscriber: AnyStoreSubscriber) {
+    open func unsubscribe(_ subscriber: AnyStoreSubscriber) {
         if let index = subscriptions.index(where: { return $0.subscriber === subscriber }) {
             subscriptions.remove(at: index)
         }
     }
 
-    public func _defaultDispatch(action: Action) -> Any {
+    open func _defaultDispatch(action: Action) -> Any {
         guard !isDispatching else {
             raiseFatalError(
                 "ReSwift:IllegalDispatchFromReducer - Reducers may not dispatch actions.")

        return true
    }

    public func subscribe<S: StoreSubscriber>(_ subscriber: S)
        where S.StoreSubscriberStateType == State {
            subscribe(subscriber, selector: nil)
    }

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

    }

    @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 {
