public List<List<SetCard>> findMatches() {
		
		//don't even bother if there aren't enough cards
		if (cards.size() < 3) {
			return null;
		}
		
		/*
		 * iterate through all of the cards, getting all possible permutations
		 * of SetCards...
		 */
		for (int i = 0; i < cards.size(); i++) {
			SetCard card1 = cards.get(i);
			for (int j = 1; j < cards.size(); j++) {
				SetCard card2 = cards.get(j);
				for (int k = 2; k < cards.size(); k++) {
					SetCard card3 = cards.get(k);
					
					//...and adding them to a temporary HashSet.
					LinkedHashSet<SetCard> tempCardSet = new LinkedHashSet<SetCard>();
					tempCardSet.add(card1);
					tempCardSet.add(card2);
					tempCardSet.add(card3);
					
					//check that there aren't any duplicates
					if (tempCardSet.size() == 3) {
						
						//convert back to List if check passes
						List<SetCard> tempList = new LinkedList<SetCard>(tempCardSet);
						
						/*
						 * if the cards are a set, add them to results 
						 * and remove them from the master list of cards, 
						 * so that they're not used again
						 */
						if (isSet(tempList)) {
							matches.add(tempList);
							cards.removeAll(tempList);
						}
					}
				}
			}
		}
		return matches;
	}