public static LinkedList<Task> smartSearch(String searchLine, 
			LinkedList<Task> bufferedTaskList, 
			SEARCH_TYPES searchType, 
			SEARCH_TYPES searchAlgoType){
		
		//Task that is collated through the searches.
		LinkedList<Task> matchedTasks = new LinkedList<Task>(); 
		
		switch (searchAlgoType) {
			case SEARCH_POWER_SEARCH:
				LinkedList<LinkedList<?>> returnList = powerSearch(searchLine,
						matchedTasks, bufferedTaskList, searchType);
				
				if (!(returnList.get(0).size() == 0)) {
					suggestInputs = 
							new LinkedList<String>(
									(LinkedList<String>)returnList.get(1));	
				} else {
					suggestInputs.add(NO_MATCH_FOUND);
				}
				return (LinkedList<Task>) returnList.get(0); 
					
			case TYPE_ALL:
			
			case SEARCH_START_LETTER:
				matchedTasks.addAll(startLetterSearch(searchLine, 
						matchedTasks, bufferedTaskList, searchType));
				
				if (searchAlgoType == SEARCH_TYPES.SEARCH_START_LETTER) {
					break;
				}
				
			case SEARCH_MATCH_WORD:
				matchedTasks.addAll(matchWordSearch(searchLine, 
						matchedTasks, bufferedTaskList,searchType, false));
				
				if (searchAlgoType == SEARCH_TYPES.SEARCH_MATCH_WORD) {
					break;
				}
		}
		return removeDuplicate(matchedTasks);
	}