Move opposition finding logic into models