private static void generateMainPanel() {
		// main panel layout
		GridLayout mainPanelGrid = new GridLayout(1, 2);
		mainPanel.setLayout(mainPanelGrid);

		// generating data source
		data = new DataRetriever();
		initMap(data); // map initialization

		// Flights and crews
		flightList = new JList(data.generateFlights());
		flightList.setBorder(generateBorder("Flights"));

		crewList = new JList(data.generateCrews());
		crewList.setBorder(generateBorder("Crews"));

		// listener to match flight-crew
		flightList.addListSelectionListener(new FlightListener());

		// for multiple selection and deselection
		crewList.setSelectionModel(new DefaultListSelectionModel() {
			private int firstIndex = -1;
			private int lastIndex = -1;

			public void setSelectionInterval(int indice1, int indice2) {
				if (firstIndex == indice1 && lastIndex == indice2) {
					if (getValueIsAdjusting()) {
						setValueIsAdjusting(false);
						setSelection(indice1, indice2);
					}
				} else {
					firstIndex = indice1;
					lastIndex = indice2;
					setValueIsAdjusting(false);
					setSelection(indice1, indice2);
				}
			}

			private void setSelection(int indice1, int indice2) {
				if (super.isSelectedIndex(indice1)) {
					super.removeSelectionInterval(indice1, indice2);
					Set<Crew> tempCrewRemoveSet = new HashSet<Crew>(crewList.getSelectedValuesList());
					map.put(flightList.getSelectedValue().toString(),tempCrewRemoveSet);
				} else {
					super.addSelectionInterval(indice1, indice2);
					Set<Crew> tempCrewSet = new HashSet<Crew>(crewList.getSelectedValuesList());
					map.put(flightList.getSelectedValue().toString(),tempCrewSet);
				}
			}
		});

		mainPanel.add(flightList);
		mainPanel.add(crewList);
	}