protected void asyncSearchStart(final Host h) {
		D.out("Searching for " + m_searchWords);

		Runnable r = new Runnable() {

			public void run() {
				m_resultProvidersTableModel.setRowCount(0);
				m_resultProvidersTableModel.setColumnCount(0);
				m_resultProvidersTableModel.addColumn("");
				m_resultProvidersTableModel.addColumn("#");
				m_resultProvidersTableModel.addColumn("Source");

				

				List<Host> searchedHosts = new ArrayList<Host>();
				
				List<Host> hosts;
				if (h != null)
				{
					hosts = Collections.singletonList(h);
				}
				else
				{
					hosts = Arrays.asList (MainDialog.hostMap.getHosts());
				}
				
				for (Host h : hosts) {
					if (h.seemsOnline()) {
						searchedHosts.add(h);
						FileSearchResultComponent fsrc = new FileSearchResultComponent(h, m_searchWords);
						m_fileSearchResultComponents.put(h, fsrc);
						m_resultProvidersTableModel.addRow(new Object[] {
								IconChooser.getOnlineHostImageIcon(), "?", h });
						
						// FIXME for testing
						//fsrc.newResult(h, Collections.singletonList ((RemoteEntity) new RemoteFile ("/crap/" + h.getDisplayName())));
					}
				}

				// The demultiplexer routes the search results to the correct components
				SearchResultCollector searchResultCollectorDemultiplexer = new SearchResultCollector ()
				{

					public void hasError(Host host, String msg) {
						if (m_fileSearchResultComponents.containsKey(host))
							m_fileSearchResultComponents.get(host).hasError(host, msg);
						setResultCountCellValue (host, "X");
					}

					public void newResult(Host host,
							List<RemoteEntity> resultList) {
						if (m_fileSearchResultComponents.containsKey(host))
							m_fileSearchResultComponents.get(host).newResult(host, resultList);
						setResultCountCellValue (host,""+resultList.size());
					}

					public void noResult(Host host) {
						if (m_fileSearchResultComponents.containsKey(host))
							m_fileSearchResultComponents.get(host).noResult(host);
						setResultCountCellValue (host,"0");
					}


				};
				// This launches the search
				WebDAVSearchClient.searchSpecificHosts(m_searchWords, Collections.singletonList(searchResultCollectorDemultiplexer), searchedHosts);				
				
				



				m_shopsSearchResultComponent = new ShopsSearchResultComponent(
						m_searchWords);
				m_resultProvidersTableModel.addRow(new Object[] { null, "",
						"Shopping" });

				m_resultProvidersTable.setModel(m_resultProvidersTableModel);

				TableColumn firstColumn = m_resultProvidersTable
						.getColumnModel().getColumn(0);
				firstColumn.setMinWidth((int) (IconChooser.getGuiIconWidth ()*1.3));
				firstColumn.setMaxWidth((int) (IconChooser.getGuiIconWidth ()*1.3));
				firstColumn.setPreferredWidth((int) (IconChooser.getGuiIconWidth ()*1.3));
				
				
				TableColumn secondColumn = m_resultProvidersTable
						.getColumnModel().getColumn(1);
				secondColumn.setMinWidth((int) (IconChooser.getGuiIconWidth ()*2.3));
				secondColumn.setMaxWidth((int) (IconChooser.getGuiIconWidth ()*2.3));
				secondColumn.setPreferredWidth((int) (IconChooser.getGuiIconWidth ()*2.3));
				
				
				m_splitPane.setDividerLocation(220);
			}

		};

		SwingUtilities.invokeLater(r);
	}