diff --git a/src/mavlink/message_broker.rs b/src/mavlink/message_broker.rs
index 56f6060ccbc6bcbddf595fb06c3e9278b5b53497..94c0c0e6673e851db0ff3b2ac637ceac889e6cfc 100644
--- a/src/mavlink/message_broker.rs
+++ b/src/mavlink/message_broker.rs
@@ -92,7 +92,7 @@ impl MessageBroker {
     /// validity based on `is_valid` method of the view.
     pub fn refresh_view<V: MessageView>(&mut self, view: &mut V) -> MavlinkResult<()> {
         self.process_incoming_msgs();
-        if !view.is_valid() || !self.update_queues.contains_key(view.widget_id()) {
+        if !view.is_valid() || !self.is_view_subscribed(view.widget_id()) {
             self.init_view(view)?;
         } else {
             self.update_view(view)?;
@@ -149,12 +149,20 @@ impl MessageBroker {
         self.task = Some(handle);
     }
 
+    pub fn unsubscribe_all_views(&mut self) {
+        self.update_queues.clear();
+    }
+
     /// Clears all the messages stored in the broker. Useful in message replay
     /// scenarios.
     pub fn clear(&mut self) {
         self.messages.clear();
     }
 
+    fn is_view_subscribed(&self, widget_id: &egui::Id) -> bool {
+        self.update_queues.contains_key(widget_id)
+    }
+
     /// Init a view in case of cache invalidation or first time initialization.
     fn init_view<V: MessageView>(&mut self, view: &mut V) -> MavlinkResult<()> {
         trace!("initializing view: {:?}", view.widget_id());
diff --git a/src/ui/persistency/layout_manager.rs b/src/ui/persistency/layout_manager.rs
index 173fea11360bf4f0049957d210992ec38417c5b2..33ed67147d8fec951205c11d556e96192db4506c 100644
--- a/src/ui/persistency/layout_manager.rs
+++ b/src/ui/persistency/layout_manager.rs
@@ -7,7 +7,7 @@ use std::{
 
 use tracing::{info, trace, warn};
 
-use crate::error::ErrInstrument;
+use crate::{error::ErrInstrument, MSG_MANAGER};
 
 use super::super::composable_view::ComposableViewState;
 
@@ -103,6 +103,7 @@ impl LayoutManager {
             .ok_or(anyhow::anyhow!("Layout not found"))?;
         *state = layout.clone();
         self.current_layout = Some(path.as_ref().into());
+        MSG_MANAGER.get().unwrap().lock().unsubscribe_all_views();
         Ok(())
     }