public static Hand findHighestStraight(Set<Card> cardSet) {
    	CardSetStats stats = new CardSetStats(cardSet);
    	if (stats.rankList.size() < 5) {
			return null;
		}
    	Rank pointerRank = null;
    	List<Rank> straight = new ArrayList<Rank>();
    	boolean containsAce = false; // used for wheel straight
    	for (Rank nextRank : stats.rankList) {
    		if (nextRank == Rank.Ace) {
    			containsAce = true;
    		}
    		if (pointerRank != null && pointerRank.value - 1 != nextRank.value) {
    			straight = new ArrayList<Rank>();
    		}
    		straight.add(nextRank);
			pointerRank = nextRank;
			if (straight.size() == 5) {
				return Hand.Straight(straight.get(0));
			}
			// Check for wheel (A,2,3,4,5 straight)
			if (straight.size() == 4 && straight.get(0) == Rank.Five && containsAce) {
				return Hand.Straight(Rank.Five);
			}
    	}
    	return null;
    }