actually uses position change check