does not depend on async anymore (did earlier)