using lazy<T> rather than nasty lazy init.