mark OnDeserialized() as virtual