diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h
index 461020d514b4ac711c733267e08ad7c8a02649e3..07971cd226a865a7f55763bba7883fd59091984b 100644
--- a/src/FirmwarePlugin/FirmwarePlugin.h
+++ b/src/FirmwarePlugin/FirmwarePlugin.h
@@ -79,7 +79,8 @@ public:
     ///         free when no longer needed.
     virtual QList<VehicleComponent*> componentsForVehicle(AutoPilotPlugin* vehicle);
 
-    /// Returns the list of available flight modes
+    /// Returns the list of available flight modes. Flight modes can be different in normal/advanced ui mode.
+    /// Call will be made again if advanced mode changes.
     virtual QStringList flightModes(Vehicle* vehicle) {
         Q_UNUSED(vehicle);
         return QStringList();
diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc
index fbbb2890aa5e3e667dcff22fce29150367c7b68e..38cac87fe629e1b34b147f827df6bcb198b439ea 100644
--- a/src/Vehicle/Vehicle.cc
+++ b/src/Vehicle/Vehicle.cc
@@ -418,6 +418,9 @@ void Vehicle::_commonInit(void)
     connect(_settingsManager->appSettings()->offlineEditingCruiseSpeed(),   &Fact::rawValueChanged, this, &Vehicle::_offlineCruiseSpeedSettingChanged);
     connect(_settingsManager->appSettings()->offlineEditingHoverSpeed(),    &Fact::rawValueChanged, this, &Vehicle::_offlineHoverSpeedSettingChanged);
 
+    // Flight modes can differ based on advanced mode
+    connect(_toolbox->corePlugin(), &QGCCorePlugin::showAdvancedUIChanged, this, &Vehicle::flightModesChanged);
+
     // Build FactGroup object model
 
     _addFact(&_rollFact,                _rollFactName);
diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h
index 827444ac6e83d91111effc8c2d81d8298a58391b..2059b7eb23c5668a69730be1b181baf14761c484 100644
--- a/src/Vehicle/Vehicle.h
+++ b/src/Vehicle/Vehicle.h
@@ -315,7 +315,7 @@ public:
     Q_PROPERTY(bool                 armed                   READ armed                  WRITE setArmed                  NOTIFY armedChanged)
     Q_PROPERTY(bool                 autoDisarm              READ autoDisarm                                             NOTIFY autoDisarmChanged)
     Q_PROPERTY(bool                 flightModeSetAvailable  READ flightModeSetAvailable                                 CONSTANT)
-    Q_PROPERTY(QStringList          flightModes             READ flightModes                                            CONSTANT)
+    Q_PROPERTY(QStringList          flightModes             READ flightModes                                            NOTIFY flightModesChanged)
     Q_PROPERTY(QString              flightMode              READ flightMode             WRITE setFlightMode             NOTIFY flightModeChanged)
     Q_PROPERTY(bool                 hilMode                 READ hilMode                WRITE setHilMode                NOTIFY hilModeChanged)
     Q_PROPERTY(QmlObjectListModel*  trajectoryPoints        READ trajectoryPoints                                       CONSTANT)
@@ -860,6 +860,7 @@ signals:
     void telemetryLNoiseChanged     (int value);
     void telemetryRNoiseChanged     (int value);
     void autoDisarmChanged          (void);
+    void flightModesChanged         (void);
 
     void firmwareVersionChanged(void);
     void firmwareCustomVersionChanged(void);
diff --git a/src/ui/toolbar/ModeIndicator.qml b/src/ui/toolbar/ModeIndicator.qml
index 358a8897f39fe2e52e30348cfcab537e2607aec9..bb540ceec8be2a33982be59393e2401f135bf399 100644
--- a/src/ui/toolbar/ModeIndicator.qml
+++ b/src/ui/toolbar/ModeIndicator.qml
@@ -24,7 +24,10 @@ Item {
     anchors.bottom: parent.bottom
     width:          flightModeSelector.width
 
-    property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+    property var _activeVehicle:    QGroundControl.multiVehicleManager.activeVehicle
+    property var _flightModes:      _activeVehicle ? _activeVehicle.flightModes : [ ]
+
+    on_FlightModesChanged: flightModeSelector.updateFlightModesMenu()
 
     QGCLabel {
         id:                     flightModeSelector
@@ -50,18 +53,14 @@ Item {
                 }
                 flightModesMenuItems.length = 0
                 // Add new items
-                for (var i = 0; i < _activeVehicle.flightModes.length; i++) {
-                    var menuItem = flightModeMenuItemComponent.createObject(null, { "text": _activeVehicle.flightModes[i] })
+                for (var i = 0; i < _flightModes.length; i++) {
+                    var menuItem = flightModeMenuItemComponent.createObject(null, { "text": _flightModes[i] })
                     flightModesMenuItems.push(menuItem)
                     flightModesMenu.insertItem(i, menuItem)
                 }
             }
         }
         Component.onCompleted: flightModeSelector.updateFlightModesMenu()
-        Connections {
-            target:                 QGroundControl.multiVehicleManager
-            onActiveVehicleChanged: flightModeSelector.updateFlightModesMenu()
-        }
         MouseArea {
             visible:        _activeVehicle && _activeVehicle.flightModeSetAvailable
             anchors.fill:   parent