private static void filterCSV(String filename, LinkedList<String> filters, LinkedList<String> includes) throws IOException
	{
		FileReader fr = new FileReader(filename);
		CsvReader csvIn = new CsvReader(fr, SEPARATOR);
		
		csvIn.setSafetySwitch(false);
		if(csvIn.readHeaders()) {
			csvIn.readRecord();
			System.out.println("'" +filename +"' has " +csvIn.getColumnCount() +" column.");
	
			int usedColumn = 0;
			String[] headers = csvIn.getHeaders();
			StringBuffer newHeader = new StringBuffer();
			StringBuffer newValues = new StringBuffer();

			HashMap<String,String> data = new HashMap<String, String>();
			allData.put(filename, data);
			
			for(String header : headers) {
				boolean matches = false;
				
				// check if a filter matches the entry
				for(String filter : filters) {
					if(header.contains(filter)) {
						matches = true;
						
						// ok, filter matches, but maybe it is on the include list?
						for(String include : includes) {
							if(header.contains(include)) {
								matches = false;
								break;
							}
						}
						
						break;
					}
				}
				
				if(!matches) {
					usedColumn++;
					String value = csvIn.get(header);
					
					newHeader.append(header);
					newHeader.append(SEPARATOR_OUT);
					newValues.append(value);
					newValues.append(SEPARATOR_OUT);
					
					if(data != null) {
						if(!keys.containsKey(header)) {
							keys.put(header, true);
						}
						
						data.put(header, value);
					}
				}
			}
			System.out.println(" -> " +usedColumn +" column remains");
			
			FileWriter fw = new FileWriter(filename +FILENAME_POSTFIX, false);			
			fw.write(newHeader.toString());
			fw.write(NEW_LINE);
			fw.write(newValues.toString());
			fw.close();
		} else {
			System.err.println("Can not read header from '" +filename +"'");
		}
	}