added lazy instantiaztion
set up designated initializer