diff --git a/src/shared/algorithms/MEA/MEA.cpp b/src/shared/algorithms/MEA/MEA.cpp
index 8e1fcf93116ad7a569ce1336b9db82a5641b8b0d..528b1bcf8113e515864d20a9161c1977eca94741 100644
--- a/src/shared/algorithms/MEA/MEA.cpp
+++ b/src/shared/algorithms/MEA/MEA.cpp
@@ -63,7 +63,8 @@ MEA::MEA(const Config &config)
       baroR{config.baroR}, P{config.P}, x{0, 0, config.initialMass},
       accelThresh{config.accelThresh}, speedThresh{config.speedThresh},
       Kt{config.Kt}, alpha{config.alpha}, c{config.c}, coeffs{config.coeffs},
-      crossSection{config.crossSection}, ae{config.ae}, p0{config.p0}
+      crossSection{config.crossSection}, ae{config.ae}, p0{config.p0},
+      minMass{config.minMass}, maxMass{config.maxMass}
 {
 }
 
@@ -81,6 +82,9 @@ void MEA::update(const Step &step)
     // Run accelerometer correction
     correctAccel(step);
 
+    // Compute current mass
+    computeMass();
+
     // Run apogee prediction
     computeApogee(step);
 
@@ -164,13 +168,18 @@ void MEA::correctAccel(const Step &step)
     x = x + K * (step.acceleration.x() - y);
 }
 
+void MEA::computeMass()
+{
+    // Clamp the used mass, so that we don't use bogus values in case the filter
+    // fails BAD
+    mass = std::max(std::min(x(2), maxMass), minMass);
+}
+
 void MEA::computeApogee(const Step &step)
 {
     if (!step.hasSpeedAndAlt)
         return;
 
-    float mass = x(2);
-
     // TODO: Matlab uses CD_correction_shutDown, should we?
     // Holy fuck, massive formula, split this for the love of god
     apogee = step.mslAltitude +
@@ -186,8 +195,9 @@ void MEA::updateState()
 
     state.x0 = x(0);
     state.x1 = x(1);
+    state.x2 = x(2);
 
-    state.estimatedMass     = x(2);
+    state.estimatedMass     = mass;
     state.estimatedPressure = baroH * x;
     state.estimatedApogee   = apogee;
     state.estimatedForce    = force;
diff --git a/src/shared/algorithms/MEA/MEA.h b/src/shared/algorithms/MEA/MEA.h
index 0fa99d9d445d628ab2a9307056d20547d7ab35c6..4600df16ec19f3079ff0bba9c7f959c38dd4fa98 100644
--- a/src/shared/algorithms/MEA/MEA.h
+++ b/src/shared/algorithms/MEA/MEA.h
@@ -61,6 +61,9 @@ public:
 
         float ae;  //< Efflux area
         float p0;  //< Pressure at nozzle exit
+
+        float minMass;  //< Minimum mass used for predicted apogee
+        float maxMass;  //< Maximum mass used for predicted apogee
     };
 
     struct Step
@@ -104,6 +107,7 @@ private:
     void computeForce(const Step &step);
     void correctBaro(const Step &step);
     void correctAccel(const Step &step);
+    void computeMass();
     void computeApogee(const Step &step);
     void updateState();
 
@@ -124,6 +128,7 @@ private:
     float q     = 0.0f;  //< Latest computed dynamic pressure
     float force = 0.0f;  //< Latest computed force
 
+    float mass   = 0.0f;  //< Latest computed mass
     float apogee = 0.0f;  //< Latest computed apogee
 
     float accelThresh;
@@ -139,6 +144,9 @@ private:
     float ae;
     float p0;
 
+    float minMass;
+    float maxMass;
+
     MEAState state;
 };
 
diff --git a/src/shared/algorithms/MEA/MEAData.h b/src/shared/algorithms/MEA/MEAData.h
index 7358e242ae28b0f04c39768a1aacd93d84efa1f9..472e8f165c369ed8703cbfb03a57d740932661ca 100644
--- a/src/shared/algorithms/MEA/MEAData.h
+++ b/src/shared/algorithms/MEA/MEAData.h
@@ -39,19 +39,20 @@ struct MEAState
 
     float x0;
     float x1;
+    float x2;
 
     static std::string header()
     {
         return "timestamp,estimatedPressure,estimatedMass,estimatedApogee,"
                "estimatedForce,x0,"
-               "x1\n";
+               "x1,x2\n";
     }
 
     void print(std::ostream &os) const
     {
         os << timestamp << "," << estimatedPressure << "," << estimatedMass
            << "," << estimatedApogee << "," << estimatedForce << "," << x0
-           << "," << x1 << "\n";
+           << "," << x1 << "," << x2 << "\n";
     }
 };
 
diff --git a/src/tests/catch/test-MEA.cpp b/src/tests/catch/test-MEA.cpp
index 257a52cf0cce2985d258745655b996987cf6c61e..c644a6ff2b9faa813311db277c46e9cbf1e3c070 100644
--- a/src/tests/catch/test-MEA.cpp
+++ b/src/tests/catch/test-MEA.cpp
@@ -78,6 +78,9 @@ MEA::Config getMEAConfig()
 
     config.P           = Matrix<float, 3, 3>::Zero();
     config.initialMass = 35.01f;
+
+    config.minMass = 20.0f;
+    config.maxMass = 40.0f;
     // clang-format on
 
     return config;