I agree it should preempt (and currently can, although i don't think it should when invalid).  My point was about nesting this logic partly here and partly in transmitter_control_selected_controller().

e.g. in this diagram https://groups.google.com/d/msg/phoenixpilot/xbE3ws3DzUc/LXvX8SULDocJ

the muxing logic isn't a part of any sub module.  So this should basically be written as one big function

```
enum control_selection control_select_submodule() 
{
   if (first_priority_things)
       return CONTROL_SELECTION_GEOFENCE;
   else if (transmitter not there OMG)
       return CONTROL_SELECTION_FAILSAFE;
   ...
}
```