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 31262)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31263)
@@ -25,6 +25,6 @@
 	private MapillaryAbstractImage selectedImage;
 	private final List<MapillaryAbstractImage> multiSelectedImages;
-	
-	private List<MapillaryDataListener> listeners= new ArrayList<>();
+
+	private List<MapillaryDataListener> listeners = new ArrayList<>();
 
 	public MapillaryData() {
@@ -65,9 +65,9 @@
 		dataUpdated();
 	}
-	
+
 	public void addListener(MapillaryDataListener lis) {
 		listeners.add(lis);
 	}
-	
+
 	public void removeListener(MapillaryDataListener lis) {
 		listeners.remove(lis);
@@ -137,5 +137,5 @@
 			if (((MapillaryImage) getSelectedImage()).getSequence() == null)
 				return;
-			setSelectedImage(((MapillaryImage) getSelectedImage()).next());
+			setSelectedImage(((MapillaryImage) getSelectedImage()).next(), true);
 		}
 	}
@@ -151,5 +151,6 @@
 			if (((MapillaryImage) getSelectedImage()).getSequence() == null)
 				throw new IllegalStateException();
-			setSelectedImage(((MapillaryImage) getSelectedImage()).previous());
+			setSelectedImage(((MapillaryImage) getSelectedImage()).previous(),
+					true);
 		}
 	}
@@ -164,4 +165,17 @@
 	 */
 	public void setSelectedImage(MapillaryAbstractImage image) {
+		setSelectedImage(image, false);
+	}
+
+	/**
+	 * Selects a new image and then starts a new MapillaryImageDownloadThread
+	 * thread in order to download its surrounding thumbnails. If the user does
+	 * ctrl+click, this isn't triggered. You can choose wheter to center the
+	 * view on the new image or not.
+	 * 
+	 * @param image
+	 * @param zoom
+	 */
+	public void setSelectedImage(MapillaryAbstractImage image, boolean zoom) {
 		selectedImage = image;
 		multiSelectedImages.clear();
@@ -188,4 +202,7 @@
 			}
 		}
+		if (zoom)
+			Main.map.mapView.zoomTo(MapillaryData.getInstance()
+					.getSelectedImage().getLatLon());
 		if (Main.map != null) {
 			Main.map.mapView.repaint();
@@ -193,5 +210,5 @@
 		fireSelectedImageChanged();
 	}
-	
+
 	private void fireSelectedImageChanged() {
 		if (listeners.isEmpty())
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 31262)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDataListener.java	(revision 31263)
@@ -2,6 +2,9 @@
 
 public interface MapillaryDataListener {
-	
+	/**
+	 * Fired when the selected image is changed by something different from
+	 * manually clicking on the icon.
+	 */
 	public void selectedImageChanged();
-	
+
 }
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 31262)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillarySignalAction.java	(revision 31263)
@@ -11,4 +11,11 @@
 import org.openstreetmap.josm.tools.Shortcut;
 
+/**
+ * Switches the window mode from normal to signal and viceversa.
+ * 
+ * @author nokutu
+ * @see MapillaryToggleDialog
+ *
+ */
 public class MapillarySignalAction extends JosmAction {
 
@@ -20,4 +27,5 @@
 				"mapillarySignal", false);
 	}
+
 	@Override
 	public void actionPerformed(ActionEvent e) {
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 31262)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31263)
@@ -65,5 +65,5 @@
 
 	public final static int NORMAL_MODE = 0;
-	public final static int SIGNAL_MODE = 0;
+	public final static int SIGNAL_MODE = 1;
 
 	private JPanel buttonsPanel;
@@ -112,4 +112,7 @@
 	}
 
+	/**
+	 * Switches from one mode to the other one.
+	 */
 	public void switchMode() {
 		this.removeAll();
@@ -122,5 +125,4 @@
 			mode = NORMAL_MODE;
 		}
-		this.setLayout(new BorderLayout());
 		top = new JPanel();
 		top.setLayout(new BorderLayout());
@@ -128,4 +130,5 @@
 		createLayout(mapillaryImageDisplay, list,
 				Main.pref.getBoolean("mapillary.reverse-buttons"));
+		updateImage();
 	}
 
@@ -232,9 +235,4 @@
 	}
 
-	private void centerAtSelected() {
-		Main.map.mapView.zoomTo(MapillaryData.getInstance().getSelectedImage()
-				.getLatLon());
-	}
-
 	/**
 	 * Action class form the next image button.
@@ -254,6 +252,4 @@
 			if (MapillaryToggleDialog.getInstance().getImage() != null) {
 				MapillaryData.getInstance().selectNext();
-				if (MapillaryData.getInstance().getSelectedImage() != null)
-					centerAtSelected();
 			}
 		}
@@ -277,6 +273,4 @@
 			if (MapillaryToggleDialog.getInstance().getImage() != null) {
 				MapillaryData.getInstance().selectPrevious();
-				if (MapillaryData.getInstance().getSelectedImage() != null)
-					centerAtSelected();
 			}
 		}
@@ -294,10 +288,6 @@
 		public void actionPerformed(ActionEvent e) {
 			if (MapillaryToggleDialog.getInstance().getImage() != null) {
-				MapillaryData.getInstance()
-						.setSelectedImage(MapillaryLayer.RED);
-				MapillaryToggleDialog.getInstance()
-						.setImage(MapillaryLayer.RED);
-				MapillaryToggleDialog.getInstance().updateImage();
-				centerAtSelected();
+				MapillaryData.getInstance().setSelectedImage(
+						MapillaryLayer.RED, true);
 			}
 		}
@@ -316,9 +306,5 @@
 			if (MapillaryToggleDialog.getInstance().getImage() != null) {
 				MapillaryData.getInstance().setSelectedImage(
-						MapillaryLayer.BLUE);
-				MapillaryToggleDialog.getInstance().setImage(
-						MapillaryLayer.BLUE);
-				MapillaryToggleDialog.getInstance().updateImage();
-				centerAtSelected();
+						MapillaryLayer.BLUE, true);
 			}
 		}
@@ -411,9 +397,9 @@
 					if (img instanceof MapillaryImage)
 						if (!((MapillaryImage) img).getSignals().isEmpty()) {
-							MapillaryData.getInstance().setSelectedImage(img);
+							MapillaryData.getInstance().setSelectedImage(img,
+									true);
 							return;
 						}
 				}
-				centerAtSelected();
 			}
 		}
@@ -439,9 +425,9 @@
 					if (img instanceof MapillaryImage)
 						if (!((MapillaryImage) img).getSignals().isEmpty()) {
-							MapillaryData.getInstance().setSelectedImage(img);
+							MapillaryData.getInstance().setSelectedImage(img,
+									true);
 							return;
 						}
 				}
-				centerAtSelected();
 			}
 		}
