add priority queue implementation