push-based approach