Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDownloadAction.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDownloadAction.java	(revision 31170)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDownloadAction.java	(revision 31173)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -24,8 +25,8 @@
 
 	public MapillaryDownloadAction() {
-		super(tr("Mapillary"), "icon16.png",
+		super(tr("Mapillary"), new ImageProvider("icon24.png"),
 				tr("Create Mapillary layer."), Shortcut.registerShortcut(
 						"menu:Mapillary", tr("Menu: {0}", tr("Mapillary")),
-						KeyEvent.VK_M, Shortcut.ALT_CTRL_SHIFT), false);
+						KeyEvent.VK_M, Shortcut.ALT_CTRL_SHIFT), false, "mapillaryDownload", false);
 	}
 
@@ -51,5 +52,4 @@
 			layer = new MapillaryLayer();
 		else {
-			this.layer.download();
 			if (Main.map.mapView.getActiveLayer() != layer)
 				Main.map.mapView.setActiveLayer(layer);
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryExportAction.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryExportAction.java	(revision 31170)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryExportAction.java	(revision 31173)
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryExportManager;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -25,6 +26,6 @@
 
 	public MapillaryExportAction() {
-		super(tr("Export images"), "icon24.png", tr("Export images."), null,
-				false);
+		super(tr("Export images"), new ImageProvider("icon24.png"),
+				tr("Export images."), null, false, "mapillaryExport", false);
 	}
 
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 31170)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31173)
@@ -30,7 +30,11 @@
 import java.awt.Color;
 import java.awt.Graphics2D;
+import java.awt.Image;
 import java.awt.Point;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.awt.geom.AffineTransform;
+import java.awt.image.AffineTransformOp;
+import java.awt.image.BufferedImage;
 import java.io.IOException;
 
@@ -46,4 +50,5 @@
 
 	public static Boolean INSTANCED = false;
+	public static MapillaryLayer INSTANCE;
 	public static CacheAccess<String, BufferedImageCacheEntry> CACHE;
 	public static MapillaryImage BLUE;
@@ -66,4 +71,5 @@
 	private void init() {
 		INSTANCED = true;
+		MapillaryLayer.INSTANCE = this;
 		try {
 			CACHE = JCSCacheManager.getCache("Mapillary");
@@ -89,4 +95,10 @@
 	}
 
+	public static MapillaryLayer getInstance() {
+		if (MapillaryLayer.INSTANCE == null)
+			MapillaryLayer.INSTANCE = new MapillaryLayer();
+		return MapillaryLayer.INSTANCE;
+	}
+
 	/**
 	 * Downloads all images of the area covered by the OSM data.
@@ -120,9 +132,11 @@
 				.setImage(null);
 		INSTANCED = false;
+		MapillaryLayer.INSTANCE = null;
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, false);
 		MapillaryData.deleteInstance();
 		Main.map.mapView.removeMouseListener(this);
 		MapView.removeEditLayerChangeListener(this);
-		Main.map.mapView.getEditLayer().data.removeDataSetListener(this);
+		if (Main.map.mapView.getEditLayer() != null)
+			Main.map.mapView.getEditLayer().data.removeDataSetListener(this);
 		super.destroy();
 	}
@@ -148,6 +162,6 @@
 		synchronized (this) {
 			// Draw colored lines
-			this.BLUE = null;
-			this.RED = null; 
+			MapillaryLayer.BLUE = null;
+			MapillaryLayer.RED = null;
 			MapillaryToggleDialog.getInstance().blueButton.setEnabled(false);
 			MapillaryToggleDialog.getInstance().redButton.setEnabled(false);
@@ -157,18 +171,20 @@
 						.getLatLon());
 				if (closestImages[0] != null) {
-					this.BLUE = closestImages[0];
+					MapillaryLayer.BLUE = closestImages[0];
 					g.setColor(Color.BLUE);
 					g.drawLine(mv.getPoint(closestImages[0].getLatLon()).x,
 							mv.getPoint(closestImages[0].getLatLon()).y,
 							selected.x, selected.y);
-					MapillaryToggleDialog.getInstance().blueButton.setEnabled(true);
+					MapillaryToggleDialog.getInstance().blueButton
+							.setEnabled(true);
 				}
 				if (closestImages[1] != null) {
-					this.RED = closestImages[1];
+					MapillaryLayer.RED = closestImages[1];
 					g.setColor(Color.RED);
 					g.drawLine(mv.getPoint(closestImages[1].getLatLon()).x,
 							mv.getPoint(closestImages[1].getLatLon()).y,
 							selected.x, selected.y);
-					MapillaryToggleDialog.getInstance().redButton.setEnabled(true);
+					MapillaryToggleDialog.getInstance().redButton
+							.setEnabled(true);
 				}
 			}
@@ -185,11 +201,22 @@
 				ImageIcon icon;
 				if (!mapillaryData.getMultiSelectedImages().contains(image))
-					icon = MapillaryPlugin.ICON16;
+					icon = MapillaryPlugin.MAP_ICON;
 				else
-					icon = MapillaryPlugin.ICON16SELECTED;
+					icon = MapillaryPlugin.MAP_ICON_SELECTED;
+				Image imagetemp = icon.getImage();
+				BufferedImage bi = (BufferedImage) imagetemp;
 				int width = icon.getIconWidth();
 				int height = icon.getIconHeight();
-				g.drawImage(icon.getImage(), p.x - (width / 2), p.y
-						- (height / 2), Main.map.mapView);
+				
+				// Rotate the image
+				double rotationRequired = Math.toRadians(image.getCa());
+				double locationX = width / 2;
+				double locationY = height / 2;
+				AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
+				AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
+				
+				g.drawImage(op.filter(bi, null), p.x - (width / 2), p.y - (height / 2),
+						Main.map.mapView);
+				
 			}
 		}
@@ -326,8 +353,28 @@
 	}
 
-	// DataSetListener
-
+	/**
+	 * When more data is downloaded, a delayed update is thrown, in order to
+	 * wait for the data bounds to be set.
+	 * 
+	 * @param event
+	 */
 	@Override
 	public void dataChanged(DataChangedEvent event) {
+		Main.worker.submit(new delayedDownload());
+	}
+
+	private class delayedDownload extends Thread {
+
+		@Override
+		public void run() {
+			try {
+				sleep(1000);
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			MapillaryLayer.getInstance().download();
+		}
+
 	}
 
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 31170)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31173)
@@ -19,9 +19,12 @@
 public class MapillaryPlugin extends Plugin {
 
-	public static final ImageIcon ICON = new ImageProvider("icon24.png").get();
+	public static final ImageIcon ICON24 = new ImageProvider("icon24.png")
+			.get();
 	public static final ImageIcon ICON16 = new ImageProvider("icon16.png")
 			.get();
-	public static final ImageIcon ICON16SELECTED = new ImageProvider(
-			"icon16selected.png").get();
+	public static final ImageIcon MAP_ICON = new ImageProvider("mapicon.png")
+			.get();
+	public static final ImageIcon MAP_ICON_SELECTED = new ImageProvider(
+			"mapiconselected.png").get();
 	public static final int ICON_SIZE = 24;
 
@@ -32,4 +35,6 @@
 	public static JMenuItem EXPORT_MENU;
 
+	public static String DIR;
+
 	public MapillaryPlugin(PluginInformation info) {
 		super(info);
@@ -37,9 +42,10 @@
 		exportAction = new MapillaryExportAction();
 
-		DOWNLOAD_MENU = MainMenu
-				.add(Main.main.menu.imageryMenu, downloadAction, false);
+		DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
+				downloadAction, false);
 		EXPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, exportAction,
 				false, 14);
 		EXPORT_MENU.setEnabled(false);
+		MapillaryPlugin.DIR = this.getPluginDir();
 
 	}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java	(revision 31170)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java	(revision 31173)
@@ -192,5 +192,5 @@
 	class redAction extends AbstractAction {
 		public redAction() {
-			putValue(NAME, "Red");
+			putValue(NAME, "Jump to red");
 			putValue(SHORT_DESCRIPTION,
 					tr("Shows the previous picture in the sequence"));
@@ -211,5 +211,5 @@
 	class blueAction extends AbstractAction {
 		public blueAction() {
-			putValue(NAME, "Blue");
+			putValue(NAME, "Jump to blue");
 			putValue(SHORT_DESCRIPTION,
 					tr("Shows the previous picture in the sequence"));
