diff --git a/src/shared/Core/Window/Window.cpp b/src/shared/Core/Window/Window.cpp
index 87f0f4c7ebcf3e917a54a7224169e48c89813538..2d5ebbecab4372b15c592d31d74d0d31a8262e3c 100644
--- a/src/shared/Core/Window/Window.cpp
+++ b/src/shared/Core/Window/Window.cpp
@@ -18,6 +18,7 @@
 
 #include "Window.h"
 
+#include <Core/MessageBroker/MessageBroker.h>
 #include <Modules/Empty/EmptyModule.h>
 #include <Modules/ModulesList.h>
 
@@ -35,23 +36,26 @@ Window::Window(XmlObject configuration)
     }
 }
 
+Window::~Window()
+{
+    MessageBroker::getInstance().unsubscribeFromAll(activeModule);
+}
+
 void Window::setChild(std::shared_ptr<Module> module)
 {
+    Module *rawModule  = module.get();
     this->activeModule = module;
-    setCentralWidget(module.get());
+    setCentralWidget(rawModule);
     module->lower();
-    connect(module.get(), &Module::replaceMe, this, &Window::replaceChild);
-    connect(module.get(), &Module::closeMe, this, &Window::closeChild);
+    connect(rawModule, &Module::replaceMe, this, &Window::replaceChild);
+    connect(rawModule, &Module::closeMe, this, &Window::closeChild);
 }
 
-void Window::replaceChild(std::shared_ptr<Module> _oldModule,
-                          std::shared_ptr<Module> newModule)
+void Window::replaceChild(Module *_oldModule, std::shared_ptr<Module> newModule)
 {
     std::shared_ptr<Module> oldModule = this->activeModule;
-
     setChild(newModule);
-
-    oldModule.reset();
+    MessageBroker::getInstance().unsubscribeFromAll(oldModule);
 }
 
 void Window::closeChild(Module *module) { close(); }
@@ -65,4 +69,4 @@ void Window::closeEvent(QCloseEvent *event)
 {
     emit onWindowClosed();
     event->accept();
-}
+}
\ No newline at end of file
diff --git a/src/shared/Core/Window/Window.h b/src/shared/Core/Window/Window.h
index 66b35021b7e77cc9b9f4f45a2e268dee359b3fd9..30bd3b0126851c450ca054453d721fab5539bdfb 100644
--- a/src/shared/Core/Window/Window.h
+++ b/src/shared/Core/Window/Window.h
@@ -34,6 +34,7 @@ class Window : public QMainWindow
 
 public:
     explicit Window(XmlObject configuration);
+    ~Window();
 
     XmlObject toXmlObject();
 
@@ -50,7 +51,6 @@ private:
     void setChild(std::shared_ptr<Module> module);
 
 private slots:
-    void replaceChild(std::shared_ptr<Module> oldModule,
-                      std::shared_ptr<Module> newModule);
+    void replaceChild(Module *oldModule, std::shared_ptr<Module> newModule);
     void closeChild(Module *module);
 };