Index: trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java	(revision 12653)
+++ trunk/src/org/openstreetmap/josm/gui/download/AbstractDownloadSourcePanel.java	(revision 12654)
@@ -2,9 +2,10 @@
 package org.openstreetmap.josm.gui.download;
 
-import org.openstreetmap.josm.data.Bounds;
+import java.util.Objects;
 
 import javax.swing.Icon;
 import javax.swing.JPanel;
-import java.util.Objects;
+
+import org.openstreetmap.josm.data.Bounds;
 
 /**
@@ -83,3 +84,12 @@
         // override this if the panel must react on bbox changes
     }
+
+    /**
+     * Tells the {@link DownloadSource} to start downloading
+     * @param currentBounds The bounds to download for
+     * @param downloadSettings The remaining download settings
+     */
+    public void triggerDownload(Bounds currentBounds, DownloadSettings downloadSettings) {
+        getDownloadSource().doDownload(currentBounds, getData(), downloadSettings);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 12653)
+++ trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 12654)
@@ -84,5 +84,5 @@
     }
 
-    protected final transient List<DownloadSource> downloadSources = new ArrayList<>();
+    protected final transient List<DownloadSource<?>> downloadSources = new ArrayList<>();
     protected final transient List<DownloadSelection> downloadSelections = new ArrayList<>();
     protected final JTabbedPane tpDownloadAreaSelectors = new JTabbedPane();
@@ -273,5 +273,5 @@
         for (Component ds : downloadSourcesTab.getComponents()) {
             if (ds instanceof AbstractDownloadSourcePanel) {
-                ((AbstractDownloadSourcePanel) ds).boudingBoxChanged(b);
+                ((AbstractDownloadSourcePanel<?>) ds).boudingBoxChanged(b);
             }
         }
@@ -379,5 +379,5 @@
             tpDownloadAreaSelectors.setSelectedIndex(DOWNLOAD_TAB.get());
         } catch (IndexOutOfBoundsException e) {
-            Main.trace(e);
+            Logging.trace(e);
             tpDownloadAreaSelectors.setSelectedIndex(0);
         }
@@ -386,5 +386,5 @@
             downloadSourcesTab.setSelectedIndex(DOWNLOAD_SOURCE_TAB.get());
         } catch (IndexOutOfBoundsException e) {
-            Main.trace(e);
+            Logging.trace(e);
             downloadSourcesTab.setSelectedIndex(0);
         }
@@ -485,8 +485,8 @@
      * @return The index of the download source, or -1 if it not in the pane.
      */
-    protected int getDownloadSourceIndex(DownloadSource downloadSource) {
+    protected int getDownloadSourceIndex(DownloadSource<?> downloadSource) {
         return Arrays.stream(downloadSourcesTab.getComponents())
                 .filter(it -> it instanceof AbstractDownloadSourcePanel)
-                .map(it -> (AbstractDownloadSourcePanel) it)
+                .map(it -> (AbstractDownloadSourcePanel<?>) it)
                 .filter(it -> it.getDownloadSource().equals(downloadSource))
                 .findAny()
@@ -528,5 +528,5 @@
                         .mapToObj(downloadSourcesTab::getComponentAt)
                         .filter(it -> it instanceof AbstractDownloadSourcePanel)
-                        .map(it -> (AbstractDownloadSourcePanel) it)
+                        .map(it -> (AbstractDownloadSourcePanel<?>) it)
                         .filter(it -> it.getDownloadSource().onlyExpert())
                         .forEach(downloadSourcesTab::remove);
@@ -552,5 +552,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            AbstractDownloadSourcePanel pnl = (AbstractDownloadSourcePanel) downloadSourcesTab.getSelectedComponent();
+            AbstractDownloadSourcePanel<?> pnl = (AbstractDownloadSourcePanel<?>) downloadSourcesTab.getSelectedComponent();
             run();
             pnl.checkCancel();
@@ -572,5 +572,5 @@
             Component panel = downloadSourcesTab.getSelectedComponent();
             if (panel instanceof AbstractDownloadSourcePanel) {
-                AbstractDownloadSourcePanel pnl = (AbstractDownloadSourcePanel) panel;
+                AbstractDownloadSourcePanel<?> pnl = (AbstractDownloadSourcePanel<?>) panel;
                 DownloadSettings downloadSettings = getDownloadSettings();
                 if (pnl.checkDownload(currentBounds, downloadSettings)) {
@@ -578,5 +578,5 @@
                     setCanceled(false);
                     setVisible(false);
-                    pnl.getDownloadSource().doDownload(currentBounds, pnl.getData(), downloadSettings);
+                    pnl.triggerDownload(currentBounds, downloadSettings);
                 }
             }
