unify translations
shutdown executors after callbacks
only persist when not empty
cancellation doesn't always seem to run