Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 1685)
@@ -482,5 +482,5 @@
             handleGoneForKnownPrimitive(m.group(1), m.group(2));
         } else {
-            logger.warning(tr("Error header \"{0}\" doesn't match expected pattern \"{1}\"",e.getErrorHeader(), pattern));
+            logger.warning(tr("Error header \"{0}\" does not match expected pattern \"{1}\"",e.getErrorHeader(), pattern));
             handleGoneForUnknownPrimitive(e);
         }
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 1685)
@@ -44,4 +44,5 @@
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker;
+import org.openstreetmap.josm.tools.AudioPlayer;
 
 /**
@@ -175,4 +176,5 @@
                 l.activeLayerChange(old, layer);
         }
+        AudioPlayer.reset();
         repaint();
     }
@@ -210,4 +212,5 @@
         }
         layer.destroy();
+        AudioPlayer.reset();
     }
 
@@ -242,4 +245,5 @@
         else
             layers.add(pos, layer);
+        AudioPlayer.reset();
     }
 
@@ -376,4 +380,5 @@
             x.setEnabled(((MapMode)x.getAction()).layerIsSupported(layer));
         }
+        AudioPlayer.reset();
         repaint();
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1685)
@@ -203,5 +203,4 @@
                         Main.pref.put("markers.lastaudiodirectory", fc.getCurrentDirectory().getAbsolutePath());
 
-                    MarkerLayer ml = new MarkerLayer(new GpxData(), tr("Audio markers from {0}", name), getAssociatedFile(), me);
                     File sel[] = fc.getSelectedFiles();
                     if(sel != null) {
@@ -214,4 +213,22 @@
                             });
                         }
+                    }
+
+                    String names = null;
+                    for (int i = 0; i < sel.length; i++) {
+                        if(names == null)
+                            names = " (";
+                        else
+                            names += ", ";
+                        names += sel[i].getName();
+                    }
+                    if(names != null)
+                        names += ")";
+                    else
+                        names = "";
+                    MarkerLayer ml = new MarkerLayer(new GpxData(), tr("Audio markers from {0}", name) + names,
+                    getAssociatedFile(), me);
+                    if(sel != null)
+                    {
                         double firstStartTime = sel[0].lastModified()/1000.0 /* ms -> seconds */ - AudioUtil.getCalibratedDuration(sel[0]);
                         for (int i = 0; i < sel.length; i++) {
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java	(revision 1685)
@@ -19,5 +19,5 @@
     private URL audioUrl;
     private static AudioMarker recentlyPlayedMarker = null;
-    public  double syncOffset;
+    public double syncOffset;
     public boolean timeFromAudio = false; // as opposed to from the GPX track
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 1685)
@@ -345,64 +345,61 @@
 
     public static void playAudio() {
+        playAdjacentMarker(null, true);
+    }
+
+    public static void playNextMarker() {
+        playAdjacentMarker(AudioMarker.recentlyPlayedMarker(), true);
+    }
+
+    public static void playPreviousMarker() {
+        playAdjacentMarker(AudioMarker.recentlyPlayedMarker(), false);
+    }
+
+    private static Marker getAdjacentMarker(Marker startMarker, boolean next, Layer layer) {
+        Marker previousMarker = null;
+        boolean nextTime = false;
+        if (layer.getClass() == MarkerLayer.class) {
+            MarkerLayer markerLayer = (MarkerLayer) layer;
+            for (Marker marker : markerLayer.data) {
+                if (marker == startMarker) {
+                    if (next)
+                        nextTime = true;
+                    else {
+                        if (previousMarker == null)
+                            previousMarker = startMarker; // if no previous one, play the first one again
+                        return previousMarker;
+                    }
+                }
+                else if (marker.getClass() == AudioMarker.class)
+                {
+                    if(nextTime || startMarker == null)
+                        return marker;
+                    previousMarker = marker;
+                }
+            }
+            if (nextTime) // there was no next marker in that layer, so play the last one again
+                return startMarker;
+        }
+        return null;
+    }
+
+    private static void playAdjacentMarker(Marker startMarker, boolean next) {
+        Marker m = null;
         if (Main.map == null || Main.map.mapView == null)
             return;
-        for (Layer layer : Main.map.mapView.getAllLayers()) {
-            if (layer.getClass() == MarkerLayer.class) {
-                MarkerLayer markerLayer = (MarkerLayer) layer;
-                for (Marker marker : markerLayer.data) {
-                    if (marker.getClass() == AudioMarker.class) {
-                        ((AudioMarker)marker).play();
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    public static void playNextMarker() {
-        playAdjacentMarker(true);
-    }
-
-    public static void playPreviousMarker() {
-        playAdjacentMarker(false);
-    }
-
-    private static void playAdjacentMarker(boolean next) {
-        Marker startMarker = AudioMarker.recentlyPlayedMarker();
-        if (startMarker == null) {
-            // message?
-            return;
-        }
-        Marker previousMarker = null;
-        boolean nextTime = false;
-        if (Main.map == null || Main.map.mapView == null)
-            return;
-        for (Layer layer : Main.map.mapView.getAllLayers()) {
-            if (layer.getClass() == MarkerLayer.class) {
-                MarkerLayer markerLayer = (MarkerLayer) layer;
-                for (Marker marker : markerLayer.data) {
-                    if (marker == startMarker) {
-                        if (next) {
-                            nextTime = true;
-                        } else {
-                            if (previousMarker == null)
-                                previousMarker = startMarker; // if no previous one, play the first one again
-                            ((AudioMarker)previousMarker).play();
-                            break;
-                        }
-                    } else if (nextTime && marker.getClass() == AudioMarker.class) {
-                        ((AudioMarker)marker).play();
-                        return;
-                    }
-                    if (marker.getClass() == AudioMarker.class)
-                        previousMarker = marker;
-                }
-                if (nextTime) {
-                    // there was no next marker in that layer, so play the last one again
-                    ((AudioMarker)startMarker).play();
-                    return;
-                }
-            }
-        }
+        Layer l = Main.map.mapView.getActiveLayer();
+        if(l != null)
+            m = getAdjacentMarker(startMarker, next, l);
+        if(m == null)
+        {
+            for (Layer layer : Main.map.mapView.getAllLayers())
+            {
+                m = getAdjacentMarker(startMarker, next, layer);
+                if(m != null)
+                    break;
+            }
+        }
+        if(m != null)
+            ((AudioMarker)m).play();
     }
 
Index: trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 1685)
@@ -190,4 +190,14 @@
         } catch (Exception ex) {
             return null;
+        }
+    }
+
+    public static void reset() {
+        if(audioPlayer != null)
+        {
+            try {
+                pause();
+            } catch(Exception e) {}
+            audioPlayer.playingUrl = null;
         }
     }
Index: trunk/src/org/openstreetmap/josm/tools/AudioUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/AudioUtil.java	(revision 1684)
+++ trunk/src/org/openstreetmap/josm/tools/AudioUtil.java	(revision 1685)
@@ -12,5 +12,4 @@
 import org.openstreetmap.josm.Main;
 
-
 /**
  * Returns calibrated length of recording in seconds.
@@ -20,9 +19,8 @@
  */
 public class AudioUtil {
-
     static public double getCalibratedDuration(File wavFile) {
         try {
             AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(
-                    new URL("file:".concat(wavFile.getAbsolutePath())));
+                new URL("file:".concat(wavFile.getAbsolutePath())));
             AudioFormat audioFormat = audioInputStream.getFormat();
             long filesize = wavFile.length();
