added lazy initialization