implemented canSave / hasChanges