DRY & less blocking