keep relative position rather than swap