added lazy singleton functionality