Maybe slightly off topic but just out of curiosity 🙂 Why don’t you use “real” immutability? e.g. making Freeze() return an immutable copy (without “write methods” or any other possibility to change the inner state) and using this copy instead of the original object. You could even go without changing the state and return a new copy (with the changed state) on each write operation instead (afaik the string class works this). “Real immutability” is inherently thread safe.