Index: /applications/editors/josm/plugins/download_along/build.xml
===================================================================
--- /applications/editors/josm/plugins/download_along/build.xml	(revision 29744)
+++ /applications/editors/josm/plugins/download_along/build.xml	(revision 29745)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="Changed the constructor signature of the plugin main class"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="4980"/>
+    <property name="plugin.main.version" value="6053"/>
 
 	<!-- Configure these properties (replace "..." accordingly).
Index: /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlong.java
===================================================================
--- /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlong.java	(revision 29744)
+++ /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlong.java	(revision 29745)
@@ -7,6 +7,9 @@
 
 public class DownloadAlong extends Plugin {
-	static final String PREF_DOWNLOAD_ALONG_TRACK_DISTANCE = "downloadAlong.downloadAlongTrack.distance";
-	static final String PREF_DOWNLOAD_ALONG_TRACK_AREA = "downloadAlong.downloadAlongTrack.area";
+	public static final String PREF_DOWNLOAD_ALONG_TRACK_DISTANCE = "downloadAlong.downloadAlongTrack.distance";
+	public static final String PREF_DOWNLOAD_ALONG_TRACK_AREA = "downloadAlong.downloadAlongTrack.area";
+
+	public static final String PREF_DOWNLOAD_ALONG_OSM = "downloadAlong.download.osm";
+	public static final String PREF_DOWNLOAD_ALONG_GPS = "downloadAlong.download.gps";
 
 	public DownloadAlong(PluginInformation info) {
Index: /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlongAction.java
===================================================================
--- /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlongAction.java	(revision 29744)
+++ /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadAlongAction.java	(revision 29745)
@@ -16,8 +16,10 @@
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTaskList;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadTaskList;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
@@ -55,7 +57,7 @@
 		}
 
-		DownloadPanel panel = new DownloadPanel();
+		final DownloadPanel panel = new DownloadPanel();
 		
-        ButtonSpec[] options = new ButtonSpec[] {
+        final ButtonSpec[] options = new ButtonSpec[] {
                 new ButtonSpec(
                         tr("Download"),
@@ -71,4 +73,10 @@
                 )
         };
+        
+        panel.addChangeListener(new ChangeListener() {
+			@Override public void stateChanged(ChangeEvent e) {
+				options[0].setEnabled(panel.isDownloadOsmData() || panel.isDownloadGpxData());
+			}
+		});
 
 		if (0 != HelpAwareOptionPane.showOptionDialog(Main.parent, panel, tr("Download from OSM along this track"),
@@ -76,7 +84,6 @@
 			return;
 		}
-
-		Main.pref.putDouble(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_DISTANCE, panel.getDistance());
-		Main.pref.putDouble(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_AREA, panel.getArea());
+		
+		panel.rememberSettings();
 
 		/*
@@ -191,5 +198,5 @@
 		}
 		final PleaseWaitProgressMonitor monitor = new PleaseWaitProgressMonitor(tr("Download data"));
-		final Future<?> future = new DownloadOsmTaskList().download(false, toDownload, monitor);
+		final Future<?> future = new DownloadTaskList().download(false, toDownload, panel.isDownloadOsmData(), panel.isDownloadGpxData(), monitor);
 		Main.worker.submit(new Runnable() {
 			public void run() {
Index: /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadPanel.java
===================================================================
--- /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadPanel.java	(revision 29744)
+++ /applications/editors/josm/plugins/download_along/src/org/openstreetmap/josm/plugin/download_along/DownloadPanel.java	(revision 29745)
@@ -5,7 +5,9 @@
 import java.awt.GridBagLayout;
 
+import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.JPanel;
+import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.Main;
@@ -14,4 +16,9 @@
 public class DownloadPanel extends JPanel {
 
+	// Data types to download
+    private final JCheckBox cbDownloadOsmData;
+    private final JCheckBox cbDownloadGpxData;
+
+    // Legacy list of values
 	private static final Integer dist[] = { 5000, 500, 50 };
 	private static final Integer area[] = { 20, 10, 5, 1 };
@@ -20,6 +27,7 @@
 	private final JList maxRect;
 	
+	// Get value from preferences, taking into account legacy plugin stored only index from list of values instead of real value
 	private static final double getPreferenceValue(String prefKey, Integer array[]) {
-		int legacyIndex = Main.pref.getInteger(prefKey, -1);
+		int legacyIndex = Main.pref.getInteger(prefKey, array[0]);
 		return (0 <= legacyIndex && legacyIndex < array.length)
 				? array[legacyIndex] 
@@ -27,7 +35,17 @@
 	}
 	
+	/**
+	 * Constructs a new {@code DownloadPanel}.
+	 */
 	public DownloadPanel() {
 		super(new GridBagLayout());
 
+		cbDownloadOsmData = new JCheckBox(tr("OpenStreetMap data"), Main.pref.getBoolean(DownloadAlong.PREF_DOWNLOAD_ALONG_OSM, true));
+        cbDownloadOsmData.setToolTipText(tr("Select to download OSM data."));
+        add(cbDownloadOsmData,  GBC.std().insets(1,5,1,5));
+        cbDownloadGpxData = new JCheckBox(tr("Raw GPS data"), Main.pref.getBoolean(DownloadAlong.PREF_DOWNLOAD_ALONG_GPS, false));
+        cbDownloadGpxData.setToolTipText(tr("Select to download GPS traces."));
+        add(cbDownloadGpxData,  GBC.eol().insets(5,5,1,5));
+        
 		add(new JLabel(tr("Download everything within:")), GBC.eol());
 		String s[] = new String[dist.length];
@@ -38,6 +56,6 @@
 		
 		double distanceValue = getPreferenceValue(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_DISTANCE, dist);
-		int distanceLegacyIndex = Main.pref.getInteger(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_DISTANCE, -1);
-		if (distanceLegacyIndex == -1) {
+		int distanceLegacyIndex = Main.pref.getInteger(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_DISTANCE, dist[0]);
+		if (distanceLegacyIndex == dist[0]) {
 			for (int i = 0; i < dist.length; i++) {
 				if (dist[i] == (int)distanceValue) {
@@ -59,6 +77,6 @@
 
 		double areaValue = getPreferenceValue(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_AREA, area);
-		int areaLegacyIndex = Main.pref.getInteger(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_AREA, -1);
-		if (areaLegacyIndex == -1) {
+		int areaLegacyIndex = Main.pref.getInteger(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_AREA, area[0]);
+		if (areaLegacyIndex == area[0]) {
 			for (int i = 0; i < area.length; i++) {
 				if (area[i] == (int)areaValue) {
@@ -73,10 +91,55 @@
 	}
 	
+	/**
+	 * Gets the maximum distance in meters
+	 * @return The maximum distance, in meters
+	 */
 	public final double getDistance() {
 		return dist[buffer.getSelectedIndex()];
 	}
 
+	/**
+	 * Gets the maximum area in squared kilometers
+	 * @return The maximum distance, in squared kilometers
+	 */
 	public final double getArea() {
 		return area[maxRect.getSelectedIndex()];
 	}
+	
+    /**
+     * Replies true if the user selected to download OSM data
+     *
+     * @return true if the user selected to download OSM data
+     */
+    public boolean isDownloadOsmData() {
+        return cbDownloadOsmData.isSelected();
+    }
+
+    /**
+     * Replies true if the user selected to download GPX data
+     *
+     * @return true if the user selected to download GPX data
+     */
+    public boolean isDownloadGpxData() {
+        return cbDownloadGpxData.isSelected();
+    }
+	
+    /**
+     * Remembers the current settings in the download panel
+     */
+    public final void rememberSettings() {
+		Main.pref.putDouble(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_DISTANCE, getDistance());
+		Main.pref.putDouble(DownloadAlong.PREF_DOWNLOAD_ALONG_TRACK_AREA, getArea());
+		Main.pref.put(DownloadAlong.PREF_DOWNLOAD_ALONG_OSM, isDownloadOsmData());
+		Main.pref.put(DownloadAlong.PREF_DOWNLOAD_ALONG_GPS, isDownloadGpxData());
+    }
+    
+    /**
+     * Adds a change listener to comboboxes
+     * @param listener The listener that will be notified of each combobox change
+     */
+    public final void addChangeListener(ChangeListener listener) {
+    	cbDownloadGpxData.addChangeListener(listener);
+    	cbDownloadOsmData.addChangeListener(listener);
+    }
 }
