publish() now uses the executor