public static ArrayList<CardCombination> getBasicCardCombinations(
			ArrayList<Card> cardsToSearchForCardCombinations) {
		// Make sure that the list 
		// Store a list of the temporary hand cards so that the given list can
		// be manipulated
		ArrayList<Card> tempHandCards = (ArrayList<Card>) (cardsToSearchForCardCombinations
				.clone());
		// Will store the card combinations including their cards
		ArrayList<CardCombination> cardCombinationList = new ArrayList<CardCombination>();

		// Check the hand cards for a flush
		boolean isFlush = isFlush(tempHandCards);
		// Check the hand cards for a flush
		boolean isStraight = isStraight(tempHandCards);

		// Add the card combination to the list depending on the card
		// combination
		if (isFlush && isStraight) {
			cardCombinationList.add(new CardCombination(
					CardCombinationEnum.STRAIGHT_FLUSH, tempHandCards));
		} else if (isFlush && !isStraight) {
			cardCombinationList.add(new CardCombination(
					CardCombinationEnum.FLUSH, tempHandCards));
		} else if (!isFlush && isStraight){
			cardCombinationList.add(new CardCombination(
					CardCombinationEnum.STRAIGHT, tempHandCards));
		}

		if (!isStraight) {
			// Check the deck for highest cards, pairs more of a kind (NOT Full
			// house, Flush or so)
			// and remove already added cards from the temporary deck
			while (tempHandCards.size() > 0) {
				CardCombination cardCombination = getSameCardsOrHighestCard(tempHandCards);
				// TODO TWO PAIR will not be registered right now!
				// Add the card combination to the list
				cardCombinationList.add(cardCombination);
			}
		}
		sortCardCombinationsDescending(cardCombinationList);
		
		return cardCombinationList;
	}