diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000000000000000000000000000000000000..48706ce9f1752d16ad4942f7bbc7d1bf37d0fb61
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,13 @@
+{
+    BasedOnStyle: Google,
+    AccessModifierOffset: -4,
+    AlignConsecutiveAssignments: true,
+    AllowShortIfStatementsOnASingleLine: false,
+    AllowShortLoopsOnASingleLine: false,
+    BreakBeforeBraces: Allman,
+    ColumnLimit: 160,
+    ConstructorInitializerAllOnOneLineOrOnePerLine: false,
+    IndentCaseLabels: true,
+    IndentWidth: 4,
+    KeepEmptyLinesAtTheStartOfBlocks: true,
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..c067a4b2f2fac4b04bab233e7cf05ed1e13d6fce
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,5 @@
+{
+    "cSpell.words": [
+        "mavlink"
+    ]
+}
\ No newline at end of file
diff --git a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp
index b53795708eb59dd3d56ff5832bd90b9f35e8d174..fff1a46a1ae145a2d0fcfa8b299d350373a3827e 100644
--- a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp
+++ b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.cpp
@@ -1,70 +1,78 @@
 #include "outcomingmessagesviewermodule.h"
-#include "ui_outcomingmessagesviewermodule.h"
+
+#include <QTableWidgetItem>
 
 #include "Core/modulemessagesbroker.h"
 #include "Modules/skywardhubstrings.h"
-#include <QTableWidgetItem>
+#include "ui_outcomingmessagesviewermodule.h"
 
-OutcomingMessagesViewerModule::OutcomingMessagesViewerModule(QWidget* parent) : DefaultModule(parent), ui(new Ui::OutcomingMessagesViewerModule) {
+OutcomingMessagesViewerModule::OutcomingMessagesViewerModule(QWidget* parent) : DefaultModule(parent), ui(new Ui::OutcomingMessagesViewerModule)
+{
     ui->setupUi(this);
     defaultContextMenuSetup();
 
-    getCore()->getModuleMessagesBroker()->subscribe({SkywardHubStrings::logCommandsTopic}, this, [this](const ModuleMessage & msg) {
-        addMsgSent(msg);
-    });
+    getCore()->getModuleMessagesBroker()->subscribe({SkywardHubStrings::logCommandsTopic}, this, [this](const ModuleMessage& msg) { addMsgSent(msg); });
 
-    getCore()->getModuleMessagesBroker()->subscribe(ackTopic, this, [this](const ModuleMessage & msg) {
-        handleAck(msg);
-    });
+    getCore()->getModuleMessagesBroker()->subscribe(SkywardHubStrings::mavlink_received_msg_ACK_topic, this,
+                                                    [this](const ModuleMessage& msg) { handleAck(msg); });
+    getCore()->getModuleMessagesBroker()->subscribe(SkywardHubStrings::mavlink_received_msg_NACK_topic, this,
+                                                    [this](const ModuleMessage& msg) { handleNack(msg); });
 }
 
-OutcomingMessagesViewerModule::~OutcomingMessagesViewerModule() {
-    delete ui;
-}
+OutcomingMessagesViewerModule::~OutcomingMessagesViewerModule() { delete ui; }
 
-QWidget* OutcomingMessagesViewerModule::toWidget() {
-    return this;
-}
+QWidget* OutcomingMessagesViewerModule::toWidget() { return this; }
 
-XmlObject OutcomingMessagesViewerModule::toXmlObject() {
-    return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER));
-}
+XmlObject OutcomingMessagesViewerModule::toXmlObject() { return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER)); }
 
-void OutcomingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) {
-    Q_UNUSED(xmlObject);
-}
+void OutcomingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject) { Q_UNUSED(xmlObject); }
 
-void OutcomingMessagesViewerModule::addMsgSent(const ModuleMessage& msg) {
-    int row = updateVerticalHeaders(msg);
+void OutcomingMessagesViewerModule::addMsgSent(const ModuleMessage& msg)
+{
+    int row    = updateVerticalHeaders(msg);
     int column = 0;
 
-    QString msgName = computeMsgName(msg);
+    QString msgName           = computeMsgName(msg);
     QTableWidgetItem* newItem = new QTableWidgetItem(msgName);
-    newItem->setBackground(QBrush(QColor(255, 153, 51)));
+    newItem->setBackground(QBrush(QColor(80, 80, 80)));
     newItem->setForeground(QBrush(QColor(0, 0, 0)));
     ui->tableWidget->setItem(row, column, newItem);
     registerMessage(newItem, msg);
 }
 
-QString OutcomingMessagesViewerModule::computeMsgName(const ModuleMessage& msg) {
-    return msg.getField("name").getString();
+QString OutcomingMessagesViewerModule::computeMsgName(const ModuleMessage& msg) { return msg.getField("name").getString(); }
+
+void OutcomingMessagesViewerModule::handleAck(const ModuleMessage& ack)
+{
+    for (int i = 0; i < messages.count(); i++)
+    {
+        ModuleMessage msg = messages[i].getMsg();
+
+        // Color the message the ack is for by checking the message is and
+        // sequence number
+        if (msg.getField("message_id") == ack.getField("recv_msgid"))
+            if (msg.getField("sequence_number") == ack.getField("seq_ack"))
+                messages[i].getItem()->setBackground(QBrush(QColor(0, 255, 0)));
+    }
 }
 
-void OutcomingMessagesViewerModule::handleAck(const ModuleMessage& ack) {
-    for(int i = 0; i < messages.count(); i++) {
+void OutcomingMessagesViewerModule::handleNack(const ModuleMessage& nack)
+{
+    for (int i = 0; i < messages.count(); i++)
+    {
         ModuleMessage msg = messages[i].getMsg();
 
-        // If the two messages have the same ack and sequence number
-        if(msg.getField("message_id") == ack.getField("recv_msgid")) {
-            if(msg.getField("sequence_number") == ack.getField("seq_ack")) {
-                messages[i].getItem()->setBackground(QBrush(QColor(0, 255, 255)));
-            }
-        }
+        // Color the message the nack is for by checking the message is and
+        // sequence number
+        if (msg.getField("message_id") == nack.getField("recv_msgid"))
+            if (msg.getField("sequence_number") == nack.getField("seq_ack"))
+                messages[i].getItem()->setBackground(QBrush(QColor(255, 0, 0)));
     }
 }
 
-int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& msg) {
-    int row = 0; // Insert on top
+int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& msg)
+{
+    int row = 0;  // Insert on top
     QTime time(0, 0, 0, 0);
     time = time.addMSecs(msg.getField("timestamp").getInteger(0));
 
@@ -74,41 +82,35 @@ int OutcomingMessagesViewerModule::updateVerticalHeaders(const ModuleMessage& ms
     ui->tableWidget->setVerticalHeaderItem(row, header);
 
     int rowCount = ui->tableWidget->rowCount();
-    if( rowCount > maxSize && rowCount > 0) {
+    if (rowCount > maxSize && rowCount > 0)
+    {
         ui->tableWidget->removeRow(rowCount - 1);
     }
 
     return row;
 }
 
-void OutcomingMessagesViewerModule::registerMessage(QTableWidgetItem* item, const ModuleMessage& msg) {
+void OutcomingMessagesViewerModule::registerMessage(QTableWidgetItem* item, const ModuleMessage& msg)
+{
     messages.prepend(MessageLog(item, msg));
-    if(messages.count() > maxSize) {
+    if (messages.count() > maxSize)
+    {
         messages.removeLast();
     }
 }
 
-
-
 // ____________________ MESSAGE LOG CLASS _______________________________
 
-MessageLog::MessageLog(QTableWidgetItem* item, const ModuleMessage& msg) {
+MessageLog::MessageLog(QTableWidgetItem* item, const ModuleMessage& msg)
+{
     setItem(item);
     setMsg(msg);
 }
 
-QTableWidgetItem* MessageLog::getItem() const {
-    return item;
-}
+QTableWidgetItem* MessageLog::getItem() const { return item; }
 
-void MessageLog::setItem(QTableWidgetItem* value) {
-    item = value;
-}
+void MessageLog::setItem(QTableWidgetItem* value) { item = value; }
 
-ModuleMessage MessageLog::getMsg() const {
-    return msg;
-}
+ModuleMessage MessageLog::getMsg() const { return msg; }
 
-void MessageLog::setMsg(const ModuleMessage& value) {
-    msg = value;
-}
+void MessageLog::setMsg(const ModuleMessage& value) { msg = value; }
diff --git a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h
index 92966fa2c740e659a603188a01a0d3253228c4a3..c74768ad389b15f945e7f20aeaaa3fcbade1f0bc 100644
--- a/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h
+++ b/Modules/OutcomingMessagesViewer/outcomingmessagesviewermodule.h
@@ -2,15 +2,17 @@
 #define OUTCOMINGMESSAGESVIEWERMODULE_H
 
 #include <QWidget>
-#include "Core/module.h"
+
 #include "Core/Message/modulemessage.h"
+#include "Core/module.h"
 #include "Modules/DefaultModule/defaultmodule.h"
 
 class QTableWidgetItem;
 
-class MessageLog {
+class MessageLog
+{
 
-  public:
+public:
     explicit MessageLog(QTableWidgetItem* item, const ModuleMessage& msg);
 
     QTableWidgetItem* getItem() const;
@@ -19,20 +21,21 @@ class MessageLog {
     ModuleMessage getMsg() const;
     void setMsg(const ModuleMessage& value);
 
-  private:
+private:
     QTableWidgetItem* item = nullptr;
     ModuleMessage msg;
 };
 
-
-namespace Ui {
+namespace Ui
+{
 class OutcomingMessagesViewerModule;
 }
 
-class OutcomingMessagesViewerModule : public DefaultModule {
+class OutcomingMessagesViewerModule : public DefaultModule
+{
     Q_OBJECT
 
-  public:
+public:
     explicit OutcomingMessagesViewerModule(QWidget* parent = nullptr);
     ~OutcomingMessagesViewerModule();
 
@@ -43,17 +46,17 @@ class OutcomingMessagesViewerModule : public DefaultModule {
 
     void addMsgSent(const ModuleMessage& msg);
     void handleAck(const ModuleMessage& ack);
+    void handleNack(const ModuleMessage& nack);
 
-  protected:
+protected:
     int updateVerticalHeaders(const ModuleMessage& msg);
     void registerMessage(QTableWidgetItem* item, const ModuleMessage& msg);
     QString computeMsgName(const ModuleMessage& msg);
 
-  private:
+private:
     Ui::OutcomingMessagesViewerModule* ui;
     QList<MessageLog> messages;
-    QString ackTopic = SkywardHubStrings::mavlink_received_msg_ACK_topic;
     int maxSize = 10;
 };
 
-#endif // OUTCOMINGMESSAGESVIEWERMODULE_H
+#endif  // OUTCOMINGMESSAGESVIEWERMODULE_H
diff --git a/Modules/skywardhubstrings.cpp b/Modules/skywardhubstrings.cpp
deleted file mode 100644
index 046d45c47046074c1340b93209ebf1599a7a1543..0000000000000000000000000000000000000000
--- a/Modules/skywardhubstrings.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "skywardhubstrings.h"
-
-
-
-const QString SkywardHubStrings::defaultConfigurationFolder = "SkywardHubConfig";
-const QString SkywardHubStrings::defaultSettingsFilePath = defaultConfigurationFolder + "/" + "settings.xml";
-const QString SkywardHubStrings::defaultPrefabsFolderName = "Prefabs";
-const QString SkywardHubStrings::defaultLogsFolder = defaultConfigurationFolder + "/" + "Logs";
-const QString SkywardHubStrings::defaultStreamFile = defaultConfigurationFolder + "/" + "StreamFile.txt";
-const QString SkywardHubStrings::defaultPrefabsFolder = defaultConfigurationFolder + "/" + defaultPrefabsFolderName + "/";
-const QString SkywardHubStrings::defaultConfigurationFileName = "default.xml";
-const QString SkywardHubStrings::defaultConfigurationIconPath = defaultConfigurationFolder + "/" + "defaultConfigIcon.svg";
-
-
-// Xml Tags Name
-const QString SkywardHubStrings::skywardHubInitFileTag = "LoadOnLaunch";
-const QString SkywardHubStrings::settingsObjectName = "Settings";
-const QString SkywardHubStrings::configurationNameAttribute = "name";
-const QString SkywardHubStrings::configurationNameValue = "Configuration";
-const QString SkywardHubStrings::configurationIconPathAttribute = "ConfigurationIcon";
-const QString SkywardHubStrings::configurationDescriptionAttribute = "Description";
-
-// Output Messages
-const QString SkywardHubStrings::settingsSavedCorrectlyMsg = "Settings saved";
-const QString SkywardHubStrings::serialPortClosedErrorMsg = "Mavlink >> Error, Serial port closed, impossible to write msg";
-const QString SkywardHubStrings::imageViewerInfo = "Dobule click on a label to open the settings panel";
-
-
-// Topics
-const QString SkywardHubStrings::commandsTopic = "TelemetryCommand";
-const QString SkywardHubStrings::treeViewerReceivingBaseTopic = "TreeViewer";
-
-const QString SkywardHubStrings::logCommandsTopic = "LogCommands";
-const QString SkywardHubStrings::raw_event_id = "event_id";
-const QString SkywardHubStrings::raw_event_topic_id = "topic_id";
-const QString SkywardHubStrings::mavlink_orientation_tc_yaw_name = "yaw";
-const QString SkywardHubStrings::mavlink_orientation_tc_pitch_name = "pitch";
-const QString SkywardHubStrings::mavlink_orientation_tc_roll_name = "roll";
-const QString SkywardHubStrings::mavlink_quality_link_topic = "MavlinkLinkQuality";
-const QString SkywardHubStrings::mavlink_received_msg_topic = "Mav";
-const QString SkywardHubStrings::mavlink_initial_coordinates_tc_latitude_name = "latitude";
-const QString SkywardHubStrings::mavlink_initial_coordinates_tc_longitude_name = "longitude";
-
-const QString SkywardHubStrings::mavlink_received_msg_ACK_topic = mavlink_received_msg_topic + "/ACK_TM";
-
-
-SkywardHubStrings::SkywardHubStrings() {
-
-}
diff --git a/Modules/skywardhubstrings.h b/Modules/skywardhubstrings.h
index 645af418da016b396577deefee2710256357b94c..d4270ebe3cfa52e1ede46f49daccdebe0592e309 100644
--- a/Modules/skywardhubstrings.h
+++ b/Modules/skywardhubstrings.h
@@ -3,56 +3,49 @@
 
 #include <QString>
 
-class SkywardHubStrings {
-  public:
-    SkywardHubStrings();
-
-    static const QString defaultConfigurationFolder;
-    static const QString defaultSettingsFilePath;
-    static const QString defaultPrefabsFolderName;
-    static const QString defaultPrefabsFolder;
-    static const QString defaultConfigurationFileName;
-    static const QString defaultConfigurationIconPath;
-    static const QString defaultLogsFolder;
-    static const QString defaultStreamFile;
-
-    // Xml Tags Name
-    static const QString settingsObjectName;
-    static const QString skywardHubInitFileTag;
-    static const QString configurationNameAttribute;
-    static const QString configurationIconPathAttribute;
-    static const QString configurationDescriptionAttribute;
-    static const QString configurationNameValue;
-
-
-    // Output Messages & UI text
-    static const QString settingsSavedCorrectlyMsg;
-    static const QString serialPortClosedErrorMsg;
-    static const QString imageViewerInfo;
-
-
-    // Topics
-    static const QString commandsTopic;
-    static const QString sentCommandsTopic;
-    static const QString treeViewerReceivingBaseTopic;
-
-    static const QString logCommandsTopic;
-    static const QString raw_event_id;
-    static const QString raw_event_topic_id;
-    static const QString mavlink_orientation_tc_yaw_name;
-    static const QString mavlink_orientation_tc_pitch_name;
-    static const QString mavlink_orientation_tc_roll_name;
-    static const QString mavlink_initial_coordinates_tc_latitude_name;
-    static const QString mavlink_initial_coordinates_tc_longitude_name;
-
-    static const QString msgIdField;
-    static const QString msgSequenceNumberField;
-
-    static const QString mavlink_quality_link_topic;
-    static const QString mavlink_received_msg_topic;
-    static const QString mavlink_received_msg_ACK_topic;
-};
-
-
-
-#endif // SKYWARDHUBSTRINGS_H
+namespace SkywardHubStrings
+{
+
+static const QString defaultConfigurationFolder   = "SkywardHubConfig";
+static const QString defaultSettingsFilePath      = defaultConfigurationFolder + "/" + "settings.xml";
+static const QString defaultPrefabsFolderName     = "Prefabs";
+static const QString defaultLogsFolder            = defaultConfigurationFolder + "/" + "Logs";
+static const QString defaultStreamFile            = defaultConfigurationFolder + "/" + "StreamFile.txt";
+static const QString defaultPrefabsFolder         = defaultConfigurationFolder + "/" + defaultPrefabsFolderName + "/";
+static const QString defaultConfigurationFileName = "default.xml";
+static const QString defaultConfigurationIconPath = defaultConfigurationFolder + "/" + "defaultConfigIcon.svg";
+
+// Xml Tags Name
+static const QString skywardHubInitFileTag             = "LoadOnLaunch";
+static const QString settingsObjectName                = "Settings";
+static const QString configurationNameAttribute        = "name";
+static const QString configurationNameValue            = "Configuration";
+static const QString configurationIconPathAttribute    = "ConfigurationIcon";
+static const QString configurationDescriptionAttribute = "Description";
+
+// Output Messages
+static const QString settingsSavedCorrectlyMsg = "Settings saved";
+static const QString serialPortClosedErrorMsg  = "Mavlink >> Error, Serial port closed, impossible to write msg";
+static const QString imageViewerInfo           = "Double click on a label to open the settings panel";
+
+// Topics
+static const QString commandsTopic                = "TelemetryCommand";
+static const QString treeViewerReceivingBaseTopic = "TreeViewer";
+
+static const QString logCommandsTopic                              = "LogCommands";
+static const QString raw_event_id                                  = "event_id";
+static const QString raw_event_topic_id                            = "topic_id";
+static const QString mavlink_orientation_tc_yaw_name               = "yaw";
+static const QString mavlink_orientation_tc_pitch_name             = "pitch";
+static const QString mavlink_orientation_tc_roll_name              = "roll";
+static const QString mavlink_quality_link_topic                    = "MavlinkLinkQuality";
+static const QString mavlink_received_msg_topic                    = "Mav";
+static const QString mavlink_initial_coordinates_tc_latitude_name  = "latitude";
+static const QString mavlink_initial_coordinates_tc_longitude_name = "longitude";
+
+static const QString mavlink_received_msg_ACK_topic  = mavlink_received_msg_topic + "/ACK_TM";
+static const QString mavlink_received_msg_NACK_topic = mavlink_received_msg_topic + "/NACK_TM";
+
+};  // namespace SkywardHubStrings
+
+#endif  // SKYWARDHUBSTRINGS_H
diff --git a/SkywardHub.pro b/SkywardHub.pro
index 5da85fcea1fbc739d3a33d161dddc4de5b4c617d..b29d5c9e2f6a5ff944084187f362f4827f9afe14 100644
--- a/SkywardHub.pro
+++ b/SkywardHub.pro
@@ -59,7 +59,6 @@ SOURCES += \
     Modules/ValuesConverterViewer/valuesviewerconfigpanel.cpp \
     Modules/moduleinfo.cpp \
     Modules/moduleslist.cpp \
-    Modules/skywardhubstrings.cpp \
     main.cpp
 
 HEADERS += \