refactor update mechanics