exposed init implementation as a separate header