diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index 4bc6ce2097..4e7bc8470d 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -77,8 +77,8 @@ export default class DeviceListener {
         this._recheck();
     }
 
-    _onDeviceVerificationChanged = (users) => {
-        if (!users.includes(MatrixClientPeg.get().getUserId())) return;
+    _onDeviceVerificationChanged = (userId) => {
+        if (userId !== MatrixClientPeg.get().getUserId()) return;
         this._recheck();
     }
 
diff --git a/src/components/views/right_panel/UserInfo.js b/src/components/views/right_panel/UserInfo.js
index 5a5d9a577c..154d564f05 100644
--- a/src/components/views/right_panel/UserInfo.js
+++ b/src/components/views/right_panel/UserInfo.js
@@ -1092,22 +1092,32 @@ export const useDevices = (userId) => {
     // Listen to changes
     useEffect(() => {
         let cancel = false;
-        const onDeviceVerificationChanged = (_userId, device) => {
-            if (_userId === userId) {
-                // no need to re-download the whole thing; just update our copy of the list.
-
-                // Promise.resolve to handle transition from static result to promise; can be removed in future
-                Promise.resolve(cli.getStoredDevicesForUser(userId)).then((devices) => {
-                    if (cancel) return;
-                    setDevices(devices);
-                });
-            }
+        const updateDevices = async () => {
+            const newDevices = await cli.getStoredDevicesForUser(userId);
+            if (cancel) return;
+            setDevices(newDevices);
         };
+        const onDevicesUpdated = (users) => {
+            if (!users.includes(userId)) return;
+            updateDevices();
+        };
+        const onDeviceVerificationChanged = (_userId, device) => {
+            if (_userId !== userId) return;
+            updateDevices();
+        };
+        const onUserTrustStatusChanged = (_userId, trustStatus) => {
+            if (_userId !== userId) return;
+            updateDevices();
+        };
+        cli.on("crypto.devicesUpdated", onDevicesUpdated);
         cli.on("deviceVerificationChanged", onDeviceVerificationChanged);
+        cli.on("userTrustStatusChanged", onUserTrustStatusChanged);
         // Handle being unmounted
         return () => {
             cancel = true;
+            cli.removeListener("crypto.devicesUpdated", onDevicesUpdated);
             cli.removeListener("deviceVerificationChanged", onDeviceVerificationChanged);
+            cli.removeListener("userTrustStatusChanged", onUserTrustStatusChanged);
         };
     }, [cli, userId]);