diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
index 60bcc32f9a..afae348583 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageView.kt
@@ -115,6 +115,7 @@ class VisibleMessageView : LinearLayout {
         binding.root.disableClipping()
         binding.mainContainer.disableClipping()
         binding.messageInnerContainer.disableClipping()
+        binding.messageInnerLayout.disableClipping()
         binding.messageContentView.root.disableClipping()
     }
     // endregion
@@ -238,7 +239,19 @@ class VisibleMessageView : LinearLayout {
     }
 
     private fun showStatusMessage(message: MessageRecord) {
-        if (message.isOutgoing) {
+        val disappearing = message.expiresIn > 0
+
+        binding.messageInnerLayout.apply {
+            layoutParams = layoutParams.let { it as FrameLayout.LayoutParams }
+                .apply { gravity = if (message.isOutgoing) Gravity.END else Gravity.START }
+        }
+
+        binding.statusContainer.apply {
+            layoutParams = layoutParams.let { it as ConstraintLayout.LayoutParams }
+                .apply { horizontalBias = if (message.isOutgoing) 1f else 0f }
+        }
+
+        if (message.isOutgoing || disappearing) {
             val (iconID, iconColor, textId, contentDescription) = getMessageStatusImage(message)
             textId?.let(binding.messageStatusTextView::setText)
             iconColor?.let(binding.messageStatusTextView::setTextColor)
@@ -248,12 +261,13 @@ class VisibleMessageView : LinearLayout {
             binding.messageStatusImageView.contentDescription = contentDescription
 
             val lastMessageID = mmsSmsDb.getLastMessageID(message.threadId)
+            val isLastMessage = message.id == lastMessageID
             binding.messageStatusTextView.isVisible =
-                textId != null && (!message.isSent || message.id == lastMessageID)
+                textId != null && (!message.isSent || isLastMessage || disappearing)
             binding.messageStatusImageView.isVisible =
-                iconID != null && (!message.isSent || message.id == lastMessageID)
+                iconID != null && (!message.isSent || isLastMessage || disappearing)
 
-            updateExpirationTimer(message, iconColor)
+            if (disappearing && !message.isPending) updateExpirationTimer(message, iconColor)
         } else {
             binding.messageStatusTextView.isVisible = false
             binding.messageStatusImageView.isVisible = false
@@ -312,7 +326,7 @@ class VisibleMessageView : LinearLayout {
                 context.getColor(R.color.accent_orange), R.string.delivery_status_syncing,
                 context.getString(R.string.AccessibilityId_message_sent_status_syncing)
             )
-        message.isRead ->
+        message.isRead || !message.isOutgoing ->
             MessageStatusInfo(
                 R.drawable.ic_delivery_status_read,
                 context.getColorFromAttr(R.attr.message_status_color), R.string.delivery_status_read,
@@ -328,19 +342,9 @@ class VisibleMessageView : LinearLayout {
     }
 
     private fun updateExpirationTimer(message: MessageRecord, iconColor: Int?) {
-        messageContentView.layoutParams = (messageContentView.layoutParams as FrameLayout.LayoutParams)
-            .apply { gravity = if (message.isOutgoing) Gravity.END else Gravity.START }
-
-        val container = binding.messageInnerContainer
-        container.layoutParams = (container.layoutParams as ConstraintLayout.LayoutParams)
-            .apply { horizontalBias = if (message.isOutgoing) 1f else 0f }
-
         val expirationTimerView = ExpirationTimerView(binding.messageStatusImageView, iconColor)
 
-        // container.layoutParams = containerParams
         if (message.expiresIn > 0) {
-            // expirationTimerView.setColorFilter(context.getColorFromAttr(android.R.attr.textColorPrimary))
-            // expirationTimerView.isInvisible = false
             expirationTimerView.setPercentComplete(0.0f)
             if (message.expireStarted > 0) {
                 expirationTimerView.setExpirationTime(message.expireStarted, message.expiresIn)
@@ -359,10 +363,7 @@ class VisibleMessageView : LinearLayout {
                     expirationManager.scheduleDeletion(id, mms, message.expiresIn)
                 }
             }
-        } else {
-            // expirationTimerView.isInvisible = true
         }
-        container.requestLayout()
     }
 
     private fun handleIsSelectedChanged() {
diff --git a/app/src/main/res/layout/view_visible_message.xml b/app/src/main/res/layout/view_visible_message.xml
index db0119a44f..6dbb7e4a47 100644
--- a/app/src/main/res/layout/view_visible_message.xml
+++ b/app/src/main/res/layout/view_visible_message.xml
@@ -115,10 +115,18 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/senderNameTextView">
 
-            
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                
+
+            
         
 
         
 
-        
-
-        
+            app:layout_constraintStart_toStartOf="@id/messageInnerContainer"
+            app:layout_constraintHorizontal_bias="1"
+            app:layout_constraintEnd_toEndOf="parent">
+
+            
+
+            
+
+