Implement designated initializer