update open/close principle