this should be checked in the constructor rather than on each write IMO