cleaned up move generator