ref #119, add can_push