init implementation