diff --git a/src/boards/RIGv2/Actuators/Actuators.cpp b/src/boards/RIGv2/Actuators/Actuators.cpp
index 33c4c2acb69f904a6f68d937d10d9f05d8bdcfb9..eb744975e378d7ed46b92d443ef7e1b0ef9df178 100644
--- a/src/boards/RIGv2/Actuators/Actuators.cpp
+++ b/src/boards/RIGv2/Actuators/Actuators.cpp
@@ -25,9 +25,8 @@
 #include <RIGv2/Actuators/ActuatorsData.h>
 #include <RIGv2/Configs/ActuatorsConfig.h>
 #include <common/Events.h>
-#include <events/EventBroker.h>
-// TODO(davide.mor): Remove TimestampTimer
 #include <drivers/timer/TimestampTimer.h>
+#include <events/EventBroker.h>
 
 using namespace Boardcore;
 using namespace miosix;
diff --git a/src/boards/RIGv2/Buses.h b/src/boards/RIGv2/Buses.h
index ffbda4b787b9cdfdab6db03fc30799c0ef402d18..6ba76033d03bf9c547853360d2f0f05f1f1254db 100644
--- a/src/boards/RIGv2/Buses.h
+++ b/src/boards/RIGv2/Buses.h
@@ -30,13 +30,6 @@ namespace RIGv2
 
 class Buses : public Boardcore::Injectable
 {
-private:
-    Boardcore::SPIBus spi1;
-    Boardcore::SPIBus spi2;
-    Boardcore::SPIBus spi3;
-    Boardcore::SPIBus spi4;
-    Boardcore::SPIBus spi6;
-
 public:
     Buses() : spi1(SPI1), spi2(SPI2), spi3(SPI3), spi4(SPI4), spi6(SPI6) {}
 
@@ -49,6 +42,13 @@ public:
     Boardcore::SPIBus &getMAX31856_1() { return spi3; }
     Boardcore::SPIBus &getMAX31856_2() { return spi1; }
     Boardcore::SPIBus &getRadio() { return spi6; }
+
+private:
+    Boardcore::SPIBus spi1;
+    Boardcore::SPIBus spi2;
+    Boardcore::SPIBus spi3;
+    Boardcore::SPIBus spi4;
+    Boardcore::SPIBus spi6;
 };
 
 }  // namespace RIGv2
\ No newline at end of file
diff --git a/src/boards/RIGv2/CanHandler/CanHandler.cpp b/src/boards/RIGv2/CanHandler/CanHandler.cpp
index 3b5d2a2aa185b54f820c8f280275a94c0d782f98..28a32203f04b996639f171590a3cb578f45c7922 100644
--- a/src/boards/RIGv2/CanHandler/CanHandler.cpp
+++ b/src/boards/RIGv2/CanHandler/CanHandler.cpp
@@ -31,7 +31,7 @@
 using namespace miosix;
 using namespace RIGv2;
 using namespace Boardcore;
-using namespace Boardcore::Canbus;
+using namespace Canbus;
 using namespace Common;
 
 CanHandler::CanHandler()
@@ -74,7 +74,7 @@ bool CanHandler::start()
                     TimestampTimer::getTimestamp(),
                     static_cast<int16_t>(stats.logNumber),
                     static_cast<uint8_t>(state),
-                    state == GroundModeManagerState::GMM_STATE_ARMED,
+                    state == GroundModeManagerState::ARMED,
                     false,
                     stats.lastWriteError == 0,
                 });
@@ -118,19 +118,19 @@ void CanHandler::sendServoOpenCommand(ServosList servo, uint32_t openingTime)
         ServoCommand{TimestampTimer::getTimestamp(), openingTime});
 }
 
-CanHandler::CanStatus CanHandler::getCanStatus()
-{
-    Lock<FastMutex> lock{statusMutex};
-    return status;
-}
-
 void CanHandler::sendServoCloseCommand(ServosList servo)
 {
     // Closing a servo means opening it for 0s
     sendServoOpenCommand(servo, 0);
 }
 
-void CanHandler::handleMessage(const Boardcore::Canbus::CanMessage &msg)
+CanHandler::CanStatus CanHandler::getCanStatus()
+{
+    Lock<FastMutex> lock{statusMutex};
+    return status;
+}
+
+void CanHandler::handleMessage(const Canbus::CanMessage &msg)
 {
     CanConfig::PrimaryType type =
         static_cast<CanConfig::PrimaryType>(msg.getPrimaryType());
@@ -169,14 +169,12 @@ void CanHandler::handleMessage(const Boardcore::Canbus::CanMessage &msg)
     }
 }
 
-void CanHandler::handleEvent(const Boardcore::Canbus::CanMessage &msg)
+void CanHandler::handleEvent(const Canbus::CanMessage &msg)
 {
-    CanConfig::EventId event =
-        static_cast<CanConfig::EventId>(msg.getSecondaryType());
-    LOG_WARN(logger, "Received unrecognized event: {}", event);
+    // The RIG doesn't actually listen to any of the rockets internal events
 }
 
-void CanHandler::handleSensor(const Boardcore::Canbus::CanMessage &msg)
+void CanHandler::handleSensor(const Canbus::CanMessage &msg)
 {
     CanConfig::SensorId sensor =
         static_cast<CanConfig::SensorId>(msg.getSecondaryType());
@@ -192,19 +190,19 @@ void CanHandler::handleSensor(const Boardcore::Canbus::CanMessage &msg)
             break;
         }
 
-        case CanConfig::SensorId::BOTTOM_TANK_PRESSURE:
+        case CanConfig::SensorId::TOP_TANK_PRESSURE:
         {
             CanPressureData data = pressureDataFromCanMessage(msg);
             sdLogger.log(data);
-            sensors->setCanBottomTankPress(data);
+            sensors->setCanTopTankPress(data);
             break;
         }
 
-        case CanConfig::SensorId::TOP_TANK_PRESSURE:
+        case CanConfig::SensorId::BOTTOM_TANK_PRESSURE:
         {
             CanPressureData data = pressureDataFromCanMessage(msg);
             sdLogger.log(data);
-            sensors->setCanTopTankPress(data);
+            sensors->setCanBottomTankPress(data);
             break;
         }
 
@@ -231,7 +229,7 @@ void CanHandler::handleSensor(const Boardcore::Canbus::CanMessage &msg)
     }
 }
 
-void CanHandler::handleActuator(const Boardcore::Canbus::CanMessage &msg)
+void CanHandler::handleActuator(const Canbus::CanMessage &msg)
 {
     ServosList servo      = static_cast<ServosList>(msg.getSecondaryType());
     CanServoFeedback data = servoFeedbackFromCanMessage(msg);
@@ -240,7 +238,7 @@ void CanHandler::handleActuator(const Boardcore::Canbus::CanMessage &msg)
     getModule<Actuators>()->setCanServoOpen(servo, data.open);
 }
 
-void CanHandler::handleStatus(const Boardcore::Canbus::CanMessage &msg)
+void CanHandler::handleStatus(const Canbus::CanMessage &msg)
 {
     CanConfig::Board source = static_cast<CanConfig::Board>(msg.getSource());
     CanDeviceStatus deviceStatus = deviceStatusFromCanMessage(msg);
diff --git a/src/boards/RIGv2/Configs/GmmConfig.h b/src/boards/RIGv2/Configs/GMMConfig.h
similarity index 100%
rename from src/boards/RIGv2/Configs/GmmConfig.h
rename to src/boards/RIGv2/Configs/GMMConfig.h
diff --git a/src/boards/RIGv2/Configs/RadioConfig.h b/src/boards/RIGv2/Configs/RadioConfig.h
index b5e6b87c5a58f4114b47994aee90b7e1b66fc52f..1e73efd97e4f652a3e75ec4c4ebaad7046f9e917 100644
--- a/src/boards/RIGv2/Configs/RadioConfig.h
+++ b/src/boards/RIGv2/Configs/RadioConfig.h
@@ -39,7 +39,7 @@ constexpr unsigned int MAV_MAX_LENGTH     = MAVLINK_MAX_DIALECT_PAYLOAD_SIZE;
 constexpr uint16_t MAV_SLEEP_AFTER_SEND = 0;
 constexpr size_t MAV_OUT_BUFFER_MAX_AGE = 10;
 
-constexpr unsigned int CIRCULAR_BUFFER_SIZE  = 20;
+constexpr unsigned int CIRCULAR_BUFFER_SIZE  = 30;
 constexpr unsigned int MAX_PACKETS_PER_FLUSH = 4;
 
 constexpr uint8_t MAV_SYSTEM_ID    = 171;
diff --git a/src/boards/RIGv2/Configs/SensorsConfig.h b/src/boards/RIGv2/Configs/SensorsConfig.h
index 8faba975cd3e3cdd1f686d2558d003c030a0205c..30204b2cea8164c8f57b257cece8c9dd5fac444e 100644
--- a/src/boards/RIGv2/Configs/SensorsConfig.h
+++ b/src/boards/RIGv2/Configs/SensorsConfig.h
@@ -38,11 +38,11 @@ namespace Config
 namespace Sensors
 {
 
+/* linter off */ using namespace Boardcore::Units::Frequency;
+
 namespace ADS131M08
 {
 
-/* linter off */ using namespace Boardcore::Units::Frequency;
-
 constexpr Boardcore::ADS131M08Defs::OversamplingRatio OSR =
     Boardcore::ADS131M08Defs::OversamplingRatio::OSR_8192;
 constexpr bool GLOBAL_CHOP_MODE_EN = true;
@@ -85,9 +85,6 @@ constexpr bool ENABLED = true;
 
 namespace MAX31856
 {
-
-/* linter off */ using namespace Boardcore::Units::Frequency;
-
 constexpr Hertz PERIOD = 10_hz;
 constexpr bool ENABLED = true;
 }  // namespace MAX31856
@@ -134,9 +131,6 @@ constexpr float VESSEL_P1_MASS    = 6.916;
 
 namespace InternalADC
 {
-
-/* linter off */ using namespace Boardcore::Units::Frequency;
-
 constexpr Boardcore::InternalADC::Channel BATTERY_VOLTAGE_CHANNEL =
     Boardcore::InternalADC::CH14;
 
diff --git a/src/boards/RIGv2/Radio/Radio.cpp b/src/boards/RIGv2/Radio/Radio.cpp
index 1b194ec169d35e6d06ff358f1e9c7b6148f73a42..acce62a5e8f9736d4411c75ffe0011aea5e89f0c 100644
--- a/src/boards/RIGv2/Radio/Radio.cpp
+++ b/src/boards/RIGv2/Radio/Radio.cpp
@@ -24,10 +24,9 @@
 
 #include <common/Events.h>
 #include <common/Radio.h>
+#include <drivers/timer/TimestampTimer.h>
 #include <events/EventBroker.h>
 #include <radio/SX1278/SX1278Frontends.h>
-// TODO(davide.mor): Remove TimestampTimer
-#include <drivers/timer/TimestampTimer.h>
 
 #include <atomic>
 #include <unordered_map>
@@ -143,7 +142,7 @@ void Radio::enqueueNack(const mavlink_message_t& msg)
     enqueuePacket(nackMsg);
 }
 
-Boardcore::MavlinkStatus Radio::getMavStatus()
+MavlinkStatus Radio::getMavStatus()
 {
     if (mavDriver)
     {
@@ -194,7 +193,8 @@ void Radio::handleMessage(const mavlink_message_t& msg)
 
         case MAVLINK_MSG_ID_SENSOR_TM_REQUEST_TC:
         {
-            uint8_t tmId = mavlink_msg_system_tm_request_tc_get_tm_id(&msg);
+            uint8_t tmId =
+                mavlink_msg_sensor_tm_request_tc_get_sensor_name(&msg);
             if (enqueueSensorTm(tmId))
             {
                 enqueueAck(msg);
@@ -213,7 +213,7 @@ void Radio::handleMessage(const mavlink_message_t& msg)
                 mavlink_msg_wiggle_servo_tc_get_servo_id(&msg));
 
             if (getModule<GroundModeManager>()->getState() ==
-                GMM_STATE_DISARMED)
+                GroundModeManagerState::DISARMED)
             {
                 if (getModule<Actuators>()->wiggleServo(servo))
                 {
@@ -288,26 +288,19 @@ void Radio::handleMessage(const mavlink_message_t& msg)
 
 void Radio::handleCommand(const mavlink_message_t& msg)
 {
-    static const std::unordered_map<uint8_t, Events> cmdToEvent{
-        {MAV_CMD_CALIBRATE, TMTC_CALIBRATE},
-        {MAV_CMD_FORCE_INIT, TMTC_FORCE_INIT},
-        {MAV_CMD_FORCE_REBOOT, TMTC_RESET_BOARD},
-        {MAV_CMD_OPEN_NITROGEN, TMTC_OPEN_NITROGEN},
-    };
-
-    uint8_t cmd = mavlink_msg_command_tc_get_command_id(&msg);
-    switch (cmd)
+    uint8_t cmdId = mavlink_msg_command_tc_get_command_id(&msg);
+    switch (cmdId)
     {
         case MAV_CMD_START_LOGGING:
         {
-            if (!Logger::getInstance().start())
+            if (Logger::getInstance().start())
             {
-                enqueueNack(msg);
+                Logger::getInstance().resetStats();
+                enqueueAck(msg);
             }
             else
             {
-                Logger::getInstance().resetStats();
-                enqueueAck(msg);
+                enqueueNack(msg);
             }
             break;
         }
@@ -354,19 +347,17 @@ void Radio::handleCommand(const mavlink_message_t& msg)
 
         default:
         {
-            auto it = cmdToEvent.find(cmd);
-            if (it != cmdToEvent.end())
+            // Try to map the command to an event
+            auto ev = mavCmdToEvent(cmdId);
+            if (ev != LAST_EVENT)
             {
-                EventBroker::getInstance().post(it->second, TOPIC_MOTOR);
+                EventBroker::getInstance().post(ev, TOPIC_TMTC);
                 enqueueAck(msg);
             }
             else
             {
-                // Unrecognized command
                 enqueueNack(msg);
             }
-
-            break;
         }
     }
 }
@@ -550,14 +541,15 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
             tm.timestamp = TimestampTimer::getTimestamp();
 
             // Sensors
-            tm.loadcell_rocket     = sensors->getTankWeight().load;
-            tm.loadcell_vessel     = sensors->getVesselWeight().load;
-            tm.filling_pressure    = sensors->getFillingPress().pressure;
-            tm.vessel_pressure     = sensors->getVesselPress().pressure;
-            tm.battery_voltage     = sensors->getBatteryVoltage().voltage;
-            tm.current_consumption = sensors->getServoCurrent().current;
+            tm.loadcell_rocket  = sensors->getTankWeightLastSample().load;
+            tm.loadcell_vessel  = sensors->getVesselWeightLastSample().load;
+            tm.filling_pressure = sensors->getFillingPressLastSample().pressure;
+            tm.vessel_pressure  = sensors->getVesselPressLastSample().pressure;
+            tm.battery_voltage = sensors->getBatteryVoltageLastSample().voltage;
+            tm.current_consumption =
+                sensors->getServoCurrentLastSample().current;
             tm.umbilical_current_consumption =
-                sensors->getUmbilicalCurrent().current;
+                sensors->getUmbilicalCurrentLastSample().current;
 
             // Log data
             LoggerStats stats = sdLogger.getStats();
@@ -576,12 +568,12 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
             tm.nitrogen_valve_state = actuators->isNitrogenOpen() ? 1 : 0;
 
             // Internal states
-            tm.gmm_state  = getModule<GroundModeManager>()->getState();
-            tm.tars_state = getModule<TARS1>()->isRefueling() ? 1 : 0;
-            tm.arming_state =
-                getModule<GroundModeManager>()->getState() == GMM_STATE_ARMED
-                    ? 1
-                    : 0;
+            tm.gmm_state    = getModule<GroundModeManager>()->getState();
+            tm.tars_state   = getModule<TARS1>()->isRefueling() ? 1 : 0;
+            tm.arming_state = getModule<GroundModeManager>()->getState() ==
+                                      GroundModeManagerState::ARMED
+                                  ? 1
+                                  : 0;
 
             // Can data
             CanHandler::CanStatus canStatus =
@@ -611,11 +603,15 @@ bool Radio::enqueueSystemTm(uint8_t tmId)
             tm.timestamp = TimestampTimer::getTimestamp();
 
             // Sensors (either CAN or local)
-            tm.top_tank_pressure    = sensors->getTopTankPress().pressure;
-            tm.bottom_tank_pressure = sensors->getBottomTankPress().pressure;
-            tm.combustion_chamber_pressure = sensors->getCCPress().pressure;
-            tm.tank_temperature = sensors->getTc1LastSample().temperature;
-            tm.battery_voltage  = sensors->getMotorBatteryVoltage().voltage;
+            tm.top_tank_pressure =
+                sensors->getTopTankPressLastSample().pressure;
+            tm.bottom_tank_pressure =
+                sensors->getBottomTankPressLastSample().pressure;
+            tm.combustion_chamber_pressure =
+                sensors->getCCPressLastSample().pressure;
+            tm.tank_temperature = sensors->getTankTempLastSample().temperature;
+            tm.battery_voltage =
+                sensors->getMotorBatteryVoltageLastSample().voltage;
 
             // Valve states
             tm.main_valve_state =
@@ -687,11 +683,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_pressure_tm_t tm;
 
-            PressureData data = getModule<Sensors>()->getVesselPress();
+            PressureData data =
+                getModule<Sensors>()->getVesselPressLastSample();
 
             tm.timestamp = data.pressureTimestamp;
             tm.pressure  = data.pressure;
-            strcpy(tm.sensor_name, "VESSEL_PRESS");
+            strcpy(tm.sensor_name, "VesselPressure");
 
             mavlink_msg_pressure_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                            Config::Radio::MAV_COMPONENT_ID,
@@ -705,11 +702,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_pressure_tm_t tm;
 
-            PressureData data = getModule<Sensors>()->getFillingPress();
+            PressureData data =
+                getModule<Sensors>()->getFillingPressLastSample();
 
             tm.timestamp = data.pressureTimestamp;
             tm.pressure  = data.pressure;
-            strcpy(tm.sensor_name, "FILLING_PRESS");
+            strcpy(tm.sensor_name, "FillingPressure");
 
             mavlink_msg_pressure_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                            Config::Radio::MAV_COMPONENT_ID,
@@ -723,11 +721,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_pressure_tm_t tm;
 
-            PressureData data = getModule<Sensors>()->getBottomTankPress();
+            PressureData data =
+                getModule<Sensors>()->getBottomTankPressLastSample();
 
             tm.timestamp = data.pressureTimestamp;
             tm.pressure  = data.pressure;
-            strcpy(tm.sensor_name, "BOTTOM_TANK_PRESS");
+            strcpy(tm.sensor_name, "BottomTankPressure");
 
             mavlink_msg_pressure_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                            Config::Radio::MAV_COMPONENT_ID,
@@ -741,11 +740,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_pressure_tm_t tm;
 
-            PressureData data = getModule<Sensors>()->getTopTankPress();
+            PressureData data =
+                getModule<Sensors>()->getTopTankPressLastSample();
 
             tm.timestamp = data.pressureTimestamp;
             tm.pressure  = data.pressure;
-            strcpy(tm.sensor_name, "TOP_TANK_PRESS");
+            strcpy(tm.sensor_name, "TopTankPressure");
 
             mavlink_msg_pressure_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                            Config::Radio::MAV_COMPONENT_ID,
@@ -777,11 +777,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_load_tm_t tm;
 
-            LoadCellData data = getModule<Sensors>()->getVesselWeight();
+            LoadCellData data =
+                getModule<Sensors>()->getVesselWeightLastSample();
 
             tm.timestamp = data.loadTimestamp;
             tm.load      = data.load;
-            strcpy(tm.sensor_name, "VESSEL_WEIGHT");
+            strcpy(tm.sensor_name, "VesselWeight");
 
             mavlink_msg_load_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                        Config::Radio::MAV_COMPONENT_ID, &msg,
@@ -795,11 +796,11 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_load_tm_t tm;
 
-            LoadCellData data = getModule<Sensors>()->getTankWeight();
+            LoadCellData data = getModule<Sensors>()->getTankWeightLastSample();
 
             tm.timestamp = data.loadTimestamp;
             tm.load      = data.load;
-            strcpy(tm.sensor_name, "TANK_WEIGHT");
+            strcpy(tm.sensor_name, "TankWeight");
 
             mavlink_msg_load_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                        Config::Radio::MAV_COMPONENT_ID, &msg,
@@ -813,11 +814,12 @@ bool Radio::enqueueSensorTm(uint8_t tmId)
             mavlink_message_t msg;
             mavlink_voltage_tm_t tm;
 
-            VoltageData data = getModule<Sensors>()->getBatteryVoltage();
+            VoltageData data =
+                getModule<Sensors>()->getBatteryVoltageLastSample();
 
             tm.timestamp = data.voltageTimestamp;
             tm.voltage   = data.voltage;
-            strcpy(tm.sensor_name, "TANK_WEIGHT");
+            strcpy(tm.sensor_name, "BatteryVoltage");
 
             mavlink_msg_voltage_tm_encode(Config::Radio::MAV_SYSTEM_ID,
                                           Config::Radio::MAV_COMPONENT_ID, &msg,
diff --git a/src/boards/RIGv2/Sensors/Sensors.cpp b/src/boards/RIGv2/Sensors/Sensors.cpp
index a3ba2e20f13734d0a7adb5870c3cef753537309d..57051fe105faa529147b78acd498b91b0bb8028b 100644
--- a/src/boards/RIGv2/Sensors/Sensors.cpp
+++ b/src/boards/RIGv2/Sensors/Sensors.cpp
@@ -23,9 +23,8 @@
 #include "Sensors.h"
 
 #include <RIGv2/Configs/SensorsConfig.h>
-#include <interfaces-impl/hwmapping.h>
-// TODO(davide.mor): Remove TimestampTimer
 #include <drivers/timer/TimestampTimer.h>
+#include <interfaces-impl/hwmapping.h>
 
 using namespace Boardcore;
 using namespace miosix;
@@ -81,22 +80,21 @@ MAX31856Data Sensors::getTc1LastSample()
     return tc1 ? tc1->getLastSample() : MAX31856Data{};
 }
 
-PressureData Sensors::getVesselPress()
+PressureData Sensors::getVesselPressLastSample()
 {
     return vesselPressure ? vesselPressure->getLastSample() : PressureData{};
 }
 
-PressureData Sensors::getFillingPress()
+PressureData Sensors::getFillingPressLastSample()
 {
     return fillingPressure ? fillingPressure->getLastSample() : PressureData{};
 }
 
-PressureData Sensors::getTopTankPress()
+PressureData Sensors::getTopTankPressLastSample()
 {
     if (useCanData)
     {
-        Lock<FastMutex> lock{canMutex};
-        return canTopTankPressure;
+        return getCanTopTankPressLastSample();
     }
     else
     {
@@ -105,12 +103,11 @@ PressureData Sensors::getTopTankPress()
     }
 }
 
-PressureData Sensors::getBottomTankPress()
+PressureData Sensors::getBottomTankPressLastSample()
 {
     if (useCanData)
     {
-        Lock<FastMutex> lock{canMutex};
-        return canBottomTankPressure;
+        return getCanBottomTankPressLastSample();
     }
     else
     {
@@ -119,12 +116,11 @@ PressureData Sensors::getBottomTankPress()
     }
 }
 
-PressureData Sensors::getCCPress()
+PressureData Sensors::getCCPressLastSample()
 {
     if (useCanData)
     {
-        Lock<FastMutex> lock{canMutex};
-        return canCCPressure;
+        return getCanCCPressLastSample();
     }
     else
     {
@@ -132,12 +128,11 @@ PressureData Sensors::getCCPress()
     }
 }
 
-TemperatureData Sensors::getTankTemp()
+TemperatureData Sensors::getTankTempLastSample()
 {
     if (useCanData)
     {
-        Lock<FastMutex> lock{canMutex};
-        return canTankTemperature;
+        return getCanTankTempLastSample();
     }
     else
     {
@@ -145,7 +140,7 @@ TemperatureData Sensors::getTankTemp()
     }
 }
 
-LoadCellData Sensors::getVesselWeight()
+LoadCellData Sensors::getVesselWeightLastSample()
 {
     if (vesselWeight)
     {
@@ -157,7 +152,7 @@ LoadCellData Sensors::getVesselWeight()
     }
 }
 
-LoadCellData Sensors::getTankWeight()
+LoadCellData Sensors::getTankWeightLastSample()
 {
     if (tankWeight)
     {
@@ -169,12 +164,13 @@ LoadCellData Sensors::getTankWeight()
     }
 }
 
-CurrentData Sensors::getUmbilicalCurrent()
+CurrentData Sensors::getUmbilicalCurrentLastSample()
 {
-    return {TimestampTimer::getTimestamp(), -1.0};
+    // TODO: Implement this
+    return {};
 }
 
-CurrentData Sensors::getServoCurrent()
+CurrentData Sensors::getServoCurrentLastSample()
 {
     auto sample = getADC1LastSample();
 
@@ -187,7 +183,7 @@ CurrentData Sensors::getServoCurrent()
     return {sample.timestamp, -current / 5.0f * 50.0f};
 }
 
-VoltageData Sensors::getBatteryVoltage()
+VoltageData Sensors::getBatteryVoltageLastSample()
 {
     auto sample = getInternalADCLastSample();
 
@@ -198,12 +194,11 @@ VoltageData Sensors::getBatteryVoltage()
     return {sample.timestamp, voltage};
 }
 
-VoltageData Sensors::getMotorBatteryVoltage()
+VoltageData Sensors::getMotorBatteryVoltageLastSample()
 {
     if (useCanData)
     {
-        Lock<FastMutex> lock{canMutex};
-        return canMotorBatteryVoltage;
+        return getCanMotorBatteryVoltageLastSample();
     }
     else
     {
@@ -211,35 +206,65 @@ VoltageData Sensors::getMotorBatteryVoltage()
     }
 }
 
-void Sensors::setCanTopTankPress(Boardcore::PressureData data)
+PressureData Sensors::getCanTopTankPressLastSample()
+{
+    Lock<FastMutex> lock{canMutex};
+    return canTopTankPressure;
+}
+
+PressureData Sensors::getCanBottomTankPressLastSample()
+{
+    Lock<FastMutex> lock{canMutex};
+    return canBottomTankPressure;
+}
+
+PressureData Sensors::getCanCCPressLastSample()
+{
+    Lock<FastMutex> lock{canMutex};
+    return canCCPressure;
+}
+
+TemperatureData Sensors::getCanTankTempLastSample()
+{
+    Lock<FastMutex> lock{canMutex};
+    return canTankTemperature;
+}
+
+VoltageData Sensors::getCanMotorBatteryVoltageLastSample()
+{
+    Lock<FastMutex> lock{canMutex};
+    return canMotorBatteryVoltage;
+}
+
+void Sensors::setCanTopTankPress(PressureData data)
 {
     Lock<FastMutex> lock{canMutex};
     canTopTankPressure = data;
     useCanData         = true;
 }
 
-void Sensors::setCanBottomTankPress(Boardcore::PressureData data)
+void Sensors::setCanBottomTankPress(PressureData data)
 {
     Lock<FastMutex> lock{canMutex};
     canBottomTankPressure = data;
     useCanData            = true;
 }
 
-void Sensors::setCanCCPress(Boardcore::PressureData data)
+void Sensors::setCanCCPress(PressureData data)
 {
     Lock<FastMutex> lock{canMutex};
     canCCPressure = data;
     useCanData    = true;
 }
 
-void Sensors::setCanTankTemp(Boardcore::TemperatureData data)
+void Sensors::setCanTankTemp(TemperatureData data)
 {
     Lock<FastMutex> lock{canMutex};
     canTankTemperature = data;
     useCanData         = true;
 }
 
-void Sensors::setCanMotorBatteryVoltage(Boardcore::VoltageData data)
+void Sensors::setCanMotorBatteryVoltage(VoltageData data)
 {
     Lock<FastMutex> lock{canMutex};
     canMotorBatteryVoltage = data;
@@ -300,8 +325,7 @@ void Sensors::internalAdcInit()
 
 void Sensors::internalAdcCallback()
 {
-    InternalADCData sample = internalAdc->getLastSample();
-    sdLogger.log(sample);
+    sdLogger.log(getInternalADCLastSample());
 }
 
 void Sensors::adc1Init()
@@ -375,18 +399,7 @@ void Sensors::adc1Init()
                                        spiConfig, config);
 }
 
-void Sensors::adc1Callback()
-{
-    ADS131M08Data sample = adc1->getLastSample();
-
-    ADCsData data{sample.timestamp,  1,
-                  sample.voltage[0], sample.voltage[1],
-                  sample.voltage[2], sample.voltage[3],
-                  sample.voltage[4], sample.voltage[5],
-                  sample.voltage[6], sample.voltage[7]};
-
-    sdLogger.log(data);
-}
+void Sensors::adc1Callback() { sdLogger.log(ADC1Data{getADC1LastSample()}); }
 
 void Sensors::tc1Init()
 {
@@ -398,14 +411,7 @@ void Sensors::tc1Init()
         spiConfig, MAX31856::ThermocoupleType::K_TYPE);
 }
 
-void Sensors::tc1Callback()
-{
-    MAX31856Data sample = tc1->getLastSample();
-
-    TCsData data{sample.temperatureTimestamp, 1, sample.temperature,
-                 sample.coldJunctionTemperature};
-    sdLogger.log(data);
-}
+void Sensors::tc1Callback() { sdLogger.log(TC1Data{getTc1LastSample()}); }
 
 void Sensors::vesselPressureInit()
 {
@@ -424,9 +430,7 @@ void Sensors::vesselPressureInit()
 
 void Sensors::vesselPressureCallback()
 {
-    PressureData sample = vesselPressure->getLastSample();
-    PTsData data{sample.pressureTimestamp, 1, sample.pressure};
-    sdLogger.log(data);
+    sdLogger.log(VesselPressureData{getVesselPressLastSample()});
 }
 
 void Sensors::fillingPressureInit()
@@ -446,9 +450,7 @@ void Sensors::fillingPressureInit()
 
 void Sensors::fillingPressureCallback()
 {
-    PressureData sample = fillingPressure->getLastSample();
-    PTsData data{sample.pressureTimestamp, 2, sample.pressure};
-    sdLogger.log(data);
+    sdLogger.log(FillingPressureData{getFillingPressLastSample()});
 }
 
 void Sensors::topTankPressureInit()
@@ -468,9 +470,7 @@ void Sensors::topTankPressureInit()
 
 void Sensors::topTankPressureCallback()
 {
-    PressureData sample = topTankPressure->getLastSample();
-    PTsData data{sample.pressureTimestamp, 3, sample.pressure};
-    sdLogger.log(data);
+    sdLogger.log(TopTankPressureData{topTankPressure->getLastSample()});
 }
 
 void Sensors::bottomTankPressureInit()
@@ -490,9 +490,7 @@ void Sensors::bottomTankPressureInit()
 
 void Sensors::bottomTankPressureCallback()
 {
-    PressureData sample = bottomTankPressure->getLastSample();
-    PTsData data{sample.pressureTimestamp, 4, sample.pressure};
-    sdLogger.log(data);
+    sdLogger.log(BottomTankPressureData{bottomTankPressure->getLastSample()});
 }
 
 void Sensors::vesselWeightInit()
@@ -512,9 +510,7 @@ void Sensors::vesselWeightInit()
 
 void Sensors::vesselWeightCallback()
 {
-    LoadCellData sample = vesselWeight->getLastSample();
-    LCsData data{sample.loadTimestamp, 1, sample.load};
-    sdLogger.log(data);
+    sdLogger.log(VesselWeightData{getVesselWeightLastSample()});
 }
 
 void Sensors::tankWeightInit()
@@ -534,9 +530,7 @@ void Sensors::tankWeightInit()
 
 void Sensors::tankWeightCallback()
 {
-    LoadCellData sample = tankWeight->getLastSample();
-    LCsData data{sample.loadTimestamp, 2, sample.load};
-    sdLogger.log(data);
+    sdLogger.log(TankWeightData{getTankWeightLastSample()});
 }
 
 bool Sensors::sensorManagerInit()
diff --git a/src/boards/RIGv2/Sensors/Sensors.h b/src/boards/RIGv2/Sensors/Sensors.h
index 48b583c7a41af6d88b275cdc15f7ad53479825a3..69c3f75211da48551436923a50c4ff95b9746858 100644
--- a/src/boards/RIGv2/Sensors/Sensors.h
+++ b/src/boards/RIGv2/Sensors/Sensors.h
@@ -48,6 +48,8 @@ public:
 
     [[nodiscard]] bool start();
 
+    void calibrate();
+
     bool isStarted();
 
     // Getters for raw data coming from sensors
@@ -56,18 +58,26 @@ public:
     Boardcore::MAX31856Data getTc1LastSample();
 
     // Getters for processed data
-    Boardcore::PressureData getVesselPress();
-    Boardcore::PressureData getFillingPress();
-    Boardcore::PressureData getTopTankPress();
-    Boardcore::PressureData getBottomTankPress();
-    Boardcore::PressureData getCCPress();
-    Boardcore::TemperatureData getTankTemp();
-    Boardcore::LoadCellData getVesselWeight();
-    Boardcore::LoadCellData getTankWeight();
-    Boardcore::CurrentData getUmbilicalCurrent();
-    Boardcore::CurrentData getServoCurrent();
-    Boardcore::VoltageData getBatteryVoltage();
-    Boardcore::VoltageData getMotorBatteryVoltage();
+    Boardcore::PressureData getVesselPressLastSample();
+    Boardcore::PressureData getFillingPressLastSample();
+    Boardcore::PressureData getTopTankPressLastSample();
+    Boardcore::PressureData getBottomTankPressLastSample();
+    Boardcore::PressureData getCCPressLastSample();
+    Boardcore::TemperatureData getTankTempLastSample();
+    Boardcore::LoadCellData getVesselWeightLastSample();
+    Boardcore::LoadCellData getTankWeightLastSample();
+    Boardcore::CurrentData getUmbilicalCurrentLastSample();
+    Boardcore::CurrentData getServoCurrentLastSample();
+    Boardcore::VoltageData getBatteryVoltageLastSample();
+    Boardcore::VoltageData getMotorBatteryVoltageLastSample();
+
+    Boardcore::PressureData getCanTopTankPressLastSample();
+    Boardcore::PressureData getCanBottomTankPressLastSample();
+    Boardcore::PressureData getCanCCPressLastSample();
+    Boardcore::TemperatureData getCanTankTempLastSample();
+    Boardcore::VoltageData getCanMotorBatteryVoltageLastSample();
+
+    std::vector<Boardcore::SensorInfo> getSensorInfos();
 
     void setCanTopTankPress(Boardcore::PressureData data);
     void setCanBottomTankPress(Boardcore::PressureData data);
@@ -75,10 +85,6 @@ public:
     void setCanTankTemp(Boardcore::TemperatureData data);
     void setCanMotorBatteryVoltage(Boardcore::VoltageData data);
 
-    void calibrate();
-
-    std::vector<Boardcore::SensorInfo> getSensorInfos();
-
 private:
     void vesselPressureInit();
     void vesselPressureCallback();
diff --git a/src/boards/RIGv2/Sensors/SensorsData.h b/src/boards/RIGv2/Sensors/SensorsData.h
index f57cb516cb4041e0f79a0e03c62814b038154268..25b6e2399ff9c1b52ae89dfc42b7d09f0123a0d8 100644
--- a/src/boards/RIGv2/Sensors/SensorsData.h
+++ b/src/boards/RIGv2/Sensors/SensorsData.h
@@ -24,100 +24,89 @@
 
 #include <sensors/ADS131M08/ADS131M08Data.h>
 #include <sensors/MAX31856/MAX31856Data.h>
+#include <sensors/SensorData.h>
 
 namespace RIGv2
 {
-struct ADCsData : Boardcore::ADS131M08Data
-{
-    uint8_t adcNumber = 0;
-
-    ADCsData() : ADS131M08Data{}, adcNumber{0} {}
 
-    ADCsData(uint64_t time, uint8_t num, float ch1, float ch2, float ch3,
-             float ch4, float ch5, float ch6, float ch7, float ch8)
-        : ADS131M08Data{time, ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8},
-          adcNumber{num}
+struct ADC1Data : Boardcore::ADS131M08Data
+{
+    explicit ADC1Data(const Boardcore::ADS131M08Data &data)
+        : Boardcore::ADS131M08Data(data)
     {
     }
 
-    static std::string header()
-    {
-        return "timestamp,adcNumber,voltage_channel_1,voltage_channel_2,"
-               "voltage_channel_3,voltage_channel_4,voltage_channel_5,voltage_"
-               "channel_6,voltage_channel_7,voltage_channel_8\n";
-    }
+    ADC1Data() {}
+};
 
-    void print(std::ostream& os) const
+struct TC1Data : Boardcore::MAX31856Data
+{
+    explicit TC1Data(const Boardcore::MAX31856Data &data)
+        : Boardcore::MAX31856Data(data)
     {
-        os << timestamp << "," << (int)adcNumber << "," << voltage[0] << ","
-           << voltage[1] << "," << voltage[2] << "," << voltage[3] << ","
-           << voltage[4] << "," << voltage[5] << "," << voltage[6] << ","
-           << voltage[7] << "\n";
     }
+
+    TC1Data() {}
 };
 
-struct TCsData : Boardcore::MAX31856Data
+struct VesselWeightData : Boardcore::LoadCellData
 {
-    uint8_t tcNumber = 0;
-
-    TCsData() : MAX31856Data{}, tcNumber{0} {}
-
-    TCsData(uint64_t time, uint8_t num, float temperature,
-            float coldJunctionTemperature)
-        : MAX31856Data{time, temperature, coldJunctionTemperature}, tcNumber{
-                                                                        num}
+    explicit VesselWeightData(const Boardcore::LoadCellData &data)
+        : Boardcore::LoadCellData(data)
     {
     }
 
-    static std::string header()
-    {
-        return "timestamp,tcNumber,temperature,"
-               "coldJunctionTemperature\n";
-    }
+    VesselWeightData() {}
+};
 
-    void print(std::ostream& os) const
+struct TankWeightData : Boardcore::LoadCellData
+{
+    explicit TankWeightData(const Boardcore::LoadCellData &data)
+        : Boardcore::LoadCellData(data)
     {
-        os << temperatureTimestamp << "," << (int)tcNumber << "," << temperature
-           << "," << coldJunctionTemperature << "\n";
     }
+
+    TankWeightData() {}
 };
 
-struct LCsData : Boardcore::LoadCellData
+struct VesselPressureData : Boardcore::PressureData
 {
-    uint8_t lcNumber = 0;
-
-    LCsData() : LoadCellData{}, lcNumber{0} {}
-
-    LCsData(uint64_t time, uint8_t num, float load)
-        : LoadCellData{time, load}, lcNumber{num}
+    explicit VesselPressureData(const Boardcore::PressureData &data)
+        : Boardcore::PressureData(data)
     {
     }
 
-    static std::string header() { return "timestamp,lcNumber,load\n"; }
+    VesselPressureData() {}
+};
 
-    void print(std::ostream& os) const
+struct FillingPressureData : Boardcore::PressureData
+{
+    explicit FillingPressureData(const Boardcore::PressureData &data)
+        : Boardcore::PressureData(data)
     {
-        os << loadTimestamp << "," << (int)lcNumber << "," << load << "\n";
     }
+
+    FillingPressureData() {}
 };
 
-struct PTsData : Boardcore::PressureData
+struct TopTankPressureData : Boardcore::PressureData
 {
-    uint8_t ptNumber = 0;
-
-    PTsData() : PressureData{}, ptNumber{0} {}
-
-    PTsData(uint64_t time, uint8_t num, float pressure)
-        : PressureData{time, pressure}, ptNumber{num}
+    explicit TopTankPressureData(const Boardcore::PressureData &data)
+        : Boardcore::PressureData(data)
     {
     }
 
-    static std::string header() { return "timestamp,ptNumber,pressure\n"; }
+    TopTankPressureData() {}
+};
 
-    void print(std::ostream& os) const
+struct BottomTankPressureData : Boardcore::PressureData
+{
+    explicit BottomTankPressureData(const Boardcore::PressureData &data)
+        : Boardcore::PressureData(data)
     {
-        os << pressureTimestamp << "," << (int)ptNumber << "," << pressure
-           << "\n";
     }
+
+    BottomTankPressureData() {}
 };
+
 }  // namespace RIGv2
\ No newline at end of file
diff --git a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
index d73867b330ead6abc0a813f84e711b8a506e2c25..b4024646faeb72a017f1c1c0bc206f96a899d148 100644
--- a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
+++ b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
@@ -22,7 +22,6 @@
 
 #include "GroundModeManager.h"
 
-#include <RIGv2/Configs/GmmConfig.h>
 #include <RIGv2/Configs/SchedulerConfig.h>
 #include <common/Events.h>
 #include <drivers/timer/TimestampTimer.h>
@@ -48,13 +47,13 @@ void GroundModeManager::setIgnitionTime(uint32_t time)
     getModule<Registry>()->setUnsafe(CONFIG_ID_IGNITION_TIME, time);
 }
 
-Boardcore::State GroundModeManager::state_idle(const Boardcore::Event &event)
+State GroundModeManager::state_idle(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_IDLE);
+            updateAndLogStatus(GroundModeManagerState::IDLE);
             return HANDLED;
         }
 
@@ -86,13 +85,13 @@ Boardcore::State GroundModeManager::state_idle(const Boardcore::Event &event)
     }
 }
 
-Boardcore::State GroundModeManager::state_init(const Boardcore::Event &event)
+State GroundModeManager::state_init(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_INIT);
+            updateAndLogStatus(GroundModeManagerState::INIT);
             return HANDLED;
         }
 
@@ -128,14 +127,13 @@ Boardcore::State GroundModeManager::state_init(const Boardcore::Event &event)
     }
 }
 
-Boardcore::State GroundModeManager::state_init_error(
-    const Boardcore::Event &event)
+State GroundModeManager::state_init_error(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_INIT_ERR);
+            updateAndLogStatus(GroundModeManagerState::INIT_ERR);
             return HANDLED;
         }
 
@@ -166,14 +164,13 @@ Boardcore::State GroundModeManager::state_init_error(
     }
 }
 
-Boardcore::State GroundModeManager::state_disarmed(
-    const Boardcore::Event &event)
+State GroundModeManager::state_disarmed(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_DISARMED);
+            updateAndLogStatus(GroundModeManagerState::DISARMED);
             getModule<Actuators>()->armLightOff();
             getModule<Registry>()->disarm();
             getModule<CanHandler>()->sendEvent(CanConfig::EventId::DISARM);
@@ -209,8 +206,6 @@ Boardcore::State GroundModeManager::state_disarmed(
         case TMTC_CALIBRATE:
         {
             getModule<Sensors>()->calibrate();
-
-            // TODO(davide.mor): Also send CAN command
             return HANDLED;
         }
 
@@ -221,13 +216,13 @@ Boardcore::State GroundModeManager::state_disarmed(
     }
 }
 
-Boardcore::State GroundModeManager::state_armed(const Boardcore::Event &event)
+State GroundModeManager::state_armed(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_ARMED);
+            updateAndLogStatus(GroundModeManagerState::ARMED);
             getModule<Registry>()->arm();
             getModule<CanHandler>()->sendEvent(CanConfig::EventId::ARM);
             getModule<Actuators>()->armLightOn();
@@ -276,13 +271,13 @@ Boardcore::State GroundModeManager::state_armed(const Boardcore::Event &event)
     }
 }
 
-Boardcore::State GroundModeManager::state_firing(const Boardcore::Event &event)
+State GroundModeManager::state_firing(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_FIRING);
+            updateAndLogStatus(GroundModeManagerState::FIRING);
             return HANDLED;
         }
 
@@ -320,7 +315,6 @@ Boardcore::State GroundModeManager::state_firing(const Boardcore::Event &event)
         case MOTOR_COOLING_TIMEOUT:  // Normal firing end
         case TMTC_DISARM:            // Abort signal
         {
-            // TODO(davide.mor): Set this to a sensible time
             getModule<Actuators>()->openNitrogenWithTime(
                 Config::GroundModeManager::NITROGEN_TIME);
 
@@ -334,14 +328,13 @@ Boardcore::State GroundModeManager::state_firing(const Boardcore::Event &event)
     }
 }
 
-Boardcore::State GroundModeManager::state_igniting(
-    const Boardcore::Event &event)
+State GroundModeManager::state_igniting(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_IGNITING);
+            updateAndLogStatus(GroundModeManagerState::IGNITING);
 
             // Start ignition
             getModule<Actuators>()->igniterOn();
@@ -386,14 +379,13 @@ Boardcore::State GroundModeManager::state_igniting(
     }
 }
 
-Boardcore::State GroundModeManager::state_oxidizer(
-    const Boardcore::Event &event)
+State GroundModeManager::state_oxidizer(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_OXIDIZER);
+            updateAndLogStatus(GroundModeManagerState::OXIDIZER);
 
             getModule<Actuators>()->openServo(ServosList::MAIN_VALVE);
 
@@ -427,13 +419,13 @@ Boardcore::State GroundModeManager::state_oxidizer(
     }
 }
 
-Boardcore::State GroundModeManager::state_cooling(const Boardcore::Event &event)
+State GroundModeManager::state_cooling(const Event &event)
 {
     switch (event)
     {
         case EV_ENTRY:
         {
-            updateAndLogStatus(GMM_STATE_COOLING);
+            updateAndLogStatus(GroundModeManagerState::COOLING);
 
             coolingDelayEventId = EventBroker::getInstance().postDelayed(
                 MOTOR_COOLING_TIMEOUT, TOPIC_MOTOR,
diff --git a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.h b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.h
index 6b493ee7403465319dd3c8c0f726ac76c49f158d..1825140098b63349c350d09d42a3ef27bd5dbb1e 100644
--- a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.h
+++ b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManager.h
@@ -22,10 +22,9 @@
 
 #pragma once
 
-#include <RIGv2/Configs/GmmConfig.h>
-// #include <RIGv2/StateMachines/GroundModeManager/GroundModeManagerData.h>
 #include <RIGv2/Actuators/Actuators.h>
 #include <RIGv2/CanHandler/CanHandler.h>
+#include <RIGv2/Configs/GMMConfig.h>
 #include <RIGv2/Registry/Registry.h>
 #include <RIGv2/Sensors/Sensors.h>
 #include <diagnostic/PrintLogger.h>
@@ -68,7 +67,7 @@ private:
     Boardcore::Logger &sdLogger   = Boardcore::Logger::getInstance();
     Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("gmm");
 
-    std::atomic<GroundModeManagerState> state{GMM_STATE_IDLE};
+    std::atomic<GroundModeManagerState> state{GroundModeManagerState::IDLE};
 
     uint16_t openOxidantDelayEventId = -1;
     uint16_t coolingDelayEventId     = -1;
diff --git a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManagerData.h b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManagerData.h
index 9589d9af8091f00be1b160161f8d9a1191e00776..864f5c5832e137bd5fbfa55f9f5b6b489952afd5 100644
--- a/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManagerData.h
+++ b/src/boards/RIGv2/StateMachines/GroundModeManager/GroundModeManagerData.h
@@ -31,16 +31,16 @@ namespace RIGv2
 
 enum GroundModeManagerState : uint8_t
 {
-    GMM_STATE_IDLE = 0,
-    GMM_STATE_INIT,
-    GMM_STATE_INIT_ERR,
-    GMM_STATE_DISARMED,
-    GMM_STATE_ARMED,
-    GMM_STATE_FIRING,
-    GMM_STATE_IGNITING,
-    GMM_STATE_OXIDIZER,
-    GMM_STATE_COOLING,
-    GMM_STATE_INVALID,
+    IDLE = 0,
+    INIT,
+    INIT_ERR,
+    DISARMED,
+    ARMED,
+    FIRING,
+    IGNITING,
+    OXIDIZER,
+    COOLING,
+    INVALID,
 };
 
 struct GroundModeManagerData
@@ -48,7 +48,9 @@ struct GroundModeManagerData
     uint64_t timestamp;
     GroundModeManagerState state;
 
-    GroundModeManagerData() : timestamp{0}, state{GMM_STATE_IDLE} {}
+    GroundModeManagerData() : timestamp{0}, state{GroundModeManagerState::IDLE}
+    {
+    }
 
     GroundModeManagerData(uint64_t timestamp, GroundModeManagerState state)
         : timestamp{timestamp}, state{state}
diff --git a/src/boards/RIGv2/StateMachines/TARS1/TARS1.cpp b/src/boards/RIGv2/StateMachines/TARS1/TARS1.cpp
index fb467932e91413c7259cf0f9578655539a149373..b48d54609fa77c55eee6ba4db38dc9ea518dc0c3 100644
--- a/src/boards/RIGv2/StateMachines/TARS1/TARS1.cpp
+++ b/src/boards/RIGv2/StateMachines/TARS1/TARS1.cpp
@@ -24,9 +24,8 @@
 
 #include <RIGv2/Configs/SchedulerConfig.h>
 #include <common/Events.h>
-#include <events/EventBroker.h>
-// TODO(davide.mor): Remove TimestampTimer
 #include <drivers/timer/TimestampTimer.h>
+#include <events/EventBroker.h>
 
 using namespace Boardcore;
 using namespace RIGv2;
@@ -71,7 +70,7 @@ void TARS1::state_ready(const Event& event)
     {
         case EV_ENTRY:
         {
-            logAction(TARS_ACTION_READY);
+            logAction(TarsActionType::READY);
             break;
         }
 
@@ -97,13 +96,12 @@ void TARS1::state_refueling(const Event& event)
             currentMass       = 0.0f;
             previousPressure  = 0.0f;
             currentPressure   = 0.0f;
-            // TODO(davide.mor): Add the rest
 
             // First close all valves
             actuators->closeAllServos();
 
             LOG_INFO(logger, "TARS start washing");
-            logAction(TARS_ACTION_WASHING);
+            logAction(TarsActionType::WASHING);
 
             // Start washing
             actuators->openServoWithTime(ServosList::VENTING_VALVE,
@@ -126,7 +124,7 @@ void TARS1::state_refueling(const Event& event)
         case TARS_WASHING_DONE:
         {
             LOG_INFO(logger, "TARS washing done");
-            logAction(TARS_ACTION_OPEN_FILLING);
+            logAction(TarsActionType::OPEN_FILLING);
 
             // Open the filling for a long time
             actuators->openServoWithTime(ServosList::FILLING_VALVE,
@@ -142,7 +140,7 @@ void TARS1::state_refueling(const Event& event)
         case TARS_PRESSURE_STABILIZED:
         {
             LOG_INFO(logger, "TARS check mass");
-            logAction(TARS_ACTION_CHECK_MASS);
+            logAction(TarsActionType::CHECK_MASS);
 
             // Lock in a new mass value
             {
@@ -175,7 +173,7 @@ void TARS1::state_refueling(const Event& event)
             }
 
             LOG_INFO(logger, "TARS open venting");
-            logAction(TARS_ACTION_OPEN_VENTING);
+            logAction(TarsActionType::OPEN_VENTING);
 
             // Open the venting and check for pressure stabilization
             actuators->openServo(ServosList::VENTING_VALVE);
@@ -193,7 +191,7 @@ void TARS1::state_refueling(const Event& event)
         case TARS_CHECK_PRESSURE_STABILIZE:
         {
             LOG_INFO(logger, "TARS check pressure");
-            logAction(TARS_ACTION_CHECK_PRESSURE);
+            logAction(TarsActionType::CHECK_PRESSURE);
 
             {
                 Lock<FastMutex> lock(sampleMutex);
@@ -223,7 +221,7 @@ void TARS1::state_refueling(const Event& event)
         case TARS_FILLING_DONE:
         {
             LOG_INFO(logger, "TARS filling done");
-            logAction(TARS_ACTION_AUTOMATIC_STOP);
+            logAction(TarsActionType::AUTOMATIC_STOP);
 
             actuators->closeAllServos();
             transition(&TARS1::state_ready);
@@ -233,7 +231,7 @@ void TARS1::state_refueling(const Event& event)
         case MOTOR_MANUAL_ACTION:
         {
             LOG_INFO(logger, "TARS manual stop");
-            logAction(TARS_ACTION_MANUAL_STOP);
+            logAction(TarsActionType::MANUAL_STOP);
 
             // Disable next event
             EventBroker::getInstance().removeDelayed(nextDelayedEventId);
@@ -244,7 +242,7 @@ void TARS1::state_refueling(const Event& event)
         case MOTOR_START_TARS:
         {
             LOG_INFO(logger, "TARS manual stop");
-            logAction(TARS_ACTION_MANUAL_STOP);
+            logAction(TarsActionType::MANUAL_STOP);
 
             // The user requested that we stop
             getModule<Actuators>()->closeAllServos();
@@ -259,8 +257,8 @@ void TARS1::sample()
 {
     Sensors* sensors = getModule<Sensors>();
 
-    pressureFilter.add(sensors->getBottomTankPress().pressure);
-    massFilter.add(sensors->getTankWeight().load);
+    pressureFilter.add(sensors->getBottomTankPressLastSample().pressure);
+    massFilter.add(sensors->getTankWeightLastSample().load);
     medianSamples++;
 
     if (medianSamples == Config::TARS1::MEDIAN_SAMPLE_NUMBER)
diff --git a/src/boards/RIGv2/StateMachines/TARS1/TARS1Data.h b/src/boards/RIGv2/StateMachines/TARS1/TARS1Data.h
index 2842bea144478276e17f665598cc2b29285fd5f3..f3d9a2005a54591142c6f25fd8c2e8a86c600179 100644
--- a/src/boards/RIGv2/StateMachines/TARS1/TARS1Data.h
+++ b/src/boards/RIGv2/StateMachines/TARS1/TARS1Data.h
@@ -29,16 +29,16 @@
 namespace RIGv2
 {
 
-enum TarsActionType : uint8_t
+enum class TarsActionType : uint8_t
 {
-    TARS_ACTION_READY = 0,
-    TARS_ACTION_WASHING,
-    TARS_ACTION_OPEN_FILLING,
-    TARS_ACTION_OPEN_VENTING,
-    TARS_ACTION_CHECK_PRESSURE,
-    TARS_ACTION_CHECK_MASS,
-    TARS_ACTION_AUTOMATIC_STOP,
-    TARS_ACTION_MANUAL_STOP,
+    READY = 0,
+    WASHING,
+    OPEN_FILLING,
+    OPEN_VENTING,
+    CHECK_PRESSURE,
+    CHECK_MASS,
+    AUTOMATIC_STOP,
+    MANUAL_STOP,
 };
 
 struct TarsActionData
@@ -46,7 +46,7 @@ struct TarsActionData
     uint64_t timestamp;
     TarsActionType action;
 
-    TarsActionData() : timestamp{0}, action{TARS_ACTION_READY} {}
+    TarsActionData() : timestamp{0}, action{TarsActionType::READY} {}
 
     TarsActionData(uint64_t timestamp, TarsActionType action)
         : timestamp{timestamp}, action{action}