diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
index af367fb33e0bc0618b907bfcc65d01c327d65865..6c2f80af613f3749adc1b6247bc306f8bb9c9cab 100644
--- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
+++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.cpp
@@ -24,73 +24,41 @@
 #include <QDebug>
 #include <QTableWidgetItem>
 
-OutgoingMessagesViewerModule::OutgoingMessagesViewerModule()
-    : Module(ModuleId::OUTGOING_MESSAGES_VIEWER)
+OutgoingMessagesViewerModule::OutgoingMessagesViewerModule(QWidget* parent)
+    : DefaultModule(parent)
 {
     setupUi();
-    customContextMenuActionSetup();
+    defaultContextMenuSetup();
 
     // Subscribe to commands, ACKs and NACKs
-    MessageBroker::getInstance().subscribe(
+    getCore()->getMessageBroker()->subscribe(
         Filter::fromString(SkywardHubStrings::logCommandsTopic), this,
         [this](const Message& message, const Filter& filter)
         { handleMsg(message); });
-    MessageBroker::getInstance().subscribe(
+    getCore()->getMessageBroker()->subscribe(
         Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic),
-        this,
-        [this](const Message& message, const Filter& filter)
+        this, [this](const Message& message, const Filter& filter)
         { handleAck(message); });
     MessageBroker::getInstance().subscribe(
         Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic),
-        this,
-        [this](const Message& message, const Filter& filter)
+        this, [this](const Message& message, const Filter& filter)
         { handleNack(message); });
     MessageBroker::getInstance().subscribe(
         Filter::fromString(SkywardHubStrings::mavlink_received_msg_WACK_topic),
-        this,
-        [this](const Message& message, const Filter& filter)
+        this, [this](const Message& message, const Filter& filter)
         { handleWack(message); });
-
-    timer = new QTimer(this);
-    connect(timer, &QTimer::timeout, this,
-            &OutgoingMessagesViewerModule::updateElapsedTime);
 }
 
-OutgoingMessagesViewerModule::~OutgoingMessagesViewerModule()
-{
-    MessageBroker::getInstance().unsubscribe(
-        Filter::fromString(SkywardHubStrings::logCommandsTopic), this);
-    MessageBroker::getInstance().unsubscribe(
-        Filter::fromString(SkywardHubStrings::mavlink_received_msg_ACK_topic),
-        this);
-    MessageBroker::getInstance().unsubscribe(
-        Filter::fromString(SkywardHubStrings::mavlink_received_msg_NACK_topic),
-        this);
-}
+QWidget* OutgoingMessagesViewerModule::toWidget() { return this; }
 
 XmlObject OutgoingMessagesViewerModule::toXmlObject()
 {
-    XmlObject obj = Module::toXmlObject();
-
-    obj.addAttribute("timestamp", timestamp->isChecked());
-    obj.addAttribute("elapsed_time", elapsedTime->isChecked());
-
-    return obj;
+    return XmlObject(getName(ModuleId::OUTCOMINGMESSAGEVIEWER));
 }
 
-void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& obj)
+void OutgoingMessagesViewerModule::fromXmlObject(const XmlObject& xmlObject)
 {
-    int timestampAtt;
-    if (obj.getAttribute("timestamp", timestampAtt))
-    {
-        timestamp->setChecked(timestampAtt != 0);
-    }
-
-    int elapsedTimeAtt;
-    if (obj.getAttribute("elapsed_time", elapsedTimeAtt))
-    {
-        elapsedTime->setChecked(elapsedTimeAtt != 0);
-    }
+    Q_UNUSED(xmlObject);
 }
 
 void OutgoingMessagesViewerModule::setupUi()
@@ -100,67 +68,18 @@ void OutgoingMessagesViewerModule::setupUi()
 
     table = new QTableWidget;
     outerLayout->addWidget(table);
-    table->setColumnCount(3);
-
-    // Hide elapsed time column
-    table->setColumnHidden(1, true);
-
-    // Hide headers
+    table->setColumnCount(2);
     table->verticalHeader()->setVisible(false);
     table->horizontalHeader()->setVisible(false);
-
-    // Timestamp and elapse time columns resize to fit content while message
-    // takes all the remaining space
     table->horizontalHeader()->setSectionResizeMode(
         0, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setSectionResizeMode(
-        1, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
-
-    // Hide vertical scrollbar
+    table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
     table->verticalScrollBar()->setVisible(false);
-
-    // Disable items selection
     table->setSelectionMode(QAbstractItemView::NoSelection);
 
     setLayout(outerLayout);
 }
 
-void OutgoingMessagesViewerModule::customContextMenuActionSetup()
-{
-    timestamp = new QAction("Timestamp");
-    timestamp->setCheckable(true);
-    timestamp->setChecked(true);
-    connect(timestamp, &QAction::toggled, this,
-            [this]() { table->setColumnHidden(0, !timestamp->isChecked()); });
-    customContextMenuActions.append(timestamp);
-
-    elapsedTime = new QAction("Elapsed time");
-    elapsedTime->setCheckable(true);
-    connect(elapsedTime, &QAction::toggled, this,
-            [this]()
-            {
-                table->setColumnHidden(1, !elapsedTime->isChecked());
-
-                if (elapsedTime->isChecked() && !timer->isActive())
-                {
-                    timer->start(timerPeriod);
-                }
-                else
-                {
-                    timer->stop();
-                }
-            });
-    customContextMenuActions.append(elapsedTime);
-
-    auto clear = new QAction("Clear");
-    connect(clear, &QAction::triggered, this,
-            &OutgoingMessagesViewerModule::clearTable);
-    customContextMenuActions.append(clear);
-
-    qDebug() << "Set context menu for outgoing messages viewer";
-}
-
 void OutgoingMessagesViewerModule::resizeEvent(QResizeEvent* event)
 {
     if (table->rowCount() == 0)
@@ -274,48 +193,15 @@ void OutgoingMessagesViewerModule::addMessageToTable(
     const QPair<QDateTime, Message>& msg, int row)
 {
     // Prepare the row items
-    auto timestampTxt   = new QTableWidgetItem(msg.first.toString("hh.mm.ss"));
-    auto elapsedTimeTxt = new QTableWidgetItem("00.00.00");
+    auto dateTxt = new QTableWidgetItem(msg.first.toString("hh.mm.ss"));
     auto msgName = new QTableWidgetItem(msg.second.getField("name").toString());
-
-    // Disable editing
-    timestampTxt->setFlags(Qt::ItemIsEnabled);
-    elapsedTimeTxt->setFlags(Qt::ItemIsEnabled);
-    msgName->setFlags(Qt::ItemIsEnabled);
+    msgName->setBackground(QBrush(QColor(80, 80, 80)));
+    msgName->setForeground(QBrush(QColor(0, 0, 0)));
 
     // Add a new row
     table->insertRow(row);
 
     // Fill the row with data
-    table->setItem(row, 0, timestampTxt);
-    table->setItem(row, 1, elapsedTimeTxt);
-    table->setItem(row, 2, msgName);
-}
-
-void OutgoingMessagesViewerModule::clearTable()
-{
-    table->clearContents();
-    table->setRowCount(0);
-    messages.clear();
-}
-
-void OutgoingMessagesViewerModule::updateElapsedTime()
-{
-    auto currentTime = QDateTime::currentDateTime();
-
-    for (int i = 0; i < std::min(table->rowCount(), messages.count()); i++)
-    {
-        auto date = messages[i].first;
-
-        auto elapsedSeconds = date.secsTo(currentTime) % 60;
-        auto elapsedMinutes = (date.secsTo(currentTime) / 60) % 60;
-        auto elapsedHours   = date.secsTo(currentTime) / 3600;
-
-        auto elapsedTimeTxt = QString("%1:%2:%3")
-                                  .arg(elapsedHours, 2, 'f', 0, '0')
-                                  .arg(elapsedMinutes, 2, 'f', 0, '0')
-                                  .arg(elapsedSeconds, 2, 'f', 0, '0');
-
-        table->item(i, 1)->setText(elapsedTimeTxt);
-    }
+    table->setItem(row, 0, dateTxt);
+    table->setItem(row, 1, msgName);
 }
diff --git a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
index 7235f1096e2027bae04bcc3560042ae252fdddc6..d8c5816070475c4607248f36f46a9e4c312e53c4 100644
--- a/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
+++ b/src/shared/Modules/OutgoingMessagesViewer/OutgoingMessagesViewerModule.h
@@ -24,23 +24,22 @@
 #include <QDateTime>
 #include <QList>
 #include <QPair>
-#include <QTimer>
 #include <QWidget>
 
-class OutgoingMessagesViewerModule : public Module
+class OutgoingMessagesViewerModule : public DefaultModule
 {
     Q_OBJECT
 
 public:
-    OutgoingMessagesViewerModule();
-    ~OutgoingMessagesViewerModule();
+    explicit OutgoingMessagesViewerModule(QWidget* parent = nullptr);
+
+    QWidget* toWidget() override;
 
     XmlObject toXmlObject() override;
     void fromXmlObject(const XmlObject& xmlObject) override;
 
 private:
     void setupUi();
-    void customContextMenuActionSetup();
 
     void resizeEvent(QResizeEvent* event = nullptr) override;
 
@@ -50,17 +49,9 @@ private:
     void handleWack(const Message& wack);
 
     void addMessageToTable(const QPair<QDateTime, Message>& msg, int row = 0);
-    void clearTable();
-
-    void updateElapsedTime();
 
     QTableWidget* table;
-    QTimer* timer;
-    QAction* timestamp;
-    QAction* elapsedTime;
 
     QList<QPair<QDateTime, Message>> messages;
-
-    int maxListSize = 20;
-    int timerPeriod = 1000;  // [ms]
+    size_t maxListSize = 20;
 };