use designated initializers