reducing is a bit cleaner now
assumes short reduce ops