Index: src/org/openstreetmap/josm/plugins/directdownload/DirectDownload.java
===================================================================
--- src/org/openstreetmap/josm/plugins/directdownload/DirectDownload.java	(revision 34441)
+++ src/org/openstreetmap/josm/plugins/directdownload/DirectDownload.java	(working copy)
@@ -4,10 +4,16 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.ActionEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.data.gpx.GpxTrack;
+import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
+import org.openstreetmap.josm.data.gpx.GpxConstants;
+import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
@@ -16,6 +22,7 @@
 import org.openstreetmap.josm.plugins.PluginInformation;
 
 public class DirectDownload extends Plugin {
+
     private DownloadAction openaction;
 
     /**
@@ -41,27 +48,47 @@
             DownloadDataGui go = new DownloadDataGui();
             go.setVisible(true);
 
-            UserTrack track = go.getSelectedUserTrack();
+            ArrayList<UserTrack> tracks = go.getSelectedUserTracks();
 
-            if (!((go.getValue() == 1) && (track != null))) {
+            if (!((go.getValue() == 1) && (tracks != null))) {
                 return;
             }
 
-            final GpxData data = new GpxServerReader().loadGpx(Long.parseLong(track.id));
-            if (data == null) {
-                return;
-            }
-            final GpxLayer gpxLayer = new GpxLayer(data);
+            for (UserTrack track: tracks) {
 
-            if (data.hasRoutePoints() || data.hasTrackPoints()) {
-                MainApplication.getLayerManager().addLayer(gpxLayer);
-            }
+                GpxData data = new GpxServerReader().loadGpx(Long.parseLong(track.id));
+                if (data == null) {
+                    return;
+                }
 
-            if (Main.pref.getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
-                MarkerLayer ml = new MarkerLayer(data, tr("Markers from {0}", track.filename), null, gpxLayer);
-                if (ml.data.size() > 0) {
-                    MainApplication.getLayerManager().addLayer(ml);
+                for (GpxTrack trk : data.getTracks()) {
+                    HashMap<String, Object> attrib = new HashMap<String, Object>(trk.getAttributes());
+                    if (!trk.getAttributes().containsKey(GpxConstants.GPX_NAME)) {
+                        System.out.println(track.filename);
+                        attrib.put(GpxConstants.GPX_NAME, track.filename);
+                    }
+                    if (!trk.getAttributes().containsKey(GpxConstants.GPX_DESC)) {
+                        System.out.println(track.description);
+                        attrib.put(GpxConstants.GPX_DESC, track.description);
+                    }
+                    // replace the existing trace in the unmodifiable tracks
+                    data.removeTrack(trk);
+                    trk = new ImmutableGpxTrack(new ArrayList<GpxTrackSegment>(trk.getSegments()), attrib);
+                    data.addTrack(trk);
                 }
+
+                final GpxLayer gpxLayer = new GpxLayer(data, (track.filename + " " + track.description).trim());
+
+                if (data.hasRoutePoints() || data.hasTrackPoints()) {
+                    MainApplication.getLayerManager().addLayer(gpxLayer);
+                }
+
+                if (Main.pref.getBoolean("marker.makeautomarkers", true) && !data.waypoints.isEmpty()) {
+                    MarkerLayer ml = new MarkerLayer(data, tr("Markers from {0}", track.filename), null, gpxLayer);
+                    if (ml.data.size() > 0) {
+                        MainApplication.getLayerManager().addLayer(ml);
+                    }
+                }
             }
         }
     }
Index: src/org/openstreetmap/josm/plugins/directdownload/DownloadDataGui.java
===================================================================
--- src/org/openstreetmap/josm/plugins/directdownload/DownloadDataGui.java	(revision 34441)
+++ src/org/openstreetmap/josm/plugins/directdownload/DownloadDataGui.java	(working copy)
@@ -47,9 +47,9 @@
         columnmodel = new NamedResultTableColumnModel();
         tblSearchResults = new JTable(model, columnmodel);
         tblSearchResults.setSelectionModel(selectionModel);
-        tblSearchResults.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        tblSearchResults.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         JScrollPane scrollPane = new JScrollPane(tblSearchResults);
-        scrollPane.setPreferredSize(new Dimension(800,300));
+        scrollPane.setPreferredSize(new Dimension(800, 300));
         panel.add(scrollPane, BorderLayout.CENTER);
 
     model.setData(new UserTrackReader().getTrackList());
@@ -83,11 +83,15 @@
             if (data == null) {
                 this.data.clear();
             } else {
-                this.data  =new ArrayList<>(data);
+                this.data = new ArrayList<>(data);
             }
             fireTableDataChanged();
         }
 
+        public ArrayList<UserTrack> getDataArrayList() {
+            return data;
+        }
+
         @Override
         public boolean isCellEditable(int row, int column) {
             return false;
@@ -100,6 +104,16 @@
         }
     }
 
+    public ArrayList<UserTrack> getSelectedUserTracks() {
+        ArrayList<UserTrack> DataArray = model.getDataArrayList();
+        int[] selected = tblSearchResults.getSelectedRows();
+        ArrayList<UserTrack> selectedTracks = new ArrayList<>(selected.length);
+        for (int i = 0; i < selected.length; i++) {
+            selectedTracks.add(DataArray.get(selected[i]));
+        }
+        return selectedTracks;
+    }
+
     public UserTrack getSelectedUserTrack() {
         return model.getSelectedUserTrack();
     }
@@ -134,7 +148,7 @@
             addColumn(col);
 
             // column 3 - tags
-        /*
+
             col = new TableColumn(3);
             col.setHeaderValue(tr("Tags"));
             col.setResizable(true);
@@ -141,7 +155,7 @@
             col.setPreferredWidth(100);
             col.setCellRenderer(renderer);
             addColumn(col);
-        */
+
         }
 
         public NamedResultTableColumnModel() {
@@ -153,7 +167,7 @@
 
         public NamedResultCellRenderer() {
             setOpaque(true);
-            setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
+            setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
         }
 
         protected void reset() {
@@ -172,7 +186,7 @@
         }
 
         @Override
-		public Component getTableCellRendererComponent(JTable table, Object value,
+        public Component getTableCellRendererComponent(JTable table, Object value,
                 boolean isSelected, boolean hasFocus, int row, int column) {
 
             reset();
@@ -190,11 +204,11 @@
             case 2:
                 setText(sr.description);
                 break;
-        /*
+
             case 3:
                 setText(sr.tags);
                 break;
-        */
+
             }
             return this;
         }
Index: src/org/openstreetmap/josm/plugins/directdownload/UserTrackReader.java
===================================================================
--- src/org/openstreetmap/josm/plugins/directdownload/UserTrackReader.java	(revision 34441)
+++ src/org/openstreetmap/josm/plugins/directdownload/UserTrackReader.java	(working copy)
@@ -89,12 +89,12 @@
             if (qName.equals("description")) {
                 data.getFirst().description = cdata;
             }
-            /*
+
             else if (qName.equals("tag")) {
-            data.getFirst().tags = cdata;
-            cdata = new String();
+                data.getFirst().tags = cdata;
+                cdata = new String();
             }
-            */
+
         }
 
         public List<UserTrack> getResult() {
