add swap function