refactor to eventually pass different ops