The first, by Mujahid Khaleel, employs a controlled lazy load, but is not thread safe in its current form -- in between the null instance check and assigning a new object to the static field, one or more other threads could assign to it as well. The second, shorter version, by Scott Rudy, provides less control in its lazy load, but is guaranteed to be threadsafe, as the runtime will only perform the 'private static readonly Singleton instance = new Singleton();' assignment once.