diff --git a/src/libclient/messagelistmodel.cpp b/src/libclient/messagelistmodel.cpp
index 614153bcbaf1ca573b767b1dda8ea6ff3822a3e1..b1a2c2528c44a431bffa8cb30dde5a9f26df41a1 100644
--- a/src/libclient/messagelistmodel.cpp
+++ b/src/libclient/messagelistmodel.cpp
@@ -297,12 +297,8 @@ MessageListModel::moveMessage(const QString& msgId, const QString& parentId)
     if (currentIndex == newIndex || newIndex == -1)
         return;
 
-    moveMessage(currentIndex, newIndex);
-
-    // move a child message
-    if (!childMessageIdToMove.isEmpty()) {
-        moveMessage(childMessageIdToMove, msgId);
-    }
+    // Pretty every messages is moved
+    moveMessages(currentIndex, interactions_.size() - 1, newIndex);
 }
 
 void
@@ -351,11 +347,23 @@ MessageListModel::removeMessage(int index, iterator it)
 }
 
 void
-MessageListModel::moveMessage(int from, int to)
+MessageListModel::moveMessages(int from, int last, int to)
 {
-    Q_EMIT beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
-    interactions_.move(from, to);
-    Q_EMIT endMoveRows();
+    auto resetModel = (from <= 2 && last == interactions_.size() - 1);
+    if (last < from)
+        return;
+    if (resetModel) {
+        Q_EMIT beginResetModel();
+    } else {
+        Q_EMIT beginMoveRows(QModelIndex(), from, last, QModelIndex(), to);
+    }
+    for (int i = 0; i < (last - from); ++i)
+        interactions_.move(last, to);
+    if (resetModel) {
+        Q_EMIT endResetModel();
+    } else {
+        Q_EMIT endMoveRows();
+    }
 }
 
 bool
diff --git a/src/libclient/messagelistmodel.h b/src/libclient/messagelistmodel.h
index a32a756cb4d3f2a5138a17e62ec0b9b6c675de25..b79b2eefa94247b041627a4f2be5ccc196e8369f 100644
--- a/src/libclient/messagelistmodel.h
+++ b/src/libclient/messagelistmodel.h
@@ -171,7 +171,7 @@ private:
     void insertMessage(int index, item_t& message);
     iterator insertMessage(iterator it, item_t& message);
     void removeMessage(int index, iterator it);
-    void moveMessage(int from, int to);
+    void moveMessages(int from, int last, int to);
 
     QTimer* timestampTimer_ {nullptr};
 };