viewer has no need to emit hashchanges