- for (stop = false, tte = retrieve(p.get_key());
- tte && tte->move() != MOVE_NONE && !stop;
- tte = retrieve(p.get_key()), ply++)
+ StateInfo st;
+ Position p(pos);
+ int ply = 0;
+
+ // Update position to the end of current PV
+ while (pv[ply] != MOVE_NONE)
+ p.do_move(pv[ply++], st);
+
+ // Try to add moves from TT while possible
+ while ( (tte = retrieve(p.get_key())) != NULL
+ && tte->move() != MOVE_NONE
+ && move_is_legal(p, tte->move())
+ && (!p.is_draw() || ply < 2)
+ && ply < PLY_MAX)