naive swapping is a bit of a fail here. Needs more research