Big refactor adding blocking capabilities and removing explicit app-state