     }
     
     public func stop() {
+        removeSessionStateObserver()
         removeRiotSettingsObserver()
         removeAllDelegates()
         allFetchers.forEach({ $0.stop() })
+        
+        invitedRoomListDataFetcher = nil
+        favoritedRoomListDataFetcher = nil
+        directRoomListDataFetcherForHome = nil
+        directRoomListDataFetcherForPeople = nil
+        conversationRoomListDataFetcherForHome = nil
+        conversationRoomListDataFetcherForRooms = nil
+        lowPriorityRoomListDataFetcher = nil
+        serverNoticeRoomListDataFetcher = nil
+        suggestedRoomListDataFetcher = nil
     }
     
     //  MARK: - Delegate

        lowPriorityRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.lowPriority])
        serverNoticeRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.serverNotice])
        suggestedRoomListDataFetcher = createCommonRoomListDataFetcher(onlySuggested: true)
    }
    
    private func updateDirectFetcher(_ fetcher: MXRoomListDataFetcher, for mode: RecentsDataSourceMode) {

    }
    
    private func createFetchers() {
        guard fetchersCreated == false else {
            removeSessionStateObserver()
            return
        }
        guard let session = session else {
            return
        }
        guard session.isEventStreamInitialised else {
            return
        }
        if !hideInvitedSection {
            invitedRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.invited])
        }
