Speaker output decides where audio goes, not how it is captured, which is why it sits beside the preset row rather than inside Advanced audio. It was nonetheless moving the preset to Advanced, and the voice-chat preset was clearing it back, so the two controls overwrote each other and a user who wanted the speaker lost the preset that describes their capture setup. SetForceSpeaker no longer touches the preset, and Load and SelectPreset no longer clear the flag. A speakerIsExplicit default records that the user actually chose, so the automatic value older installs inherited from the voice-chat preset is dropped once rather than pinning a headset user to the speaker, and the toggle is honoured from then on. Apply issues the speaker port override again when the flag is set. Without it the toggle barely did anything with a headset attached, because DefaultToSpeaker only decides the route when nothing else is connected. With the toggle off it passes None, so a route left alone still follows an HFP headset. The changed logic sits on AVAudioSession, which the net10.0 test project cannot reference, so this carries no tests; the toggle needs device verification under the voice-chat preset with a Bluetooth headset connected.