Full refactor for push support