better init and explanation of init