add swap fn