oppose() remodelled: first attempt
oppose() works again, but some issues remain