added designated initializer