parallel swapping works like you'd expect