updated move and equals