diff --git a/CMakeLists.txt b/CMakeLists.txt
index 84737575b1a91baa0a711824384de9fd8ce91912..678c02ec3bc99ef72ad2b0942622b024ddfa47aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(libs/backward-cpp)
 
 project(SkywardHub)
 
-set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 set(CMAKE_AUTOMOC ON)
@@ -52,6 +52,7 @@ add_executable(groundstation
     src/shared/Core/Message/Message.cpp
     src/shared/Core/Message/Topic.cpp
     src/shared/Core/MessageBroker/MessageBroker.cpp
+    src/shared/Core/MessageBroker/Subscription.cpp
     src/shared/Core/QCustomPlot/QCustomPlot.cpp
     src/shared/Core/Window/Window.cpp
     src/shared/Core/SkywardHubCore.cpp
diff --git a/SkywardHub.pro b/SkywardHub.pro
index 04ba882c70d8c0a2526e1ffa1a74789c2c31a652..562d373b11cfc0c846eb99018d5206d47219e02f 100644
--- a/SkywardHub.pro
+++ b/SkywardHub.pro
@@ -1,7 +1,7 @@
 QT += core gui widgets printsupport serialport
 QT += 3dcore 3drender 3dinput 3dlogic 3dextras 3danimation
 
-CONFIG += c++11
+CONFIG += c++17
 
 # MacOs app icon
 ICON = src/entrypoints/groundstation/assets/icons/SkywardHub.icns
@@ -24,7 +24,6 @@ SOURCES += \
     src/shared/Modules/OrientationVisualizer/OrientationVisualizer.cpp \
     src/shared/Modules/MainStateViewer/MainStateViewer.cpp \
     src/shared/Modules/PayloadStateViewer/PayloadStateViewer.cpp \
-    src/shared/Modules/FileStream/FileStreamModule.cpp \
     src/shared/Modules/Graph/Graph.cpp \
     src/shared/Modules/Test/TestModule.cpp \
     src/shared/Modules/ModulesList.cpp \
@@ -77,7 +76,6 @@ HEADERS += \
     src/shared/Modules/MainStateViewer/MainStateViewer.h \
     src/shared/Modules/PayloadStateViewer/PayloadStatesList.h \
     src/shared/Modules/PayloadStateViewer/PayloadStateViewer.h \
-    src/shared/Modules/FileStream/FileStreamModule.h \
     src/shared/Modules/Graph/Graph.h \
     src/shared/Modules/Test/TestModule.h \
     src/shared/Modules/SkywardHubStrings.h \
@@ -125,7 +123,6 @@ FORMS += \
     src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.ui \
     src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.ui \
     src/shared/Modules/TimerController/TimerControllerModule.ui \
-    src/shared/Modules/FileStream/FileStreamModule.ui \
     src/shared/Modules/Test/TestModule.ui \
     src/shared/Components/SaveConfigurationDialog/SaveConfigurationDialog.ui \
 
@@ -138,6 +135,8 @@ RESOURCES += \
     src/entrypoints/groundstation/application.qrc
 
 win32: LIBS += -ldbghelp -lpsapi
+win32: QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
 
 unix: LIBS += -ldw -lunwind
 unix: QMAKE_CXXFLAGS += -DBACKWARD_HAS_DW=1 -DBACKWARD_HAS_LIBUNWIND=1
+unix: QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
\ No newline at end of file
diff --git a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
index d337d5c7dae214fa5a97819054c44deedc56d798..166cd15daac512d4769a9a4a747bb7c3b99aca06 100644
--- a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
+++ b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.cpp
@@ -31,20 +31,14 @@ ErrorDisplayer::ErrorDisplayer(QWidget* _parent) : QWidget(_parent)
     reposition();
 }
 
-ErrorDisplayer::~ErrorDisplayer()
-{
-    /*while (!errors.isEmpty())
-    {
-        delete errors.takeFirst();
-    }*/
-}
+ErrorDisplayer::~ErrorDisplayer() {}
 
 void ErrorDisplayer::createError(QString title, QString description,
                                  ErrorType type, int msecDuration)
 {
-    if (!errors.isEmpty())
+    if (errors.size() != 0)
     {
-        auto& lastError = errors.last();
+        auto& lastError = errors.back();
         if (lastError->compareError(title, description, type))
         {
             lastError->incrementCount(msecDuration);
@@ -55,7 +49,7 @@ void ErrorDisplayer::createError(QString title, QString description,
         std::make_unique<Error>(this, title, description, type, msecDuration);
     auto* errorAddr = error.get();
     layout.addWidget(errorAddr);
-    errors.append(std::move(error));
+    errors.push_back(std::move(error));
     errorAddr->show();
     reposition();
 }
diff --git a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
index 9b6940b97d45f51adc5049c5c89e7d4b39b8ba57..4a1cb7a503830d4b21dda91d60a61dfa5d5d3699 100644
--- a/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
+++ b/src/shared/Components/ErrorDisplayer/ErrorDisplayer.h
@@ -26,6 +26,8 @@
 #include <QVBoxLayout>
 #include <QWidget>
 #include <QtWidgets>
+#include <deque>
+#include <memory>
 
 #include "Error.h"
 
@@ -47,5 +49,5 @@ private:
     QWidget* parent;
     int index;
     QVBoxLayout layout;
-    QList<std::unique_ptr<Error>> errors;
+    std::deque<std::unique_ptr<Error>> errors;
 };
diff --git a/src/shared/Components/FilterSelector/FilterSelector.cpp b/src/shared/Components/FilterSelector/FilterSelector.cpp
index 1a261eb82b0038948f630a2865d03cbf023f900f..1c7a114b45e5573c6769c75bb29a0b7f05401998 100644
--- a/src/shared/Components/FilterSelector/FilterSelector.cpp
+++ b/src/shared/Components/FilterSelector/FilterSelector.cpp
@@ -78,7 +78,7 @@ void FilterSelector::setupUi()
 
 void FilterSelector::selectFilter(FilterSelector::Handler handler)
 {
-    auto selector = std::make_unique<FilterSelector>();
+    auto selector = std::unique_ptr<FilterSelector>(new FilterSelector());
     QObject::connect(selector.get(), &FilterSelector::filterSelected, handler);
     selector->show();
 }
@@ -86,8 +86,8 @@ void FilterSelector::selectFilter(FilterSelector::Handler handler)
 void FilterSelector::selectFilter(const Filter &filter,
                                   FilterSelector::Handler handler)
 {
-    FilterSelector *selector = new FilterSelector(filter);
-    QObject::connect(selector, &FilterSelector::filterSelected, handler);
+    auto selector = std::unique_ptr<FilterSelector>(new FilterSelector(filter));
+    QObject::connect(selector.get(), &FilterSelector::filterSelected, handler);
     selector->show();
 }
 
diff --git a/src/shared/Core/MessageBroker/MessageBroker.cpp b/src/shared/Core/MessageBroker/MessageBroker.cpp
index 2745b3a7901b8acb50bda2b608d11cddd408c194..8677a2dae42fa50510ca3548fb6cd69f1481f52a 100644
--- a/src/shared/Core/MessageBroker/MessageBroker.cpp
+++ b/src/shared/Core/MessageBroker/MessageBroker.cpp
@@ -20,6 +20,8 @@
 
 #include <Modules/Module.h>
 
+#include "Subscription.h"
+
 MessageBroker& MessageBroker::getInstance()
 {
     static MessageBroker instance;
@@ -27,14 +29,13 @@ MessageBroker& MessageBroker::getInstance()
 }
 
 std::unique_ptr<Subscription> MessageBroker::subscribe(
-    Filter filter, Subscription::SubscriberFn callback)
+    Filter filter, MessageBroker::SubscriberFn callback)
 {
-    auto subscription =
-        std::make_unique<Subscription>(std::move(callback), filter);
+    auto subscription = new Subscription(std::move(callback), filter);
 
-    observers.insert(filter, subscription.get());
+    observers.insert(filter, subscription);
 
-    return subscription;
+    return std::unique_ptr<Subscription>(subscription);
 }
 
 void MessageBroker::unsubscribe(Subscription* sub)
diff --git a/src/shared/Core/MessageBroker/MessageBroker.h b/src/shared/Core/MessageBroker/MessageBroker.h
index d30f280ba504a6c3fe0e14ad56120a21b5dbd1d1..917f33f106696fafa0efe561035957e2a34957a5 100644
--- a/src/shared/Core/MessageBroker/MessageBroker.h
+++ b/src/shared/Core/MessageBroker/MessageBroker.h
@@ -22,10 +22,9 @@
 
 #include <QObject>
 #include <functional>
+#include <memory>
 
-#include "Subscription.h"
-
-class Module;
+class Subscription;
 
 class MessageBroker : public QObject
 {
@@ -33,19 +32,21 @@ class MessageBroker : public QObject
 
 public:
     static MessageBroker& getInstance();
+    using SubscriberFn = std::function<void(const Message&, const Filter&)>;
 
     [[nodiscard(
-        "IF NOT SAVED SUBSCRIPTION WILL BE REMOVED AUTOMATICALLY")]] std::
+        "IF NOT SAVED, THE SUBSCRIPTION WILL BE AUTOMATICALLY REMOVED")]] std::
         unique_ptr<Subscription>
-        subscribe(Filter filter, Subscription::SubscriberFn callback);
+        subscribe(Filter filter, MessageBroker::SubscriberFn callback);
 
     /**
      * @brief Publish a message to all its subscribers.
      */
     void publish(const Message& message);
 
+    friend class Subscription;
+
 private:
-    friend Subscription;
     /**
      * @brief Removes the subscription from the filter.
      */
diff --git a/src/shared/Core/MessageBroker/Subscription.h b/src/shared/Core/MessageBroker/Subscription.h
index e428b916fcc3981e171db848e704b11ca221909d..65261eeeb85adf00fbdb7179ee775181012c6c8f 100644
--- a/src/shared/Core/MessageBroker/Subscription.h
+++ b/src/shared/Core/MessageBroker/Subscription.h
@@ -9,22 +9,20 @@
 class Subscription
 {
 public:
-    using SubscriberFn = std::function<void(const Message&, const Filter&)>;
-
     void unsubscribe() { MessageBroker::getInstance().unsubscribe(this); }
 
     ~Subscription() { unsubscribe(); }
 
-private:
-    friend MessageBroker;
+    friend class MessageBroker;
 
-    Subscription(SubscriberFn callback, Filter filter)
-        : callback(std::move(callback)), filter(filter){};
+private:
+    Subscription(MessageBroker::SubscriberFn callback, Filter filter)
+        : filter(filter), callback(std::move(callback)){};
 
     Subscription()                     = delete;
     Subscription(Subscription&)        = delete;
     Subscription(Subscription&& other) = delete;
 
     Filter filter;
-    SubscriberFn callback;
-};
\ No newline at end of file
+    MessageBroker::SubscriberFn callback;
+};
diff --git a/src/shared/Core/SkywardHubCore.cpp b/src/shared/Core/SkywardHubCore.cpp
index 0f0262ed43301130908193e692786f13b9644d26..10bd4d4adb841bd5d24fdf632fa78b675f325150 100644
--- a/src/shared/Core/SkywardHubCore.cpp
+++ b/src/shared/Core/SkywardHubCore.cpp
@@ -60,7 +60,7 @@ void SkywardHubCore::init()
                       SkywardHubStrings::defaultConfigurationIconPath, "");
 }
 
-QList<std::shared_ptr<QAction>> SkywardHubCore::getHubMenuActions()
+std::deque<std::shared_ptr<QAction>> SkywardHubCore::getHubMenuActions()
 {
     return hubMenuActionsList;
 }
@@ -87,13 +87,13 @@ void SkywardHubCore::buildHubMenuActions()
 {
     std::shared_ptr<QAction> save =
         std::make_shared<QAction>("Save configuration");
-    hubMenuActionsList.append(save);
+    hubMenuActionsList.push_back(save);
     connect(save.get(), &QAction::triggered, this,
             [this]() { saveConfigurationPrompt(); });
 
     std::shared_ptr<QAction> newWindow =
         std::make_shared<QAction>("New Window");
-    hubMenuActionsList.append(newWindow);
+    hubMenuActionsList.push_back(newWindow);
     connect(newWindow.get(), &QAction::triggered, this,
             &SkywardHubCore::addNewWindow);
 }
@@ -122,7 +122,7 @@ void SkywardHubCore::addWindowFromXml(XmlObject settings)
     newWindow->activateWindow();
     auto windowIdentifier = newWindow.get();
     windowsList.push_back(std::move(newWindow));
-    auto removePredicate = [windowIdentifier](std::unique_ptr<Window> window)
+    auto removePredicate = [windowIdentifier](std::unique_ptr<Window>& window)
     { return window.get() == windowIdentifier; };
 
     connect(windowIdentifier, &Window::onWindowClosed, this,
@@ -187,9 +187,9 @@ QString SkywardHubCore::saveConfiguration(QString configName,
         XmlObject windows("windows");
 
         // Retrieve the setting of each window and save them in the file
-        for (int i = 0; i < windowsList.size(); i++)
+        for (auto& windowsListItem : windowsList)
         {
-            windows.addChild(windowsList[i]->toXmlObject());
+            windows.addChild(windowsListItem->toXmlObject());
         }
 
         configuration.addChild(windows);
diff --git a/src/shared/Core/SkywardHubCore.h b/src/shared/Core/SkywardHubCore.h
index b0c99130884f2d1bc1e9231f41baf355c51cdf73..0760ad99a0e55b854d2bc8ead8ddf94212320689 100644
--- a/src/shared/Core/SkywardHubCore.h
+++ b/src/shared/Core/SkywardHubCore.h
@@ -22,6 +22,7 @@
 
 #include <QAction>
 #include <QList>
+#include <memory>
 
 #include "XmlObject.h"
 
@@ -36,7 +37,7 @@ public:
 
     void init();
 
-    QList<std::shared_ptr<QAction>> getHubMenuActions();
+    std::deque<std::shared_ptr<QAction>> getHubMenuActions();
     void addActionsToMenu(QMenu &menu);
 
 public slots:
@@ -54,8 +55,8 @@ private:
     QString saveConfiguration(QString configName, QString configIconPath,
                               QString description);
 
-    QList<std::unique_ptr<Window>> windowsList;
-    QList<std::shared_ptr<QAction>> hubMenuActionsList;
+    std::deque<std::unique_ptr<Window>> windowsList;
+    std::deque<std::shared_ptr<QAction>> hubMenuActionsList;
 
 public:
     SkywardHubCore(const SkywardHubCore &)            = delete;
diff --git a/src/shared/Core/Window/Window.cpp b/src/shared/Core/Window/Window.cpp
index 2153c040aea5c16d02d651c1fcea950f475fb4ab..7fc7274f19d00e39cd10ef855d768b23bdec730e 100644
--- a/src/shared/Core/Window/Window.cpp
+++ b/src/shared/Core/Window/Window.cpp
@@ -63,4 +63,6 @@ void Window::closeEvent(QCloseEvent *event)
 {
     emit onWindowClosed();
     event->accept();
-}
\ No newline at end of file
+}
+
+Window::~Window() {}
\ No newline at end of file
diff --git a/src/shared/Core/Window/Window.h b/src/shared/Core/Window/Window.h
index 30bd3b0126851c450ca054453d721fab5539bdfb..396922abb4d01f822b0662f8fb37d5a1ce1e2941 100644
--- a/src/shared/Core/Window/Window.h
+++ b/src/shared/Core/Window/Window.h
@@ -28,6 +28,8 @@
 
 #include "Components/ErrorDisplayer/ErrorDisplayer.h"
 
+class Module;
+
 class Window : public QMainWindow
 {
     Q_OBJECT
diff --git a/src/shared/Modules/CommandPad/CommandPad.h b/src/shared/Modules/CommandPad/CommandPad.h
index e1f03a8333623093ad34893c334753db9d398dbf..de6d023711334584685867f406a26a02fed24f9e 100644
--- a/src/shared/Modules/CommandPad/CommandPad.h
+++ b/src/shared/Modules/CommandPad/CommandPad.h
@@ -39,5 +39,5 @@ private:
 
     QString currentMessage;
     std::unique_ptr<QComboBox> messagesListComboBox;
-    QMap<QString, std::unique_ptr<MessageFormElement>> formElements;
+    QMap<QString, std::shared_ptr<MessageFormElement>> formElements;
 };
diff --git a/src/shared/Modules/CommandPad/MessageFormElement.cpp b/src/shared/Modules/CommandPad/MessageFormElement.cpp
index 91b9a4fe16ccd12556ab547534270c2a854161f0..0a4ecf69e1c3ae9d3e519dd527e688febca4d32b 100644
--- a/src/shared/Modules/CommandPad/MessageFormElement.cpp
+++ b/src/shared/Modules/CommandPad/MessageFormElement.cpp
@@ -27,8 +27,7 @@ MessageFormElement::~MessageFormElement() {}
 bool MessageFormElement::addComboBox(QString id, QString label,
                                      const QMap<QString, int>& options)
 {
-    if (!comboBoxMap.contains(id) && !floatMap.contains(id) &&
-        !integerMap.contains(id))
+    if (!idAlreadyInUse(id))
     {
         auto comboBox = std::make_unique<QComboBox>();
         comboBox->setSizePolicy(
@@ -50,8 +49,7 @@ bool MessageFormElement::addComboBox(QString id, QString label,
 bool MessageFormElement::addFloat(QString id, QString label, float min,
                                   float max, int decimals)
 {
-    if (!comboBoxMap.contains(id) && !floatMap.contains(id) &&
-        !integerMap.contains(id))
+    if (!idAlreadyInUse(id))
     {
         auto lineEdit = std::make_unique<QLineEdit>();
         lineEdit->setSizePolicy(
@@ -69,8 +67,7 @@ bool MessageFormElement::addFloat(QString id, QString label, float min,
 
 bool MessageFormElement::addInteger(QString id, QString label, int min, int max)
 {
-    if (!comboBoxMap.contains(id) && !floatMap.contains(id) &&
-        !integerMap.contains(id))
+    if (!idAlreadyInUse(id))
     {
         auto lineEdit = std::make_unique<QLineEdit>();
         lineEdit->setSizePolicy(
@@ -88,18 +85,16 @@ bool MessageFormElement::addInteger(QString id, QString label, int min, int max)
 
 XmlObject MessageFormElement::toXmlObject(XmlObject& obj)
 {
-    for (auto key : comboBoxMap.keys())
+    for (auto const& [key, comboBoxPair] : comboBoxMap)
     {
-        auto& comboBox = comboBoxMap[key];
         XmlObject comboBoxXml("combo_box");
         comboBoxXml.addAttribute("id", key);
-        comboBoxXml.addAttribute("text", comboBox.second->currentText());
+        comboBoxXml.addAttribute("text", comboBoxPair.second->currentText());
         obj.addChild(comboBoxXml);
     }
 
-    for (auto key : floatMap.keys())
+    for (auto const& [key, floatField] : floatMap)
     {
-        auto& floatField = floatMap[key];
         XmlObject floatFieldXml("float_field");
         floatFieldXml.addAttribute("id", key);
         floatFieldXml.addAttribute("text", std::get<1>(floatField)->text());
@@ -109,9 +104,8 @@ XmlObject MessageFormElement::toXmlObject(XmlObject& obj)
         obj.addChild(floatFieldXml);
     }
 
-    for (auto key : floatMap.keys())
+    for (auto const& [key, integerField] : integerMap)
     {
-        auto& integerField = floatMap[key];
         XmlObject integerFieldXml("integer_field");
         integerFieldXml.addAttribute("id", key);
         integerFieldXml.addAttribute("text", std::get<1>(integerField)->text());
@@ -130,13 +124,14 @@ void MessageFormElement::fromXmlObject(const XmlObject& obj)
         auto child = obj.childAt(i);
         auto key   = child.getAttribute("id");
 
-        if (child.getObjectName() == "combo_box" && comboBoxMap.contains(key))
+        if (child.getObjectName() == "combo_box" &&
+            comboBoxMap.find(key) != comboBoxMap.end())
         {
             auto& comboBox = comboBoxMap[key];
             comboBox.second->setCurrentText(child.getAttribute("text"));
         }
         else if (child.getObjectName() == "float_field" &&
-                 floatMap.contains(key))
+                 floatMap.find(key) != floatMap.end())
         {
             auto& floatField = floatMap[key];
             std::get<1>(floatField)->setText(child.getAttribute("text"));
@@ -149,7 +144,7 @@ void MessageFormElement::fromXmlObject(const XmlObject& obj)
                                                     std::get<4>(floatField)));
         }
         else if (child.getObjectName() == "integer_field" &&
-                 integerMap.contains(key))
+                 integerMap.find(key) != integerMap.end())
         {
             auto& integerField = integerMap[key];
             std::get<1>(integerField)->setText(child.getAttribute("text"));
@@ -164,10 +159,10 @@ void MessageFormElement::fromXmlObject(const XmlObject& obj)
 
 void MessageFormElement::applyToGridLayout(QGridLayout* layout)
 {
-    for (auto key : comboBoxMap.keys())
+    for (auto const& [_, pair] : comboBoxMap)
     {
-        auto& label    = comboBoxMap[key].first;
-        auto& comboBox = comboBoxMap[key].second;
+        auto& label    = pair.first;
+        auto& comboBox = pair.second;
 
         int rows = layout->rowCount();
         layout->addWidget(label.get(), rows, 0, Qt::AlignRight);
@@ -177,10 +172,10 @@ void MessageFormElement::applyToGridLayout(QGridLayout* layout)
         comboBox->show();
     }
 
-    for (auto key : floatMap.keys())
+    for (auto const& [_, floatTuple] : floatMap)
     {
-        auto& label      = std::get<0>(floatMap[key]);
-        auto& floatField = std::get<1>(floatMap[key]);
+        auto& label      = std::get<0>(floatTuple);
+        auto& floatField = std::get<1>(floatTuple);
 
         int rows = layout->rowCount();
         layout->addWidget(label.get(), rows, 0, Qt::AlignRight);
@@ -190,10 +185,10 @@ void MessageFormElement::applyToGridLayout(QGridLayout* layout)
         floatField->show();
     }
 
-    for (auto key : integerMap.keys())
+    for (auto const& [_, integerTuple] : integerMap)
     {
-        auto& label        = std::get<0>(integerMap[key]);
-        auto& integerField = std::get<1>(integerMap[key]);
+        auto& label        = std::get<0>(integerTuple);
+        auto& integerField = std::get<1>(integerTuple);
 
         int rows = layout->rowCount();
         layout->addWidget(label.get(), rows, 0, Qt::AlignRight);
@@ -206,10 +201,10 @@ void MessageFormElement::applyToGridLayout(QGridLayout* layout)
 
 void MessageFormElement::removeFromGridLayout(QGridLayout* layout)
 {
-    for (auto key : comboBoxMap.keys())
+    for (auto const& [_, pair] : comboBoxMap)
     {
-        auto& label    = comboBoxMap[key].first;
-        auto& comboBox = comboBoxMap[key].second;
+        auto& label    = pair.first;
+        auto& comboBox = pair.second;
 
         layout->removeWidget(label.get());
         layout->removeWidget(comboBox.get());
@@ -218,10 +213,10 @@ void MessageFormElement::removeFromGridLayout(QGridLayout* layout)
         comboBox->hide();
     }
 
-    for (auto key : floatMap.keys())
+    for (auto const& [_, floatTuple] : floatMap)
     {
-        auto& label      = std::get<0>(floatMap[key]);
-        auto& floatField = std::get<1>(floatMap[key]);
+        auto& label      = std::get<0>(floatTuple);
+        auto& floatField = std::get<1>(floatTuple);
 
         layout->removeWidget(label.get());
         layout->removeWidget(floatField.get());
@@ -230,10 +225,10 @@ void MessageFormElement::removeFromGridLayout(QGridLayout* layout)
         floatField->hide();
     }
 
-    for (auto key : integerMap.keys())
+    for (auto const& [_, integerTuple] : integerMap)
     {
-        auto& label        = std::get<0>(integerMap[key]);
-        auto& integerField = std::get<1>(integerMap[key]);
+        auto& label        = std::get<0>(integerTuple);
+        auto& integerField = std::get<1>(integerTuple);
 
         layout->removeWidget(label.get());
         layout->removeWidget(integerField.get());
@@ -247,26 +242,33 @@ Message MessageFormElement::prepareMessage(const QString& messageId)
 {
     Message message(Topic{SkywardHubStrings::commandsTopic + "/" + messageId});
 
-    for (auto key : comboBoxMap.keys())
+    for (auto const& [key, pair] : comboBoxMap)
     {
-        auto& comboBox = comboBoxMap[key].second;
+        auto& comboBox = pair.second;
         auto msg       = Field{(uint64_t)comboBox->currentData().toInt()};
         message.setField(key, msg);
     }
 
-    for (auto key : floatMap.keys())
+    for (auto const& [key, floatTuple] : floatMap)
     {
-        auto& floatField = std::get<1>(floatMap[key]);
+        auto& floatField = std::get<1>(floatTuple);
         auto msg         = Field{floatField->text().toDouble()};
         message.setField(key, msg);
     }
 
-    for (auto key : integerMap.keys())
+    for (auto const& [key, integerTuple] : integerMap)
     {
-        auto& integerField = std::get<1>(integerMap[key]);
+        auto& integerField = std::get<1>(integerTuple);
         auto msg           = Field{(uint64_t)integerField->text().toInt()};
         message.setField(key, msg);
     }
 
     return message;
-}
\ No newline at end of file
+}
+
+bool MessageFormElement::idAlreadyInUse(QString& id)
+{
+    return comboBoxMap.find(id) != comboBoxMap.end() ||
+           floatMap.find(id) != floatMap.end() ||
+           integerMap.find(id) != integerMap.end();
+}
diff --git a/src/shared/Modules/CommandPad/MessageFormElement.h b/src/shared/Modules/CommandPad/MessageFormElement.h
index 85475fd1b934669a5e38883868144a42632e54b9..c11a3148b44bdb984b7e4fb3fa284602f69c801a 100644
--- a/src/shared/Modules/CommandPad/MessageFormElement.h
+++ b/src/shared/Modules/CommandPad/MessageFormElement.h
@@ -73,12 +73,21 @@ public:
     Message prepareMessage(const QString& messageId);
 
 private:
-    QMap<QString, QPair<std::unique_ptr<QLabel>, std::unique_ptr<QComboBox>>>
+    std::map<QString,
+             std::pair<std::unique_ptr<QLabel>, std::unique_ptr<QComboBox>>>
         comboBoxMap;
-    QMap<QString, std::tuple<std::unique_ptr<QLabel>,
-                             std::unique_ptr<QLineEdit>, float, float, int>>
+    std::map<QString, std::tuple<std::unique_ptr<QLabel>,
+                                 std::unique_ptr<QLineEdit>, float, float, int>>
         floatMap;
-    QMap<QString, std::tuple<std::unique_ptr<QLabel>,
-                             std::unique_ptr<QLineEdit>, int, int>>
+    std::map<QString, std::tuple<std::unique_ptr<QLabel>,
+                                 std::unique_ptr<QLineEdit>, int, int>>
         integerMap;
+
+    /**
+     * This method checks if the given id is already used in one of the maps
+     * @param id QString The ID that has to be checked
+     * @returns true if there exists at least one entry in any of the maps with
+     * matching ID false otherwise
+     */
+    bool idAlreadyInUse(QString& id);
 };
diff --git a/src/shared/Modules/CommandPad/MessagesList.h b/src/shared/Modules/CommandPad/MessagesList.h
index fee244ecab5cd9da4a9caa7b0b3dc8143c35e697..cc437505c696edf27210a46d6e11d7c1ca59ab06 100644
--- a/src/shared/Modules/CommandPad/MessagesList.h
+++ b/src/shared/Modules/CommandPad/MessagesList.h
@@ -124,94 +124,94 @@ const QMap<QString, int> servosList{
     {"DISCONNECT_SERVO", DISCONNECT_SERVO}};
 
 inline void fillMessagesMap(
-    QMap<QString, std::unique_ptr<MessageFormElement>> &formElements)
+    QMap<QString, std::shared_ptr<MessageFormElement>> &formElements)
 {
-    std::unique_ptr<MessageFormElement> element;
+    std::shared_ptr<MessageFormElement> element;
 
-    element                 = std::make_unique<MessageFormElement>();
+    element                 = std::make_shared<MessageFormElement>();
     formElements["PING_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("command_id", "Command:", commandsList);
     formElements["COMMAND_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("tm_id", "Telemetry:", systemTmList);
     formElements["SYSTEM_TM_REQUEST_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("sensor_id", "Sensor:", sensorsList);
     formElements["SENSOR_TM_REQUEST_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     formElements["SERVO_TM_REQUEST_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     element->addFloat("angle", "Angle:", 0, 180, 2);
     formElements["SET_SERVO_ANGLE_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     formElements["WIGGLE_SERVO_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     formElements["RESET_SERVO_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("ref_altitude", "Altitude:", 0, 9999, 2);
     formElements["SET_REFERENCE_ALTITUDE_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("ref_temp", "Temperature:", 0, 999, 2);
     formElements["SET_REFERENCE_TEMPERATURE_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("yaw", "Yaw:", -180, 180, 2);
     element->addFloat("pitch", "Pitch:", -180, 180, 2);
     element->addFloat("roll", "Roll:", -180, 180, 2);
     formElements["SET_ORIENTATION_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("latitude", "Latitude:", -90, 90, 6);
     element->addFloat("longitude", "Longitude:", -90, 90, 6);
     formElements["SET_COORDINATES_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addInteger("topic_id", "Topic:", 0, 999);
     element->addInteger("event_id", "Event:", 0, 999);
     formElements["RAW_EVENT_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("dpl_altitude", "Altitude:", 0, 9999, 2);
     formElements["SET_DEPLOYMENT_ALTITUDE_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addFloat("latitude", "Latitude:", -90, 90, 6);
     element->addFloat("longitude", "Longitude:", -90, 90, 6);
     formElements["SET_TARGET_COORDINATES_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addInteger("algorithm_number", "Algorithm:", 0, 999);
     formElements["SET_ALGORITHM_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     element->addInteger("maximum_timing", "Timing [ms]:", 0, 3600000);
     formElements["SET_ATOMIC_VALVE_TIMING_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addComboBox("servo_id", "Servo:", servosList);
     element->addFloat("maximum_aperture", "Aperture [0-1]:", 0, 1);
     formElements["SET_VALVE_MAXIMUM_APERTURE_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addInteger("timing", "Timing [ms]:", 0, 3600000);
     formElements["SET_IGNITION_TIME_TC"] = std::move(element);
 
-    element = std::make_unique<MessageFormElement>();
+    element = std::make_shared<MessageFormElement>();
     element->addInteger("ignition_btn", "Ignition:", 0, 1);
     element->addInteger("filling_valve_btn", "Filling:", 0, 1);
     element->addInteger("venting_valve_btn", "Venting:", 0, 1);
diff --git a/src/shared/Modules/CompactCommandPad/CommandSelector.cpp b/src/shared/Modules/CompactCommandPad/CommandSelector.cpp
index ec153cbfb6aef8ec75aabd4ee4782d16f42a2edf..f295ca932fe223ce25629d1144680d17b5757f2b 100644
--- a/src/shared/Modules/CompactCommandPad/CommandSelector.cpp
+++ b/src/shared/Modules/CompactCommandPad/CommandSelector.cpp
@@ -22,8 +22,7 @@
 
 #include <QDebug>
 
-CommandSelector::CommandSelector(std::shared_ptr<Module> parent)
-    : QDialog(), parent(std::move(parent))
+CommandSelector::CommandSelector(Module* parent) : QDialog(), parent(parent)
 {
     setupUi();
 }
diff --git a/src/shared/Modules/CompactCommandPad/CommandSelector.h b/src/shared/Modules/CompactCommandPad/CommandSelector.h
index b21ba186779b54fbb18e5a260a40aae215be5496..5314aa306179b75e6e58da8ef8c5e0958f4902bb 100644
--- a/src/shared/Modules/CompactCommandPad/CommandSelector.h
+++ b/src/shared/Modules/CompactCommandPad/CommandSelector.h
@@ -37,7 +37,7 @@ class CommandSelector : public QDialog
     Q_OBJECT
 
 public:
-    explicit CommandSelector(std::shared_ptr<Module> parent);
+    explicit CommandSelector(Module* parent);
     ~CommandSelector();
 
     XmlObject toXmlObject(XmlObject& obj);
@@ -53,7 +53,7 @@ private:
     std::unique_ptr<QVBoxLayout> outerLayout;
     std::unique_ptr<QLineEdit> lineEdit, continuosTimeoutEdit;
     std::unique_ptr<QComboBox> messagesListComboBox;
-    QMap<QString, std::unique_ptr<MessageFormElement>> formElements;
+    QMap<QString, std::shared_ptr<MessageFormElement>> formElements;
     std::unique_ptr<QGridLayout> formGridLayout;
     std::unique_ptr<QPushButton> sendButton;
     std::unique_ptr<QCheckBox> continuosCheck;
@@ -62,5 +62,5 @@ private:
     QString selectedLabel;
     Message selectedMessage;
 
-    std::shared_ptr<Module> parent;
+    Module* parent;
 };
diff --git a/src/shared/Modules/CompactCommandPad/CompactCommandPad.cpp b/src/shared/Modules/CompactCommandPad/CompactCommandPad.cpp
index c01145d9da25456f16e994c5f74eae51e82e48e5..c685e711c8f62b334552b70ce6d656f654f09e45 100644
--- a/src/shared/Modules/CompactCommandPad/CompactCommandPad.cpp
+++ b/src/shared/Modules/CompactCommandPad/CompactCommandPad.cpp
@@ -131,5 +131,5 @@ void CompactCommandPad::customContextMenuActionSetup()
     auto edit = std::make_unique<QAction>("Edit button", this);
     connect(edit.get(), &QAction::triggered, this,
             &CompactCommandPad::buttonEditActionTriggered);
-    customContextMenuActions.append(std::move(edit));
+    customContextMenuActions.push_back(std::move(edit));
 }
diff --git a/src/shared/Modules/Graph/Graph.cpp b/src/shared/Modules/Graph/Graph.cpp
index 618f0d3f52c7b6a53dd0c7c1cf1e632f027736e5..3971665119b111038ff3d463f50532bd26a0081e 100644
--- a/src/shared/Modules/Graph/Graph.cpp
+++ b/src/shared/Modules/Graph/Graph.cpp
@@ -281,12 +281,12 @@ void Graph::customContextMenuActionSetup()
     subscriptions->setToolTip("Edit graph series");
     connect(subscriptions.get(), &QAction::triggered, this,
             &Graph::onSubscribeClicked);
-    customContextMenuActions.append(std::move(subscriptions));
+    customContextMenuActions.push_back(std::move(subscriptions));
 
     auto clear = std::make_unique<QAction>("Clear");
     clear->setToolTip("Removes all data currently on the plot");
     connect(clear.get(), &QAction::triggered, this, &Graph::onClearClicked);
-    customContextMenuActions.append(std::move(clear));
+    customContextMenuActions.push_back(std::move(clear));
 
     auto stop = std::make_unique<QAction>("Stop");
     stop->setCheckable(true);
@@ -296,12 +296,12 @@ void Graph::customContextMenuActionSetup()
     connect(stop.get(), &QAction::triggered, this,
             [this, stopAddr](bool checked)
             { onStopClicked(stopAddr, checked); });
-    customContextMenuActions.append(std::move(stop));
+    customContextMenuActions.push_back(std::move(stop));
 
     auto follow = std::make_unique<QAction>("Follow");
     follow->setCheckable(true);
     follow->setChecked(following);
     follow->setToolTip("Automatically move the graph to follow new data");
     connect(follow.get(), &QAction::triggered, this, &Graph::onFollowClicked);
-    customContextMenuActions.append(std::move(follow));
+    customContextMenuActions.push_back(std::move(follow));
 }
diff --git a/src/shared/Modules/Graph/Graph.h b/src/shared/Modules/Graph/Graph.h
index c199292dd2fc1bfd43ed96968bdfcc6197bf36b8..c63693ffb732ef122fe8eb09ba8e73f77cfd0cc8 100644
--- a/src/shared/Modules/Graph/Graph.h
+++ b/src/shared/Modules/Graph/Graph.h
@@ -19,6 +19,8 @@
 #pragma once
 
 #include <Core/Message/Filter.h>
+#include <Core/MessageBroker/MessageBroker.h>
+#include <Core/MessageBroker/Subscription.h>
 #include <Core/QCustomPlot/QCustomPlot.h>
 #include <Modules/Module.h>
 
diff --git a/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.cpp b/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.cpp
index ca3e401ce4aab1470e75aa9ddfdba37b413ceda8..0a7bde994018b94b7e692c7075063c350436d06d 100644
--- a/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.cpp
+++ b/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.cpp
@@ -18,6 +18,8 @@
 
 #include "IncomingMessagesViewerModule.h"
 
+#include <Core/MessageBroker/Subscription.h>
+
 #include <QHBoxLayout>
 
 #include "Components/SubscriptionsPanel/SubscriptionsPanel.h"
@@ -38,7 +40,7 @@ XmlObject IncomingMessagesViewerModule::toXmlObject()
     obj.addAttribute("keepOnlyLastMessage", keepOnlyLastMessage ? "1" : "0");
     obj.addAttribute("useTimestamp", useTimestamp ? "1" : "0");
 
-    auto filtersList = filters.keys();
+    QList<Filter> filtersList = getFilters();
 
     for (int i = 0; i < filtersList.count(); i++)
     {
@@ -67,7 +69,9 @@ void IncomingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject)
 
 void IncomingMessagesViewerModule::onSubscribeClicked()
 {
-    auto panel = std::make_unique<SubscriptionsPanel>(filters.keys());
+    QList<Filter> filterKeys = getFilters();
+
+    auto panel = std::make_unique<SubscriptionsPanel>(filterKeys);
     panel->setWindowTitle("Graph subscriptions");
     connect(panel.get(), &SubscriptionsPanel::filterAdded, this,
             &IncomingMessagesViewerModule::onFilterAdded);
@@ -79,7 +83,7 @@ void IncomingMessagesViewerModule::onSubscribeClicked()
 void IncomingMessagesViewerModule::onFilterAdded(const Filter& filter)
 {
 
-    filters.insert(
+    filters.insert(std::pair(
         filter,
         MessageBroker::getInstance().subscribe(
             filter,
@@ -109,12 +113,12 @@ void IncomingMessagesViewerModule::onFilterAdded(const Filter& filter)
 
                 // Updated the content
                 edit->setText(time + message.toString() + "\n" + oldText);
-            }));
+            })));
 }
 
 void IncomingMessagesViewerModule::onFilterRemoved(const Filter& filter)
 {
-    filters.remove(filter);
+    filters.erase(filter);
 }
 
 void IncomingMessagesViewerModule::setupUi()
@@ -134,24 +138,36 @@ void IncomingMessagesViewerModule::customContextMenuActionSetup()
     auto clear = std::make_unique<QAction>("Clear");
     connect(clear.get(), &QAction::triggered, this,
             [this]() { edit->clear(); });
-    customContextMenuActions.append(std::move(clear));
+    customContextMenuActions.push_back(std::move(clear));
 
     auto subscriptions = std::make_unique<QAction>("Manage subscriptions");
     connect(subscriptions.get(), &QAction::triggered, this,
             &IncomingMessagesViewerModule::onSubscribeClicked);
-    customContextMenuActions.append(std::move(subscriptions));
+    customContextMenuActions.push_back(std::move(subscriptions));
 
     keepOnlyLastMessageAction = new QAction("Keep only last message");
     keepOnlyLastMessageAction->setCheckable(true);
     connect(keepOnlyLastMessageAction, &QAction::toggled, this,
             [=](bool value) { keepOnlyLastMessage = value; });
-    customContextMenuActions.append(
+    customContextMenuActions.push_back(
         std::unique_ptr<QAction>(keepOnlyLastMessageAction));
 
     useTimestampAction = new QAction("Use timestamp");
     useTimestampAction->setCheckable(true);
     connect(useTimestampAction, &QAction::toggled, this,
             [=](bool value) { useTimestamp = value; });
-    customContextMenuActions.append(
+    customContextMenuActions.push_back(
         std::unique_ptr<QAction>(useTimestampAction));
 }
+
+QList<Filter> IncomingMessagesViewerModule::getFilters()
+{
+    QList<Filter> list;
+
+    for (auto const& [key, _] : filters)
+    {
+        list.append(key);
+    }
+
+    return list;
+}
diff --git a/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.h b/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.h
index 4f3e1f63ed7d11e9624e1f3713caf9af3af087fe..ac73b5ef789f15f95973211b0c6378e3b900cc2e 100644
--- a/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.h
+++ b/src/shared/Modules/IncomingMessagesViewer/IncomingMessagesViewerModule.h
@@ -44,7 +44,9 @@ private:
     void setupUi();
     void customContextMenuActionSetup();
 
-    QMultiMap<Filter, std::unique_ptr<Subscription>> filters;
+    std::multimap<Filter, std::unique_ptr<Subscription>> filters;
+
+    QList<Filter> getFilters();
 
     bool keepOnlyLastMessage = false;
     QAction* keepOnlyLastMessageAction;
diff --git a/src/shared/Modules/MainStateViewer/MainStateViewer.cpp b/src/shared/Modules/MainStateViewer/MainStateViewer.cpp
index e900171cd0df767113516f62c1c59a2ce0407152..0cf50386db9fe2efacff02e7ce481103f93440fc 100644
--- a/src/shared/Modules/MainStateViewer/MainStateViewer.cpp
+++ b/src/shared/Modules/MainStateViewer/MainStateViewer.cpp
@@ -71,7 +71,7 @@ void MainStateViewerModule::customContextMenuActionSetup()
     connect(action.get(), &QAction::triggered, this,
             &MainStateViewerModule::onConfigureClicked);
 
-    customContextMenuActions.append(action);
+    customContextMenuActions.push_back(std::move(action));
 }
 
 void MainStateViewerModule::onConfigureClicked()
diff --git a/src/shared/Modules/MainStateViewer/MainStateViewer.h b/src/shared/Modules/MainStateViewer/MainStateViewer.h
index 1ac1a5782061dca366e40cfe2ab7bcea36f2e8cc..84fde2482432e15a21972c05cb68f52bf46ced3c 100644
--- a/src/shared/Modules/MainStateViewer/MainStateViewer.h
+++ b/src/shared/Modules/MainStateViewer/MainStateViewer.h
@@ -20,6 +20,8 @@
 
 #include <Core/Message/Filter.h>
 #include <Core/Message/Message.h>
+#include <Core/MessageBroker/MessageBroker.h>
+#include <Core/MessageBroker/Subscription.h>
 #include <Core/XmlObject.h>
 #include <Modules/Module.h>
 
diff --git a/src/shared/Modules/Mavlink/BaseMavlinkModule.h b/src/shared/Modules/Mavlink/BaseMavlinkModule.h
index 0114ef321c22f5a667f3a11c90cd20499e9261e2..9953fc27148fa472d66c9da1de9fb419ca6f9ba9 100644
--- a/src/shared/Modules/Mavlink/BaseMavlinkModule.h
+++ b/src/shared/Modules/Mavlink/BaseMavlinkModule.h
@@ -20,6 +20,7 @@
 
 #include <Components/ToggleButton/ToggleButton.h>
 #include <Core/Message/Message.h>
+#include <Core/MessageBroker/Subscription.h>
 #include <Modules/Module.h>
 
 #include <QTimer>
diff --git a/src/shared/Modules/Mavlink/MavlinkCodec.h b/src/shared/Modules/Mavlink/MavlinkCodec.h
index b32e6620066ed765e572004908ac0db9409ea40c..a4ad8d4a723c78c650eebd4a3ca9d4445362b913 100644
--- a/src/shared/Modules/Mavlink/MavlinkCodec.h
+++ b/src/shared/Modules/Mavlink/MavlinkCodec.h
@@ -22,6 +22,7 @@
 
 #include <QFile>
 #include <QObject>
+#include <memory>
 
 #include "MavlinkVersionHeader.h"
 #include "Ports/MavlinkPort.h"
diff --git a/src/shared/Modules/Mavlink/SerialMavlinkModule.h b/src/shared/Modules/Mavlink/SerialMavlinkModule.h
index f2692f35aee89b3e0c59f92858254eca110418ec..559939f78de34673462e57e308eb697d4ea27653 100644
--- a/src/shared/Modules/Mavlink/SerialMavlinkModule.h
+++ b/src/shared/Modules/Mavlink/SerialMavlinkModule.h
@@ -18,6 +18,8 @@
 
 #pragma once
 
+#include <memory>
+
 #include "BaseMavlinkModule.h"
 #include "Ports/SerialPort.h"
 
diff --git a/src/shared/Modules/Module.cpp b/src/shared/Modules/Module.cpp
index 43b12f3ea76625dc14d73909c6224be27f34f0a8..36c920ec089aa52b66fb094952b214c91c76ced3 100644
--- a/src/shared/Modules/Module.cpp
+++ b/src/shared/Modules/Module.cpp
@@ -64,7 +64,7 @@ void Module::addActionsToMenu(QMenu &menu)
 {
     std::for_each(customContextMenuActions.begin(),
                   customContextMenuActions.end(),
-                  [&menu](std::unique_ptr<QAction> action)
+                  [&menu](std::unique_ptr<QAction> &action)
                   { menu.addAction(action.get()); });
 }
 
diff --git a/src/shared/Modules/Module.h b/src/shared/Modules/Module.h
index 7d1800bc41953280c92018f094f1d259a972165c..a3e8331080e8fbb0d08abc38619aae2a48d7df11 100644
--- a/src/shared/Modules/Module.h
+++ b/src/shared/Modules/Module.h
@@ -24,6 +24,7 @@
 
 #include <QAction>
 #include <QWidget>
+#include <deque>
 
 class Window;
 
@@ -57,12 +58,12 @@ public slots:
     // void onCloseMe();
 
 signals:
-    void replaceMe(const Module* oldModule, std::shared_ptr<Module> newModule);
+    void replaceMe(Module* oldModule, std::shared_ptr<Module> newModule);
     void closeMe(Module* thisModule);
 
 protected:
     ModuleId id;
-    QList<std::unique_ptr<QAction>> customContextMenuActions;
+    std::deque<std::unique_ptr<QAction>> customContextMenuActions;
 
 private:
     void addActionsToMenu(QMenu& menu);
diff --git a/src/shared/Modules/ModuleInfo.h b/src/shared/Modules/ModuleInfo.h
index 8d49ac14f7da7a3a18c1784da7b3999fc0989c4a..4cb1e96cbd0a0faba8ec2bf111c3a5958d19465b 100644
--- a/src/shared/Modules/ModuleInfo.h
+++ b/src/shared/Modules/ModuleInfo.h
@@ -19,6 +19,7 @@
 #pragma once
 
 #include <QStringList>
+#include <memory>
 
 class Module;
 
diff --git a/src/shared/Modules/ModulesList.h b/src/shared/Modules/ModulesList.h
index 0ae0cecfc7cf5e2eeb951f5a921080721c0064cd..4479de8f07519d96e81f2a51925071ad5cd7d7b5 100644
--- a/src/shared/Modules/ModulesList.h
+++ b/src/shared/Modules/ModulesList.h
@@ -19,6 +19,7 @@
 #pragma once
 
 #include <QMap>
+#include <memory>
 
 #include "ModuleInfo.h"
 
diff --git a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h
index dc43f7b626e129d84687b03a110ea63527ddf19c..e63b442c680212c554817e9c067cfd690e852026 100644
--- a/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h
+++ b/src/shared/Modules/OrientationVisualizer/OrientationVisualizer.h
@@ -18,6 +18,7 @@
 
 #pragma once
 
+#include <Core/MessageBroker/Subscription.h>
 #include <Modules/Module.h>
 #include <Qt3DRender/qpointlight.h>
 
@@ -54,13 +55,12 @@ class OrientationVisualizer : public Module
 
 public:
     OrientationVisualizer();
+    ~OrientationVisualizer() override;
 
 protected:
     void resizeEvent(QResizeEvent *event) override;
 
 private:
-    ~OrientationVisualizer() override;
-
     QLabel *rollLabel, *pitchLabel, *yawLabel;
     QComboBox *sourceComboBox;
     QLabel *sourceLabel;
diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
index fef7fa13d9c2f559bb63f9ef1fce79d235ce867d..ced4ba2d0960140028803980f994da0f6448768a 100644
--- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
+++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
@@ -19,6 +19,7 @@
 #include "OutgoingMessagesViewerModule.h"
 
 #include <Core/MessageBroker/MessageBroker.h>
+#include <Core/MessageBroker/Subscription.h>
 
 #include <QTableWidgetItem>
 
diff --git a/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.cpp b/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.cpp
index 73c461e9ed43becd4b668f3892a5f7c18eea6e92..4cd7182798b981ba749d96d492d1691316dfc850 100644
--- a/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.cpp
+++ b/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.cpp
@@ -69,7 +69,7 @@ void PayloadStateViewerModule::customContextMenuActionSetup()
     connect(action.get(), &QAction::triggered, this,
             &PayloadStateViewerModule::onConfigureClicked);
 
-    customContextMenuActions.append(std::move(action));
+    customContextMenuActions.push_back(std::move(action));
 }
 
 void PayloadStateViewerModule::onConfigureClicked()
diff --git a/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.h b/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.h
index eff9d5de220dc32e29cf794cd3f27ff0951f9922..22eee5275db38b0dfdb24a1acb364f88a76d024a 100644
--- a/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.h
+++ b/src/shared/Modules/PayloadStateViewer/PayloadStateViewer.h
@@ -20,6 +20,7 @@
 
 #include <Core/Message/Filter.h>
 #include <Core/Message/Message.h>
+#include <Core/MessageBroker/Subscription.h>
 #include <Modules/Module.h>
 
 #include <QLabel>
diff --git a/src/shared/Modules/Splitter/Splitter.cpp b/src/shared/Modules/Splitter/Splitter.cpp
index 8d77ddc628b2202d5af9cc22026ee9a79cf4ec3c..babfbcea7844cbac399bfb6924630e41e3705402 100644
--- a/src/shared/Modules/Splitter/Splitter.cpp
+++ b/src/shared/Modules/Splitter/Splitter.cpp
@@ -187,12 +187,12 @@ void Splitter::customContextMenuActionSetup()
                 addModule(ModulesList::getInstance().instantiateModule(
                     ModuleId::EMPTY));
             });
-    customContextMenuActions.append(split);
+    customContextMenuActions.push_back(std::move(split));
 
     auto changeOrientation = std::make_unique<QAction>("Swap Orientation");
     connect(changeOrientation.get(), &QAction::triggered, this,
             [this]() { this->swapOrientation(); });
-    customContextMenuActions.append(changeOrientation);
+    customContextMenuActions.push_back(std::move(changeOrientation));
 }
 
 void Splitter::setupUi(Qt::Orientation orientation)
diff --git a/src/shared/Modules/Tabs/TabsModule.cpp b/src/shared/Modules/Tabs/TabsModule.cpp
index 6d4d4f0fa54a9091da9beac46a7004c8cb49f91f..c944e4c590e7748c786a98465d4a3c8cc2a27e4b 100644
--- a/src/shared/Modules/Tabs/TabsModule.cpp
+++ b/src/shared/Modules/Tabs/TabsModule.cpp
@@ -179,17 +179,17 @@ void TabsModule::customContextMenuActionSetup()
     auto newTab = std::make_unique<QAction>("New Tab");
     connect(newTab.get(), &QAction::triggered, this,
             &TabsModule::onMenuNewTabClick);
-    customContextMenuActions.append(newTab);
+    customContextMenuActions.push_back(std::move(newTab));
 
     auto deleteTab = std::make_unique<QAction>("Delete Tab");
     connect(deleteTab.get(), &QAction::triggered, this,
             &TabsModule::onMenuDeleteTabClick);
-    customContextMenuActions.append(deleteTab);
+    customContextMenuActions.push_back(std::move(deleteTab));
 
     auto renameTab = std::make_unique<QAction>("Rename Tab");
     connect(renameTab.get(), &QAction::triggered, this,
             &TabsModule::onMenuRenameTabClick);
-    customContextMenuActions.append(renameTab);
+    customContextMenuActions.push_back(std::move(renameTab));
 }
 
 void TabsModule::onMenuNewTabClick()
diff --git a/src/shared/Modules/Test/TestModule.h b/src/shared/Modules/Test/TestModule.h
index 600889392ac61cee070d085eda7d5229b04001e0..b933603fbdf96a2db7bae2958dc8e394e6bee86b 100644
--- a/src/shared/Modules/Test/TestModule.h
+++ b/src/shared/Modules/Test/TestModule.h
@@ -18,6 +18,7 @@
 
 #pragma once
 
+#include <Core/MessageBroker/Subscription.h>
 #include <Modules/Module.h>
 
 #include <QWidget>
diff --git a/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.cpp b/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.cpp
index d1671adef3988be4675c3aee9e9a84593154bc7d..6181cf4ace3d37ac255083c0b02a33c960f3b19c 100644
--- a/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.cpp
+++ b/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.cpp
@@ -19,6 +19,7 @@
 #include "ValuesConverterViewerModule.h"
 
 #include <Core/MessageBroker/MessageBroker.h>
+#include <Core/MessageBroker/Subscription.h>
 
 #include <QAction>
 
@@ -102,7 +103,7 @@ void ValuesConverterViewerModule::customContextMenuActionSetup()
     auto configure = std::make_unique<QAction, const QString&>("Configure");
     connect(configure.get(), &QAction::triggered, this,
             &ValuesConverterViewerModule::onConfigureClicked);
-    customContextMenuActions.append(configure);
+    customContextMenuActions.push_back(std::move(configure));
 }
 
 std::unique_ptr<QLabel> ValuesConverterViewerModule::createView(
@@ -131,7 +132,7 @@ void ValuesConverterViewerModule::createLabels()
         std::unique_ptr<QLabel> label;
 
         int labelIndex = findLabelIndexByName(rules[i].getName());
-        if (labelIndex >= 0 && labelIndex < labels.count())
+        if (labelIndex >= 0 && labelIndex < static_cast<int>(labels.size()))
         {
             label = std::move(labels[labelIndex]);
         }
@@ -150,7 +151,7 @@ void ValuesConverterViewerModule::createLabels()
                 col++;
             }
         }
-        labels.append(label);
+        labels.push_back(std::move(label));
     }
 }
 
@@ -220,7 +221,7 @@ void ValuesConverterViewerModule::clearRules()
 
 int ValuesConverterViewerModule::findLabelIndexByName(const QString& name)
 {
-    for (int i = 0; i < labels.count(); i++)
+    for (int i = 0; i < static_cast<int>(labels.size()); i++)
     {
         if (labels[i]->text() == name)
         {
diff --git a/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.h b/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.h
index 25900788d31971f9b1cb145a6b88f656b57b3ac6..16899bb34bcd8eb90d95e3b882ad287c107eefbb 100644
--- a/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.h
+++ b/src/shared/Modules/ValuesConverterViewer/ValuesConverterViewerModule.h
@@ -22,6 +22,7 @@
 
 #include <QLabel>
 #include <QWidget>
+#include <deque>
 
 #include "Core/Message/Message.h"
 #include "ValueElement.h"
@@ -63,7 +64,7 @@ private:
     Ui::ValuesConverterViewerModule* ui;
     int minColNumber = 1;
     int columns      = minColNumber;
-    QList<std::unique_ptr<QLabel>> labels;
+    std::deque<std::unique_ptr<QLabel>> labels;
     QList<ValueElement> rules;
     std::unique_ptr<Subscription> subscription;
 };
diff --git a/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.cpp b/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.cpp
index dffdca3f9c98dd577c12ea640f1a6a57e464548c..bac8039911b51d66da9f40fa83d17b56b8dab1ce 100644
--- a/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.cpp
+++ b/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.cpp
@@ -94,9 +94,9 @@ void ValuesViewerConfigPanel::onRemoveClicked()
     {
         rules.removeAt(selectedView);
     }
-    if (selectedView >= 0 && selectedView < views.count())
+    if (selectedView >= 0 && selectedView < static_cast<int>(views.size()))
     {
-        views.removeAt(selectedView);
+        views.erase(views.begin() + selectedView);
     }
 }
 
@@ -166,7 +166,7 @@ void ValuesViewerConfigPanel::setTextBoxValues(const ValueElement& el)
 
 int ValuesViewerConfigPanel::findSelectedView() const
 {
-    for (int i = 0; i < views.count(); i++)
+    for (int i = 0; i < static_cast<int>(views.size()); i++)
     {
         if (views[i]->isChecked())
         {
@@ -181,7 +181,7 @@ void ValuesViewerConfigPanel::addRule(int index, const ValueElement& el)
     rules.insert(index, el);
     auto view      = createView(el);
     auto* viewAddr = view.get();
-    views.insert(index, std::move(view));
+    views.insert(views.begin() + index, std::move(view));
     ui->fieldsLayout->insertWidget(index, viewAddr);
     connect(viewAddr, &QRadioButton::clicked, this,
             &ValuesViewerConfigPanel::onValueElementClicked);
diff --git a/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.h b/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.h
index 9360d053f55acf1483279ee2d2e27d08149c33cf..6fcac490ff727002ca4706e522a17f34f4e0e28c 100644
--- a/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.h
+++ b/src/shared/Modules/ValuesConverterViewer/ValuesViewerConfigPanel.h
@@ -20,6 +20,7 @@
 
 #include <QRadioButton>
 #include <QWidget>
+#include <deque>
 
 #include "ValueElement.h"
 
@@ -65,5 +66,5 @@ private:
     Ui::ValuesViewerConfigPanel *ui;
 
     QList<ValueElement> rules;
-    QList<std::unique_ptr<QRadioButton>> views;
+    std::deque<std::unique_ptr<QRadioButton>> views;
 };
diff --git a/src/shared/Modules/ValvesViewer/ValvesViewer.cpp b/src/shared/Modules/ValvesViewer/ValvesViewer.cpp
index c52ae31fe9da917f109a1512a9a9a34f22f5aa93..24c74796eb7f034922427f5b4fd2c528dddb4938 100644
--- a/src/shared/Modules/ValvesViewer/ValvesViewer.cpp
+++ b/src/shared/Modules/ValvesViewer/ValvesViewer.cpp
@@ -68,7 +68,7 @@ void ValvesViewer::customContextMenuActionSetup()
     connect(action.get(), &QAction::triggered, this,
             &ValvesViewer::onConfigureClicked);
 
-    customContextMenuActions.append(std::move(action));
+    customContextMenuActions.push_back(std::move(action));
 }
 
 void ValvesViewer::onConfigureClicked()
diff --git a/src/shared/Modules/ValvesViewer/ValvesViewer.h b/src/shared/Modules/ValvesViewer/ValvesViewer.h
index 7b3b6ac46e5f9c5cd39fb0a18fdd5edd54d94e7f..ee1f903d1fe71dce3f9087465d5c0eacb9a27415 100644
--- a/src/shared/Modules/ValvesViewer/ValvesViewer.h
+++ b/src/shared/Modules/ValvesViewer/ValvesViewer.h
@@ -20,6 +20,7 @@
 
 #include <Core/Message/Filter.h>
 #include <Core/Message/Message.h>
+#include <Core/MessageBroker/Subscription.h>
 #include <Modules/Module.h>
 
 #include <QLabel>