 
         AppEnvironment.current.settings.forumBundle.map { try? JSONDecoder().decode(ForumBundle.self, from: $0) }
             .combineLatest(AppEnvironment.current.settings.forumOrderV2.removeDuplicates())
-            .receive(on: DispatchQueue.main)
             .sink { [weak self] (bundle, order) in
                 guard let strongSelf = self else { return }
                 guard let bundle = bundle else { return }
-                let forums = order.compactMap { id in
-                    return bundle.forums.first(where: { forum in forum.id == id })
-                }
-
-                strongSelf.tabBarState.selectedID = nil
-                strongSelf.tabBarState.dataSource = forums
-                strongSelf.topicListViewController.reset()
+                ensureMainThread {
+                    let forums = order.compactMap { id in
+                        return bundle.forums.first(where: { forum in forum.id == id })
+                    }
+
+                    strongSelf.tabBarState.selectedID = nil
+                    strongSelf.tabBarState.dataSource = forums
+                    strongSelf.topicListViewController.reset()
+                }
             }
             .store(in: &bag)
 

                    strongSelf.pasteboardAnimator.addAnimations {
                        strongSelf.pasteboardToast.snp.remakeConstraints({ (make) in
                            make.height.equalTo(44.0)
                            make.top.equalTo(strongSelf.scrollTabbar.snp.top).offset(8.0)
                            make.leading.equalTo(strongSelf.view.snp.leading).offset(16.0)
                            make.trailing.equalTo(strongSelf.view.snp.trailing).offset(-16.0)
                        })

        self.view.insertSubview(current.view, at: 0) // child view controller's view should always be covered by tab bar.
        current.view.snp.makeConstraints { (make) in
            make.leading.trailing.top.equalTo(self.view)
            make.bottom.equalTo(self.scrollTabBar.snp.top)
        }
        current.didMove(toParent: self)

