Simplify how ports are set and updated at the same time.

Try reverting this commit if any regressions are found in how controls are
set.