diff --git a/src/boards/Payload/Configs/FlightModeManagerConfig.h b/src/boards/Payload/Configs/FlightModeManagerConfig.h
index d76d78b3a60546b8c6d849029d504e49024b1823..95462eb059799913265967f5f4bd0f9fa7b2328a 100644
--- a/src/boards/Payload/Configs/FlightModeManagerConfig.h
+++ b/src/boards/Payload/Configs/FlightModeManagerConfig.h
@@ -26,5 +26,6 @@ namespace Payload
 {
 
 constexpr unsigned int MISSION_TIMEOUT = 15 * 60 * 1000;
+constexpr unsigned int APOGEE_TIMEOUT  = 20 * 1000;
 
-}
+}  // namespace Payload
diff --git a/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp b/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp
index 89cbe102077686717bf88267492bb09435ea036c..9253e42d9cf6873822e69b00308bfc46c38a7fa2 100644
--- a/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp
+++ b/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp
@@ -420,15 +420,24 @@ State FlightModeManager::state_flying(const Event& event)
 
 State FlightModeManager::state_ascending(const Event& event)
 {
+    static uint16_t apogeeDetectionEventId = -1;
+
     switch (event)
     {
         case EV_ENTRY:
         {
             logStatus(FlightModeManagerState::ASCENDING);
+
+            apogeeDetectionEventId =
+                EventBroker::getInstance().postDelayed<APOGEE_TIMEOUT>(
+                    FLIGHT_APOGEE_DETECTED, TOPIC_FLIGHT);
+
             return HANDLED;
         }
         case EV_EXIT:
         {
+            EventBroker::getInstance().removeDelayed(apogeeDetectionEventId);
+
             return HANDLED;
         }
         case EV_EMPTY: