diff --git a/CustomModels/messagemodel.cpp b/CustomModels/messagemodel.cpp
index e5316b9e7b001d16d6878fe8e0818e71b360e991..a266eb0df0bf0fb285a6af80478aeaa744c7703d 100644
--- a/CustomModels/messagemodel.cpp
+++ b/CustomModels/messagemodel.cpp
@@ -182,6 +182,7 @@ void MessagesModel::setCurrent( const QString &value )
     if ( mChannelMap.contains( value ) ) {
         auto timestampIndex = mChannelMap[value]->getMessageRepo()->timestampIndex();
         duplicateCheck.clear();
+        messagesOfCurrentChannel.clear();
         messagesOfCurrentChannel.reserve( timestampIndex.size() );
 
         for ( auto it = timestampIndex.begin(); it != timestampIndex.end(); it++ ) {
diff --git a/repos/entities/rocketchatchannel.cpp b/repos/entities/rocketchatchannel.cpp
index 61b728c69a64255541e68f0e6f4b47e8bc58ecb9..dd2cbe477f35f89f4fe6f06bbd3403389927e2bb 100755
--- a/repos/entities/rocketchatchannel.cpp
+++ b/repos/entities/rocketchatchannel.cpp
@@ -154,7 +154,7 @@ MessageRepository *RocketChatChannel::getMessageRepo()
     return &mMessages;
 }
 
-void RocketChatChannel::addMessages( const QList<QSharedPointer<RocketChatMessage>> &messagesList )
+QList<QSharedPointer<RocketChatMessage>> RocketChatChannel::addMessages( const QList<QSharedPointer<RocketChatMessage>> &messagesList )
 {
     QList<QSharedPointer<RocketChatMessage>> newMessages;
 
@@ -165,8 +165,10 @@ void RocketChatChannel::addMessages( const QList<QSharedPointer<RocketChatMessag
             }
         }
     }
-
-    emit messageAdded( getRoomId(), 0 );
+    if(newMessages.count()){
+        emit messageAdded( getRoomId(), 0 );
+    }
+    return newMessages;
 }
 
 bool RocketChatChannel::getJoined() const
@@ -340,7 +342,6 @@ QStringList RocketChatChannel::whiteList(const QList<QString> ids, const qint64
     blacklist = buffer.toSet();
     for(QString id : blacklist){
         mMessages.remove(id);
-        emit messageDeleted(getRoomId(),id);
     }
     return blacklist.toList();
 }
@@ -350,6 +351,7 @@ void RocketChatChannel::deleteMessage(const QString id)
     emit messageDeleted(getRoomId(),id);
     if(mMessages.contains(id)){
         mMessages.remove(id);
+
     }
 
 }
diff --git a/repos/entities/rocketchatchannel.h b/repos/entities/rocketchatchannel.h
index d5fbc27301b14833fb7b328885c29b7a4defdf4b..9d26245a8d47cc528e9b0f4edd54b7a8d1308f98 100755
--- a/repos/entities/rocketchatchannel.h
+++ b/repos/entities/rocketchatchannel.h
@@ -73,7 +73,7 @@ class RocketChatChannel : public QObject
         void setJoined( bool pValue );
         void setUnreadMessages( unsigned int pValue );
         bool addUser( const QSharedPointer<RocketChatUser> &pUser );
-        void addMessages( const QList<QSharedPointer<RocketChatMessage>> &pMessagesList );
+        QList<QSharedPointer<RocketChatMessage>> addMessages( const QList<QSharedPointer<RocketChatMessage>> &pMessagesList );
 
         const QHash<QString, QSharedPointer< RocketChatMessage >> &getMessages() const;
         const QString &getRoomId() const;
@@ -151,7 +151,7 @@ class RocketChatChannel : public QObject
         bool mSelfMuted = false;
     signals:
         void messageListReceived( const QString &pChannelId, const QList<ChatMessage> &pMessages );
-        void messageAdded( const QString &id, qint64 timestamp );
+        QList<QSharedPointer<RocketChatMessage>> messageAdded( const QString &id, qint64 timestamp );
         void unreadMessagesChanged( const QString &id, int number );
         void channelDeleted( const QString &pId, bool deleted );
         void dataChanged( const QString &id, const QString &property );
diff --git a/repos/messagerepository.cpp b/repos/messagerepository.cpp
index f733971296b21cf1fa0d00815977723d64493cc7..1c88b4c61d4b2d4157ad12c5bfbd3c880da64bd6 100755
--- a/repos/messagerepository.cpp
+++ b/repos/messagerepository.cpp
@@ -71,6 +71,13 @@ const ChatMessage &MessageRepository::oldest() const
 
 }
 
+void MessageRepository::remove(QString id)
+{
+    auto timestamp = mElements[id]->getTimestamp();
+    AbstractBaseRepository::remove(id);
+    mTimestampIndex.remove(timestamp);
+}
+
 
 QVector<QSharedPointer<RocketChatMessage> > MessageRepository::messagesAsObjects()
 {
diff --git a/repos/messagerepository.h b/repos/messagerepository.h
index 9e47380ae887160e61992c604a10acd1faa34ac3..dea4e2a801708f42a39e011e72ce3532fee8d8e1 100755
--- a/repos/messagerepository.h
+++ b/repos/messagerepository.h
@@ -41,6 +41,7 @@ class MessageRepository : public QObject, public AbstractBaseRepository<RocketCh
         const ChatMessage &youngest() const;
         ChatMessage oldest();
         const ChatMessage &oldest() const;
+        void remove(QString id);
         QVector<QSharedPointer<RocketChatMessage> > messagesAsObjects();
         bool add( const QString &pId, const ChatMessage & );
         const QMap<qint64, QSharedPointer<RocketChatMessage> > &timestampIndex() const;
diff --git a/rocketchatserver.cpp b/rocketchatserver.cpp
index 5e0506fbd6c8a65469f00dd068e94a34726e710e..094f8a0c492037b39791592120b8e5203d76e75e 100755
--- a/rocketchatserver.cpp
+++ b/rocketchatserver.cpp
@@ -58,9 +58,10 @@ void RocketChatServerData::initConnections()
                 if ( Q_LIKELY( mChannels->contains( it.key() ) && !mChannels->get( it.key() ).isNull() ) ) {
                     MessageList messageList = messages->values( it.key() );
                     auto channel = mChannels->get( it.key() );
-                    channel->addMessages( messageList );
+                    QList<QSharedPointer<RocketChatMessage>> newones = channel->addMessages( messageList );
                     mMessageService->deleteMessagesNotInList(messages, it.key(),true);
-                    mMessageService->persistMessages( messageList );
+                    if(newones.count())
+                        mMessageService->persistMessages( newones );
                 }
             }
             mStorage->askForcommit();
diff --git a/services/messageservice.cpp b/services/messageservice.cpp
index 2f626a11ba980a95339de5626332db50d5aa3295..7e95daf228e560269b5bd5f40900a93c26326cbc 100644
--- a/services/messageservice.cpp
+++ b/services/messageservice.cpp
@@ -309,18 +309,10 @@ void MessageService::loadHistoryFromServer( const QSharedPointer<LoadHistoryRequ
                                 QJsonArray messages  = result[QStringLiteral( "messages" )].toArray();
 
                                 for ( auto currentMessage : messages ) {
-                                    RocketChatMessage message( currentMessage.toObject() );
-                                    bool newMessage = true;
-
-                                    if ( mServer->getChannels()->contains( message.getRoomId() ) ) {
-                                        auto channel = mServer->getChannels()->get( message.getRoomId() );
-                                        newMessage = !channel->getMessageRepo()->contains( message.getId() );
-                                    }
 
                                     auto messageObject = parseMessage( currentMessage.toObject(), true );
 
-                                    if ( !messageObject.isNull() && !duplicateCheck->contains( messageObject->getId() )
-                                            && newMessage ) {
+                                    if ( !messageObject.isNull() && !duplicateCheck->contains( messageObject->getId() )) {
                                         list->insert( messageObject->getRoomId(), messageObject );
                                         duplicateCheck->insert( messageObject->getId() );
                                     }