refine init function