optimize  init function