lazy initialiser is thread safe