summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/langs/nheko_cs.ts117
-rw-r--r--resources/langs/nheko_de.ts121
-rw-r--r--resources/langs/nheko_el.ts117
-rw-r--r--resources/langs/nheko_en.ts125
-rw-r--r--resources/langs/nheko_eo.ts117
-rw-r--r--resources/langs/nheko_es.ts168
-rw-r--r--resources/langs/nheko_et.ts121
-rw-r--r--resources/langs/nheko_fi.ts117
-rw-r--r--resources/langs/nheko_fr.ts241
-rw-r--r--resources/langs/nheko_hu.ts122
-rw-r--r--resources/langs/nheko_it.ts121
-rw-r--r--resources/langs/nheko_ja.ts119
-rw-r--r--resources/langs/nheko_ml.ts117
-rw-r--r--resources/langs/nheko_nl.ts117
-rw-r--r--resources/langs/nheko_pl.ts121
-rw-r--r--resources/langs/nheko_pt_PT.ts117
-rw-r--r--resources/langs/nheko_ro.ts119
-rw-r--r--resources/langs/nheko_ru.ts121
-rw-r--r--resources/langs/nheko_si.ts117
-rw-r--r--resources/langs/nheko_sv.ts121
-rw-r--r--resources/langs/nheko_zh_CN.ts121
21 files changed, 1794 insertions, 883 deletions
diff --git a/resources/langs/nheko_cs.ts b/resources/langs/nheko_cs.ts
index b1c699be..4339497a 100644
--- a/resources/langs/nheko_cs.ts
+++ b/resources/langs/nheko_cs.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation type="unfinished"></translation>
     </message>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1572,12 +1595,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1611,7 +1634,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1619,12 +1642,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1639,7 +1672,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1654,7 +1692,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1669,7 +1707,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1677,7 +1720,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1696,12 +1739,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1796,17 +1839,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1816,7 +1859,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2350,7 +2393,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2545,7 +2588,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_de.ts b/resources/langs/nheko_de.ts
index 79265073..40cabcbe 100644
--- a/resources/langs/nheko_de.ts
+++ b/resources/langs/nheko_de.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Du bist dem Raum beigetreten.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Nutzer konnte nicht eingeladen werden: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Einladung bestätigen</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Willst du wirklich %1 (%2) einladen?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Verbannung von %1 wurde aufgehoben.</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation>Möchtest du wirklich eine private Konversation mit %1 beginnen?</translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Migration des Caches fehlgeschlagen!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Geheimnisse entschlüsseln</translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Verschlüsselt</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Diese Nachricht ist unverschlüsselt!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Beispiel: https://mein.server:8787</translation>
         <translation>Leeres Passwort</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>SSO Anmeldung fehlgeschlagen</translation>
     </message>
@@ -739,7 +757,7 @@ Beispiel: https://mein.server:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation>entfernt</translation>
@@ -808,7 +826,7 @@ Beispiel: https://mein.server:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Auflegen</translation>
     </message>
@@ -837,6 +855,11 @@ Beispiel: https://mein.server:8787</translation>
         <source>Send</source>
         <translation>Senden</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Beispiel: https://mein.server:8787</translation>
         <translation>Bearbeiten</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation>Reaktion senden</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation>Antworten</translation>
     </message>
@@ -1107,7 +1130,7 @@ Beispiel: https://mein.server:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>keine Version gespeichert</translation>
     </message>
@@ -1280,7 +1303,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation>Aktivierung der Verschlüsselung fehlgeschlagen: %1</translation>
     </message>
@@ -1437,7 +1460,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Nachricht zurückziehen fehlgeschlagen: %1</translation>
     </message>
@@ -1468,7 +1491,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Datei speichern</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1577,12 +1600,12 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>%1 hat das Anklopfen zurückgezogen.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Du bist dem Raum beigetreten.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1616,7 +1639,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation>Bearbeitet</translation>
     </message>
@@ -1624,12 +1647,22 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Reaktion senden</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Antworten</translation>
     </message>
@@ -1644,7 +1677,12 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Lesebestätigungen</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Als gelesen markieren</translation>
     </message>
@@ -1659,7 +1697,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Zeige rohen, entschlüsselten Nachrichteninhalt</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Nachricht entfernen</translation>
     </message>
@@ -1674,7 +1712,12 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Öffne in externen Programm</translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Kein Raum geöffnet</translation>
     </message>
@@ -1682,7 +1725,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Keinen verschlüsselten Chat mit diesem User gefunden. Erstelle einen verschlüsselten 1:1 Chat mit diesem Nutzer und versuche es erneut.</translation>
     </message>
@@ -1701,12 +1744,12 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Kein Raum ausgewählt</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Raumoptionen</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Benutzer einladen</translation>
     </message>
@@ -1801,17 +1844,17 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Verifizieren</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Banne den Nutzer</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Starte eine private Konservation</translation>
     </message>
@@ -1821,7 +1864,7 @@ Schlüssel auszutauschen, wenn der normale Weg nicht zu funktionieren scheint.</
         <translation>Kicke den Nutzer</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation>Verifizierung zurückziehen</translation>
     </message>
@@ -2366,7 +2409,7 @@ Normalerweise animiert das den Taskbaricon oder färbt das Fenster orange ein.</
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Gestern</translation>
     </message>
@@ -2563,7 +2606,7 @@ Medien-Größe: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Du hast eine Audiodatei gesendet</translation>
     </message>
diff --git a/resources/langs/nheko_el.ts b/resources/langs/nheko_el.ts
index 56705903..c05c7b3e 100644
--- a/resources/langs/nheko_el.ts
+++ b/resources/langs/nheko_el.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation>Κενός κωδικός</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished">Προσκάλεσε χρήστες</translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2544,7 +2587,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_en.ts b/resources/langs/nheko_en.ts
index 02540e3d..1fc47995 100644
--- a/resources/langs/nheko_en.ts
+++ b/resources/langs/nheko_en.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>You joined this room.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Failed to invite user: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Confirm invite</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Do you really want to invite %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Unbanned user: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation>Do you really want to start a private chat with %1?</translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Cache migration failed!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Decrypt secrets</translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Encrypted</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>This message is not encrypted!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation>Encrypted by a verified device</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation>Encrypted by an unverified device, but you have trusted that user so far.</translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation>Encrypted by an unverified device</translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation>Forward Message</translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Example: https://server.my:8787</translation>
         <translation>Empty password</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>SSO login failed</translation>
     </message>
@@ -739,7 +757,7 @@ Example: https://server.my:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation>Encryption enabled</translation>
     </message>
@@ -808,7 +826,7 @@ Example: https://server.my:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Hang up</translation>
     </message>
@@ -837,6 +855,11 @@ Example: https://server.my:8787</translation>
         <source>Send</source>
         <translation>Send</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation>You don&apos;t have permission to send messages in this room</translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Example: https://server.my:8787</translation>
         <translation>Edit</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation>React</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation>Reply</translation>
     </message>
@@ -1107,7 +1130,7 @@ Example: https://server.my:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>no version stored</translation>
     </message>
@@ -1280,7 +1303,7 @@ E2E implementation until device verification is completed.</translation>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation>Failed to enable encryption: %1</translation>
     </message>
@@ -1437,7 +1460,7 @@ E2E implementation until device verification is completed.</translation>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Message redaction failed: %1</translation>
     </message>
@@ -1468,7 +1491,7 @@ E2E implementation until device verification is completed.</translation>
         <translation>Save file</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1577,19 +1600,19 @@ E2E implementation until device verification is completed.</translation>
         <translation>%1 redacted their knock.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>You joined this room.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 has changed their avatar and changed their display name to %2.</translation>
     </message>
     <message>
         <location line="+5"/>
         <source>%1 has changed their display name to %2.</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 has changed their display name to %2.</translation>
     </message>
     <message>
         <location line="+31"/>
@@ -1616,7 +1639,7 @@ E2E implementation until device verification is completed.</translation>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation>Edited</translation>
     </message>
@@ -1624,12 +1647,22 @@ E2E implementation until device verification is completed.</translation>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation>Copy</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation>Copy link location</translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>React</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Reply</translation>
     </message>
@@ -1644,7 +1677,12 @@ E2E implementation until device verification is completed.</translation>
         <translation>Read receipts</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation>Forward</translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Mark as read</translation>
     </message>
@@ -1659,7 +1697,7 @@ E2E implementation until device verification is completed.</translation>
         <translation>View decrypted raw message</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Remove message</translation>
     </message>
@@ -1674,7 +1712,12 @@ E2E implementation until device verification is completed.</translation>
         <translation>Open in external program</translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation>Copy link to event</translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>No room open</translation>
     </message>
@@ -1682,7 +1725,7 @@ E2E implementation until device verification is completed.</translation>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</translation>
     </message>
@@ -1701,12 +1744,12 @@ E2E implementation until device verification is completed.</translation>
         <translation>No room selected</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Room options</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Invite users</translation>
     </message>
@@ -1801,17 +1844,17 @@ E2E implementation until device verification is completed.</translation>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Verify</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Ban the user</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Start a private chat</translation>
     </message>
@@ -1821,7 +1864,7 @@ E2E implementation until device verification is completed.</translation>
         <translation>Kick the user</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation>Unverify</translation>
     </message>
@@ -2366,7 +2409,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Yesterday</translation>
     </message>
@@ -2563,7 +2606,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>You sent an audio clip</translation>
     </message>
diff --git a/resources/langs/nheko_eo.ts b/resources/langs/nheko_eo.ts
index edd671f2..b0740534 100644
--- a/resources/langs/nheko_eo.ts
+++ b/resources/langs/nheko_eo.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Vi aliĝis ĉi tiun ĉambron.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -166,12 +166,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -236,12 +236,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -350,7 +350,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -495,13 +495,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -585,6 +595,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -719,7 +737,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -740,7 +758,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -809,7 +827,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -838,6 +856,11 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <source>Send</source>
         <translation>Sendu</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -847,12 +870,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished">Reagu</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">Respondu</translation>
     </message>
@@ -1108,7 +1131,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1279,7 +1302,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished">Bone</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1438,7 +1461,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1469,7 +1492,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1580,12 +1603,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Vi aliĝis ĉi tiun ĉambron.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1619,7 +1642,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1627,12 +1650,22 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Reagu</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Respondu</translation>
     </message>
@@ -1647,7 +1680,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1662,7 +1700,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1677,7 +1715,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1685,7 +1728,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1704,12 +1747,12 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1804,17 +1847,17 @@ Ekzemplo: https://servisto.mia:8787</translation>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1824,7 +1867,7 @@ Ekzemplo: https://servisto.mia:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2359,7 +2402,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Hieraŭ</translation>
     </message>
@@ -2554,7 +2597,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_es.ts b/resources/langs/nheko_es.ts
index e13147e9..7e9fc4c6 100644
--- a/resources/langs/nheko_es.ts
+++ b/resources/langs/nheko_es.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Te has unido a esta sala.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>No se pudo invitar al usuario: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -407,7 +407,7 @@
     <message>
         <location line="+1"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+10"/>
@@ -423,13 +423,12 @@
 <context>
     <name>EmojiPicker</name>
     <message>
-        <location filename="../qml/emoji/EmojiPicker.qml" line="+114"/>
-        <location line="+181"/>
+        <location filename="../qml/emoji/EmojiPicker.qml" line="+59"/>
         <source>Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-66"/>
+        <location line="+172"/>
         <source>People</source>
         <translation type="unfinished"></translation>
     </message>
@@ -495,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -585,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -715,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -736,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation type="unfinished"></translation>
     </message>
@@ -805,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -834,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -843,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -898,7 +920,7 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+10"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+0"/>
@@ -913,7 +935,7 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+0"/>
         <source>Accept</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Aceptar</translation>
     </message>
 </context>
 <context>
@@ -970,7 +992,7 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+16"/>
         <source>No microphone found.</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">No se encontró micrófono.</translation>
     </message>
     <message>
         <location line="+22"/>
@@ -990,7 +1012,7 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+10"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
 </context>
 <context>
@@ -1104,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1751"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1166,12 +1188,12 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+169"/>
         <source>Accept</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Aceptar</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Decline</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Rechazar</translation>
     </message>
 </context>
 <context>
@@ -1275,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1357,7 +1379,7 @@ Example: https://server.my:8787</source>
     <message>
         <location line="+7"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
 </context>
 <context>
@@ -1432,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1463,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1522,6 +1544,16 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location line="+12"/>
+        <source>%1 has changed their avatar and changed their display name to %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+5"/>
+        <source>%1 has changed their display name to %2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location line="+2"/>
         <source>%1 changed their avatar.</source>
         <translation type="unfinished"></translation>
@@ -1572,12 +1604,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-785"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Te has unido a esta sala.</translation>
     </message>
     <message>
-        <location line="+787"/>
+        <location line="+878"/>
         <source>Rejected the knock from %1.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1601,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1609,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+113"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1629,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1644,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1659,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1667,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+455"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1686,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1786,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1806,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2311,7 +2363,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location line="+15"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
 </context>
 <context>
@@ -2340,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2355,7 +2407,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location line="+2"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+10"/>
@@ -2398,7 +2450,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location line="+1"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -2416,7 +2468,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location filename="../../src/dialogs/InviteUsers.cpp" line="+46"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+8"/>
@@ -2434,7 +2486,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location line="+2"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+7"/>
@@ -2447,7 +2499,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location filename="../../src/dialogs/LeaveRoom.cpp" line="+35"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+8"/>
@@ -2460,7 +2512,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location filename="../../src/dialogs/Logout.cpp" line="+35"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+8"/>
@@ -2478,7 +2530,7 @@ This usually causes the application icon in the task bar to animate in some fash
     <message>
         <location line="+1"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+93"/>
@@ -2493,7 +2545,7 @@ Media size: %2
     <message>
         <location filename="../../src/dialogs/ReCaptcha.cpp" line="+35"/>
         <source>Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Cancelar</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -2535,7 +2587,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_et.ts b/resources/langs/nheko_et.ts
index a8350213..c95cb1a5 100644
--- a/resources/langs/nheko_et.ts
+++ b/resources/langs/nheko_et.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Sa liitusid selle jututoaga.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Kutse saatmine kasutajale ei õnnestunud: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Kinnita kutse</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Kas sa tõesti soovid saata kutset kasutajale %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Suhtluskeeld eemaldatud: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation>Kas sa kindlasti soovid alustada otsevestlust kasutajaga %1?</translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Puhvri versiooniuuendus ebaõnnestus!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Dekrüpti andmed</translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Krüptitud</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>See sõnum on krüptimata!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Näiteks: https://server.minu:8787</translation>
         <translation>Tühi salasõna</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>Ühekordne sisselogimine ei õnnestunud</translation>
     </message>
@@ -739,7 +757,7 @@ Näiteks: https://server.minu:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation>Krüptimine on kasutusel</translation>
     </message>
@@ -808,7 +826,7 @@ Näiteks: https://server.minu:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Lõpeta kõne</translation>
     </message>
@@ -837,6 +855,11 @@ Näiteks: https://server.minu:8787</translation>
         <source>Send</source>
         <translation>Saada</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Näiteks: https://server.minu:8787</translation>
         <translation>Muuda</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation>Reageeri</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation>Vasta</translation>
     </message>
@@ -1107,7 +1130,7 @@ Näiteks: https://server.minu:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>salvestatud versiooni ei leidu</translation>
     </message>
@@ -1280,7 +1303,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Sobib</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation>Krüptimise kasutuselevõtmine ei õnnestunud: %1</translation>
     </message>
@@ -1437,7 +1460,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Sõnumi ümbersõnastamine ebaõnnestus: %1</translation>
     </message>
@@ -1468,7 +1491,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Salvesta fail</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1577,12 +1600,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>%1 muutis oma koputust jututoa uksele.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Sa liitusid jututoaga.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1616,7 +1639,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation>Muudetud</translation>
     </message>
@@ -1624,12 +1647,22 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Reageeri</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Vasta</translation>
     </message>
@@ -1644,7 +1677,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Lugemisteatised</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Märgi loetuks</translation>
     </message>
@@ -1659,7 +1697,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Näita sõnumi dekrüptitud lähtekoodi</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Eemalda sõnum</translation>
     </message>
@@ -1674,7 +1712,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Ava välise rakendusega</translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Ühtegi jututuba pole avatud</translation>
     </message>
@@ -1682,7 +1725,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Ühtegi krüptitud vestlust selle kasutajaga ei leidunud. Palun loo temaga krüptitud vestlus ja proovi uuesti.</translation>
     </message>
@@ -1701,12 +1744,12 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Jututuba on valimata</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Jututoa valikud</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Kutsu kasutajaid</translation>
     </message>
@@ -1801,17 +1844,17 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Verifitseeri</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Sea kasutajale suhtluskeeld</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Alusta privaatset vestlust</translation>
     </message>
@@ -1821,7 +1864,7 @@ testimiseks seni, kuni terviklik seadmete verifitseerimine on implementeeritud.<
         <translation>Müksa kasutaja välja</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation>Võta verifitseerimine tagasi</translation>
     </message>
@@ -2366,7 +2409,7 @@ See tavaliselt tähendab, et rakenduse ikoon tegumiribal annab mingit sorti anim
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Eile</translation>
     </message>
@@ -2563,7 +2606,7 @@ Meedia suurus: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Sa saatsid helifaili</translation>
     </message>
diff --git a/resources/langs/nheko_fi.ts b/resources/langs/nheko_fi.ts
index 2838af35..d12b1515 100644
--- a/resources/langs/nheko_fi.ts
+++ b/resources/langs/nheko_fi.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation>Tyhjä salasana</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>ei tallennettua versiota</translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Salauksen aktivointi epäonnistui: %1</translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Viestin muokkaus epäonnistui: %1</translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation>Lukukuittaukset</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Huoneen asetukset</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Kutsu käyttäjiä</translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Eilen</translation>
     </message>
@@ -2546,7 +2589,7 @@ Median koko: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Lähetit äänileikkeen</translation>
     </message>
diff --git a/resources/langs/nheko_fr.ts b/resources/langs/nheko_fr.ts
index 718f6aa5..240c8b9f 100644
--- a/resources/langs/nheko_fr.ts
+++ b/resources/langs/nheko_fr.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Vous avez rejoint ce salon.</translation>
     </message>
@@ -104,12 +104,12 @@
     <message>
         <location line="+12"/>
         <source>Unknown microphone: %1</source>
-        <translation>Microphone inconnu  : %1</translation>
+        <translation>Microphone inconnu&#xa0;&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Unknown camera: %1</source>
-        <translation>Caméra inconnue  : %1</translation>
+        <translation>Caméra inconnue&#xa0;&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+13"/>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Échec lors de l&apos;invitation de %1</translation>
     </message>
@@ -165,19 +165,19 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Confirmer l&apos;invitation</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
-        <translation>Voulez-vous vraiment inviter %1 (%2) ?</translation>
+        <translation>Voulez-vous vraiment inviter %1 (%2)&#x202f;?</translation>
     </message>
     <message>
         <location line="+11"/>
         <source>Failed to invite %1 to %2: %3</source>
-        <translation>Échec de l&apos;invitation de %1 dans %2 : %3</translation>
+        <translation>Échec de l&apos;invitation de %1 dans %2&#xa0;: %3</translation>
     </message>
     <message>
         <location line="+15"/>
@@ -187,7 +187,7 @@
     <message>
         <location line="+1"/>
         <source>Do you really want to kick %1 (%2)?</source>
-        <translation>Voulez-vous vraiment expulser %1 (%2) ?</translation>
+        <translation>Voulez-vous vraiment expulser %1 (%2)&#x202f;?</translation>
     </message>
     <message>
         <location line="+16"/>
@@ -202,7 +202,7 @@
     <message>
         <location line="+1"/>
         <source>Do you really want to ban %1 (%2)?</source>
-        <translation>Voulez-vous vraiment bannir %1 (%2) ?</translation>
+        <translation>Voulez-vous vraiment bannir %1 (%2)&#x202f;?</translation>
     </message>
     <message>
         <location line="+11"/>
@@ -222,12 +222,12 @@
     <message>
         <location line="+1"/>
         <source>Do you really want to unban %1 (%2)?</source>
-        <translation>Voulez-vous vraiment annuler le bannissement de %1 (%2) ?</translation>
+        <translation>Voulez-vous vraiment annuler le bannissement de %1 (%2)&#x202f;?</translation>
     </message>
     <message>
         <location line="+11"/>
         <source>Failed to unban %1 in %2: %3</source>
-        <translation>Échec de l&apos;annulation du bannissement de %1 dans %2 : %3</translation>
+        <translation>Échec de l&apos;annulation du bannissement de %1 dans %2&#xa0;: %3</translation>
     </message>
     <message>
         <location line="+5"/>
@@ -235,14 +235,14 @@
         <translation>%1 n&apos;est plus banni(e)</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation>Voulez-vous vraimer commencer une discussion privée avec %1 ?</translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
-        <translation>Échec de la migration du cache !</translation>
+        <translation>Échec de la migration du cache&#x202f;!</translation>
     </message>
     <message>
         <location line="+13"/>
@@ -267,18 +267,18 @@
     <message>
         <location line="+145"/>
         <source>Failed to setup encryption keys. Server response: %1 %2. Please try again later.</source>
-        <translation>Échec de la configuration des clés de chiffrement. Réponse du serveur : %1 %2. Veuillez réessayer plus tard.</translation>
+        <translation>Échec de la configuration des clés de chiffrement. Réponse du serveur&#xa0;: %1 %2. Veuillez réessayer plus tard.</translation>
     </message>
     <message>
         <location line="+34"/>
         <location line="+123"/>
         <source>Please try to login again: %1</source>
-        <translation>Veuillez vous reconnecter : %1</translation>
+        <translation>Veuillez vous reconnecter&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+51"/>
         <source>Failed to join room: %1</source>
-        <translation>Impossible de rejoindre le salon : %1</translation>
+        <translation>Impossible de rejoindre le salon&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+5"/>
@@ -288,22 +288,22 @@
     <message>
         <location line="+6"/>
         <source>Failed to remove invite: %1</source>
-        <translation>Impossible de supprimer l&apos;invitation : %1</translation>
+        <translation>Impossible de supprimer l&apos;invitation&#x202f;: %1</translation>
     </message>
     <message>
         <location line="+21"/>
         <source>Room creation failed: %1</source>
-        <translation>Échec de la création du salon : %1</translation>
+        <translation>Échec de la création du salon&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+18"/>
         <source>Failed to leave room: %1</source>
-        <translation>Impossible de quitter le salon : %1</translation>
+        <translation>Impossible de quitter le salon&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+61"/>
         <source>Failed to kick %1 from %2: %3</source>
-        <translation>Échec de l&apos;expulsion de %1 depuis %2  : %3</translation>
+        <translation>Échec de l&apos;expulsion de %1 depuis %2&#x202f;&#x202f;: %3</translation>
     </message>
 </context>
 <context>
@@ -349,19 +349,19 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Déchiffrer les secrets</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Enter your recovery key or passphrase to decrypt your secrets:</source>
-        <translation>Entrez votre clé de récupération ou phrase de passe pour déchiffrer vos secrets  :</translation>
+        <translation>Entrez votre clé de récupération ou phrase de passe pour déchiffrer vos secrets&#xa0;&#xa0;:</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>Enter your recovery key or passphrase called %1 to decrypt your secrets:</source>
-        <translation>Entrez votre clé de récupération ou votre phrase de passe nommée %1 pour déchiffrer vos secrets  :</translation>
+        <translation>Entrez votre clé de récupération ou votre phrase de passe nommée %1 pour déchiffrer vos secrets&#xa0;&#xa0;:</translation>
     </message>
     <message>
         <location line="+17"/>
@@ -384,17 +384,17 @@
     <message>
         <location line="+10"/>
         <source>Please verify the following digits. You should see the same numbers on both sides. If they differ, please press &apos;They do not match!&apos; to abort verification!</source>
-        <translation>Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir « Ils sont différents ! » pour annuler la vérification !</translation>
+        <translation>Veuillez vérifier les chiffres suivants. Vous devriez voir les mêmes chiffres des deux côtés. Si ceux-ci diffèrent, veuillez choisir «&#x202f;Ils sont différents&#x202f;!&#x202f;» pour annuler la vérification&#x202f;!</translation>
     </message>
     <message>
         <location line="+31"/>
         <source>They do not match!</source>
-        <translation>Ils sont différents !</translation>
+        <translation>Ils sont différents&#x202f;!</translation>
     </message>
     <message>
         <location line="+13"/>
         <source>They match!</source>
-        <translation>Ils sont identiques !</translation>
+        <translation>Ils sont identiques&#x202f;!</translation>
     </message>
 </context>
 <context>
@@ -478,30 +478,40 @@
     <message>
         <location line="+10"/>
         <source>Please verify the following emoji. You should see the same emoji on both sides. If they differ, please press &apos;They do not match!&apos; to abort verification!</source>
-        <translation>Veuillez vérifier les émoji suivantes. Vous devriez voir les mêmes émoji des deux côtés. Si celles-ci diffèrent, veuillez choisir « Elles sont différentes ! » pour annuler la vérification !</translation>
+        <translation>Veuillez vérifier les émoji suivantes. Vous devriez voir les mêmes émoji des deux côtés. Si celles-ci diffèrent, veuillez choisir «&#x202f;Elles sont différentes&#x202f;!&#x202f;» pour annuler la vérification&#x202f;!</translation>
     </message>
     <message>
         <location line="+376"/>
         <source>They do not match!</source>
-        <translation>Elles sont différentes !</translation>
+        <translation>Elles sont différentes&#x202f;!</translation>
     </message>
     <message>
         <location line="+13"/>
         <source>They match!</source>
-        <translation>Elles sont identiques !</translation>
+        <translation>Elles sont identiques&#x202f;!</translation>
     </message>
 </context>
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Chiffré</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
+        <translation>Ce message n&apos;est pas chiffré&#x202f;!</translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
-        <translation>Ce message n&apos;est pas chiffré !</translation>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -541,12 +551,12 @@
     <message>
         <location line="+13"/>
         <source>-- Replay attack! This message index was reused! --</source>
-        <translation>-- Attaque par rejeu (replay attack) ! Cet index de message a été réutilisé ! --</translation>
+        <translation>-- Attaque par rejeu (replay attack)&#x202f;! Cet index de message a été réutilisé&#x202f;! --</translation>
     </message>
     <message>
         <location line="+7"/>
         <source>-- Message by unverified device! --</source>
-        <translation>-- Message d&apos;un appareil non vérifié  --</translation>
+        <translation>-- Message d&apos;un appareil non vérifié&#x202f; --</translation>
     </message>
 </context>
 <context>
@@ -564,7 +574,7 @@
     <message>
         <location line="+4"/>
         <source>Key mismatch detected!</source>
-        <translation>Clés non correspondantes détectées !</translation>
+        <translation>Clés non correspondantes détectées&#x202f;!</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -627,9 +645,9 @@
 You can also put your homeserver address there, if your server doesn&apos;t support .well-known lookup.
 Example: @user:server.my
 If Nheko fails to discover your homeserver, it will show you a field to enter the server manually.</source>
-        <translation>Votre nom de connexion. Un mxid doit commencer par un « @ » suivi de l&apos;identifiant. L&apos;identifiant doit être suivi du nom de serveur, séparé de celui-ci par « : ».
+        <translation>Votre nom de connexion. Un mxid doit commencer par un «&#x202f;@&#x202f;» suivi de l&apos;identifiant. L&apos;identifiant doit être suivi du nom de serveur, séparé de celui-ci par «&#x202f;:&#x202f;».
 Vous pouvez également spécifier l&apos;adresse de votre serveur ici, si votre serveur ne supporte pas l&apos;identification .well-known.
-Exemple : @utilisateur :monserveur.example.com
+Exemple&#x202f;: @utilisateur&#x202f;:monserveur.example.com
 Si Nheko n&apos;arrive pas à trouver votre serveur, il vous proposera de l&apos;indiquer manuellement.</translation>
     </message>
     <message>
@@ -667,7 +685,7 @@ Si Nheko n&apos;arrive pas à trouver votre serveur, il vous proposera de l&apos
         <source>The address that can be used to contact you homeservers client API.
 Example: https://server.my:8787</source>
         <translation>L&apos;adresse qui peut être utilisée pour joindre l&apos;API client de votre serveur.
-Exemple : https ://monserveur.example.com :8787</translation>
+Exemple&#xa0;: https&#x202f;://monserveur.example.com&#x202f;:8787</translation>
     </message>
     <message>
         <location line="+19"/>
@@ -680,7 +698,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <location line="+160"/>
         <location line="+11"/>
         <source>You have entered an invalid Matrix ID  e.g @joe:matrix.org</source>
-        <translation>Vous avez entré un identifiant Matrix invalide (exemple correct : @moi :mon.serveur.fr)</translation>
+        <translation>Vous avez entré un identifiant Matrix invalide (exemple correct&#x202f;: @moi&#x202f;:mon.serveur.fr)</translation>
     </message>
     <message>
         <location line="-132"/>
@@ -718,7 +736,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <translation>Mot de passe vide</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>Échec de la connexion SSO</translation>
     </message>
@@ -739,7 +757,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation>retiré</translation>
@@ -752,7 +770,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+9"/>
         <source>room name changed to: %1</source>
-        <translation>nom du salon changé en : %1</translation>
+        <translation>nom du salon changé en&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+0"/>
@@ -762,7 +780,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+9"/>
         <source>topic changed to: %1</source>
-        <translation>sujet changé pour : %1</translation>
+        <translation>sujet changé pour&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+0"/>
@@ -772,7 +790,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+9"/>
         <source>%1 created and configured room: %2</source>
-        <translation>%1 a créé et configuré le salon : %2</translation>
+        <translation>%1 a créé et configuré le salon&#xa0;: %2</translation>
     </message>
     <message>
         <location line="+12"/>
@@ -808,7 +826,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Raccrocher</translation>
     </message>
@@ -837,6 +855,11 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <source>Send</source>
         <translation>Envoyer</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <translation>Modifier</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation>Réagir</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation>Répondre</translation>
     </message>
@@ -876,7 +899,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+15"/>
         <source>To allow other users to see, which of your devices actually belong to you, you can verify them. This also allows key backup to work automatically. Verify %1 now?</source>
-        <translation>Pour permettre aux autres utilisateurs de vérifier quels appareils de votre compte sont sous votre contrôle, vous pouvez vérifier ceux-ci. Cela permet également à ces appareils de sauvegarder vos clés de chiffrement automatiquement. Vérifier %1 maintenant ?</translation>
+        <translation>Pour permettre aux autres utilisateurs de vérifier quels appareils de votre compte sont sous votre contrôle, vous pouvez vérifier ceux-ci. Cela permet également à ces appareils de sauvegarder vos clés de chiffrement automatiquement. Vérifier %1 maintenant&#x202f;?</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -944,7 +967,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <location line="+4"/>
         <source>%1: %2</source>
         <comment>Format a normal message in a notification. %1 is the sender, %2 the message</comment>
-        <translation>%1  : %2</translation>
+        <translation>%1&#xa0;&#xa0;: %2</translation>
     </message>
     <message>
         <location filename="../../src/notifications/ManagerMac.cpp" line="-1"/>
@@ -968,7 +991,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location filename="../qml/voip/PlaceCall.qml" line="+48"/>
         <source>Place a call to %1?</source>
-        <translation>Appeler %1 ?</translation>
+        <translation>Appeler %1&#x202f;?</translation>
     </message>
     <message>
         <location line="+16"/>
@@ -1001,7 +1024,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location filename="../qml/delegates/Placeholder.qml" line="+8"/>
         <source>unimplemented event: </source>
-        <translation>Évènement non implémenté : </translation>
+        <translation>Évènement non implémenté&#xa0;: </translation>
     </message>
 </context>
 <context>
@@ -1033,7 +1056,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <location line="+2"/>
         <location line="+287"/>
         <source>The username must not be empty, and must contain only the characters a-z, 0-9, ., _, =, -, and /.</source>
-        <translation>Le nom d&apos;utilisateur ne doit pas être vide, et ne peut contenir que les caractères a à z, 0 à 9, et « . _ = - / ».</translation>
+        <translation>Le nom d&apos;utilisateur ne doit pas être vide, et ne peut contenir que les caractères a à z, 0 à 9, et «&#x202f;. _ = - /&#x202f;».</translation>
     </message>
     <message>
         <location line="-283"/>
@@ -1068,7 +1091,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+62"/>
         <source>No supported registration flows!</source>
-        <translation>Pas de méthode d&apos;inscription supportée !</translation>
+        <translation>Pas de méthode d&apos;inscription supportée&#xa0;!</translation>
     </message>
     <message>
         <location line="+210"/>
@@ -1107,7 +1130,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>pas de version enregistrée</translation>
     </message>
@@ -1122,7 +1145,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
     <message>
         <location line="+7"/>
         <source>Tag room as:</source>
-        <translation>Étiqueter le salon comme :</translation>
+        <translation>Étiqueter le salon comme&#xa0;:</translation>
     </message>
     <message>
         <location line="+18"/>
@@ -1164,7 +1187,7 @@ Exemple : https ://monserveur.example.com :8787</translation>
         <location line="+1"/>
         <source>Tag:</source>
         <comment>Tag name prompt</comment>
-        <translation>Étiquette :</translation>
+        <translation>Étiquette&#xa0;:</translation>
     </message>
     <message>
         <location line="+169"/>
@@ -1280,9 +1303,9 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
-        <translation>Échec de l&apos;activation du chiffrement  : %1</translation>
+        <translation>Échec de l&apos;activation du chiffrement&#xa0;&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+228"/>
@@ -1302,13 +1325,13 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location line="+5"/>
         <source>Error while reading file: %1</source>
-        <translation type="unfinished">Erreur lors de la lecture du fichier  : %1</translation>
+        <translation type="unfinished">Erreur lors de la lecture du fichier&#xa0;&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+34"/>
         <location line="+20"/>
         <source>Failed to upload image: %s</source>
-        <translation type="unfinished">Échec de l&apos;envoi de l&apos;image  : %s</translation>
+        <translation type="unfinished">Échec de l&apos;envoi de l&apos;image&#xa0;&#xa0;: %s</translation>
     </message>
 </context>
 <context>
@@ -1316,17 +1339,17 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location filename="../qml/voip/ScreenShare.qml" line="+30"/>
         <source>Share desktop with %1?</source>
-        <translation>Partager le bureau avec %1  ?</translation>
+        <translation>Partager le bureau avec %1&#x202f;&#x202f;?</translation>
     </message>
     <message>
         <location line="+11"/>
         <source>Window:</source>
-        <translation>Fenêtre  :</translation>
+        <translation>Fenêtre&#x202f;&#x202f;:</translation>
     </message>
     <message>
         <location line="+20"/>
         <source>Frame rate:</source>
-        <translation>Fréquence d&apos;images  :</translation>
+        <translation>Fréquence d&apos;images&#x202f;&#x202f;:</translation>
     </message>
     <message>
         <location line="+19"/>
@@ -1426,7 +1449,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location line="+12"/>
         <source>Verification successful! Both sides verified their devices!</source>
-        <translation>Vérification réussie ! Les deux côtés ont vérifié leur appareil !</translation>
+        <translation>Vérification réussie&#x202f;! Les deux côtés ont vérifié leur appareil&#x202f;!</translation>
     </message>
     <message>
         <location line="+12"/>
@@ -1437,15 +1460,15 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
-        <translation>Échec de la suppression du message : %1</translation>
+        <translation>Échec de la suppression du message&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+73"/>
         <location line="+5"/>
         <source>Failed to encrypt event, sending aborted!</source>
-        <translation>Échec du chiffrement de l&apos;évènement, envoi abandonné !</translation>
+        <translation>Échec du chiffrement de l&apos;évènement, envoi abandonné&#x202f;!</translation>
     </message>
     <message>
         <location line="+164"/>
@@ -1468,7 +1491,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Enregistrer le fichier</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1577,12 +1600,12 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>%1 ne frappe plus au salon.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Vous avez rejoint ce salon.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1600,12 +1623,12 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <location line="+2"/>
         <source>%1 left after having already left!</source>
         <comment>This is a leave event after the user already left and shouldn&apos;t happen apart from state resets</comment>
-        <translation>%1 a quitté le salon après l&apos;avoir déjà quitté !</translation>
+        <translation>%1 a quitté le salon après l&apos;avoir déjà quitté&#x202f;!</translation>
     </message>
     <message>
         <location line="+15"/>
         <source> Reason: %1</source>
-        <translation>Raison : %1</translation>
+        <translation>Raison&#xa0;: %1</translation>
     </message>
     <message>
         <location line="-5"/>
@@ -1616,7 +1639,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation>Modifié</translation>
     </message>
@@ -1624,12 +1647,22 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Réagir</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Réponse</translation>
     </message>
@@ -1644,7 +1677,12 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Accusés de lecture</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Marquer comme lu</translation>
     </message>
@@ -1659,7 +1697,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Voir le message déchiffré brut</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Retirer le message</translation>
     </message>
@@ -1674,7 +1712,12 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Ouvrir dans une application externe</translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Aucun salon ouvert</translation>
     </message>
@@ -1682,7 +1725,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Pas de discussion privée et chiffrée trouvée avec cet utilisateur. Créez-en une et réessayez.</translation>
     </message>
@@ -1701,12 +1744,12 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Pas de salon sélectionné</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Options du salon</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Inviter des utilisateurs</translation>
     </message>
@@ -1759,7 +1802,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location line="+1"/>
         <source>Status:</source>
-        <translation>Statut :</translation>
+        <translation>Statut&#xa0;:</translation>
     </message>
     <message>
         <location line="+8"/>
@@ -1801,17 +1844,17 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Vérifier</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Bannir l&apos;utilisateur</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Créer une nouvelle discussion privée</translation>
     </message>
@@ -1821,7 +1864,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
         <translation>Expulser l&apos;utilisateur</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation>Dé-vérifier</translation>
     </message>
@@ -1843,7 +1886,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location line="+5"/>
         <source>Error while reading file: %1</source>
-        <translation>Erreur lors de la lecture du fichier  : %1</translation>
+        <translation>Erreur lors de la lecture du fichier&#xa0;&#xa0;: %1</translation>
     </message>
 </context>
 <context>
@@ -1880,7 +1923,7 @@ tester le chiffrement de bout en bout tant que la vérification des appareils n&
     <message>
         <location line="-210"/>
         <source>profile: %1</source>
-        <translation>profil : %1</translation>
+        <translation>profil&#x202f;: %1</translation>
     </message>
     <message>
         <location line="+96"/>
@@ -2295,7 +2338,7 @@ Cela met l&apos;application en évidence dans la barre des tâches.</translation
     <message>
         <location line="-27"/>
         <source>Enter the passphrase to decrypt the file:</source>
-        <translation>Entrez la clé secrète pour déchiffrer le fichier  :</translation>
+        <translation>Entrez la clé secrète pour déchiffrer le fichier&#xa0;&#xa0;:</translation>
     </message>
     <message>
         <location line="+8"/>
@@ -2306,7 +2349,7 @@ Cela met l&apos;application en évidence dans la barre des tâches.</translation
     <message>
         <location line="-8"/>
         <source>Enter passphrase to encrypt your session keys:</source>
-        <translation>Entrez une clé secrète pour chiffrer vos clés de session  :</translation>
+        <translation>Entrez une clé secrète pour chiffrer vos clés de session&#xa0;&#xa0;:</translation>
     </message>
     <message>
         <location line="+15"/>
@@ -2368,7 +2411,7 @@ Cela met l&apos;application en évidence dans la barre des tâches.</translation
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Hier</translation>
     </message>
@@ -2565,7 +2608,7 @@ Taille du média : %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Vous avez envoyé un message audio</translation>
     </message>
@@ -2627,12 +2670,12 @@ Taille du média : %2
     <message>
         <location line="+5"/>
         <source>You: %1</source>
-        <translation>Vous  : %1</translation>
+        <translation>Vous&#xa0;&#xa0;: %1</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>%1: %2</source>
-        <translation>%1  : %2</translation>
+        <translation>%1&#xa0;&#xa0;: %2</translation>
     </message>
     <message>
         <location line="+7"/>
diff --git a/resources/langs/nheko_hu.ts b/resources/langs/nheko_hu.ts
index 6feae03a..e602929b 100644
--- a/resources/langs/nheko_hu.ts
+++ b/resources/langs/nheko_hu.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Csatlakoztál ehhez a szobához.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Nem sikerült meghívni a felhasználót: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Meghívás megerősítése</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Biztos, hogy meg akarod hívni a következő felhasználót: %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Kitiltás feloldva a felhasználónak: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation>Biztosan privát csevegést akarsz indítani %1 felhasználóval?</translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Gyorsítótár migráció nem sikerült!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Titkos tároló feloldása</translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Titkosítva</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Ez az üzenet nincs titkosítva!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Példa: https://szerver.em:8787</translation>
         <translation>Üres jelszó</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>SSO bejelentkezés nem sikerült</translation>
     </message>
@@ -739,7 +757,7 @@ Példa: https://szerver.em:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation>Titkosítás bekapcsolva</translation>
     </message>
@@ -808,7 +826,7 @@ Példa: https://szerver.em:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Hívás befejezése</translation>
     </message>
@@ -837,6 +855,11 @@ Példa: https://szerver.em:8787</translation>
         <source>Send</source>
         <translation>Küldés</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Példa: https://szerver.em:8787</translation>
         <translation>Szerkesztés</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation>Reakció</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation>Válasz</translation>
     </message>
@@ -1107,7 +1130,7 @@ Példa: https://szerver.em:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>nincs tárolva verzió</translation>
     </message>
@@ -1280,7 +1303,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation>Nem sikerült a titkosítás aktiválása: %1</translation>
     </message>
@@ -1437,7 +1460,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Az üzenet visszavonása nem sikerült: %1</translation>
     </message>
@@ -1468,12 +1491,11 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>Fájl mentése</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
             <numerusform>%1%2 gépel.</numerusform>
-            <numerusform>%1 és %2 gépelnek.</numerusform>
         </translation>
     </message>
     <message>
@@ -1577,12 +1599,12 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>%1 visszavonta a kopogását.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Csatlakoztál ehhez a szobához.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1616,7 +1638,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation>Szerkesztve</translation>
     </message>
@@ -1624,12 +1646,22 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Reakció</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Válasz</translation>
     </message>
@@ -1644,7 +1676,12 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>Olvasási jegyek</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Megjelölés olvasottként</translation>
     </message>
@@ -1659,7 +1696,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>Előzőleg titkosított nyers üzenet megtekintése</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Üzenet eltávolítása</translation>
     </message>
@@ -1674,7 +1711,12 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>Megnyitás külső programban</translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Nincs nyitott szoba</translation>
     </message>
@@ -1682,7 +1724,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Nem található titkosított privát csevegés ezzel a felhasználóval. Hozz létre egy titkosított privát csevegést vele, és próbáld újra!</translation>
     </message>
@@ -1701,12 +1743,12 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>Nincs kiválasztva szoba</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Szoba beállításai</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Felhasználók meghívása</translation>
     </message>
@@ -1801,17 +1843,17 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Hitelesítés</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>A felhasználó tiltása</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Privát csevegés indítása</translation>
     </message>
@@ -1821,7 +1863,7 @@ végpontig (E2E) titkosítás tesztelésére, amíg be nincs fejezve az eszközh
         <translation>A felhasználó kirúgása</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation>Hitelesítés visszavonása</translation>
     </message>
@@ -2367,7 +2409,7 @@ Ettől általában animálttá válik az alkalmazásablakok listáján szereplő
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Tegnap</translation>
     </message>
@@ -2564,7 +2606,7 @@ Média mérete: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Küldtél egy hangfájlt</translation>
     </message>
diff --git a/resources/langs/nheko_it.ts b/resources/langs/nheko_it.ts
index ba251df1..7fe04e1b 100644
--- a/resources/langs/nheko_it.ts
+++ b/resources/langs/nheko_it.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Sei entrato in questa stanza.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Impossibile invitare l&apos;utente: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Rimosso il ban dall&apos;utente: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Migrazione della cache fallita!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Criptato</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Questo messaggio è in chiaro!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Esempio: https://server.mio:8787</translation>
         <translation>Password vuota</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>Accesso SSO fallito</translation>
     </message>
@@ -739,7 +757,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -808,7 +826,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -837,6 +855,11 @@ Esempio: https://server.mio:8787</translation>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Esempio: https://server.mio:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">Risposta</translation>
     </message>
@@ -1107,7 +1130,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>nessuna versione memorizzata</translation>
     </message>
@@ -1278,7 +1301,7 @@ Esempio: https://server.mio:8787</translation>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Impossibile abilitare la crittografia: %1</translation>
     </message>
@@ -1435,7 +1458,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Oscuramento del messaggio fallito: %1</translation>
     </message>
@@ -1466,7 +1489,7 @@ Esempio: https://server.mio:8787</translation>
         <translation>Salva file</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1575,12 +1598,12 @@ Esempio: https://server.mio:8787</translation>
         <translation>%1 ha oscurato la sua bussata.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Sei entrato in questa stanza.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1614,7 +1637,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1622,12 +1645,22 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Risposta</translation>
     </message>
@@ -1642,7 +1675,12 @@ Esempio: https://server.mio:8787</translation>
         <translation>Leggi le ricevute</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Segna come letto</translation>
     </message>
@@ -1657,7 +1695,7 @@ Esempio: https://server.mio:8787</translation>
         <translation>Mostra il messaggio grezzo decriptato</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1672,7 +1710,12 @@ Esempio: https://server.mio:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Nessuna stanza aperta</translation>
     </message>
@@ -1680,7 +1723,7 @@ Esempio: https://server.mio:8787</translation>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1699,12 +1742,12 @@ Esempio: https://server.mio:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished">Opzioni della stanza</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Utenti invitati</translation>
     </message>
@@ -1799,17 +1842,17 @@ Esempio: https://server.mio:8787</translation>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1819,7 +1862,7 @@ Esempio: https://server.mio:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2353,7 +2396,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Ieri</translation>
     </message>
@@ -2550,7 +2593,7 @@ Peso media: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Hai inviato una clip audio</translation>
     </message>
diff --git a/resources/langs/nheko_ja.ts b/resources/langs/nheko_ja.ts
index 974595ea..997ffd1a 100644
--- a/resources/langs/nheko_ja.ts
+++ b/resources/langs/nheko_ja.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>ユーザーを招待できませんでした: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>永久追放を解除されたユーザー: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>暗号化されています</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation>パスワードが入力されていません</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">返信</translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>バージョンが保存されていません</translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">暗号化を有効にできませんでした: %1</translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>メッセージを編集できませんでした: %1</translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation>ファイルを保存</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1570,12 +1593,12 @@ Example: https://server.my:8787</source>
         <translation>%1がノックを編集しました。</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1609,7 +1632,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1617,12 +1640,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished">返信</translation>
     </message>
@@ -1637,7 +1670,12 @@ Example: https://server.my:8787</source>
         <translation>開封確認</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>既読にする</translation>
     </message>
@@ -1652,7 +1690,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1667,7 +1705,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>部屋が開いていません</translation>
     </message>
@@ -1675,7 +1718,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,12 +1737,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished">部屋のオプション</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished">ユーザーを招待</translation>
     </message>
@@ -1794,17 +1837,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1814,7 +1857,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2348,7 +2391,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>昨日</translation>
     </message>
@@ -2545,7 +2588,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>音声データを送信しました</translation>
     </message>
diff --git a/resources/langs/nheko_ml.ts b/resources/langs/nheko_ml.ts
index 6b24e784..79bf26ee 100644
--- a/resources/langs/nheko_ml.ts
+++ b/resources/langs/nheko_ml.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>ഉപയോക്താവിനെ ക്ഷണിക്കുന്നതിൽ പരാജയപ്പെട്ടു: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>ക്ഷണം ഉറപ്പാക്കു</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation type="unfinished"></translation>
     </message>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation>അയക്കുക</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">ശരി</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished">നിങ്ങൾ ഈ മുറിയിൽ ചേർന്നു.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2544,7 +2587,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_nl.ts b/resources/langs/nheko_nl.ts
index a4a44067..09270b29 100644
--- a/resources/langs/nheko_nl.ts
+++ b/resources/langs/nheko_nl.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Je bent lid geworden van deze kamer.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Gebruiker uitnodigen mislukt: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation>Leeg wachtwoord</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished">Je bent lid geworden van deze kamer.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">Leesbevestigingen</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished">Gebruikers uitnodigen</translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2546,7 +2589,7 @@ Mediagrootte: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_pl.ts b/resources/langs/nheko_pl.ts
index dbeecef6..cc542093 100644
--- a/resources/langs/nheko_pl.ts
+++ b/resources/langs/nheko_pl.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Dołączyłeś(-łaś) do tego pokoju.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Nie udało się zaprosić użytkownika: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Czy na pewno chcesz zaprosić %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Odblokowano użytkownika: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Nie udało się przenieść pamięci podręcznej!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Zaszyfrowane</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Ta wiadomość nie jest zaszyfrowana!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -716,7 +734,7 @@ Example: https://server.my:8787</source>
         <translation>Puste hasło</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>Logowanie SSO zakończone niepowodzeniem</translation>
     </message>
@@ -737,7 +755,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -806,7 +824,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -835,6 +853,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -844,12 +867,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1105,7 +1128,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1276,7 +1299,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Nie udało się włączyć szyfrowania: %1</translation>
     </message>
@@ -1433,7 +1456,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished">Redagowanie wiadomości nie powiodło się: %1</translation>
     </message>
@@ -1464,7 +1487,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1574,12 +1597,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished">Dołączyłeś(-łaś) do tego pokoju.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1613,7 +1636,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1621,12 +1644,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1641,7 +1674,12 @@ Example: https://server.my:8787</source>
         <translation>Potwierdzenia przeczytania</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,7 +1694,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1671,7 +1709,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1679,7 +1722,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1698,12 +1741,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished">Ustawienia pokoju</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished">Zaproś użytkowników</translation>
     </message>
@@ -1798,17 +1841,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1818,7 +1861,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2352,7 +2395,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2549,7 +2592,7 @@ Rozmiar multimediów: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_pt_PT.ts b/resources/langs/nheko_pt_PT.ts
index 97a98a1f..5b041107 100644
--- a/resources/langs/nheko_pt_PT.ts
+++ b/resources/langs/nheko_pt_PT.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation type="unfinished"></translation>
     </message>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2544,7 +2587,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_ro.ts b/resources/langs/nheko_ro.ts
index 7ce14e19..7c35ba42 100644
--- a/resources/langs/nheko_ro.ts
+++ b/resources/langs/nheko_ro.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Te-ai alăturat camerei.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Nu s-a putut invita utilizatorul: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Utilizator dezinterzis: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Nu s-a putut migra cache-ul!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Criptat</translation>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation>Parolă necompletată</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>Conectarea SSO a eșuat</translation>
     </message>
@@ -739,7 +757,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -808,7 +826,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -837,6 +855,11 @@ Exemplu: https://serverul.meu:8787</translation>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">Răspuns</translation>
     </message>
@@ -1107,7 +1130,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>nicio versiune stocată</translation>
     </message>
@@ -1278,7 +1301,7 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Nu s-a putut activa criptarea: %1</translation>
     </message>
@@ -1435,7 +1458,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Redactare mesaj eșuată: %1</translation>
     </message>
@@ -1466,7 +1489,7 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation>Salvați fișier</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1576,12 +1599,12 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation>%1 și-a redactat ciocănitul.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Te-ai alăturat camerei.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1615,7 +1638,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1623,12 +1646,22 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Răspuns</translation>
     </message>
@@ -1643,7 +1676,12 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation>Confirmări de citire</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Marcați ca citit</translation>
     </message>
@@ -1658,7 +1696,7 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation>Vedeți mesajul brut decriptat</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1673,7 +1711,12 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Nicio cameră deschisă</translation>
     </message>
@@ -1681,7 +1724,7 @@ Exemplu: https://serverul.meu:8787</translation>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1700,12 +1743,12 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1800,17 +1843,17 @@ Exemplu: https://serverul.meu:8787</translation>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1820,7 +1863,7 @@ Exemplu: https://serverul.meu:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2354,7 +2397,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Ieri</translation>
     </message>
@@ -2551,7 +2594,7 @@ Dimensiune media: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Ai trimis un clip audio</translation>
     </message>
diff --git a/resources/langs/nheko_ru.ts b/resources/langs/nheko_ru.ts
index aa52fa43..3ff6088c 100644
--- a/resources/langs/nheko_ru.ts
+++ b/resources/langs/nheko_ru.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Вы присоединились к этой комнате.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Не удалось пригласить пользователя: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Подтвердите приглашение</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Вы точно хотите пригласить %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Разблокированный пользователь: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Миграция кэша не удалась!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Зашифровано</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Это сообщение не зашифровано!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Example: https://server.my:8787</source>
         <translation>Пустой пароль</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>SSO вход не удался</translation>
     </message>
@@ -739,7 +757,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation>убрано</translation>
@@ -808,7 +826,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Завершить звонок</translation>
     </message>
@@ -837,6 +855,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation>Отправить</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished">Отреагировать</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">Ответить</translation>
     </message>
@@ -1107,7 +1130,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>нет сохраненной версии</translation>
     </message>
@@ -1278,7 +1301,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished">ОК</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Не удалось включить шифрование: %1</translation>
     </message>
@@ -1435,7 +1458,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Ошибка редактирования сообщения: %1</translation>
     </message>
@@ -1466,7 +1489,7 @@ Example: https://server.my:8787</source>
         <translation>Сохранить файл</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1576,12 +1599,12 @@ Example: https://server.my:8787</source>
         <translation>%1 отредактировал его &quot;стук&quot;.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Вы присоединились к этой комнате.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1615,7 +1638,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1623,12 +1646,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Отреагировать</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Ответить</translation>
     </message>
@@ -1643,7 +1676,12 @@ Example: https://server.my:8787</source>
         <translation>Посмотреть получателей</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Пометить как прочианное</translation>
     </message>
@@ -1658,7 +1696,7 @@ Example: https://server.my:8787</source>
         <translation>Просмототреть дешифрованое сырое сообщение</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Убрать сообщение</translation>
     </message>
@@ -1673,7 +1711,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Комната не выбрана</translation>
     </message>
@@ -1681,7 +1724,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Не найдено личного чата с этим пользователем. Создайте зашифрованный личный чат с этим пользователем и попытайтесь еще раз.</translation>
     </message>
@@ -1700,12 +1743,12 @@ Example: https://server.my:8787</source>
         <translation>Комнаты не выбраны</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Настройки комнаты</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Пригласить пользователей</translation>
     </message>
@@ -1800,17 +1843,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Верифицировать</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Заблокировать пользователя</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Создать приватный чат</translation>
     </message>
@@ -1820,7 +1863,7 @@ Example: https://server.my:8787</source>
         <translation>Выгнать пользователя</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2360,7 +2403,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Вчера</translation>
     </message>
@@ -2557,7 +2600,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Вы отправили аудио запись</translation>
     </message>
diff --git a/resources/langs/nheko_si.ts b/resources/langs/nheko_si.ts
index 4a6ea879..c9b094c3 100644
--- a/resources/langs/nheko_si.ts
+++ b/resources/langs/nheko_si.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,13 +494,23 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
+        <source>This message is not encrypted!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+0"/>
-        <source>This message is not encrypted!</source>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1571,12 +1594,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1610,7 +1633,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1618,12 +1641,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1638,7 +1671,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1653,7 +1691,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1668,7 +1706,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1676,7 +1719,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1695,12 +1738,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1795,17 +1838,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1815,7 +1858,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2349,7 +2392,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2544,7 +2587,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/resources/langs/nheko_sv.ts b/resources/langs/nheko_sv.ts
index 8a3434b7..84410098 100644
--- a/resources/langs/nheko_sv.ts
+++ b/resources/langs/nheko_sv.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>Du gick med i detta rum.</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>Kunde inte bjuda in användare: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation>Bekräfta inbjudan</translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation>Är du säker på att du vill bjuda in %1 (%2)?</translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>Hävde bannlysningen av användare: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>Cache-migration misslyckades!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation>Dekryptera hemliga nycklar</translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>Krypterad</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>Detta meddelande är inte krypterat!</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -718,7 +736,7 @@ Exempel: https://server.my:8787</translation>
         <translation>Tomt lösenord</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation>SSO-inloggning misslyckades</translation>
     </message>
@@ -739,7 +757,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+127"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+128"/>
         <source>Encryption enabled</source>
         <translation>Kryptering aktiverad</translation>
     </message>
@@ -808,7 +826,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation>Lägg på</translation>
     </message>
@@ -837,6 +855,11 @@ Exempel: https://server.my:8787</translation>
         <source>Send</source>
         <translation>Skicka</translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -846,12 +869,12 @@ Exempel: https://server.my:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished">Reagera</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished">Svara</translation>
     </message>
@@ -1107,7 +1130,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation>ingen version lagrad</translation>
     </message>
@@ -1278,7 +1301,7 @@ Exempel: https://server.my:8787</translation>
         <translation type="unfinished">OK</translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">Kunde inte aktivera kryptering: %1</translation>
     </message>
@@ -1435,7 +1458,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation>Kunde inte maskera meddelande: %1</translation>
     </message>
@@ -1466,7 +1489,7 @@ Exempel: https://server.my:8787</translation>
         <translation>Spara fil</translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation>
@@ -1575,12 +1598,12 @@ Exempel: https://server.my:8787</translation>
         <translation>%1 maskerade sin knackning.</translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation>Du gick med i detta rum.</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1614,7 +1637,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1622,12 +1645,22 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>React</source>
         <translation>Reagera</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Reply</source>
         <translation>Svara</translation>
     </message>
@@ -1642,7 +1675,12 @@ Exempel: https://server.my:8787</translation>
         <translation>Läskvitton</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation>Markera som läst</translation>
     </message>
@@ -1657,7 +1695,7 @@ Exempel: https://server.my:8787</translation>
         <translation>Visa dekrypterad meddelandekälla</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation>Ta bort meddelande</translation>
     </message>
@@ -1672,7 +1710,12 @@ Exempel: https://server.my:8787</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation>Inget rum öppet</translation>
     </message>
@@ -1680,7 +1723,7 @@ Exempel: https://server.my:8787</translation>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation>Ingen krypterad privat chatt med denna användare kunde hittas. Skapa en krypterad privat chatt med användaren och försök igen.</translation>
     </message>
@@ -1699,12 +1742,12 @@ Exempel: https://server.my:8787</translation>
         <translation>Inget rum markerat</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation>Alternativ för rum</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>Bjud in användare</translation>
     </message>
@@ -1799,17 +1842,17 @@ Exempel: https://server.my:8787</translation>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation>Bekräfta</translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation>Bannlys användaren</translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation>Starta en privat chatt</translation>
     </message>
@@ -1819,7 +1862,7 @@ Exempel: https://server.my:8787</translation>
         <translation>Sparka ut användaren</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2361,7 +2404,7 @@ Detta gör vanligtvis att ikonen i aktivitetsfältet animeras på något sätt.<
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation>Igår</translation>
     </message>
@@ -2558,7 +2601,7 @@ Mediastorlek: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation>Du skickade ett ljudklipp</translation>
     </message>
diff --git a/resources/langs/nheko_zh_CN.ts b/resources/langs/nheko_zh_CN.ts
index f09cdfcd..a5d20b67 100644
--- a/resources/langs/nheko_zh_CN.ts
+++ b/resources/langs/nheko_zh_CN.ts
@@ -56,7 +56,7 @@
 <context>
     <name>Cache</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+2004"/>
+        <location filename="../../src/Cache.cpp" line="+2016"/>
         <source>You joined this room.</source>
         <translation>您已加入此房间</translation>
     </message>
@@ -133,7 +133,7 @@
 <context>
     <name>ChatPage</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+202"/>
+        <location filename="../../src/ChatPage.cpp" line="+204"/>
         <source>Failed to invite user: %1</source>
         <translation>邀请用户失败: %1</translation>
     </message>
@@ -165,12 +165,12 @@
     </message>
     <message>
         <location line="+35"/>
-        <location line="+323"/>
+        <location line="+324"/>
         <source>Confirm invite</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-322"/>
+        <location line="-323"/>
         <source>Do you really want to invite %1 (%2)?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -235,12 +235,12 @@
         <translation>解禁用户: %1</translation>
     </message>
     <message>
-        <location line="+226"/>
+        <location line="+227"/>
         <source>Do you really want to start a private chat with %1?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-817"/>
+        <location line="-818"/>
         <source>Cache migration failed!</source>
         <translation>缓存迁移失败!</translation>
     </message>
@@ -349,7 +349,7 @@
 <context>
     <name>CrossSigningSecrets</name>
     <message>
-        <location filename="../../src/ChatPage.cpp" line="+227"/>
+        <location filename="../../src/ChatPage.cpp" line="+228"/>
         <source>Decrypt secrets</source>
         <translation type="unfinished"></translation>
     </message>
@@ -494,15 +494,25 @@
 <context>
     <name>EncryptionIndicator</name>
     <message>
-        <location filename="../qml/EncryptionIndicator.qml" line="+23"/>
-        <source>Encrypted</source>
-        <translation>已加密</translation>
-    </message>
-    <message>
-        <location line="+0"/>
+        <location filename="../qml/EncryptionIndicator.qml" line="+34"/>
         <source>This message is not encrypted!</source>
         <translation>此条信息没有加密</translation>
     </message>
+    <message>
+        <location line="+4"/>
+        <source>Encrypted by a verified device</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device, but you have trusted that user so far.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+2"/>
+        <source>Encrypted by an unverified device</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EventStore</name>
@@ -584,6 +594,14 @@
     </message>
 </context>
 <context>
+    <name>ForwardCompleter</name>
+    <message>
+        <location filename="../qml/ForwardCompleter.qml" line="+44"/>
+        <source>Forward Message</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>InputBar</name>
     <message>
         <location filename="../../src/timeline/InputBar.cpp" line="+232"/>
@@ -714,7 +732,7 @@ Example: https://server.my:8787</source>
         <translation>空密码</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+57"/>
         <source>SSO login failed</source>
         <translation type="unfinished"></translation>
     </message>
@@ -735,7 +753,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageDelegate</name>
     <message>
-        <location filename="../qml/delegates/MessageDelegate.qml" line="+109"/>
+        <location filename="../qml/delegates/MessageDelegate.qml" line="+110"/>
         <location line="+9"/>
         <source>removed</source>
         <translation type="unfinished"></translation>
@@ -804,7 +822,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>MessageInput</name>
     <message>
-        <location filename="../qml/MessageInput.qml" line="+42"/>
+        <location filename="../qml/MessageInput.qml" line="+43"/>
         <source>Hang up</source>
         <translation type="unfinished"></translation>
     </message>
@@ -833,6 +851,11 @@ Example: https://server.my:8787</source>
         <source>Send</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location line="+11"/>
+        <source>You don&apos;t have permission to send messages in this room</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MessageView</name>
@@ -842,12 +865,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location line="+15"/>
         <source>React</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location line="+13"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1103,7 +1126,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>RoomInfo</name>
     <message>
-        <location filename="../../src/Cache.cpp" line="+1754"/>
+        <location filename="../../src/Cache.cpp" line="+1813"/>
         <source>no version stored</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1274,7 +1297,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../src/ui/RoomSettings.cpp" line="+267"/>
+        <location filename="../../src/ui/RoomSettings.cpp" line="+268"/>
         <source>Failed to enable encryption: %1</source>
         <translation type="unfinished">启用加密失败:%1</translation>
     </message>
@@ -1431,7 +1454,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineModel</name>
     <message>
-        <location filename="../../src/timeline/TimelineModel.cpp" line="+892"/>
+        <location filename="../../src/timeline/TimelineModel.cpp" line="+1044"/>
         <source>Message redaction failed: %1</source>
         <translation type="unfinished">删除消息失败:%1</translation>
     </message>
@@ -1462,7 +1485,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location line="+151"/>
+        <location line="+228"/>
         <source>%1 and %2 are typing.</source>
         <comment>Multiple users are typing. First argument is a comma separated list of potentially multiple users. Second argument is the last user of that list. (If only one user is typing, %1 is empty. You should still use it in your string though to silence Qt warnings.)</comment>
         <translation type="unfinished">
@@ -1570,12 +1593,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-789"/>
+        <location line="-876"/>
         <source>You joined this room.</source>
         <translation type="unfinished">您已加入此房间</translation>
     </message>
     <message>
-        <location line="+755"/>
+        <location line="+842"/>
         <source>%1 has changed their avatar and changed their display name to %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1609,7 +1632,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineRow</name>
     <message>
-        <location filename="../qml/TimelineRow.qml" line="+105"/>
+        <location filename="../qml/TimelineRow.qml" line="+106"/>
         <source>Edited</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1617,12 +1640,22 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineView</name>
     <message>
-        <location filename="../qml/TimelineView.qml" line="+105"/>
-        <source>React</source>
+        <location filename="../qml/TimelineView.qml" line="+125"/>
+        <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+7"/>
+        <source>Copy link location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>React</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Reply</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1637,7 +1670,12 @@ Example: https://server.my:8787</source>
         <translation>阅读回执</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
+        <source>Forward</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+9"/>
         <source>Mark as read</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1652,7 +1690,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location line="+6"/>
         <source>Remove message</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1667,7 +1705,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+61"/>
+        <location line="+7"/>
+        <source>Copy link to event</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+57"/>
         <source>No room open</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1675,7 +1718,7 @@ Example: https://server.my:8787</source>
 <context>
     <name>TimelineViewManager</name>
     <message>
-        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+452"/>
+        <location filename="../../src/timeline/TimelineViewManager.cpp" line="+570"/>
         <source>No encrypted private chat found with this user. Create an encrypted private chat with this user and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,12 +1737,12 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+24"/>
         <source>Room options</source>
         <translation type="unfinished">聊天室选项</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+8"/>
         <source>Invite users</source>
         <translation>被邀请的用户</translation>
     </message>
@@ -1794,17 +1837,17 @@ Example: https://server.my:8787</source>
     </message>
     <message>
         <location line="+114"/>
-        <location line="+104"/>
+        <location line="+107"/>
         <source>Verify</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="-81"/>
+        <location line="-54"/>
         <source>Ban the user</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+20"/>
+        <location line="-17"/>
         <source>Start a private chat</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1814,7 +1857,7 @@ Example: https://server.my:8787</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+63"/>
         <source>Unverify</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2348,7 +2391,7 @@ This usually causes the application icon in the task bar to animate in some fash
 <context>
     <name>descriptiveTime</name>
     <message>
-        <location filename="../../src/Utils.cpp" line="+189"/>
+        <location filename="../../src/Utils.cpp" line="+207"/>
         <source>Yesterday</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2545,7 +2588,7 @@ Media size: %2
 <context>
     <name>message-description sent:</name>
     <message>
-        <location filename="../../src/Utils.h" line="+115"/>
+        <location filename="../../src/Utils.h" line="+124"/>
         <source>You sent an audio clip</source>
         <translation type="unfinished"></translation>
     </message>