diff --git a/src/boards/Main/Configs/NASConfig.h b/src/boards/Main/Configs/NASConfig.h
index 445449e860808815818a0728857c88fda7cd5ca6..115838e0cef9c44f3d427e73d2144cb3a655c86f 100644
--- a/src/boards/Main/Configs/NASConfig.h
+++ b/src/boards/Main/Configs/NASConfig.h
@@ -37,6 +37,8 @@ constexpr uint32_t UPDATE_PERIOD = 20;  // 50 hz
 constexpr int CALIBRATION_SAMPLES_COUNT = 20;
 constexpr int CALIBRATION_SLEEP_TIME    = 100;  // [ms]
 
+constexpr float ACCELERATION_THRESHOLD = 0.5;  // [m/s^2]
+
 static const Boardcore::NASConfig config = {
     UPDATE_PERIOD / 1000.0,          // T
     0.0001f,                         // SIGMA_BETA
diff --git a/src/boards/Main/StateMachines/NASController/NASController.cpp b/src/boards/Main/StateMachines/NASController/NASController.cpp
index 166ec0f67886dc51313eabfcbbe813f0f861a0c9..056adbc1bbcdb07d5954f625986802f25eceb454 100644
--- a/src/boards/Main/StateMachines/NASController/NASController.cpp
+++ b/src/boards/Main/StateMachines/NASController/NASController.cpp
@@ -72,8 +72,13 @@ void NASController::update()
         nas.correctGPS(gpsData);
         nas.correctBaro(pressureData.pressure);
 
-        // TODO: Add accelerometer correction until the acceleration goes out of
-        // specs
+        // Correct with accelerometer if the acceleration is in specs
+        Vector3f acceleration = static_cast<AccelerometerData>(imuData);
+        if (acceleration.norm() > (9.8 + ACCELERATION_THRESHOLD) ||
+            acceleration.norm() < (9.8 - ACCELERATION_THRESHOLD))
+            accelerationValid = false;
+        if (accelerationValid)
+            nas.correctAcc(imuData);
 
         Logger::getInstance().log(nas.getState());
         FlightStatsRecorder::getInstance().update(nas.getState());
@@ -86,7 +91,8 @@ void NASController::update()
 
 void NASController::calibrate()
 {
-    Vector3f acceleration, magneticField;
+    Vector3f acceleration  = Vector3f::Zero();
+    Vector3f magneticField = Vector3f::Zero();
     Stats pressure;
 
     for (int i = 0; i < CALIBRATION_SAMPLES_COUNT; i++)
diff --git a/src/boards/Main/StateMachines/NASController/NASController.h b/src/boards/Main/StateMachines/NASController/NASController.h
index 0f64d5efcc8a480459f38296b009cadef038abf3..6ae8b821f985b80070e82701ff4a3417e6cd0fbf 100644
--- a/src/boards/Main/StateMachines/NASController/NASController.h
+++ b/src/boards/Main/StateMachines/NASController/NASController.h
@@ -74,6 +74,7 @@ private:
     Boardcore::NAS nas;
 
     Eigen::Vector3f initialOrientation;
+    bool accelerationValid = true;
 
     Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("nas");
 
diff --git a/src/boards/Payload/Configs/NASConfig.h b/src/boards/Payload/Configs/NASConfig.h
index dda4d519f9dd5e44993ac32457e56d15f69033c2..450f4ea8a126c91d15c50dbc75a81e3f72fd3303 100644
--- a/src/boards/Payload/Configs/NASConfig.h
+++ b/src/boards/Payload/Configs/NASConfig.h
@@ -37,6 +37,8 @@ constexpr uint32_t UPDATE_PERIOD = 20;  // 50 hz
 constexpr int CALIBRATION_SAMPLES_COUNT = 20;
 constexpr int CALIBRATION_SLEEP_TIME    = 100;  // [ms]
 
+constexpr float ACCELERATION_THRESHOLD = 0.5;  // [m/s^2]
+
 static const Boardcore::NASConfig config = {
     UPDATE_PERIOD / 1000.0,          // T
     0.0001f,                         // SIGMA_BETA
diff --git a/src/boards/Payload/StateMachines/NASController/NASController.cpp b/src/boards/Payload/StateMachines/NASController/NASController.cpp
index 380bc2c0b51dd68c2d40d488abfffc986e26b73b..8f914775091fa756232f85b0c838c37bd486cb5e 100644
--- a/src/boards/Payload/StateMachines/NASController/NASController.cpp
+++ b/src/boards/Payload/StateMachines/NASController/NASController.cpp
@@ -70,8 +70,13 @@ void NASController::update()
         nas.correctGPS(gpsData);
         nas.correctBaro(pressureData.pressure);
 
-        // TODO: Add accelerometer correction until the acceleration goes out of
-        // specs
+        // Correct with accelerometer if the acceleration is in specs
+        Vector3f acceleration = static_cast<AccelerometerData>(imuData);
+        if (acceleration.norm() > (9.8 + ACCELERATION_THRESHOLD) ||
+            acceleration.norm() < (9.8 - ACCELERATION_THRESHOLD))
+            accelerationValid = false;
+        if (accelerationValid)
+            nas.correctAcc(imuData);
 
         Logger::getInstance().log(nas.getState());
         FlightStatsRecorder::getInstance().update(nas.getState());
@@ -80,7 +85,8 @@ void NASController::update()
 
 void NASController::calibrate()
 {
-    Vector3f acceleration, magneticField;
+    Vector3f acceleration  = Vector3f::Zero();
+    Vector3f magneticField = Vector3f::Zero();
     Stats pressure;
 
     for (int i = 0; i < CALIBRATION_SAMPLES_COUNT; i++)
@@ -248,6 +254,8 @@ void NASController::state_ready(const Event& event)
     {
         case EV_ENTRY:
         {
+            accelerationValid = true;
+
             return logStatus(NASControllerState::READY);
         }
         case NAS_CALIBRATE:
diff --git a/src/boards/Payload/StateMachines/NASController/NASController.h b/src/boards/Payload/StateMachines/NASController/NASController.h
index db0eb9270fb28f0c417e418498df68398fe1c52d..476c5a84d06e888b35f389f708205e370895d6b2 100644
--- a/src/boards/Payload/StateMachines/NASController/NASController.h
+++ b/src/boards/Payload/StateMachines/NASController/NASController.h
@@ -69,6 +69,7 @@ private:
     Boardcore::NAS nas;
 
     Eigen::Vector3f initialOrientation;
+    bool accelerationValid = true;
 
     Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("nas");
 };