path finding + cache