diff --git a/rocketchat.cpp b/rocketchat.cpp
index 9f2d3eec2b877b314b924f39b62eb11a1ca50d47..a1e6283553c7dda8807fac42e12a7b68767c8ebe 100755
--- a/rocketchat.cpp
+++ b/rocketchat.cpp
@@ -301,6 +301,11 @@ void RocketChat::deleteMessage(QString rid, QString id)
     QMetaObject::invokeMethod( mServerMap.first(), "deleteMessage", Q_ARG( QString, rid ),Q_ARG( QString, id ) );
 }
 
+void RocketChat::resetConnection(void)
+{
+    QMetaObject::invokeMethod( mServerMap.first(), "reconnect" );
+}
+
 bool RocketChat::newServerByDomain( const QString &domain, bool pUnsecure = false )
 {
     newServerMutex.lock();
@@ -724,7 +729,7 @@ void RocketChat::serverReadySlot()
     connect( pServer, &RocketChatServerData::newLoginMethod, this, &RocketChat::addLoginMethod, Qt::UniqueConnection );
     connect( pServer, &RocketChatServerData::resetLoginMethods, this, &RocketChat::resetLoginMethods, Qt::UniqueConnection );
     connect( pServer, &RocketChatServerData::offlineMode, this, &RocketChat::offlineMode, Qt::UniqueConnection );
-
+    connect( pServer, &RocketChatServerData::offline, this, &RocketChat::offline, Qt::UniqueConnection );
     connect( pServer, &RocketChatServerData::loggingIn, this, &RocketChat::loggingIn, Qt::UniqueConnection );
 
     connect( pServer, &RocketChatServerData::userStatusChanged, [ = ]( int pStatus ) {
diff --git a/rocketchat.h b/rocketchat.h
index c22d0ddbfbec6621054eb76899d1be5c13713926..0019960a2cb89b15a763808373ddbfd6961914c4 100755
--- a/rocketchat.h
+++ b/rocketchat.h
@@ -139,6 +139,7 @@ class RocketChat : public QObject
         Q_INVOKABLE void clearWebViewCookies();
 
         Q_INVOKABLE void deleteMessage(QString rid,QString id);
+        Q_INVOKABLE void resetConnection(void);
 
         void registerServer( RocketChatServerData *pServer );
 
diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp
index da76258007fca7819cf3d534adb555a49541cd4c..463d00be94b13f62bf85f3f125dac7b72d32aaa7 100755
--- a/rocketchatserver.cpp
+++ b/rocketchatserver.cpp
@@ -506,6 +506,7 @@ void RocketChatServerData::setUserId( const QString &userId )
 void RocketChatServerData::disconnectFromServer()
 {
     mConnectionState = ConnectionState::OFFLINE;
+    emit offline();
     mDdpApi->disconnectFromServer();
 }
 
@@ -617,6 +618,12 @@ void RocketChatServerData::wipeDbAndReconnect()
     resume();
 }
 
+void RocketChatServerData::reconnect()
+{
+    disconnectFromServer();;
+    resume();
+}
+
 void RocketChatServerData::deleteMessage(QString rid, QString id)
 {
     QJsonArray params = { QJsonObject({{"_id", id }})};
@@ -980,6 +987,11 @@ void RocketChatServerData::onDDPConnected()
     mDdpApi->sendRequest( request );
 
     if ( mResumeOperation ) {
+        auto token = mDdpApi->getToken();
+        if(token.isEmpty()){
+            auto dbtoken = mStorage->getToken().first;
+            mDdpApi->setToken(dbtoken);
+        }
         loginWithToken( mUsername, mDdpApi->getToken(), true );
     } else {
         QPair<QString, uint> tokenDb = mStorage->getToken();
@@ -1003,6 +1015,7 @@ void RocketChatServerData::onDDPConnected()
 void RocketChatServerData::onDDPDisonnected()
 {
     mConnectionState = ConnectionState::OFFLINE;
+    emit offline();
 }
 
 void RocketChatServerData::onDDPAuthenticated()
diff --git a/rocketchatserver.h b/rocketchatserver.h
index 941da38810f47f2c437ea7f00b771492fe0cd2db..41b9fcac5a4366235427dcc811f3d57be5f20215 100755
--- a/rocketchatserver.h
+++ b/rocketchatserver.h
@@ -215,7 +215,7 @@ class RocketChatServerData : public MessageListener
 
         void getSetting( const QString &pKey );
         void deleteMessage(QString rid, QString id);
-
+        void reconnect();
 
     public:
         QString getServerId() const;
@@ -338,6 +338,7 @@ class RocketChatServerData : public MessageListener
         void userStatusChanged( int status );
         void videoPath( const QString &path );
         void setting( const QString &pKey, const QString &pValue );
+        void offline(void);
 
         // MessageListener interface
     public: