Refactor entire class to eventually support peek and single.