void NavigationControls()
 {
     GUILayout.BeginHorizontal();
     if (BJ != null)
     {
         BJ.Draw();
     }
     if (PN != null)
     {
         if (VSL.HasTarget && !CFG.Nav.Paused)
         {
             if (Utils.ButtonSwitch("Go To", CFG.Nav[Navigation.GoToTarget],
                                    "Fly to current target", GUILayout.ExpandWidth(true)))
             {
                 CFG.Nav.XOn(Navigation.GoToTarget);
                 if (CFG.Nav[Navigation.GoToTarget])
                 {
                     follow_me();
                 }
             }
             if (Utils.ButtonSwitch("Follow", CFG.Nav[Navigation.FollowTarget],
                                    "Follow current target", GUILayout.ExpandWidth(true)))
             {
                 TCA.SquadAction(tca =>
                 {
                     if (TCA.vessel.targetObject as Vessel == tca.vessel)
                     {
                         return;
                     }
                     tca.vessel.targetObject = TCA.vessel.targetObject;
                     tca.CFG.Nav.XOn(Navigation.FollowTarget);
                 });
             }
         }
         else
         {
             GUILayout.Label(new GUIContent("Go To", CFG.Nav.Paused? "Paused" : "No target selected"),
                             Styles.inactive_button, GUILayout.ExpandWidth(true));
             GUILayout.Label(new GUIContent("Follow", CFG.Nav.Paused? "Paused" : "No target selected"),
                             Styles.inactive_button, GUILayout.ExpandWidth(true));
         }
     }
     GUILayout.EndHorizontal();
     if (BJ != null && CFG.AP2[Autopilot2.BallisticJump])
     {
         BJ.DrawDeorbitSettings();
     }
     GUILayout.BeginHorizontal();
     if (SQD != null && SQD.SquadMode)
     {
         if (CFG.Nav.Paused)
         {
             GUILayout.Label(new GUIContent("Follow Me", "Make the squadron follow"),
                             Styles.inactive_button, GUILayout.ExpandWidth(true));
         }
         else if (GUILayout.Button(new GUIContent("Follow Me", "Make the squadron follow"),
                                   Styles.active_button, GUILayout.ExpandWidth(true)))
         {
             follow_me();
         }
     }
     if (PN != null)
     {
         if (SelectingTarget)
         {
             SelectingTarget &= !GUILayout.Button("Cancel", Styles.close_button, GUILayout.Width(120));
         }
         else if (VSL.HasTarget &&
                  (VSL.TargetIsNavPoint ||
                   !VSL.TargetIsWayPoint &&
                   (CFG.Path.Count == 0 || VSL.Target != CFG.Path.Peek().GetTarget())))
         {
             if (GUILayout.Button(new GUIContent("Add As Waypoint", "Add current target as a waypoint"),
                                  Styles.active_button, GUILayout.Width(120)))
             {
                 var t = VSL.TargetAsWP;
                 VSL.SetTarget(null, t);
                 CFG.Path.Enqueue(t);
                 CFG.ShowPath = true;
             }
         }
         else if (GUILayout.Button(new GUIContent("Add Waypoint", "Select a new waypoint"),
                                   Styles.active_button, GUILayout.Width(120)))
         {
             SelectingTarget = true;
             CFG.ShowPath    = true;
         }
         if (CFG.Path.Count > 0 && !CFG.Nav.Paused)
         {
             if (Utils.ButtonSwitch("Follow Route", CFG.Nav[Navigation.FollowPath], "", GUILayout.ExpandWidth(true)))
             {
                 CFG.Nav.XToggle(Navigation.FollowPath);
                 if (CFG.Nav[Navigation.FollowPath])
                 {
                     follow_me();
                 }
             }
         }
         else
         {
             GUILayout.Label(new GUIContent("Follow Route", CFG.Nav.Paused? "Paused" : "Add some waypoints first"),
                             Styles.inactive_button, GUILayout.ExpandWidth(true));
         }
     }
     GUILayout.EndHorizontal();
     GUILayout.BeginHorizontal();
     if (PN != null || CC != null)
     {
         var max_nav_speed = Utils.FloatSlider("", CFG.MaxNavSpeed,
                                               CFG.HF[HFlight.CruiseControl]? GLB.CC.MaxRevSpeed : GLB.PN.MinSpeed, GLB.PN.MaxSpeed,
                                               "0.0 m/s", 60, "Maximum horizontal speed on autopilot");
         if (Mathf.Abs(max_nav_speed - CFG.MaxNavSpeed) > 1e-5)
         {
             TCA.SquadConfigAction(cfg => cfg.MaxNavSpeed = max_nav_speed);
         }
     }
     GUILayout.EndHorizontal();
 }