diff --git a/ArduPlane/Attitude.pde b/ArduPlane/Attitude.pde
index e2860ea8b625c0a821e17129a4ac38555281ec60..a269e3c208626426177af73bde57e140384ddb09 100644
--- a/ArduPlane/Attitude.pde
+++ b/ArduPlane/Attitude.pde
@@ -38,22 +38,19 @@ static float get_speed_scaler(void)
  */
 static bool stick_mixing_enabled(void)
 {
-    if (control_mode == CIRCLE && failsafe != FAILSAFE_NONE) {
-        // we are in short failsafe
-        return false;
-    }
-    if (control_mode < FLY_BY_WIRE_A) {
-        // pilot has control, always mix in pilot controls
-        return true;
-    }
-    if (g.stick_mixing &&
-        geofence_stickmixing() &&
-        failsafe == FAILSAFE_NONE) {
-        // we're in an auto mode, and haven't triggered failsafe
-        return true;
+    if (control_mode == CIRCLE || control_mode > FLY_BY_WIRE_B) {
+        // we're in an auto mode. Check the stick mixing flag
+        if (g.stick_mixing &&
+            geofence_stickmixing() &&
+            failsafe == FAILSAFE_NONE) {
+            // we're in an auto mode, and haven't triggered failsafe
+            return true;
+        } else {
+            return false;
+        }
     }
-    // we should not do stick mixing
-    return false;
+    // non-auto mode. Always do stick mixing
+    return true;
 }
 
 
@@ -100,8 +97,9 @@ static void stabilize()
     // Mix Stick input to allow users to override control surfaces
     // -----------------------------------------------------------
     if (stick_mixing_enabled()) {
-        if (control_mode > FLY_BY_WIRE_B) {
-            // do stick mixing in auto modes
+        if (control_mode < FLY_BY_WIRE_A || control_mode > FLY_BY_WIRE_C) {
+            // do stick mixing on aileron/elevator if not in a fly by
+            // wire mode
             ch1_inf = (float)g.channel_roll.radio_in - (float)g.channel_roll.radio_trim;
             ch1_inf = fabs(ch1_inf);
             ch1_inf = min(ch1_inf, 400.0);
@@ -116,22 +114,20 @@ static void stabilize()
             // -----------------------------------------------
             g.channel_roll.servo_out *= ch1_inf;
             g.channel_pitch.servo_out *= ch2_inf;
-
+            
             // Mix in stick inputs
             // -------------------
             g.channel_roll.servo_out +=     g.channel_roll.pwm_to_angle();
             g.channel_pitch.servo_out +=    g.channel_pitch.pwm_to_angle();
         }
 
-        if (control_mode >= FLY_BY_WIRE_A) {
-            // stick mixing performed for rudder for all cases including FBW unless disabled for higher modes
-            // important for steering on the ground during landing
-            // -----------------------------------------------
-            ch4_inf = (float)g.channel_rudder.radio_in - (float)g.channel_rudder.radio_trim;
-            ch4_inf = fabs(ch4_inf);
-            ch4_inf = min(ch4_inf, 400.0);
-            ch4_inf = ((400.0 - ch4_inf) /400.0);
-        }
+        // stick mixing performed for rudder for all cases including FBW
+        // important for steering on the ground during landing
+        // -----------------------------------------------
+        ch4_inf = (float)g.channel_rudder.radio_in - (float)g.channel_rudder.radio_trim;
+        ch4_inf = fabs(ch4_inf);
+        ch4_inf = min(ch4_inf, 400.0);
+        ch4_inf = ((400.0 - ch4_inf) /400.0);
     }
 
 	// Apply output to Rudder