diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js
index 53bfbe438e5792fd65cdd0b4c4597d5f1fc7b999..552a474b59776bed254da8d58b17dd6b036769e8 100644
--- a/app/lib/rocketchat.js
+++ b/app/lib/rocketchat.js
@@ -53,7 +53,12 @@ const STATUSES = ['offline', 'online', 'away', 'busy'];
 
 const RocketChat = {
 	TOKEN_KEY,
-	subscribeRooms,
+	async subscribeRooms() {
+		if (this.roomsSub) {
+			this.roomsSub.stop();
+		}
+		this.roomsSub = await subscribeRooms.call(this);
+	},
 	subscribeRoom,
 	canOpenRoom,
 	createChannel({
diff --git a/app/sagas/rooms.js b/app/sagas/rooms.js
index 082c633f02b2708ae4edbeeff5ec359058c7bcc3..19f2e2e6f2f3ec5a7608b8df6325d88a43531b0e 100644
--- a/app/sagas/rooms.js
+++ b/app/sagas/rooms.js
@@ -1,5 +1,5 @@
 import {
-	put, select, race, take, fork, cancel, takeLatest, delay
+	put, select, race, take, fork, cancel, delay
 } from 'redux-saga/effects';
 import { BACKGROUND, INACTIVE } from 'redux-enhancer-react-native-appstate';
 
@@ -10,18 +10,9 @@ import log from '../utils/log';
 import mergeSubscriptionsRooms from '../lib/methods/helpers/mergeSubscriptionsRooms';
 import RocketChat from '../lib/rocketchat';
 
-let roomsSub;
-
-const removeSub = function removeSub() {
-	if (roomsSub && roomsSub.stop) {
-		roomsSub.stop();
-	}
-};
-
 const handleRoomsRequest = function* handleRoomsRequest() {
 	try {
-		removeSub();
-		roomsSub = yield RocketChat.subscribeRooms();
+		yield RocketChat.subscribeRooms();
 		const newRoomsUpdatedAt = new Date();
 		const server = yield select(state => state.server.server);
 		const [serverRecord] = database.databases.serversDB.objects('servers').filtered('id = $0', server);
@@ -53,12 +44,7 @@ const handleRoomsRequest = function* handleRoomsRequest() {
 	}
 };
 
-const handleLogout = function handleLogout() {
-	removeSub();
-};
-
 const root = function* root() {
-	yield takeLatest(types.LOGOUT, handleLogout);
 	while (true) {
 		const params = yield take(types.ROOMS.REQUEST);
 		const isAuthenticated = yield select(state => state.login.isAuthenticated);