some logic for push