diff --git a/src/Olm.cpp b/src/Olm.cpp
index 05eefce4b005eafc1e2ced2fbfc8db4f190d891d..c0360e1c11cf8b769a28c3e3b730818014ce988f 100644
--- a/src/Olm.cpp
+++ b/src/Olm.cpp
@@ -835,6 +835,13 @@ import_inbound_megolm_session(
                 data.sender_claimed_ed25519_key = roomKey.content.sender_claimed_ed25519_key;
                 // may have come from online key backup, so we can't trust it...
                 data.trusted = false;
+                // if we got it forwarded from the sender, assume it is trusted. They may still have
+                // used key backup, but it is unlikely.
+                if (roomKey.content.forwarding_curve25519_key_chain.size() == 1 &&
+                    roomKey.content.forwarding_curve25519_key_chain.back() ==
+                      roomKey.content.sender_key) {
+                        data.trusted = true;
+                }
 
                 cache::saveInboundMegolmSession(index, std::move(megolm_session), data);
         } catch (const lmdb::error &e) {