Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31266)
@@ -178,4 +178,5 @@
 	 */
 	public void setSelectedImage(MapillaryAbstractImage image, boolean zoom) {
+		MapillaryAbstractImage oldImage = selectedImage;
 		selectedImage = image;
 		multiSelectedImages.clear();
@@ -208,12 +209,12 @@
 			Main.map.mapView.repaint();
 		}
-		fireSelectedImageChanged();
-	}
-
-	private void fireSelectedImageChanged() {
+		fireSelectedImageChanged(oldImage, selectedImage);
+	}
+
+	private void fireSelectedImageChanged(MapillaryAbstractImage oldImage, MapillaryAbstractImage newImage) {
 		if (listeners.isEmpty())
 			return;
 		for (MapillaryDataListener lis : listeners)
-			lis.selectedImageChanged();
+			lis.selectedImageChanged(oldImage, newImage);
 	}
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDataListener.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDataListener.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDataListener.java	(revision 31266)
@@ -6,5 +6,5 @@
 	 * manually clicking on the icon.
 	 */
-	public void selectedImageChanged();
+	public void selectedImageChanged(MapillaryAbstractImage oldImage, MapillaryAbstractImage newImage);
 
 }
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 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31266)
@@ -109,5 +109,4 @@
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, true);
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.SIGNAL_MENU, true);
-		download();
 		Main.map.mapView.setActiveLayer(this);
 		Main.map.repaint();
@@ -127,5 +126,5 @@
 	 * Downloads all images of the area covered by the OSM data.
 	 */
-	protected void download() {
+	public void download() {
 		for (Bounds bounds : Main.map.mapView.getEditLayer().data
 				.getDataSourceBounds()) {
@@ -156,7 +155,8 @@
 				.setImage(null);
 		MapillaryLayer.INSTANCE = null;
+		MapillaryData.INSTANCE = null;
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, false);
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.SIGNAL_MENU, false);
-		MapillaryData.INSTANCE = null;
+		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.ZOOM_MENU, false);
 		Main.map.mapView.removeMouseListener(mouseAdapter);
 		Main.map.mapView.removeMouseMotionListener(mouseAdapter);
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 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31266)
@@ -51,4 +51,5 @@
 	private final MapillaryImportAction importAction;
 	private final MapillarySignalAction signalAction;
+	private final MapillaryZoomAction zoomAction;
 
 	public static JMenuItem DOWNLOAD_MENU;
@@ -56,4 +57,5 @@
 	public static JMenuItem IMPORT_MENU;
 	public static JMenuItem SIGNAL_MENU;
+	public static JMenuItem ZOOM_MENU;
 
 	public MapillaryPlugin(PluginInformation info) {
@@ -63,4 +65,5 @@
 		importAction = new MapillaryImportAction();
 		signalAction = new MapillarySignalAction();
+		zoomAction = new MapillaryZoomAction();
 
 		DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
@@ -72,4 +75,6 @@
 		SIGNAL_MENU = MainMenu.add(Main.main.menu.dataMenu, signalAction,
 				false);
+		ZOOM_MENU = MainMenu.add(Main.main.menu.viewMenu, zoomAction,
+				false);
 
 		EXPORT_MENU.setEnabled(false);
@@ -77,4 +82,5 @@
 		IMPORT_MENU.setEnabled(false);
 		SIGNAL_MENU.setEnabled(false);
+		ZOOM_MENU.setEnabled(false);
 
 		MapView.addEditLayerChangeListener(this);
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadAction.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadAction.java	(revision 31266)
@@ -31,4 +31,5 @@
 						KeyEvent.VK_M, Shortcut.ALT_CTRL_SHIFT), false,
 				"mapillaryDownload", false);
+		this.setEnabled(false);
 	}
 
@@ -36,14 +37,12 @@
 	public void actionPerformed(ActionEvent arg0) {
 		this.layer = null;
-		if (Main.map == null || Main.map.mapView == null
-				|| Main.map.mapView.getEditLayer() == null)
-			return;
 		for (Layer layer : Main.map.mapView.getAllLayers())
 			if (layer instanceof MapillaryLayer)
 				this.layer = (MapillaryLayer) layer;
 
-		if (this.layer == null)
+		if (this.layer == null) {
 			layer = new MapillaryLayer();
-		else {
+			layer.download();
+		} else {
 			if (Main.map.mapView.getActiveLayer() != layer)
 				Main.map.mapView.setActiveLayer(layer);
@@ -53,4 +52,3 @@
 		}
 	}
-
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31266)
@@ -39,4 +39,5 @@
 						"Export Mapillary", tr("Export Mapillary pictures"),
 						KeyEvent.VK_M, Shortcut.NONE), false, "mapillaryExport", false);
+		this.setEnabled(false);
 	}
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31266)
@@ -40,4 +40,5 @@
 						KeyEvent.VK_M, Shortcut.NONE), false,
 				"mapillaryImport", false);
+		this.setEnabled(false);
 	}
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillarySignalAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillarySignalAction.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillarySignalAction.java	(revision 31266)
@@ -23,7 +23,8 @@
 		super(tr("Switch signal mode"), new ImageProvider("icon24signal.png"),
 				tr("Switch signal mode"), Shortcut.registerShortcut(
-						"Mapillary signal", tr("Switch signal mode on/off"),
+						"Mapillary signal", tr("Switch Mapillary plugin's signal mode on/off"),
 						KeyEvent.VK_M, Shortcut.NONE), false,
 				"mapillarySignal", false);
+		this.setEnabled(false);
 	}
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java	(revision 31266)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java	(revision 31266)
@@ -0,0 +1,53 @@
+package org.openstreetmap.josm.plugins.mapillary.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Zooms to the currently selected image.
+ * 
+ * @author nokutu
+ *
+ */
+public class MapillaryZoomAction extends JosmAction implements
+		MapillaryDataListener {
+
+	public MapillaryZoomAction() {
+		super(tr("Zoom to selected image"), new ImageProvider("icon24.png"),
+				tr("Zoom to selected image"), Shortcut.registerShortcut(
+						"Zoom Mapillary",
+						tr("Zoom to the currently selected Mapillary image"),
+						KeyEvent.VK_M, Shortcut.NONE), false, "mapillaryZoom",
+				false);
+		MapillaryData.getInstance().addListener(this);
+		this.setEnabled(false);
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent arg0) {
+		if (MapillaryData.getInstance().getSelectedImage() == null)
+			throw new IllegalStateException();
+		Main.map.mapView.zoomTo(MapillaryData.getInstance().getSelectedImage()
+				.getLatLon());
+	}
+
+	@Override
+	public void selectedImageChanged(MapillaryAbstractImage oldImage,
+			MapillaryAbstractImage newImage) {
+		if (oldImage == null && newImage != null)
+			MapillaryPlugin.ZOOM_MENU.setEnabled(true);
+		else if (oldImage != null && newImage == null)
+			MapillaryPlugin.ZOOM_MENU.setEnabled(false);
+	}
+}
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java	(revision 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java	(revision 31266)
@@ -32,4 +32,5 @@
 
 	private static final int DRAG_BUTTON = 3;
+	private static final int OPTION_BUTTON = 2;
 	private static final int ZOOM_BUTTON = 1;
 
@@ -138,5 +139,21 @@
 			if (image == null)
 				return;
-			if (e.getButton() != DRAG_BUTTON)
+			if (e.getButton() == OPTION_BUTTON) {
+				if (!MapillaryImageDisplay.this.visibleRect
+						.equals(new Rectangle(0, 0, image.getWidth(null), image
+								.getHeight(null))))
+					// Zooms to 1:1
+					MapillaryImageDisplay.this.visibleRect = new Rectangle(0,
+							0, image.getWidth(null), image.getHeight(null));
+				else
+					// Zooms to best fit.
+					MapillaryImageDisplay.this.visibleRect = new Rectangle(
+							0,
+							(image.getHeight(null) - (image.getWidth(null) * getHeight())
+									/ getWidth()) / 2, image.getWidth(null),
+							(image.getWidth(null) * getHeight()) / getWidth());
+				MapillaryImageDisplay.this.repaint();
+				return;
+			} else if (e.getButton() != DRAG_BUTTON)
 				return;
 			// Calculate the translation to set the clicked point the center of
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 31265)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31266)
@@ -382,5 +382,5 @@
 
 	@Override
-	public void selectedImageChanged() {
+	public void selectedImageChanged(MapillaryAbstractImage oldImage, MapillaryAbstractImage newImage) {
 		setImage(MapillaryData.getInstance().getSelectedImage());
 		updateImage();
