rearranged init