Index: /applications/editors/josm/plugins/infomode/build.xml
===================================================================
--- /applications/editors/josm/plugins/infomode/build.xml	(revision 26502)
+++ /applications/editors/josm/plugins/infomode/build.xml	(revision 26503)
@@ -30,5 +30,5 @@
 <project name="InfoMode" default="dist" basedir=".">
     <!-- enter the SVN commit message -->
-    <property name="commit.message" value="InfoMode : new icon, keys for exit mode"/>
+    <property name="commit.message" value="InfoMode : scan all layers, URL bug fixed"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
     <property name="plugin.main.version" value="4201"/>
Index: /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoMode.java
===================================================================
--- /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoMode.java	(revision 26502)
+++ /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoMode.java	(revision 26503)
@@ -21,5 +21,4 @@
 import java.awt.Cursor;
 import java.awt.Graphics2D;
-import java.awt.Shape;
 import java.awt.Stroke;
 import java.awt.Toolkit;
@@ -30,4 +29,5 @@
 import java.util.HashSet;
 import java.util.Set;
+import javax.swing.JOptionPane;
 import javax.swing.Popup;
 import javax.swing.PopupFactory;
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.data.gpx.GpxTrack;
 import org.openstreetmap.josm.data.gpx.GpxTrackSegment;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
@@ -73,10 +74,18 @@
         if (!isEnabled()) return;
         super.enterMode();
-        
         mv = Main.map.mapView;
         Main.map.mapView.addMouseListener(this);
         Main.map.mapView.addMouseMotionListener(this);
         Main.map.mapView.addTemporaryLayer(this);
-
+        /*if (!(Main.main.getActiveLayer() instanceof GpxLayer)) {
+            boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
+                    "scan_all_layers", Main.parent,
+                    tr("Please select GPX layer to view only its trackpoint info. Do you want to scan all GPX layers?"),
+                    tr("Select layer to scan"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, JOptionPane.YES_OPTION );
+                 if(!answer) return;
+        }*/
+
+        Main.map.statusLine.setHelpText(tr("Move the mouse to show trackpoint info for current layer. Hold shift to highlight tracks"));
+        Main.map.statusLine.repaint();
 
         try {
@@ -115,8 +124,123 @@
     @Override
     public void paint(Graphics2D g, MapView mv, Bounds bbox) {
-        
+        if (pos==null) return;
+        Layer curL= Main.main.getActiveLayer();
+        if (curL instanceof GpxLayer) showLayerInfo(g,curL,mv); else {       
+            for (Layer l:mv.getAllLayers()) {
+                if (l instanceof GpxLayer) {
+                    if (showLayerInfo(g,l,mv)) return;
+                }
+            }
+        }
+    }
+
+    @Override
+    public void eventDispatched(AWTEvent event) {
+        updateKeyModifiers((InputEvent) event);
+        if (event.getID() == KeyEvent.KEY_PRESSED) {
+            doKeyEvent((KeyEvent) event);
+        }
+//        updateStatusLine();
+        repaint();
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+        if (!isEnabled()) return;
+        if (e.getButton() != MouseEvent.BUTTON1) return;
+        //setStatusLine(tr("Please move the mouse to draw new way"));
+        repaint();
+
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e) {
+        if (!isEnabled()) return;
+        if (e.getButton() != MouseEvent.BUTTON1) return;
+        if (oldPopup!=null) {
+            oldPopup.hide();
+            oldPopup=null;        wpOld=null;
+        }        
+        repaint();
+    }
+
+    @Override
+    public void mouseDragged(MouseEvent e) {
+        if (oldPopup!=null) {
+            oldPopup.hide();
+            oldPopup=null;        wpOld=null;
+        }
+    }
+
+    @Override
+    public void mouseMoved(MouseEvent e) {
+        if (!isEnabled()) return;
+        pos = mv.getEastNorth(e.getX(), e.getY());
+        repaint();
+    }
+
+    private void doKeyEvent(KeyEvent e) {
+        ///  System.out.println(e);
+        if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
+            filterTracks();
+            repaint();
+        }
+        if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH ||
+                e.getKeyCode() == KeyEvent.VK_ENTER ||
+                e.getKeyCode() == KeyEvent.VK_ESCAPE) {
+            Main.map.selectSelectTool(false);
+        }
+    }
+    
+
+    /**
+     * Updates shift and ctrl key states
+     */
+    private void updateKeyModifiers(InputEvent e) {
+        oldCtrl = ctrl;
+        oldShift = shift;
+        ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
+        shift = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
+    }
+
+    @Override
+    protected void updateStatusLine() {
+        Main.map.statusLine.setHelpText(statusText);
+        Main.map.statusLine.repaint();
+    }
+// </editor-fold>
+
+
+
+    private void repaint() {
+        if (Main.map!=null) Main.map.mapView.repaint();
+    }
+    private void setStatusLine(String tr) {
+        statusText=tr;
+        updateStatusLine();
+    }
+
+    private synchronized void filterTracks() {
         Layer l = Main.main.getActiveLayer();
         
         if (l instanceof GpxLayer && pos!=null) {
+            GpxLayer gpxL = (GpxLayer )l;
+            Set<GpxTrack> toRemove = new HashSet<GpxTrack>();
+            for (GpxTrack track : gpxL.data.tracks) {
+                boolean f=true;
+                sg: for (GpxTrackSegment seg : track.getSegments()) {
+                    for (WayPoint S : seg.getWayPoints()) {
+                        if (S.time!=0) {f=false; break sg;}
+                    }
+                }
+                if (f) toRemove.add(track);
+            }
+            gpxL.data.tracks.removeAll(toRemove);
+                                
+
+        }
+    }
+
+    private boolean showLayerInfo(Graphics2D g, Layer l, MapView mv) {
             GpxLayer gpxL = (GpxLayer )l;
             
@@ -179,114 +303,7 @@
                     oldPopup=pp;
                 }
+                return true;
             }
-            
-        }
-    }
-
-    @Override
-    public void eventDispatched(AWTEvent event) {
-        updateKeyModifiers((InputEvent) event);
-        if (event.getID() == KeyEvent.KEY_PRESSED) {
-            doKeyEvent((KeyEvent) event);
-        }
-//        updateStatusLine();
-        repaint();
-    }
-
-    @Override
-    public void mousePressed(MouseEvent e) {
-        if (!isEnabled()) return;
-        if (e.getButton() != MouseEvent.BUTTON1) return;
-        //setStatusLine(tr("Please move the mouse to draw new way"));
-        repaint();
-
-    }
-
-    @Override
-    public void mouseReleased(MouseEvent e) {
-        if (!isEnabled()) return;
-        if (e.getButton() != MouseEvent.BUTTON1) return;
-        if (oldPopup!=null) {
-            oldPopup.hide();
-            oldPopup=null;        wpOld=null;
-        }        
-        repaint();
-    }
-
-    @Override
-    public void mouseDragged(MouseEvent e) {
-        if (oldPopup!=null) {
-            oldPopup.hide();
-            oldPopup=null;        wpOld=null;
-        }
-    }
-
-    @Override
-    public void mouseMoved(MouseEvent e) {
-        if (!isEnabled()) return;
-        pos = mv.getEastNorth(e.getX(), e.getY());
-        repaint();
-    }
-
-    private void doKeyEvent(KeyEvent e) {
-        ///  System.out.println(e);
-        if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
-            filterTracks();
-            repaint();
-        }
-        if (e.getKeyCode() == KeyEvent.VK_BACK_SLASH ||
-                e.getKeyCode() == KeyEvent.VK_ENTER ||
-                e.getKeyCode() == KeyEvent.VK_ESCAPE) {
-            Main.map.selectSelectTool(false);
-        }
-    }
-    
-
-    /**
-     * Updates shift and ctrl key states
-     */
-    private void updateKeyModifiers(InputEvent e) {
-        oldCtrl = ctrl;
-        oldShift = shift;
-        ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
-        shift = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
-    }
-
-    @Override
-    protected void updateStatusLine() {
-        Main.map.statusLine.setHelpText(statusText);
-        Main.map.statusLine.repaint();
-    }
-// </editor-fold>
-
-
-
-    private void repaint() {
-        if (Main.map!=null) Main.map.mapView.repaint();
-    }
-    private void setStatusLine(String tr) {
-        statusText=tr;
-        updateStatusLine();
-    }
-
-    private synchronized void filterTracks() {
-        Layer l = Main.main.getActiveLayer();
-        
-        if (l instanceof GpxLayer && pos!=null) {
-            GpxLayer gpxL = (GpxLayer )l;
-            Set<GpxTrack> toRemove = new HashSet<GpxTrack>();
-            for (GpxTrack track : gpxL.data.tracks) {
-                boolean f=true;
-                sg: for (GpxTrackSegment seg : track.getSegments()) {
-                    for (WayPoint S : seg.getWayPoints()) {
-                        if (S.time!=0) {f=false; break sg;}
-                    }
-                }
-                if (f) toRemove.add(track);
-            }
-            gpxL.data.tracks.removeAll(toRemove);
-                                
-
-        }
+            return false;
     }
 }
Index: /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoModePlugin.java
===================================================================
--- /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoModePlugin.java	(revision 26502)
+++ /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoModePlugin.java	(revision 26503)
@@ -5,4 +5,5 @@
  * Licence: GPL v2 or later
  * Author:  Alexei Kasatkin, 2011
+ * Ideas by siberiano, Ilis, chnav, Polarbear-j, 
  */
 
Index: /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoPanel.java
===================================================================
--- /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoPanel.java	(revision 26502)
+++ /applications/editors/josm/plugins/infomode/src/org/openstreetmap/josm/plugins/infomode/InfoPanel.java	(revision 26503)
@@ -22,5 +22,4 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.OpenBrowser;
-import org.openstreetmap.josm.tools.UrlLabel;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -118,5 +117,5 @@
         if (trk.getAttributes().containsKey("url")) {
            label6.setText(trk.getAttributes().get("url").toString());
-        }
+        } else label6.setText(null);
     }
     
