diff --git a/resources/icons/save_file.svg b/resources/icons/save_file.svg
index 9c84d19ae0eed1478e823993ebc78fcbc79281ae..4fcc1f87d5a2b3cd5d21b2eca1fcf2ab690afd8d 100644
--- a/resources/icons/save_file.svg
+++ b/resources/icons/save_file.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M42 13.85V39q0 1.2-.9 2.1-.9.9-2.1.9H9q-1.2 0-2.1-.9Q6 40.2 6 39V9q0-1.2.9-2.1Q7.8 6 9 6h25.15Zm-3 1.35L32.8 9H9v30h30ZM24 35.75q2.15 0 3.675-1.525T29.2 30.55q0-2.15-1.525-3.675T24 25.35q-2.15 0-3.675 1.525T18.8 30.55q0 2.15 1.525 3.675T24 35.75ZM11.65 18.8h17.9v-7.15h-17.9ZM9 15.2V39 9Z"/></svg>
\ No newline at end of file
+<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#e8eaed"><path d="M480-313 287-506l43-43 120 120v-371h60v371l120-120 43 43-193 193ZM220-160q-24 0-42-18t-18-42v-143h60v143h520v-143h60v143q0 24-18 42t-42 18H220Z"/></svg>
\ No newline at end of file
diff --git a/src/app/commoncomponents/DataTransferMessageDelegate.qml b/src/app/commoncomponents/DataTransferMessageDelegate.qml
index 9710e19a01d7e91504b640d814717e1249c60f41..a87ee3447bff8baad2122d5c264ca1ab112c72fd 100644
--- a/src/app/commoncomponents/DataTransferMessageDelegate.qml
+++ b/src/app/commoncomponents/DataTransferMessageDelegate.qml
@@ -40,9 +40,18 @@ Loader {
     property int seq: MsgSeq.single
     property string author: Author
     property string body: Body
+    property var tid: TID
     property int transferStatus: TransferStatus
+    onTidChanged: {
+        if (tid === "") {
+            sourceComponent = deletedMsgComp
+        }
+    }
     onTransferStatusChanged: {
-        if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
+        if (tid === "") {
+            sourceComponent = deletedMsgComp
+            return;
+        } else if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
             mediaInfo = MessagesAdapter.getMediaInfo(root.body);
             if (Object.keys(mediaInfo).length !== 0 && WITH_WEBENGINE) {
                 sourceComponent = localMediaMsgComp;
@@ -58,6 +67,54 @@ Loader {
     Behavior on opacity { NumberAnimation { duration: 100 } }
     onLoaded: opacity = 1
 
+    Component {
+        id: deletedMsgComp
+
+        SBSMessageBase {
+            id: deletedItem
+
+            isOutgoing: Author === CurrentAccount.uri
+            showTime: root.showTime
+            seq: root.seq
+            author: Author
+            readers: Readers
+            timestamp: root.timestamp
+            formattedTime: root.formattedTime
+            formattedDay: root.formattedTime
+            extraHeight: 0
+            textContentWidth: textEditId.width
+            textContentHeight: textEditId.height
+            innerContent.children: [
+                TextEdit {
+                    id: textEditId
+
+                    anchors.right: isOutgoing ? parent.right : undefined
+                    anchors.rightMargin: isOutgoing ? timeWidth : 0
+                    bottomPadding: 6
+                    topPadding: 6
+                    leftPadding: 10
+                    text: UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author) + " " + JamiStrings.deletedMedia ;
+                    horizontalAlignment: Text.AlignLeft
+                    width:  Math.min((2 / 3) * parent.width, implicitWidth + 18, innerContent.width - senderMargin + 18)
+
+                    font.pointSize: JamiTheme.smallFontSize
+                    font.hintingPreference: Font.PreferNoHinting
+                    renderType: Text.NativeRendering
+                    textFormat: Text.RichText
+                    clip: true
+                    readOnly: true
+                    color: getBaseColor()
+                    opacity: 0.5
+
+                    function getBaseColor() {
+                        bubble.isDeleted = true
+                        return UtilsAdapter.luma(bubble.color) ? "white" : "dark"
+                    }
+                }
+            ]
+        }
+    }
+
     Component {
         id: dataTransferMsgComp
 
@@ -223,8 +280,8 @@ Loader {
                                    : JamiTheme.chatviewTextColorDark
                         }
                     }
-                }
-                ,ProgressBar {
+                },
+                ProgressBar {
                     id: progressBar
 
                     visible: root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
diff --git a/src/app/commoncomponents/SBSMessageBase.qml b/src/app/commoncomponents/SBSMessageBase.qml
index bbca1c891b37ba68b20db20ad6a8062b283e463c..a57b1ddb51253ec9a29ef74005987b460aef1f52 100644
--- a/src/app/commoncomponents/SBSMessageBase.qml
+++ b/src/app/commoncomponents/SBSMessageBase.qml
@@ -382,7 +382,11 @@ Control {
                     property bool bubbleHovered
                     property string imgSource
 
-                    width: (root.type === Interaction.Type.TEXT ? root.textContentWidth + (IsEmojiOnly || root.bigMsg ? 0 : root.timeWidth + root.editedWidth) : innerContent.childrenRect.width)
+                    width: (root.type === Interaction.Type.TEXT || isDeleted ?
+                            root.textContentWidth + (IsEmojiOnly || root.bigMsg ?
+                                                        0
+                                                        : root.timeWidth + root.editedWidth)
+                            : innerContent.childrenRect.width)
                     height: innerContent.childrenRect.height + (visible ? root.extraHeight : 0) + (root.bigMsg ? 15 : 0)
 
                     HoverHandler {
diff --git a/src/app/commoncomponents/ShowMoreMenu.qml b/src/app/commoncomponents/ShowMoreMenu.qml
index 22f95d0c1b62e26bb3d712f90b99ae592fcdac43..26c4cdb8cea930d85c7030d5289b211dd18db441 100644
--- a/src/app/commoncomponents/ShowMoreMenu.qml
+++ b/src/app/commoncomponents/ShowMoreMenu.qml
@@ -175,7 +175,7 @@ BaseContextMenu {
         GeneralMenuItem {
             id: deleteMessage
 
-            canTrigger: root.isOutgoing && type === Interaction.Type.TEXT
+            canTrigger: root.isOutgoing && (type === Interaction.Type.TEXT || type === Interaction.Type.DATA_TRANSFER)
             iconSource: JamiResources.delete_svg
             itemName: JamiStrings.deleteMessage
             onClicked: {
diff --git a/src/app/conversationlistmodelbase.cpp b/src/app/conversationlistmodelbase.cpp
index 180b5db44a72b81b7225c2324d1124af1af8b487..2a169463ebeadc8df0f00941279339d148ef971b 100644
--- a/src/app/conversationlistmodelbase.cpp
+++ b/src/app/conversationlistmodelbase.cpp
@@ -125,7 +125,11 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
             if (interaction.type == interaction::Type::UPDATE_PROFILE) {
                 lastInteractionBody = interaction::getProfileUpdatedString();
             } else if (interaction.type == interaction::Type::DATA_TRANSFER) {
-                lastInteractionBody = interaction.commit.value("displayName");
+                if (interaction.commit.value("tid").isEmpty()) {
+                    lastInteractionBody = tr("Deleted media");
+                } else {
+                    lastInteractionBody = interaction.commit.value("displayName");
+                }
             } else if (interaction.type == lrc::api::interaction::Type::CALL) {
                 const auto isOutgoing = interaction.authorUri == accInfo.profileInfo.uri;
                 lastInteractionBody = interaction::getCallInteractionString(isOutgoing, interaction);
diff --git a/src/app/mainview/components/ChatViewHeader.qml b/src/app/mainview/components/ChatViewHeader.qml
index 2ae782fe6c17908c7f7f55adbeaa2be4ae65a1e3..b11b0a7a491179091c7796a33c99cdf9dd2b3146 100644
--- a/src/app/mainview/components/ChatViewHeader.qml
+++ b/src/app/mainview/components/ChatViewHeader.qml
@@ -88,7 +88,7 @@ Rectangle {
             mirror: UtilsAdapter.isRTL
 
             source: JamiResources.back_24dp_svg
-            toolTipText: CurrentConversation.inCall ? JamiStrings.backCall : JamiStrings.hideChat
+            toolTipText: CurrentConversation.inCall ? JamiStrings.returnToCall : JamiStrings.hideChat
 
             onClicked: root.backClicked()
         }
diff --git a/src/app/net/jami/Constants/JamiStrings.qml b/src/app/net/jami/Constants/JamiStrings.qml
index a74aa1962f1b33c7becee4ca527032e37479460a..1610904c3fc413f248d05f620749074665c9fb68 100644
--- a/src/app/net/jami/Constants/JamiStrings.qml
+++ b/src/app/net/jami/Constants/JamiStrings.qml
@@ -346,7 +346,8 @@ Item {
     property string disabledAccount: qsTr("The account is disabled")
     property string noNetworkConnectivity: qsTr("No network connectivity")
     property string deletedMessage: qsTr("deleted a message")
-    property string backCall: qsTr("Back to Call")
+    property string deletedMedia: qsTr("deleted a media")
+    property string returnToCall: qsTr("Return to call")
 
     //MessagesResearch
     property string jumpTo: qsTr("Jump to")
diff --git a/src/libclient/api/messagelistmodel.h b/src/libclient/api/messagelistmodel.h
index 96f7adf54e6f362321fadf4a8021f6903bafb330..c6f06703ac794dfa2cff27e8a5e89ec6a0b758ca 100644
--- a/src/libclient/api/messagelistmodel.h
+++ b/src/libclient/api/messagelistmodel.h
@@ -55,6 +55,7 @@ struct Info;
     X(ReplyToAuthor) \
     X(TotalSize) \
     X(TransferName) \
+    X(TID) \
     X(FileExtension) \
     X(Readers) \
     X(IsEmojiOnly) \
diff --git a/src/libclient/messagelistmodel.cpp b/src/libclient/messagelistmodel.cpp
index ce726dbb9931fd4d53236e4eb138bc358b060980..04a2ee5cbb6e296cf09e90f2917007dc038ea111 100644
--- a/src/libclient/messagelistmodel.cpp
+++ b/src/libclient/messagelistmodel.cpp
@@ -201,16 +201,15 @@ MessageListModel::update(const QString& id, const interaction::Info& interaction
             return true;
         }
     }
-    // DataTransfer interactions should not be updated.
-    if (current.type == interaction::Type::DATA_TRANSFER) {
-        return true;
-    }
     // Just update bodies notify the view otherwise.
     current.body = interaction.body;
+    current.commit = interaction.commit;
     current.previousBodies = interaction.previousBodies;
     current.parsedBody = interaction.parsedBody;
     auto modelIndex = QAbstractListModel::index(indexOfMessage(id), 0);
-    Q_EMIT dataChanged(modelIndex, modelIndex, {Role::Body, Role::PreviousBodies, Role::ParsedBody});
+    Q_EMIT dataChanged(modelIndex,
+                       modelIndex,
+                       {Role::TID, Role::Body, Role::PreviousBodies, Role::ParsedBody});
     return true;
 }
 
@@ -251,8 +250,8 @@ MessageListModel::updateStatus(const QString& id,
 
 bool
 MessageListModel::updateTransferStatus(const QString& id,
-                               interaction::TransferStatus newStatus,
-                               const QString& newBody)
+                                       interaction::TransferStatus newStatus,
+                                       const QString& newBody)
 {
     const std::lock_guard<std::recursive_mutex> lk(mutex_);
     auto it = find(id);
@@ -594,6 +593,8 @@ MessageListModel::dataForItem(const item_t& item, int, int role) const
         return QVariant(item.second.commit["totalSize"].toInt());
     case Role::TransferName:
         return QVariant(item.second.commit["displayName"]);
+    case Role::TID:
+        return QVariant(item.second.commit["tid"]);
     case Role::FileExtension:
         return QVariant(QFileInfo(item.second.body).suffix());
     case Role::Readers: