diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs
index b0d6239982..7457f84448 100644
--- a/voxygen/src/session.rs
+++ b/voxygen/src/session.rs
@@ -1,5 +1,5 @@
 use crate::{
-    hud::{Event as HudEvent, Hud},
+    hud::{DebugInfo, Event as HudEvent, Hud},
     key_state::KeyState,
     render::Renderer,
     scene::Scene,
@@ -176,12 +176,16 @@ impl PlayState for SessionState {
                 &self.client.borrow_mut(),
             );
 
-            // Maintain the UI.
-            for event in self.hud.maintain(
+            // extract HUD events ensuring the client borrow gets dropped
+            let hud_events = self.hud.maintain(
                 global_state,
-                clock.get_tps(),
-                self.client.borrow().get_ping_ms(),
-            ) {
+                DebugInfo {
+                    tps: clock.get_tps(),
+                    ping_ms: self.client.borrow().get_ping_ms(),
+                },
+            );
+            // Maintain the UI.
+            for event in hud_events {
                 match event {
                     HudEvent::SendMessage(msg) => {
                         // TODO: Handle result