make onRemove optional