structured init()