better move validity checking