summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-11-09 14:09:10 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:07:15 +0100
commit165935683948a3b5f5c37bf124efec1249f679ae (patch)
tree6bf9237fd226775a359dbfdf038640889267bcce /resources
parentShow only messages in room list (diff)
downloadnheko-165935683948a3b5f5c37bf124efec1249f679ae.tar.xz
Update translations
Diffstat (limited to 'resources')
-rw-r--r--resources/langs/nheko_de.ts317
-rw-r--r--resources/langs/nheko_el.ts287
-rw-r--r--resources/langs/nheko_en.ts327
-rw-r--r--resources/langs/nheko_fi.ts309
-rw-r--r--resources/langs/nheko_fr.ts287
-rw-r--r--resources/langs/nheko_nl.ts287
-rw-r--r--resources/langs/nheko_pl.ts299
-rw-r--r--resources/langs/nheko_ru.ts299
-rw-r--r--resources/langs/nheko_zh_CN.ts299
9 files changed, 1702 insertions, 1009 deletions
diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts
index e92bf966..879551bd 100644
--- a/resources/langs/nheko_de.ts
+++ b/resources/langs/nheko_de.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="de">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>In Datei speichern</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>Hochladen der Videodatei fehlgeschlagen. Bitte versuche es erneut.</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>Wiederherstellung des OLM Accounts fehlgeschlagen. Bitte logge dich erneut ein.</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>Gespeicherte Nachrichten konnten nicht wiederhergestellt werden. Bitte melde Dich erneut an.</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation>Fehler beim Setup der Verschlüsselungsschlüssel. Servermeldung: %1 %2. Bitte versuche es später erneut.</translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>Bitte melde dich erneut an: %1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>Raum konnte nicht erstellt werden: %1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Datei speichern</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Bild speichern</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation>Verschlüsselt</translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Teilnehmerliste</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation>unimplementiertes event: </translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation>gelöscht</translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation>keine Version gespeichert</translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Raum verlassen</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Akzeptieren</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>Verschlüsselt</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation>Fehlgeschlagen</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>Erhalten</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation>Gesendet</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>Gelesen</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation>Empfangen</translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>Gesendet</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation>Gelesen</translation>
     </message>
 </context>
 <context>
@@ -391,32 +391,9 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
-    </message>
+    <name>TimelineModel</name>
     <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation>Antworten</translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation>Optionen</translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
-    <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>Verschlüsselung aktiv</translation>
-    </message>
-    <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
         <translation>-- verschlüsselter Event (keine Schlüssel zur Entschlüsselung gefunden) --</translation>
@@ -440,16 +417,90 @@
         <translation>-- Entschlüsselungsfehler (%1) --</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
         <translation>-- verschlüsselter Event (Unbekannter Eventtyp) --</translation>
     </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation>Antworten</translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation>Optionen</translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation>Lesebestätigungen</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation>Als gelesen markieren</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation>Zeige rohen Nachrichteninhalt</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation>Nachricht löschen</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation>Speichern als...</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation>Kein Raum geöffnet</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation>Bild speichern</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation>Video speichern</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation>Audiodatei speichern</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation>Datei speichern</translation>
+    </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>Raumoptionen</translation>
     </message>
@@ -515,7 +566,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Ins Benachrichtigungsfeld minimieren</translation>
     </message>
@@ -531,6 +582,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation>Runde Profilbilder</translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Schreibbenachrichtigungen</translation>
     </message>
@@ -605,7 +661,7 @@
         <translation>ALLGEMEINES</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation>Öffne Sessions Datei</translation>
     </message>
@@ -825,7 +881,7 @@ Medien-Größe: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Lesebestätigungen</translation>
     </message>
@@ -951,7 +1007,7 @@ Medien-Größe: %2
         <translation>Aktivierung der Verschlüsselung fehlgeschlagen: %1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>Wähle einen Avatar</translation>
     </message>
@@ -978,19 +1034,6 @@ Medien-Größe: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation>Dieser Raum</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation>Alle Räume</translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1056,7 @@ Medien-Größe: %2
         <translation>Gespräch beginnen</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>Geräte</translation>
     </message>
@@ -1064,69 +1107,103 @@ Medien-Größe: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
-        <translation>%1 einen Audioclip</translation>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
+        <translation>Du hast eine Audiodatei gesendet.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent an audio clip</source>
+        <translation>%1 hat eine Audiodatei gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
+        <translation>Du hast ein Bild gesendet.</translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent an image</source>
+        <translation>%1 hat ein Bild gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
+        <translation>Du hast eine Datei gesendet.</translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
-        <translation>%1 ein Bild</translation>
+        <source>%1 sent a file</source>
+        <translation>%1 hat eine Datei gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation>Du hast ein Video gesendet.</translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
-        <translation>%1 eine Datei</translation>
+        <source>%1 sent a video</source>
+        <translation>%1 hat ein Video gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
+        <translation>Du hast einen Sticker gesendet.</translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
-        <translation>%1 einen Videoclip</translation>
+        <source>%1 sent a sticker</source>
+        <translation>%1 hat einen Sticker gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
+        <translation>Du hast eine Benachrichtigung gesendet.</translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
-        <translation>%1 einen Sticker</translation>
+        <source>%1 sent a notification</source>
+        <translation>%1 hat eine Benachrichtigung gesendet.</translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
+        <translation>Du: %1</translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
-        <translation>1% eine Benachrichtigung</translation>
+        <source>%1: %2</source>
+        <translation>%1: %2</translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
-        <translation>1% eine verschüsselte Nachricht</translation>
+        <source>You sent an encrypted message</source>
+        <translation>Du hast eine verschlüsselte Nachricht gesendet.</translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
-        <translation type="unfinished"></translation>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
+        <translation>%1 hat eine verschlüsselte Nachricht gesendet.</translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
-        <translation type="unfinished"></translation>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
+        <translation>Dieser Raum</translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>All Rooms</source>
+        <translation>Alle Räume</translation>
     </message>
 </context>
 <context>
     <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
-        <translation>Du</translation>
-    </message>
-    <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1146,7 +1223,7 @@ Medien-Größe: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation>Unbekannter Nachrichtentyp</translation>
     </message>
diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts
index 700c3d57..e9c70da0 100644
--- a/resources/langs/nheko_el.ts
+++ b/resources/langs/nheko_el.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="el">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Αποθήκευση</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -42,18 +34,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Αποθήκευση</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Αποθήκευση Εικόνας</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Μέλη</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Βγές</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Αποδοχή</translation>
     </message>
@@ -331,23 +331,23 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
+        <location line="+1"/>
+        <source>Sent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
+        <location line="+1"/>
+        <source>Received</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
+        <location line="+1"/>
+        <source>Read</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -391,65 +391,116 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
+    <name>TimelineModel</name>
+    <message>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
+        <source>-- Encrypted Event (No keys found for decryption) --</source>
+        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>-- Decryption Error (failed to communicate with DB) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+        <location line="+19"/>
+        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>-- Decryption Error (%1) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>-- Encrypted Event (Unknown event type) --</source>
+        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+50"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineRow</name>
     <message>
-        <location line="+39"/>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location line="+14"/>
         <source>Options</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>TimelineView</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
+        <location line="+12"/>
+        <source>Read receipts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+65"/>
-        <source>-- Encrypted Event (No keys found for decryption) --</source>
-        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <location line="+4"/>
+        <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
-        <source>-- Decryption Error (failed to communicate with DB) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <location line="+3"/>
+        <source>View raw message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+19"/>
-        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <location line="+4"/>
+        <source>Redact message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
-        <source>-- Decryption Error (%1) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <location line="+5"/>
+        <source>Save as</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineView</name>
     <message>
-        <location line="+27"/>
-        <source>-- Encrypted Event (Unknown event type) --</source>
-        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Αποθήκευση Εικόνας</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -515,7 +566,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Ελαχιστοποίηση</translation>
     </message>
@@ -531,6 +582,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation type="unfinished"></translation>
     </message>
@@ -605,7 +661,7 @@
         <translation>ΓΕΝΙΚΑ</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation type="unfinished"></translation>
     </message>
@@ -823,7 +879,7 @@ Media size: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -949,7 +1005,7 @@ Media size: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation type="unfinished"></translation>
     </message>
@@ -976,19 +1032,6 @@ Media size: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1011,7 +1054,7 @@ Media size: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1062,69 +1105,103 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1144,7 +1221,7 @@ Media size: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts
index edb95313..cb2ef1c7 100644
--- a/resources/langs/nheko_en.ts
+++ b/resources/langs/nheko_en.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Save File</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>Failed to upload video. Please try again.</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>Failed to restore OLM account. Please login again.</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>Failed to restore save data. Please login again.</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>Please try to login again: %1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>Room creation failed: %1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Save File</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Save image</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Room members</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation>no version stored</translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Leave room</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Accept</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>Encrypted</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>Delivered</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>Seen</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>Sent</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -391,65 +391,116 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>Message redaction failed: %1</translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation>Reply</translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation>Options</translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
-    <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>Encryption is enabled</translation>
-    </message>
+    <name>TimelineModel</name>
     <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
-        <translation>-- Encrypted Event (No keys found for decryption) --</translation>
+        <translation type="unfinished">-- Encrypted Event (No keys found for decryption) --</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>-- Decryption Error (failed to communicate with DB) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
-        <translation>-- Decryption Error (failed to communicate with DB) --</translation>
+        <translation type="unfinished">-- Decryption Error (failed to communicate with DB) --</translation>
     </message>
     <message>
         <location line="+19"/>
         <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
-        <translation>-- Decryption Error (failed to retrieve megolm keys from db) --</translation>
+        <translation type="unfinished">-- Decryption Error (failed to retrieve megolm keys from db) --</translation>
     </message>
     <message>
         <location line="+12"/>
         <source>-- Decryption Error (%1) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
-        <translation>-- Decryption Error (%1) --</translation>
+        <translation type="unfinished">-- Decryption Error (%1) --</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
-        <translation>-- Encrypted Event (Unknown event type) --</translation>
+        <translation type="unfinished">-- Encrypted Event (Unknown event type) --</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation type="unfinished">Message redaction failed: %1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Read receipts</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Save image</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>Room options</translation>
     </message>
@@ -515,7 +566,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Minimize to tray</translation>
     </message>
@@ -531,6 +582,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Typing notifications</translation>
     </message>
@@ -605,7 +661,7 @@
         <translation>GENERAL</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation>Open Sessions File</translation>
     </message>
@@ -825,7 +881,7 @@ Media size: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Read receipts</translation>
     </message>
@@ -953,7 +1009,7 @@ Media size: %2
         <translation>Failed to enable encryption: %1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>Select an avatar</translation>
     </message>
@@ -980,19 +1036,6 @@ Media size: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation>This Room</translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation>All Rooms</translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1015,7 +1058,7 @@ Media size: %2
         <translation>Start a conversation</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>Devices</translation>
     </message>
@@ -1066,69 +1109,103 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
-        <translation>%1 an audio clip</translation>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
-        <translation>%1 an image</translation>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
-        <translation>%1 a file</translation>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
-        <translation>%1 a video clip</translation>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
-        <translation>%1 a sticker</translation>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
-        <translation>%1 a notification</translation>
+        <source>%1: %2</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
-        <translation>%1 an encrypted message</translation>
+        <source>You sent an encrypted message</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
-        <translation>sent</translation>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
+    <message>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
+        <translation type="unfinished">This Room</translation>
+    </message>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
-        <translation>sent</translation>
+        <location line="+1"/>
+        <source>All Rooms</source>
+        <translation type="unfinished">All Rooms</translation>
     </message>
 </context>
 <context>
     <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
-        <translation>You</translation>
-    </message>
-    <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation>sent a file.</translation>
     </message>
@@ -1148,7 +1225,7 @@ Media size: %2
         <translation>sent a video.</translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation>Unknown Message Type</translation>
     </message>
diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts
index 89eb33b7..76bf7064 100644
--- a/resources/langs/nheko_fi.ts
+++ b/resources/langs/nheko_fi.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="fi">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Tallenna tiedosto</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>Videon lähettäminen epäonnistui. Ole hyvä ja yritä uudelleen.</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>OLM-tilin palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>Tallennettujen tietojen palauttaminen epäonnistui. Ole hyvä ja kirjaudu sisään uudelleen.</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation>Salausavainten lähetys epäonnistui. Palvelimen vastaus: %1 %2. Ole hyvä ja yritä uudelleen myöhemmin.</translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>Ole hyvä ja yritä kirjautua sisään uudelleen: %1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>Huoneen luominen epäonnistui: %1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Tallenna tiedosto</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Tallenna kuva</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Huoneen jäsenet</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation>ei tallennettua versiota</translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Poistu huoneesta</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Hyväksy</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>Salattu</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>Toimitettu</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>Luettu</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>Lähetetty</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -391,65 +391,116 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>Viestin poisto epäonnistui: %1</translation>
-    </message>
+    <name>TimelineModel</name>
     <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation>Vastaa</translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation>Asetukset</translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
-    <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>Salaus on käytössä</translation>
-    </message>
-    <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
-        <translation>-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
+        <translation type="unfinished">-- Salattu viesti (salauksen purkuavaimia ei löydetty) --</translation>
     </message>
     <message>
         <location line="+15"/>
         <source>-- Decryption Error (failed to communicate with DB) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
-        <translation>-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation>
+        <translation type="unfinished">-- Virhe purkaessa salausta (tietokannan kanssa kommunikointi epäonnistui) --</translation>
     </message>
     <message>
         <location line="+19"/>
         <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
-        <translation>-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation>
+        <translation type="unfinished">-- Virhe purkaessa salausta (megolm-avaimien hakeminen tietokannasta epäonnistui) --</translation>
     </message>
     <message>
         <location line="+12"/>
         <source>-- Decryption Error (%1) --</source>
         <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
-        <translation>-- Virhe purkaessa salausta (%1) --</translation>
+        <translation type="unfinished">-- Virhe purkaessa salausta (%1) --</translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
-        <translation>-- Salattu viesti (tuntematon viestityyppi) --</translation>
+        <translation type="unfinished">-- Salattu viesti (tuntematon viestityyppi) --</translation>
+    </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation type="unfinished">Viestin poisto epäonnistui: %1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Lukukuittaukset</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Tallenna kuva</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>Huonevaihtoehdot</translation>
     </message>
@@ -515,7 +566,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Pienennä ilmoitusalueelle</translation>
     </message>
@@ -531,6 +582,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Kirjoitusilmoitukset</translation>
     </message>
@@ -605,7 +661,7 @@
         <translation>YLEISET ASETUKSET</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation>Avaa Istuntoavaintiedosto</translation>
     </message>
@@ -825,7 +881,7 @@ Median koko: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Lukukuittaukset</translation>
     </message>
@@ -953,7 +1009,7 @@ Median koko: %2
         <translation>Salauksen aktivointi epäonnistui: %1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>Valitse profiilikuva</translation>
     </message>
@@ -980,19 +1036,6 @@ Median koko: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1015,7 +1058,7 @@ Median koko: %2
         <translation>Aloita keskustelu</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>Laitteet</translation>
     </message>
@@ -1066,69 +1109,103 @@ Median koko: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
+    <message>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
+        <translation type="unfinished"></translation>
+    </message>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
-        <translation>Sinä</translation>
-    </message>
-    <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1148,7 +1225,7 @@ Median koko: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts
index 42f82b0f..30ff8599 100644
--- a/resources/langs/nheko_fr.ts
+++ b/resources/langs/nheko_fr.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="fr">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Enregistrer le fichier</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -42,18 +34,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Enregistrer le fichier</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Enregistrer l&apos;image</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Membres du salon</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -278,7 +278,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -286,12 +286,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Quitter le salon</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Accepter</translation>
     </message>
@@ -332,23 +332,23 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
+        <location line="+1"/>
+        <source>Sent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
+        <location line="+1"/>
+        <source>Received</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
+        <location line="+1"/>
+        <source>Read</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -392,65 +392,116 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
+    <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
+        <source>-- Encrypted Event (No keys found for decryption) --</source>
+        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>-- Decryption Error (failed to communicate with DB) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>-- Decryption Error (%1) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>-- Encrypted Event (Unknown event type) --</source>
+        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+50"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineRow</name>
     <message>
-        <location line="+39"/>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location line="+14"/>
         <source>Options</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>TimelineView</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Accusés de lecture</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+65"/>
-        <source>-- Encrypted Event (No keys found for decryption) --</source>
-        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <location line="+3"/>
+        <source>View raw message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
-        <source>-- Decryption Error (failed to communicate with DB) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <location line="+4"/>
+        <source>Redact message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+19"/>
-        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <location line="+5"/>
+        <source>Save as</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineView</name>
     <message>
-        <location line="+12"/>
-        <source>-- Decryption Error (%1) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
     <message>
-        <location line="+27"/>
-        <source>-- Encrypted Event (Unknown event type) --</source>
-        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Enregistrer l&apos;image</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -516,7 +567,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Réduire à la barre des tâches</translation>
     </message>
@@ -532,6 +583,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Notifications d&apos;écriture</translation>
     </message>
@@ -606,7 +662,7 @@
         <translation>GÉNÉRAL</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation type="unfinished"></translation>
     </message>
@@ -826,7 +882,7 @@ Taille du média : %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Accusés de lecture</translation>
     </message>
@@ -952,7 +1008,7 @@ Taille du média : %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation type="unfinished"></translation>
     </message>
@@ -979,19 +1035,6 @@ Taille du média : %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1014,7 +1057,7 @@ Taille du média : %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1065,69 +1108,103 @@ Taille du média : %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1147,7 +1224,7 @@ Taille du média : %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts
index 53840f82..1c8a83c0 100644
--- a/resources/langs/nheko_nl.ts
+++ b/resources/langs/nheko_nl.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="nl_NL">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Bestand opslaan</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -42,18 +34,18 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Bestand opslaan</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Afbeelding opslaan</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Kamerleden</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Kamer verlaten</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Accepteren</translation>
     </message>
@@ -331,23 +331,23 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
+        <location line="+1"/>
+        <source>Sent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
+        <location line="+1"/>
+        <source>Received</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
+        <location line="+1"/>
+        <source>Read</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -391,65 +391,116 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
+    <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
+        <source>-- Encrypted Event (No keys found for decryption) --</source>
+        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+15"/>
+        <source>-- Decryption Error (failed to communicate with DB) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+19"/>
+        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>-- Decryption Error (%1) --</source>
+        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>-- Encrypted Event (Unknown event type) --</source>
+        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+50"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineRow</name>
     <message>
-        <location line="+39"/>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location line="+14"/>
         <source>Options</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>TimelineView</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Leesbevestigingen</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+65"/>
-        <source>-- Encrypted Event (No keys found for decryption) --</source>
-        <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
+        <location line="+3"/>
+        <source>View raw message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+15"/>
-        <source>-- Decryption Error (failed to communicate with DB) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed when trying to lookup the session.</comment>
+        <location line="+4"/>
+        <source>Redact message</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+19"/>
-        <source>-- Decryption Error (failed to retrieve megolm keys from db) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted, because the DB access failed.</comment>
+        <location line="+5"/>
+        <source>Save as</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineView</name>
     <message>
-        <location line="+12"/>
-        <source>-- Decryption Error (%1) --</source>
-        <comment>Placeholder, when the message can&apos;t be decrypted. In this case, the Olm decrytion returned an error, which is passed ad %1</comment>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
     <message>
-        <location line="+27"/>
-        <source>-- Encrypted Event (Unknown event type) --</source>
-        <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Afbeelding opslaan</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -515,7 +566,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Minimaliseren naar systeemvak</translation>
     </message>
@@ -531,6 +582,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Meldingen bij typen van berichten</translation>
     </message>
@@ -605,7 +661,7 @@
         <translation>ALGEMEEN</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation type="unfinished"></translation>
     </message>
@@ -825,7 +881,7 @@ Mediagrootte: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Leesbevestigingen</translation>
     </message>
@@ -951,7 +1007,7 @@ Mediagrootte: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation type="unfinished"></translation>
     </message>
@@ -978,19 +1034,6 @@ Mediagrootte: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1056,7 @@ Mediagrootte: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1064,69 +1107,103 @@ Mediagrootte: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1146,7 +1223,7 @@ Mediagrootte: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts
index f4f98dbb..6c3b2abd 100644
--- a/resources/langs/nheko_pl.ts
+++ b/resources/langs/nheko_pl.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="pl">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Zapisz plik</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>Nie udało się wysłać filmu. Spróbuj ponownie.</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>Nie udało się przywrócić konta OLM. Spróbuj zalogować się ponownie.</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>Nie udało się przywrócić zapisanych danych. Spróbuj zalogować się ponownie.</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>Spróbuj zalogować się ponownie: %1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>Tworzenie pokoju nie powiodło się: %1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Zapisz plik</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Zapisz obraz</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Członkowie pokoju</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Opuść pokój</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Akceptuj</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>Szyfrowana</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>Dostarczono</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>Wyświetlona</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>Wysłana</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -391,32 +391,9 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>Redagowanie wiadomości nie powiodło się: %1</translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
+    <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>Szyfrowanie jest włączone</translation>
-    </message>
-    <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
         <translation type="unfinished"></translation>
@@ -440,16 +417,90 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Potwierdzenia przeczytania</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Zapisz obraz</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>Ustawienia pokoju</translation>
     </message>
@@ -516,7 +567,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Zminimalizuj do paska zadań</translation>
     </message>
@@ -532,6 +583,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Powiadomienia o pisaniu</translation>
     </message>
@@ -606,7 +662,7 @@
         <translation>OGÓLNE</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation type="unfinished"></translation>
     </message>
@@ -826,7 +882,7 @@ Rozmiar multimediów: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Potwierdzenia przeczytania</translation>
     </message>
@@ -955,7 +1011,7 @@ Rozmiar multimediów: %2
         <translation>Nie udało się włączyć szyfrowania: %1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>Wybierz awatar</translation>
     </message>
@@ -982,19 +1038,6 @@ Rozmiar multimediów: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1017,7 +1060,7 @@ Rozmiar multimediów: %2
         <translation>Rozpocznij rozmowę</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>Urządzenia</translation>
     </message>
@@ -1068,69 +1111,103 @@ Rozmiar multimediów: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1150,7 +1227,7 @@ Rozmiar multimediów: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts
index 04285c72..d5544cf8 100644
--- a/resources/langs/nheko_ru.ts
+++ b/resources/langs/nheko_ru.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>Сохранить файл</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>Не удалось загрузить видео. Пожалуйста, попробуйте еще раз.</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>Не удалось восстановить учетную запись OLM. Пожалуйста, войдите снова.</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>Не удалось восстановить сохраненные данные. Пожалуйста, войдите снова.</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation>Не удалось настроить ключи шифрования. Ответ сервера:%1 %2. Пожалуйста, попробуйте позже.</translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>Повторите попытку входа: %1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>Не удалось создать комнату: %1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>Сохранить файл</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>Сохранить изображение</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>Участники комнаты</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>Покинуть комнату</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>Принять</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>Зашифровано</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>Доставлено</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>Прочитано</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>Отправлено</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -391,32 +391,9 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>Ошибка редактирования сообщения: %1</translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
+    <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>Шифрование включено</translation>
-    </message>
-    <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
         <translation type="unfinished"></translation>
@@ -440,16 +417,90 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation type="unfinished">Ошибка редактирования сообщения: %1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">Подтверждать прочтение</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">Сохранить изображение</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>Настройки комнаты</translation>
     </message>
@@ -516,7 +567,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>Сворачивать в системную панель</translation>
     </message>
@@ -532,6 +583,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>Сообщать о наборе сообщения</translation>
     </message>
@@ -606,7 +662,7 @@
         <translation>ГЛАВНОЕ</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation>Открыть файл сеансов</translation>
     </message>
@@ -827,7 +883,7 @@ Media size: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>Подтверждать прочтение</translation>
     </message>
@@ -954,7 +1010,7 @@ Media size: %2
         <translation>Не удалось включить шифрование: %1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>Выберите аватар</translation>
     </message>
@@ -981,19 +1037,6 @@ Media size: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1016,7 +1059,7 @@ Media size: %2
         <translation>Начать разговор</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>Устройства</translation>
     </message>
@@ -1067,69 +1110,103 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1149,7 +1226,7 @@ Media size: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts
index 1e539e64..57f49d43 100644
--- a/resources/langs/nheko_zh_CN.ts
+++ b/resources/langs/nheko_zh_CN.ts
@@ -2,14 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="zh_CN">
 <context>
-    <name>AudioItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/AudioItem.cpp" line="+118"/>
-        <source>Save File</source>
-        <translation>保存文件</translation>
-    </message>
-</context>
-<context>
     <name>ChatPage</name>
     <message>
         <location filename="../../src/ChatPage.cpp" line="+330"/>
@@ -32,7 +24,7 @@
         <translation>上传视频失败。请重试。</translation>
     </message>
     <message>
-        <location line="+380"/>
+        <location line="+393"/>
         <source>Failed to restore OLM account. Please login again.</source>
         <translation>恢复 OLM 账户失败。请重新登录。</translation>
     </message>
@@ -42,18 +34,18 @@
         <translation>恢复保存的数据失败。请重新登录。</translation>
     </message>
     <message>
-        <location line="+198"/>
+        <location line="+181"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+51"/>
-        <location line="+153"/>
+        <location line="+155"/>
         <source>Please try to login again: %1</source>
         <translation>请尝试再次登录:%1</translation>
     </message>
     <message>
-        <location line="-45"/>
+        <location line="-47"/>
         <source>Room creation failed: %1</source>
         <translation>创建聊天室失败:%1</translation>
     </message>
@@ -116,19 +108,11 @@
     </message>
 </context>
 <context>
-    <name>FileItem</name>
+    <name>EncryptionIndicator</name>
     <message>
-        <location filename="../../src/timeline/widgets/FileItem.cpp" line="+107"/>
-        <source>Save File</source>
-        <translation>保存文件</translation>
-    </message>
-</context>
-<context>
-    <name>ImageItem</name>
-    <message>
-        <location filename="../../src/timeline/widgets/ImageItem.cpp" line="+241"/>
-        <source>Save image</source>
-        <translation>保存图像</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+11"/>
+        <source>Encrypted</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -200,7 +184,7 @@
 <context>
     <name>MemberList</name>
     <message>
-        <location filename="../../src/dialogs/MemberList.cpp" line="+96"/>
+        <location filename="../../src/dialogs/MemberList.cpp" line="+89"/>
         <source>Room members</source>
         <translation>聊天室成员</translation>
     </message>
@@ -211,6 +195,14 @@
     </message>
 </context>
 <context>
+    <name>Placeholder</name>
+    <message>
+        <location filename="../qml/delegates/Placeholder.qml" line="+4"/>
+        <source>unimplemented event: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QuickSwitcher</name>
     <message>
         <location filename="../../src/QuickSwitcher.cpp" line="+71"/>
@@ -219,6 +211,14 @@
     </message>
 </context>
 <context>
+    <name>Redacted</name>
+    <message>
+        <location filename="../qml/delegates/Redacted.qml" line="+5"/>
+        <source>redacted</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>RegisterPage</name>
     <message>
         <location filename="../../src/RegisterPage.cpp" line="+77"/>
@@ -277,7 +277,7 @@
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2205"/>
+        <location filename="../../src/Cache.cpp" line="+2307"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -285,12 +285,12 @@
 <context>
     <name>RoomInfoListItem</name>
     <message>
-        <location filename="../../src/RoomInfoListItem.cpp" line="+93"/>
+        <location filename="../../src/RoomInfoListItem.cpp" line="+95"/>
         <source>Leave room</source>
         <translation>离开聊天室</translation>
     </message>
     <message>
-        <location line="+181"/>
+        <location line="+161"/>
         <source>Accept</source>
         <translation>接受</translation>
     </message>
@@ -331,24 +331,24 @@
 <context>
     <name>StatusIndicator</name>
     <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+107"/>
-        <source>Encrypted</source>
-        <translation>加密的</translation>
+        <location filename="../qml/StatusIndicator.qml" line="+13"/>
+        <source>Failed</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Delivered</source>
-        <translation>已送达</translation>
+        <location line="+1"/>
+        <source>Sent</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Seen</source>
-        <translation>已阅读</translation>
+        <location line="+1"/>
+        <source>Received</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+3"/>
-        <source>Sent</source>
-        <translation>已发送</translation>
+        <location line="+1"/>
+        <source>Read</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -391,32 +391,9 @@
     </message>
 </context>
 <context>
-    <name>TimelineItem</name>
-    <message>
-        <location filename="../../src/timeline/TimelineItem.cpp" line="+85"/>
-        <source>Message redaction failed: %1</source>
-        <translation>删除消息失败:%1</translation>
-    </message>
-    <message>
-        <location line="+39"/>
-        <source>Reply</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+11"/>
-        <source>Options</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>TimelineView</name>
+    <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineView.cpp" line="+245"/>
-        <source>Encryption is enabled</source>
-        <translation>加密已启用</translation>
-    </message>
-    <message>
-        <location line="+65"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+780"/>
         <source>-- Encrypted Event (No keys found for decryption) --</source>
         <comment>Placeholder, when the message was not decrypted yet or can&apos;t be decrypted</comment>
         <translation type="unfinished"></translation>
@@ -440,16 +417,90 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+27"/>
+        <location line="+25"/>
         <source>-- Encrypted Event (Unknown event type) --</source>
         <comment>Placeholder, when the message was decrypted, but we couldn&apos;t parse it, because Nheko/mtxclient don&apos;t support that event type yet</comment>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+50"/>
+        <source>Message redaction failed: %1</source>
+        <translation type="unfinished">删除消息失败:%1</translation>
+    </message>
+</context>
+<context>
+    <name>TimelineRow</name>
+    <message>
+        <location filename="../qml/TimelineRow.qml" line="+57"/>
+        <source>Reply</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+14"/>
+        <source>Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+12"/>
+        <source>Read receipts</source>
+        <translation type="unfinished">阅读回执</translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Mark as read</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>View raw message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+4"/>
+        <source>Redact message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>Save as</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineView</name>
+    <message>
+        <location filename="../qml/TimelineView.qml" line="+24"/>
+        <source>No room open</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TimelineViewManager</name>
+    <message>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+161"/>
+        <source>Save image</source>
+        <translation type="unfinished">保存图像</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save audio</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>TopRoomBar</name>
     <message>
-        <location filename="../../src/TopRoomBar.cpp" line="+79"/>
+        <location filename="../../src/TopRoomBar.cpp" line="+78"/>
         <source>Room options</source>
         <translation>聊天室选项</translation>
     </message>
@@ -514,7 +565,7 @@
 <context>
     <name>UserSettingsPage</name>
     <message>
-        <location filename="../../src/UserSettingsPage.cpp" line="+166"/>
+        <location filename="../../src/UserSettingsPage.cpp" line="+171"/>
         <source>Minimize to tray</source>
         <translation>最小化至托盘</translation>
     </message>
@@ -530,6 +581,11 @@
     </message>
     <message>
         <location line="+9"/>
+        <source>Circular Avatars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Typing notifications</source>
         <translation>打字通知</translation>
     </message>
@@ -604,7 +660,7 @@
         <translation>通用</translation>
     </message>
     <message>
-        <location line="+156"/>
+        <location line="+161"/>
         <source>Open Sessions File</source>
         <translation>打开会话文件</translation>
     </message>
@@ -824,7 +880,7 @@ Media size: %2
 <context>
     <name>dialogs::ReadReceipts</name>
     <message>
-        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+121"/>
+        <location filename="../../src/dialogs/ReadReceipts.cpp" line="+117"/>
         <source>Read receipts</source>
         <translation>阅读回执</translation>
     </message>
@@ -951,7 +1007,7 @@ Media size: %2
         <translation>启用加密失败:%1</translation>
     </message>
     <message>
-        <location line="+149"/>
+        <location line="+148"/>
         <source>Select an avatar</source>
         <translation>选择一个头像</translation>
     </message>
@@ -978,19 +1034,6 @@ Media size: %2
     </message>
 </context>
 <context>
-    <name>dialogs::UserMentions</name>
-    <message>
-        <location filename="../../src/dialogs/UserMentions.cpp" line="+53"/>
-        <source>This Room</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location line="+1"/>
-        <source>All Rooms</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
     <name>dialogs::UserProfile</name>
     <message>
         <location filename="../../src/dialogs/UserProfile.cpp" line="+63"/>
@@ -1013,7 +1056,7 @@ Media size: %2
         <translation>开始一个聊天</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+56"/>
         <source>Devices</source>
         <translation>设备</translation>
     </message>
@@ -1072,69 +1115,103 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+104"/>
-        <source>%1 an audio clip</source>
+        <location filename="../../src/Utils.h" line="+95"/>
+        <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 an image</source>
+        <source>%1 sent an audio clip</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent an image</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a file</source>
+        <source>%1 sent an image</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>%1 sent a video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a sticker</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a video clip</source>
+        <source>%1 sent a sticker</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You sent a notification</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a sticker</source>
+        <source>%1 sent a notification</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>You: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+3"/>
-        <source>%1 a notification</source>
+        <source>%1: %2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
-        <source>%1 an encrypted message</source>
+        <source>You sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>message-description:</name>
     <message>
-        <location line="-26"/>
-        <source>sent</source>
-        <comment>For when someone else is the sender</comment>
+        <location line="+3"/>
+        <source>%1 sent an encrypted message</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>message-description: </name>
+    <name>popups::UserMentions</name>
     <message>
-        <location line="-2"/>
-        <source>sent</source>
-        <comment>For when you are the sender</comment>
+        <location filename="../../src/popups/UserMentions.cpp" line="+61"/>
+        <source>This Room</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>utils</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+46"/>
-        <location filename="../../src/Utils.h" line="+55"/>
-        <source>You</source>
+        <location line="+1"/>
+        <source>All Rooms</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>utils</name>
     <message>
-        <location line="+219"/>
+        <location filename="../../src/Utils.cpp" line="+282"/>
         <source>sent a file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1154,7 +1231,7 @@ Media size: %2
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/Utils.h" line="-23"/>
+        <location filename="../../src/Utils.h" line="+4"/>
         <source>Unknown Message Type</source>
         <translation type="unfinished"></translation>
     </message>