this logic needs to live outside the grasp thread, because it has no knowledge of the previous grasps.