swap only when current and target position are different