support custom update method