Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31272)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31273)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -67,4 +68,7 @@
 
 	private MouseAdapter mouseAdapter;
+	
+    int highlightPointRadius = Main.pref.getInteger("mappaint.highlight.radius", 7);
+    private int highlightStep = Main.pref.getInteger("mappaint.highlight.step", 4);
 
 	public MapillaryLayer() {
@@ -248,4 +252,24 @@
 		}
 	}
+	
+	/**
+	 * Draws the highlight of the icon.
+	 * @param g
+	 * @param p
+	 * @param size
+	 */
+    private void drawPointHighlight(Graphics2D g, Point p, int size) {
+    	Color oldColor = g.getColor();
+        Color highlightColor = PaintColors.HIGHLIGHT.get();
+        Color highlightColorTransparent = new Color(highlightColor.getRed(), highlightColor.getGreen(), highlightColor.getBlue(), 100);
+        g.setColor(highlightColorTransparent);
+        int s = size + highlightPointRadius;
+        while(s >= size) {
+            int r = (int) Math.floor(s/2d);
+            g.fillRoundRect(p.x-r, p.y-r, s, s, r, r);
+            s -= highlightStep;
+        }
+        g.setColor(oldColor);
+    }
 
 	/**
@@ -260,11 +284,4 @@
 	private void draw(Graphics2D g, MapillaryAbstractImage image,
 			ImageIcon icon, Point p) {
-		draw(g, icon, p, image.getCa());
-		if (MapillaryData.getInstance().getHoveredImage() == image) {
-			draw(g, MapillaryPlugin.MAP_ICON_HOVER, p, image.getCa());
-		}
-	}
-
-	private void draw(Graphics2D g, ImageIcon icon, Point p, double ca) {
 		Image imagetemp = icon.getImage();
 		BufferedImage bi = (BufferedImage) imagetemp;
@@ -273,5 +290,5 @@
 
 		// Rotate the image
-		double rotationRequired = Math.toRadians(ca);
+		double rotationRequired = Math.toRadians(image.getCa());
 		double locationX = width / 2;
 		double locationY = height / 2;
@@ -283,5 +300,9 @@
 		g.drawImage(op.filter(bi, null), p.x - (width / 2), p.y - (height / 2),
 				Main.map.mapView);
-	}
+		if (MapillaryData.getInstance().getHoveredImage() == image) {
+			drawPointHighlight(g, p, 16);
+		}
+	}
+
 
 	@Override
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryMouseAdapter.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryMouseAdapter.java	(revision 31272)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryMouseAdapter.java	(revision 31273)
@@ -8,4 +8,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.plugins.mapillary.commands.CommandMoveImage;
 import org.openstreetmap.josm.plugins.mapillary.commands.CommandTurnImage;
@@ -27,4 +29,6 @@
 	private MapillaryRecord record;
 
+	private boolean nothingHighlighted;
+
 	public MapillaryMouseAdapter() {
 		mapillaryData = MapillaryData.getInstance();
@@ -37,7 +41,12 @@
 		if (e.getButton() != MouseEvent.BUTTON1)
 			return;
-		if (Main.map.mapView.getActiveLayer() != MapillaryLayer.getInstance())
-			return;
 		MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
+		if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer && closestTemp != null) {
+			this.lastClicked = this.closest;
+			MapillaryData.getInstance().setSelectedImage(closestTemp);
+			return;
+		} else if (Main.map.mapView.getActiveLayer() != MapillaryLayer
+				.getInstance())
+			return;
 		if (closestTemp instanceof MapillaryImage || closestTemp == null) {
 			MapillaryImage closest = (MapillaryImage) closestTemp;
@@ -180,12 +189,29 @@
 	public void mouseMoved(MouseEvent e) {
 		MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
+
+		if (closestTemp != null
+				&& Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+				&& Main.map.mapModeSelect.getValue("active") == Boolean.TRUE) {
+			Main.map.mapModeSelect.exitMode();
+		} else if (closestTemp == null
+				&& Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+				&& Main.map.mapModeSelect.getValue("active") == Boolean.FALSE) {
+			Main.map.mapModeSelect.enterMode();
+			nothingHighlighted = false;
+		} else if (Main.map.mapModeSelect.getValue("active") == Boolean.FALSE
+				&& !nothingHighlighted) {
+			for (OsmPrimitive primivitive : Main.map.mapView.getEditLayer().data
+					.allPrimitives()) {
+				primivitive.setHighlighted(false);
+			}
+			nothingHighlighted = true;
+		}
+
 		// TODO check if it is possible to do this while the OSM data layer is
 		// selected.
-		if (Main.map.mapView.getActiveLayer() instanceof MapillaryLayer
-				&& MapillaryData.getInstance().getHoveredImage() != closestTemp
+		if (MapillaryData.getInstance().getHoveredImage() != closestTemp
 				&& closestTemp != null) {
 			MapillaryData.getInstance().setHoveredImage(closestTemp);
 			MapillaryToggleDialog.getInstance().setImage(closestTemp);
-			MapillaryData.getInstance().dataUpdated();
 			MapillaryToggleDialog.getInstance().updateImage();
 		} else if (MapillaryData.getInstance().getHoveredImage() != closestTemp
@@ -194,7 +220,7 @@
 			MapillaryToggleDialog.getInstance().setImage(
 					MapillaryData.getInstance().getSelectedImage());
-			MapillaryData.getInstance().dataUpdated();
 			MapillaryToggleDialog.getInstance().updateImage();
 		}
+		MapillaryData.getInstance().dataUpdated();
 	}
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31272)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31273)
@@ -43,6 +43,4 @@
 	public static final ImageIcon MAP_SIGNAL = new ImageProvider("signal.png")
 			.get();
-	public static final ImageIcon MAP_ICON_HOVER = new ImageProvider(
-			"hover.png").get();
 	public static final int ICON_SIZE = 24;
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java	(revision 31272)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java	(revision 31273)
@@ -66,7 +66,3 @@
 		return false;
 	}
-	
-	public void cancelOutstandingTasks() {
-		// TODO
-	}
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31272)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31273)
@@ -70,5 +70,4 @@
 
 	private JPanel buttonsPanel;
-	private JPanel top;
 
 	public MapillaryImageDisplay mapillaryImageDisplay;
@@ -128,7 +127,5 @@
 			mode = NORMAL_MODE;
 		}
-		top = new JPanel();
-		top.setLayout(new BorderLayout());
-		top.add(titleBar, BorderLayout.NORTH);
+		
 		createLayout(mapillaryImageDisplay, list,
 				Main.pref.getBoolean("mapillary.reverse-buttons"));
@@ -204,4 +201,5 @@
 
 				mapillaryImageDisplay.hyperlink.setURL(mapillaryImage.getKey());
+				// Downloads the thumbnail.
 				this.mapillaryImageDisplay.setImage(null);
 				if (thumbnailCache != null)
@@ -211,4 +209,5 @@
 				thumbnailCache.submit(this, false);
 
+				// Downloads the full resolution image.
 				if (imageCache != null)
 					imageCache.cancelOutstandingTasks();
@@ -390,4 +389,5 @@
 	public void createLayout(Component data, List<SideButton> buttons,
 			boolean reverse) {
+		this.removeAll();
 		JPanel panel = new JPanel();
 		panel.setLayout(new BorderLayout());
@@ -407,4 +407,5 @@
 		} else
 			createLayout(panel, true, buttons);
+		this.add(titleBar, BorderLayout.NORTH);
 	}
 
