only init if necessary