correct movement logic