better initialize method