no more local state
generalize start fun