diff --git a/ArduPlane/Parameters.h b/ArduPlane/Parameters.h
index 08bbfc5ada34af1b738e3a5a7fe86bda278b09e8..d36f6981d17977bdd7060eddfc1a0935d4401ba8 100644
--- a/ArduPlane/Parameters.h
+++ b/ArduPlane/Parameters.h
@@ -75,6 +75,7 @@ public:
         k_param_land_flare_sec,
         k_param_crosstrack_min_distance,
         k_param_rudder_steer,
+        k_param_throttle_nudge,
 
         // 110: Telemetry control
         //
@@ -276,6 +277,7 @@ public:
     AP_Int8 throttle_fs_enabled;
     AP_Int16 throttle_fs_value;
     AP_Int8 throttle_cruise;
+    AP_Int8 throttle_nudge;
 
     // Failsafe
     AP_Int8 short_fs_action;
diff --git a/ArduPlane/Parameters.pde b/ArduPlane/Parameters.pde
index 42ca1e2e680d7d603aec98348027925e705b52ee..cbfdaa1722be0dd30debca4dfa39ec7d8181a136 100644
--- a/ArduPlane/Parameters.pde
+++ b/ArduPlane/Parameters.pde
@@ -295,6 +295,14 @@ const AP_Param::Info var_info[] PROGMEM = {
     // @User: Standard
     GSCALAR(throttle_cruise,        "TRIM_THROTTLE",  THROTTLE_CRUISE),
 
+    // @Param: THROTTLE_NUDGE
+    // @DisplayName: Throttle nudge enable
+    // @Description: When enabled, this uses the throttle input in auto-throttle modes to 'nudge' the throttle to higher or lower values
+    // @Values: 0:Disabled,1:Enabled
+    // @User: Standard
+    // @User: Standard
+    GSCALAR(throttle_nudge,         "THROTTLE_NUDGE",  1),
+
     // @Param: FS_SHORT_ACTN
     // @DisplayName: Short failsafe action
     // @Description: The action to take on a short (1 second) failsafe event
diff --git a/ArduPlane/radio.pde b/ArduPlane/radio.pde
index 0ebe4e5c319abb2628038eb0886db0d76fc4f3dc..c5347b553716ed14f19f0fa208ddf4487d3a1d6d 100644
--- a/ArduPlane/radio.pde
+++ b/ArduPlane/radio.pde
@@ -94,11 +94,12 @@ static void read_radio()
 
     g.channel_throttle.servo_out = g.channel_throttle.control_in;
 
-    if (g.channel_throttle.servo_out > 50) {
+    if (g.throttle_nudge && g.channel_throttle.servo_out > 50) {
+        float nudge = (g.channel_throttle.servo_out - 50) * 0.02;
         if (alt_control_airspeed()) {
-            airspeed_nudge_cm = (g.flybywire_airspeed_max * 100 - g.airspeed_cruise_cm) * ((g.channel_throttle.norm_input()-0.5) / 0.5);
+            airspeed_nudge_cm = (g.flybywire_airspeed_max * 100 - g.airspeed_cruise_cm) * nudge;
         } else {
-            throttle_nudge = (g.throttle_max - g.throttle_cruise) * ((g.channel_throttle.norm_input()-0.5) / 0.5);
+            throttle_nudge = (g.throttle_max - g.throttle_cruise) * nudge;
         }
     } else {
         airspeed_nudge_cm = 0;