added init() to remove the need for parent constructor calls