private List<Item> retrieveItems(int minDemand, int minSupply, int minMargin) {
		List<Item> items = new ArrayList<>();
		CSVParser parser = new CSVParser();
		int fetched = 0;
		int used = 0;
		try {
			URL url = new URL(
					"http://www.gw2spidy.com/api/v0.9/csv/all-items/all");
			try (BufferedReader in = new BufferedReader(new InputStreamReader(
					url.openStream()))) {
				in.readLine();
				String inputLine;
				while ((inputLine = in.readLine()) != null) {
					fetched++;
					String[] strings = parser.parseLine(inputLine);
					Item item = new Item(strings[0], strings[1],
							Integer.parseInt(strings[8]),
							Integer.parseInt(strings[9]),
							Integer.parseInt(strings[10]),
							Integer.parseInt(strings[11]));
					if (item.getOfferAvailability() > minDemand
							&& item.getSaleAvailability() > minSupply
							&& item.getMargin() > minMargin) {
						items.add(item);
						used++;
						lblStatus.setText("Loaded " + fetched
								+ " items, filter matched by " + used
								+ " items");
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		Collections.sort(items, new Comparator<Item>() {
			@Override
			public int compare(Item o1, Item o2) {
				double m1 = o1.getMargin();
				double m2 = o2.getMargin();
				if (m2 > m1) {
					return 1;
				} else if (m2 == m1) {
					return 0;
				} else {
					return -1;
				}
			}
		});
		return items;
	}