Can't read all this code on my phone even though it looks pretty well structured to me! Good job! I saw this. Isn't the exception message contradicting the `if` clause? if (value < CLEARED) throw new ArgumentOutOfRangeException("SudokuTile Value cannot be zero or smaller. Was " + value); `CLEARED` is set to 0, and the if checks for 'less than 0' so the value could be set to 0. Also, not having run the code, why does the `toString()` have four parameters on `String.Format`, only using three? I'll have a closer look then I'm at a computer, but nice work!