ensure deselect is only called once