init
modified version