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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31313)
@@ -6,6 +6,4 @@
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
 import org.openstreetmap.josm.plugins.mapillary.cache.MapillaryCache;
-import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryFilterDialog;
-import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryToggleDialog;
 
 import java.util.ArrayList;
@@ -131,6 +129,4 @@
 		if (!TEST_MODE)
 			Main.map.mapView.repaint();
-		MapillaryFilterDialog.getInstance().refresh();
-		MapillaryToggleDialog.getInstance().updateImage();
 	}
 
@@ -177,5 +173,5 @@
 					tempImage = tempImage.next();
 					if (tempImage.isVisible()) {
-						setSelectedImage(tempImage, true);
+						setSelectedImage(tempImage, Main.pref.getBoolean("mapillary.move-to-picture", true));
 						break;
 					}
@@ -202,5 +198,5 @@
 					tempImage = tempImage.previous();
 					if (tempImage.isVisible()) {
-						setSelectedImage(tempImage, true);
+                        setSelectedImage(tempImage, Main.pref.getBoolean("mapillary.move-to-picture", true));
 						break;
 					}
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31313)
@@ -108,5 +108,6 @@
 		}
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, true);
-		Main.map.mapView.setActiveLayer(this);
+		if (!MapillaryToggleDialog.getInstance().isShowing())
+		    MapillaryToggleDialog.getInstance().getButton().doClick();
 		createHatchTexture();
 		data.dataUpdated();
@@ -179,4 +180,5 @@
 		MapillaryToggleDialog.getInstance().mapillaryImageDisplay
 				.setImage(null);
+		MapillaryToggleDialog.getInstance().updateImage();
 		data.getImages().clear();
 		MapillaryLayer.INSTANCE = null;
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryMouseAdapter.java	(revision 31313)
@@ -22,223 +22,224 @@
  */
 public class MapillaryMouseAdapter extends MouseAdapter {
-	private Point start;
-	private int lastButton;
-	private MapillaryAbstractImage closest;
-	private MapillaryAbstractImage lastClicked;
-	private MapillaryData mapillaryData;
-	private MapillaryRecord record;
-
-	private boolean nothingHighlighted;
-	private boolean imageHighlighted = false;
-
-	public MapillaryMouseAdapter() {
-		mapillaryData = MapillaryData.getInstance();
-		record = MapillaryRecord.getInstance();
-	}
-
-	@Override
-	public void mousePressed(MouseEvent e) {
-		lastButton = e.getButton();
-		if (e.getButton() != MouseEvent.BUTTON1)
-			return;
-		MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
-		if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
-				&& closestTemp != null
-				&& Main.map.mapMode == Main.map.mapModeSelect) {
-			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;
-			// Doube click
-			if (e.getClickCount() == 2
-					&& mapillaryData.getSelectedImage() != null
-					&& closest != null) {
-				for (MapillaryAbstractImage img : closest.getSequence()
-						.getImages()) {
-					mapillaryData.addMultiSelectedImage(img);
-				}
-			}
-			this.start = e.getPoint();
-			this.lastClicked = this.closest;
-			this.closest = closest;
-			if (mapillaryData.getMultiSelectedImages().contains(closest))
-				return;
-			// ctrl+click
-			if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK)
-					&& closest != null)
-				mapillaryData.addMultiSelectedImage(closest);
-			// shift + click
-			else if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.SHIFT_MASK)
-					&& this.closest instanceof MapillaryImage
-					&& this.lastClicked instanceof MapillaryImage) {
-				if (this.closest != null
-						&& this.lastClicked != null
-						&& ((MapillaryImage) this.closest).getSequence() == ((MapillaryImage) this.lastClicked)
-								.getSequence()) {
-					int i = ((MapillaryImage) this.closest).getSequence()
-							.getImages().indexOf(this.closest);
-					int j = ((MapillaryImage) this.lastClicked).getSequence()
-							.getImages().indexOf(this.lastClicked);
-					if (i < j)
-						mapillaryData
-								.addMultiSelectedImage(new ArrayList<MapillaryAbstractImage>(
-										((MapillaryImage) this.closest)
-												.getSequence().getImages()
-												.subList(i, j + 1)));
-					else
-						mapillaryData
-								.addMultiSelectedImage(new ArrayList<MapillaryAbstractImage>(
-										((MapillaryImage) this.closest)
-												.getSequence().getImages()
-												.subList(j, i + 1)));
-				}
-				// click
-			} else
-				mapillaryData.setSelectedImage(closest);
-			// If you select an imported image
-		} else if (closestTemp instanceof MapillaryImportedImage) {
-			MapillaryImportedImage closest = (MapillaryImportedImage) closestTemp;
-			this.start = e.getPoint();
-			this.lastClicked = this.closest;
-			this.closest = closest;
-			if (mapillaryData.getMultiSelectedImages().contains(closest))
-				return;
-			if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK)
-					&& closest != null)
-				mapillaryData.addMultiSelectedImage(closest);
-			else
-				mapillaryData.setSelectedImage(closest);
-		}
-	}
-
-	private MapillaryAbstractImage getClosest(Point clickPoint) {
-		double snapDistance = 10;
-		double minDistance = Double.MAX_VALUE;
-		MapillaryAbstractImage closest = null;
-		for (MapillaryAbstractImage image : mapillaryData.getImages()) {
-			Point imagePoint = Main.map.mapView.getPoint(image.getLatLon());
-			imagePoint.setLocation(imagePoint.getX(), imagePoint.getY());
-			double dist = clickPoint.distanceSq(imagePoint);
-			if (minDistance > dist
-					&& clickPoint.distance(imagePoint) < snapDistance && image.isVisible()) {
-				minDistance = dist;
-				closest = image;
-			}
-		}
-		return closest;
-	}
-
-	@Override
-	public void mouseDragged(MouseEvent e) {
-		if (Main.map.mapView.getActiveLayer() != MapillaryLayer.getInstance())
-			return;
-
-		if (!Main.pref.getBoolean("mapillary.developer"))
-			for (MapillaryAbstractImage img : MapillaryData.getInstance()
-					.getMultiSelectedImages()) {
-				if (img instanceof MapillaryImage)
-					return;
-			}
-		if (MapillaryData.getInstance().getSelectedImage() != null) {
-			if (lastButton == MouseEvent.BUTTON1 && !e.isShiftDown()) {
-				LatLon to = Main.map.mapView.getLatLon(e.getX(), e.getY());
-				LatLon from = Main.map.mapView.getLatLon(start.getX(),
-						start.getY());
-				for (MapillaryAbstractImage img : MapillaryData.getInstance()
-						.getMultiSelectedImages()) {
-
-					img.move(to.getX() - from.getX(), to.getY() - from.getY());
-				}
-				Main.map.repaint();
-			} else if (lastButton == MouseEvent.BUTTON1 && e.isShiftDown()) {
-				this.closest.turn(Math.toDegrees(Math.atan2(
-						(e.getX() - start.x), -(e.getY() - start.y)))
-						- closest.getTempCa());
-				for (MapillaryAbstractImage img : MapillaryData.getInstance()
-						.getMultiSelectedImages()) {
-					img.turn(Math.toDegrees(Math.atan2((e.getX() - start.x),
-							-(e.getY() - start.y))) - closest.getTempCa());
-				}
-				Main.map.repaint();
-			}
-		}
-	}
-
-	@Override
-	public void mouseReleased(MouseEvent e) {
-		if (mapillaryData.getSelectedImage() == null)
-			return;
-		if (mapillaryData.getSelectedImage().getTempCa() != mapillaryData
-				.getSelectedImage().getCa()) {
-			double from = mapillaryData.getSelectedImage().getTempCa();
-			double to = mapillaryData.getSelectedImage().getCa();
-			record.addCommand(new CommandTurnImage(mapillaryData
-					.getMultiSelectedImages(), to - from));
-		} else if (mapillaryData.getSelectedImage().getTempLatLon() != mapillaryData
-				.getSelectedImage().getLatLon()) {
-			LatLon from = mapillaryData.getSelectedImage().getTempLatLon();
-			LatLon to = mapillaryData.getSelectedImage().getLatLon();
-			record.addCommand(new CommandMoveImage(mapillaryData
-					.getMultiSelectedImages(), to.getX() - from.getX(), to
-					.getY() - from.getY()));
-		}
-		for (MapillaryAbstractImage img : mapillaryData
-				.getMultiSelectedImages()) {
-			if (img != null)
-				img.stopMoving();
-		}
-	}
-
-	/**
-	 * Checks if the mouse is over pictures.
-	 */
-	@Override
-	public void mouseMoved(MouseEvent e) {
-		MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
-		if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
-				&& Main.map.mapMode != Main.map.mapModeSelect)
-			return;
-		if (closestTemp != null
-				&& Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
-				&& !imageHighlighted) {
-			Main.map.mapMode.putValue("active", Boolean.FALSE);
-			imageHighlighted = true;
-
-		} else if (closestTemp == null
-				&& Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
-				&& imageHighlighted && nothingHighlighted) {
-			nothingHighlighted = false;
-			Main.map.mapMode.putValue("active", Boolean.TRUE);
-
-		} else if (imageHighlighted && !nothingHighlighted
-				&& Main.map.mapView != null
-				&& Main.map.mapView.getEditLayer().data != null
-				&& Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
-
-			for (OsmPrimitive primivitive : Main.map.mapView.getEditLayer().data
-					.allPrimitives()) {
-				primivitive.setHighlighted(false);
-			}
-			imageHighlighted = false;
-			nothingHighlighted = true;
-		}
-
-		if (MapillaryData.getInstance().getHoveredImage() != closestTemp
-				&& closestTemp != null) {
-			MapillaryData.getInstance().setHoveredImage(closestTemp);
-			MapillaryToggleDialog.getInstance().setImage(closestTemp);
-			MapillaryToggleDialog.getInstance().updateImage();
-		} else if (MapillaryData.getInstance().getHoveredImage() != closestTemp
-				&& closestTemp == null) {
-			MapillaryData.getInstance().setHoveredImage(null);
-			MapillaryToggleDialog.getInstance().setImage(
-					MapillaryData.getInstance().getSelectedImage());
-			MapillaryToggleDialog.getInstance().updateImage();
-		}
-		MapillaryData.getInstance().dataUpdated();
-	}
+    private Point start;
+    private int lastButton;
+    private MapillaryAbstractImage closest;
+    private MapillaryAbstractImage lastClicked;
+    private MapillaryData mapillaryData;
+    private MapillaryRecord record;
+
+    private boolean nothingHighlighted;
+    private boolean imageHighlighted = false;
+
+    public MapillaryMouseAdapter() {
+        mapillaryData = MapillaryData.getInstance();
+        record = MapillaryRecord.getInstance();
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+        lastButton = e.getButton();
+        if (e.getButton() != MouseEvent.BUTTON1)
+            return;
+        MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
+        if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+                && closestTemp != null
+                && Main.map.mapMode == Main.map.mapModeSelect) {
+            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;
+            // Doube click
+            if (e.getClickCount() == 2
+                    && mapillaryData.getSelectedImage() != null
+                    && closest != null) {
+                for (MapillaryAbstractImage img : closest.getSequence()
+                        .getImages()) {
+                    mapillaryData.addMultiSelectedImage(img);
+                }
+            }
+            this.start = e.getPoint();
+            this.lastClicked = this.closest;
+            this.closest = closest;
+            if (mapillaryData.getMultiSelectedImages().contains(closest))
+                return;
+            // ctrl+click
+            if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK)
+                    && closest != null)
+                mapillaryData.addMultiSelectedImage(closest);
+            // shift + click
+            else if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.SHIFT_MASK)
+                    && this.closest instanceof MapillaryImage
+                    && this.lastClicked instanceof MapillaryImage) {
+                if (this.closest != null
+                        && this.lastClicked != null
+                        && ((MapillaryImage) this.closest).getSequence() == ((MapillaryImage) this.lastClicked)
+                                .getSequence()) {
+                    int i = ((MapillaryImage) this.closest).getSequence()
+                            .getImages().indexOf(this.closest);
+                    int j = ((MapillaryImage) this.lastClicked).getSequence()
+                            .getImages().indexOf(this.lastClicked);
+                    if (i < j)
+                        mapillaryData
+                                .addMultiSelectedImage(new ArrayList<MapillaryAbstractImage>(
+                                        ((MapillaryImage) this.closest)
+                                                .getSequence().getImages()
+                                                .subList(i, j + 1)));
+                    else
+                        mapillaryData
+                                .addMultiSelectedImage(new ArrayList<MapillaryAbstractImage>(
+                                        ((MapillaryImage) this.closest)
+                                                .getSequence().getImages()
+                                                .subList(j, i + 1)));
+                }
+                // click
+            } else
+                mapillaryData.setSelectedImage(closest);
+            // If you select an imported image
+        } else if (closestTemp instanceof MapillaryImportedImage) {
+            MapillaryImportedImage closest = (MapillaryImportedImage) closestTemp;
+            this.start = e.getPoint();
+            this.lastClicked = this.closest;
+            this.closest = closest;
+            if (mapillaryData.getMultiSelectedImages().contains(closest))
+                return;
+            if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK)
+                    && closest != null)
+                mapillaryData.addMultiSelectedImage(closest);
+            else
+                mapillaryData.setSelectedImage(closest);
+        }
+    }
+
+    private MapillaryAbstractImage getClosest(Point clickPoint) {
+        double snapDistance = 10;
+        double minDistance = Double.MAX_VALUE;
+        MapillaryAbstractImage closest = null;
+        for (MapillaryAbstractImage image : mapillaryData.getImages()) {
+            Point imagePoint = Main.map.mapView.getPoint(image.getLatLon());
+            imagePoint.setLocation(imagePoint.getX(), imagePoint.getY());
+            double dist = clickPoint.distanceSq(imagePoint);
+            if (minDistance > dist
+                    && clickPoint.distance(imagePoint) < snapDistance
+                    && image.isVisible()) {
+                minDistance = dist;
+                closest = image;
+            }
+        }
+        return closest;
+    }
+
+    @Override
+    public void mouseDragged(MouseEvent e) {
+        if (Main.map.mapView.getActiveLayer() != MapillaryLayer.getInstance())
+            return;
+
+        if (!Main.pref.getBoolean("mapillary.developer"))
+            for (MapillaryAbstractImage img : MapillaryData.getInstance()
+                    .getMultiSelectedImages()) {
+                if (img instanceof MapillaryImage)
+                    return;
+            }
+        if (MapillaryData.getInstance().getSelectedImage() != null) {
+            if (lastButton == MouseEvent.BUTTON1 && !e.isShiftDown()) {
+                LatLon to = Main.map.mapView.getLatLon(e.getX(), e.getY());
+                LatLon from = Main.map.mapView.getLatLon(start.getX(),
+                        start.getY());
+                for (MapillaryAbstractImage img : MapillaryData.getInstance()
+                        .getMultiSelectedImages()) {
+
+                    img.move(to.getX() - from.getX(), to.getY() - from.getY());
+                }
+                Main.map.repaint();
+            } else if (lastButton == MouseEvent.BUTTON1 && e.isShiftDown()) {
+                this.closest.turn(Math.toDegrees(Math.atan2(
+                        (e.getX() - start.x), -(e.getY() - start.y)))
+                        - closest.getTempCa());
+                for (MapillaryAbstractImage img : MapillaryData.getInstance()
+                        .getMultiSelectedImages()) {
+                    img.turn(Math.toDegrees(Math.atan2((e.getX() - start.x),
+                            -(e.getY() - start.y))) - closest.getTempCa());
+                }
+                Main.map.repaint();
+            }
+        }
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent e) {
+        if (mapillaryData.getSelectedImage() == null)
+            return;
+        if (mapillaryData.getSelectedImage().getTempCa() != mapillaryData
+                .getSelectedImage().getCa()) {
+            double from = mapillaryData.getSelectedImage().getTempCa();
+            double to = mapillaryData.getSelectedImage().getCa();
+            record.addCommand(new CommandTurnImage(mapillaryData
+                    .getMultiSelectedImages(), to - from));
+        } else if (mapillaryData.getSelectedImage().getTempLatLon() != mapillaryData
+                .getSelectedImage().getLatLon()) {
+            LatLon from = mapillaryData.getSelectedImage().getTempLatLon();
+            LatLon to = mapillaryData.getSelectedImage().getLatLon();
+            record.addCommand(new CommandMoveImage(mapillaryData
+                    .getMultiSelectedImages(), to.getX() - from.getX(), to
+                    .getY() - from.getY()));
+        }
+        for (MapillaryAbstractImage img : mapillaryData
+                .getMultiSelectedImages()) {
+            if (img != null)
+                img.stopMoving();
+        }
+    }
+
+    /**
+     * Checks if the mouse is over pictures.
+     */
+    @Override
+    public void mouseMoved(MouseEvent e) {
+        MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
+        if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+                && Main.map.mapMode != Main.map.mapModeSelect)
+            return;
+        if (closestTemp != null
+                && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+                && !imageHighlighted) {
+            Main.map.mapMode.putValue("active", Boolean.FALSE);
+            imageHighlighted = true;
+
+        } else if (closestTemp == null
+                && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+                && imageHighlighted && nothingHighlighted) {
+            nothingHighlighted = false;
+            Main.map.mapMode.putValue("active", Boolean.TRUE);
+
+        } else if (imageHighlighted && !nothingHighlighted
+                && Main.map.mapView != null
+                && Main.map.mapView.getEditLayer().data != null
+                && Main.map.mapView.getActiveLayer() instanceof OsmDataLayer) {
+
+            for (OsmPrimitive primivitive : Main.map.mapView.getEditLayer().data
+                    .allPrimitives()) {
+                primivitive.setHighlighted(false);
+            }
+            imageHighlighted = false;
+            nothingHighlighted = true;
+        }
+
+        if (MapillaryData.getInstance().getHoveredImage() != closestTemp
+                && closestTemp != null) {
+            MapillaryData.getInstance().setHoveredImage(closestTemp);
+            MapillaryToggleDialog.getInstance().setImage(closestTemp);
+            MapillaryToggleDialog.getInstance().updateImage();
+        } else if (MapillaryData.getInstance().getHoveredImage() != closestTemp
+                && closestTemp == null) {
+            MapillaryData.getInstance().setHoveredImage(null);
+            MapillaryToggleDialog.getInstance().setImage(
+                    MapillaryData.getInstance().getSelectedImage());
+            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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31313)
@@ -33,106 +33,106 @@
 public class MapillaryPlugin extends Plugin implements EditLayerChangeListener {
 
-	public static final ImageIcon ICON24 = new ImageProvider("icon24.png")
-			.get();
-	public static final ImageIcon ICON16 = new ImageProvider("icon16.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 ImageIcon MAP_ICON_IMPORTED = new ImageProvider(
-			"mapiconimported.png").get();
-	public static final ImageIcon MAP_SIGN = new ImageProvider("sign.png")
-			.get();
-	public static final int ICON_SIZE = 24;
+    public static final ImageIcon ICON24 = new ImageProvider("icon24.png")
+            .get();
+    public static final ImageIcon ICON16 = new ImageProvider("icon16.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 ImageIcon MAP_ICON_IMPORTED = new ImageProvider(
+            "mapiconimported.png").get();
+    public static final ImageIcon MAP_SIGN = new ImageProvider("sign.png")
+            .get();
+    public static final int ICON_SIZE = 24;
 
-	public static CacheAccess<String, BufferedImageCacheEntry> CACHE;
+    public static CacheAccess<String, BufferedImageCacheEntry> CACHE;
 
-	private final MapillaryDownloadAction downloadAction;
-	private final MapillaryExportAction exportAction;
-	private final MapillaryImportAction importAction;
-	private final MapillaryZoomAction zoomAction;
-	private final MapillaryDownloadViewAction downloadViewAction;
+    private final MapillaryDownloadAction downloadAction;
+    private final MapillaryExportAction exportAction;
+    private final MapillaryImportAction importAction;
+    private final MapillaryZoomAction zoomAction;
+    private final MapillaryDownloadViewAction downloadViewAction;
 
-	public static JMenuItem DOWNLOAD_MENU;
-	public static JMenuItem EXPORT_MENU;
-	public static JMenuItem IMPORT_MENU;
-	public static JMenuItem ZOOM_MENU;
-	public static JMenuItem DOWNLOAD_VIEW_MENU;
+    public static JMenuItem DOWNLOAD_MENU;
+    public static JMenuItem EXPORT_MENU;
+    public static JMenuItem IMPORT_MENU;
+    public static JMenuItem ZOOM_MENU;
+    public static JMenuItem DOWNLOAD_VIEW_MENU;
 
-	public MapillaryPlugin(PluginInformation info) {
-		super(info);
-		downloadAction = new MapillaryDownloadAction();
-		exportAction = new MapillaryExportAction();
-		importAction = new MapillaryImportAction();
-		zoomAction = new MapillaryZoomAction();
-		downloadViewAction = new MapillaryDownloadViewAction();
+    public MapillaryPlugin(PluginInformation info) {
+        super(info);
+        downloadAction = new MapillaryDownloadAction();
+        exportAction = new MapillaryExportAction();
+        importAction = new MapillaryImportAction();
+        zoomAction = new MapillaryZoomAction();
+        downloadViewAction = new MapillaryDownloadViewAction();
 
-		DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
-				downloadAction, false);
-		EXPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, exportAction,
-				false, 14);
-		IMPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, importAction,
-				false, 14);
-		ZOOM_MENU = MainMenu
-				.add(Main.main.menu.viewMenu, zoomAction, false, 15);
-		DOWNLOAD_VIEW_MENU = MainMenu.add(Main.main.menu.fileMenu,
-				downloadViewAction, false, 14);
+        DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
+                downloadAction, false);
+        EXPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, exportAction,
+                false, 14);
+        IMPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, importAction,
+                false, 14);
+        ZOOM_MENU = MainMenu
+                .add(Main.main.menu.viewMenu, zoomAction, false, 15);
+        DOWNLOAD_VIEW_MENU = MainMenu.add(Main.main.menu.fileMenu,
+                downloadViewAction, false, 14);
 
-		EXPORT_MENU.setEnabled(false);
-		DOWNLOAD_MENU.setEnabled(false);
-		IMPORT_MENU.setEnabled(false);
-		ZOOM_MENU.setEnabled(false);
-		DOWNLOAD_VIEW_MENU.setEnabled(false);
+        EXPORT_MENU.setEnabled(false);
+        DOWNLOAD_MENU.setEnabled(false);
+        IMPORT_MENU.setEnabled(false);
+        ZOOM_MENU.setEnabled(false);
+        DOWNLOAD_VIEW_MENU.setEnabled(false);
 
-		MapView.addEditLayerChangeListener(this);
-		try {
-			CACHE = JCSCacheManager.getCache("mapillary", 10, 10000,
-					this.getPluginDir() + "/cache/");
-		} catch (IOException e) {
-			Main.error(e);
-		}
-	}
+        MapView.addEditLayerChangeListener(this);
+        try {
+            CACHE = JCSCacheManager.getCache("mapillary", 10, 10000,
+                    this.getPluginDir() + "/cache/");
+        } catch (IOException e) {
+            Main.error(e);
+        }
+    }
 
-	/**
-	 * Called when the JOSM map frame is created or destroyed.
-	 */
-	@Override
-	public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
-		if (oldFrame == null && newFrame != null) { // map frame added
-			Main.map.addToggleDialog(MapillaryToggleDialog.getInstance(), false);
-			Main.map.addToggleDialog(MapillaryHistoryDialog.getInstance(),
-					false);
-			Main.map.addToggleDialog(MapillaryFilterDialog.getInstance(), false);
-		}
-		if (oldFrame != null && newFrame == null) { // map frame destroyed
-			MapillaryToggleDialog.destroyInstance();
-			MapillaryHistoryDialog.destroyInstance();
-			MapillaryFilterDialog.destroyInstance();
-		}
-	}
+    /**
+     * Called when the JOSM map frame is created or destroyed.
+     */
+    @Override
+    public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
+        if (oldFrame == null && newFrame != null) { // map frame added
+            Main.map.addToggleDialog(MapillaryToggleDialog.getInstance(), false);
+            Main.map.addToggleDialog(MapillaryHistoryDialog.getInstance(),
+                    false);
+            Main.map.addToggleDialog(MapillaryFilterDialog.getInstance(), false);
+        }
+        if (oldFrame != null && newFrame == null) { // map frame destroyed
+            MapillaryToggleDialog.destroyInstance();
+            MapillaryHistoryDialog.destroyInstance();
+            MapillaryFilterDialog.destroyInstance();
+        }
+    }
 
-	public static void setMenuEnabled(JMenuItem menu, boolean value) {
-		menu.setEnabled(value);
-		menu.getAction().setEnabled(value);
-	}
+    public static void setMenuEnabled(JMenuItem menu, boolean value) {
+        menu.setEnabled(value);
+        menu.getAction().setEnabled(value);
+    }
 
-	@Override
-	public PreferenceSetting getPreferenceSetting() {
-		return new MapillaryPreferenceSetting();
-	}
+    @Override
+    public PreferenceSetting getPreferenceSetting() {
+        return new MapillaryPreferenceSetting();
+    }
 
-	@Override
-	public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
-		if (oldLayer == null && newLayer != null) {
-			setMenuEnabled(DOWNLOAD_MENU, true);
-			if (Main.pref.getBoolean("mapillary.download-manually"))
-				setMenuEnabled(IMPORT_MENU, true);
-			setMenuEnabled(DOWNLOAD_VIEW_MENU, true);
-		} else if (oldLayer != null && newLayer == null) {
-			setMenuEnabled(DOWNLOAD_MENU, false);
-			setMenuEnabled(IMPORT_MENU, false);
-			setMenuEnabled(DOWNLOAD_VIEW_MENU, false);
-		}
-	}
+    @Override
+    public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
+        if (oldLayer == null && newLayer != null) {
+            setMenuEnabled(DOWNLOAD_MENU, true);
+            setMenuEnabled(IMPORT_MENU, true);
+            if (Main.pref.getBoolean("mapillary.download-manually"))
+                setMenuEnabled(DOWNLOAD_VIEW_MENU, true);
+        } else if (oldLayer != null && newLayer == null) {
+            setMenuEnabled(DOWNLOAD_MENU, false);
+            setMenuEnabled(IMPORT_MENU, false);
+            setMenuEnabled(DOWNLOAD_VIEW_MENU, false);
+        }
+    }
 }
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadAction.java	(revision 31313)
@@ -27,5 +27,5 @@
                 tr("Create Mapillary layer"), Shortcut.registerShortcut(
                         "Mapillary", tr("Start Mapillary layer"),
-                        KeyEvent.VK_M, Shortcut.ALT_CTRL_SHIFT), false,
+                        KeyEvent.VK_COMMA, Shortcut.SHIFT), false,
                 "mapillaryDownload", false);
         this.setEnabled(false);
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadViewAction.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadViewAction.java	(revision 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadViewAction.java	(revision 31313)
@@ -26,6 +26,6 @@
                 Shortcut.registerShortcut("Mapillary area",
                         tr("Download Mapillary images in current view"),
-                        KeyEvent.VK_M, Shortcut.NONE), false, "mapillaryArea",
-                false);
+                        KeyEvent.VK_PERIOD, Shortcut.SHIFT), false,
+                "mapillaryArea", false);
         this.setEnabled(false);
     }
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31313)
@@ -38,5 +38,5 @@
                 tr("Export pictures"), Shortcut.registerShortcut(
                         "Export Mapillary", tr("Export Mapillary pictures"),
-                        KeyEvent.VK_M, Shortcut.NONE), false,
+                        KeyEvent.CHAR_UNDEFINED, 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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31313)
@@ -36,146 +36,145 @@
 public class MapillaryImportAction extends JosmAction {
 
-	public JFileChooser chooser;
+    public JFileChooser chooser;
 
-	/**
-	 * Amount of pictures without the proper EXIF tags.
-	 */
-	private int noTagsPics = 0;
+    /**
+     * Amount of pictures without the proper EXIF tags.
+     */
+    private int noTagsPics = 0;
 
-	public MapillaryImportAction() {
-		super(tr("Import pictures"), new ImageProvider("icon24.png"),
-				tr("Import local pictures"), Shortcut.registerShortcut(
-						"Import Mapillary",
-						tr("Import pictures into Mapillary layer"),
-						KeyEvent.VK_M, Shortcut.NONE), false,
-				"mapillaryImport", false);
-		this.setEnabled(false);
-	}
+    public MapillaryImportAction() {
+        super(tr("Import pictures"), new ImageProvider("icon24.png"),
+                tr("Import local pictures"), Shortcut.registerShortcut(
+                        "Import Mapillary",
+                        tr("Import pictures into Mapillary layer"),
+                        KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), false,
+                "mapillaryImport", false);
+        this.setEnabled(false);
+    }
 
-	@Override
-	public void actionPerformed(ActionEvent e) {
-		chooser = new JFileChooser();
-		chooser.setCurrentDirectory(new java.io.File(System
-				.getProperty("user.home")));
-		chooser.setDialogTitle(tr("Select pictures"));
-		chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
-		chooser.setAcceptAllFileFilterUsed(false);
-		chooser.addChoosableFileFilter(new FileNameExtensionFilter("images",
-				"jpg", "jpeg", "png"));
-		chooser.setMultiSelectionEnabled(true);
-		if (chooser.showOpenDialog(Main.parent) == JFileChooser.APPROVE_OPTION) {
-			for (int i = 0; i < chooser.getSelectedFiles().length; i++) {
-				File file = chooser.getSelectedFiles()[i];
-				if (file.isDirectory()) {
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        chooser = new JFileChooser();
+        chooser.setCurrentDirectory(new java.io.File(System
+                .getProperty("user.home")));
+        chooser.setDialogTitle(tr("Select pictures"));
+        chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+        chooser.setAcceptAllFileFilterUsed(false);
+        chooser.addChoosableFileFilter(new FileNameExtensionFilter("images",
+                "jpg", "jpeg", "png"));
+        chooser.setMultiSelectionEnabled(true);
+        if (chooser.showOpenDialog(Main.parent) == JFileChooser.APPROVE_OPTION) {
+            for (int i = 0; i < chooser.getSelectedFiles().length; i++) {
+                File file = chooser.getSelectedFiles()[i];
+                if (file.isDirectory()) {
 
-				} else {
-					if (file.getPath().substring(file.getPath().length() - 4)
-							.equals(".jpg")
-							|| file.getPath()
-									.substring(file.getPath().length() - 5)
-									.equals(".jpeg")) {
-						try {
-							readJPG(file);
-						} catch (ImageReadException ex) {
-							Main.error(ex);
-						} catch (IOException ex) {
-							Main.error(ex);
-						}
-					} else if (file.getPath()
-							.substring(file.getPath().length() - 4)
-							.equals(".png")) {
-						readPNG(file);
-					}
-				}
-			}
-		}
-		MapillaryLayer.getInstance();
-	}
+                } else {
+                    if (file.getPath().substring(file.getPath().length() - 4)
+                            .equals(".jpg")
+                            || file.getPath()
+                                    .substring(file.getPath().length() - 5)
+                                    .equals(".jpeg")) {
+                        try {
+                            readJPG(file);
+                        } catch (ImageReadException ex) {
+                            Main.error(ex);
+                        } catch (IOException ex) {
+                            Main.error(ex);
+                        }
+                    } else if (file.getPath()
+                            .substring(file.getPath().length() - 4)
+                            .equals(".png")) {
+                        readPNG(file);
+                    }
+                }
+            }
+        }
+    }
 
-	/**
-	 * Reads a jpg pictures that contains the needed GPS information (position
-	 * and direction) and creates a new icon in that position.
-	 * 
-	 * @param file
-	 * @throws ImageReadException
-	 * @throws IOException
-	 */
-	public void readJPG(File file) throws ImageReadException, IOException {
-		final ImageMetadata metadata = Imaging.getMetadata(file);
-		if (metadata instanceof JpegImageMetadata) {
-			final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
-			final TiffField lat_ref = jpegMetadata
-					.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);
-			final TiffField lat = jpegMetadata
-					.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE);
-			final TiffField lon_ref = jpegMetadata
-					.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);
-			final TiffField lon = jpegMetadata
-					.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE);
-			final TiffField ca = jpegMetadata
-					.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION);
-			final TiffField datetimeOriginal = jpegMetadata
-					.findEXIFValueWithExactMatch(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
-			if (lat_ref == null || lat == null || lon == null
-					|| lon_ref == null) {
-				readNoTags(file);
-			}
-			double latValue = 0;
-			double lonValue = 0;
-			double caValue = 0;
-			if (lat != null && lat.getValue() instanceof RationalNumber[])
-				latValue = DegMinSecToDouble((RationalNumber[]) lat.getValue(),
-						lat_ref.getValue().toString());
-			if (lon != null && lon.getValue() instanceof RationalNumber[])
-				lonValue = DegMinSecToDouble((RationalNumber[]) lon.getValue(),
-						lon_ref.getValue().toString());
-			if (ca != null && ca.getValue() instanceof RationalNumber)
-				caValue = ((RationalNumber) ca.getValue()).doubleValue();
-			if (lat_ref.getValue().toString().equals("S"))
-				latValue = -latValue;
-			if (lon_ref.getValue().toString().equals("W"))
-				lonValue = -lonValue;
-			if (datetimeOriginal != null)
-				MapillaryData.getInstance().add(
-						new MapillaryImportedImage(latValue, lonValue, caValue,
-								file, datetimeOriginal.getStringValue()));
-			else
-				MapillaryData.getInstance().add(
-						new MapillaryImportedImage(latValue, lonValue, caValue,
-								file));
-		}
-	}
+    /**
+     * Reads a jpg pictures that contains the needed GPS information (position
+     * and direction) and creates a new icon in that position.
+     * 
+     * @param file
+     * @throws ImageReadException
+     * @throws IOException
+     */
+    public void readJPG(File file) throws ImageReadException, IOException {
+        final ImageMetadata metadata = Imaging.getMetadata(file);
+        if (metadata instanceof JpegImageMetadata) {
+            final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
+            final TiffField lat_ref = jpegMetadata
+                    .findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);
+            final TiffField lat = jpegMetadata
+                    .findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE);
+            final TiffField lon_ref = jpegMetadata
+                    .findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);
+            final TiffField lon = jpegMetadata
+                    .findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE);
+            final TiffField ca = jpegMetadata
+                    .findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION);
+            final TiffField datetimeOriginal = jpegMetadata
+                    .findEXIFValueWithExactMatch(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
+            if (lat_ref == null || lat == null || lon == null
+                    || lon_ref == null) {
+                readNoTags(file);
+            }
+            double latValue = 0;
+            double lonValue = 0;
+            double caValue = 0;
+            if (lat != null && lat.getValue() instanceof RationalNumber[])
+                latValue = DegMinSecToDouble((RationalNumber[]) lat.getValue(),
+                        lat_ref.getValue().toString());
+            if (lon != null && lon.getValue() instanceof RationalNumber[])
+                lonValue = DegMinSecToDouble((RationalNumber[]) lon.getValue(),
+                        lon_ref.getValue().toString());
+            if (ca != null && ca.getValue() instanceof RationalNumber)
+                caValue = ((RationalNumber) ca.getValue()).doubleValue();
+            if (lat_ref.getValue().toString().equals("S"))
+                latValue = -latValue;
+            if (lon_ref.getValue().toString().equals("W"))
+                lonValue = -lonValue;
+            if (datetimeOriginal != null)
+                MapillaryData.getInstance().add(
+                        new MapillaryImportedImage(latValue, lonValue, caValue,
+                                file, datetimeOriginal.getStringValue()));
+            else
+                MapillaryData.getInstance().add(
+                        new MapillaryImportedImage(latValue, lonValue, caValue,
+                                file));
+        }
+    }
 
-	/**
-	 * Reads a image file that doesn't contain the needed GPS information. And
-	 * creates a new icon in the middle of the map.
-	 * 
-	 * @param file
-	 */
-	private void readNoTags(File file) {
-		double HORIZONTAL_DISTANCE = 0.0001;
-		double horDev;
-		if (noTagsPics % 2 == 0)
-			horDev = HORIZONTAL_DISTANCE * noTagsPics / 2;
-		else
-			horDev = -HORIZONTAL_DISTANCE * (noTagsPics + 1) / 2;
-		LatLon pos = Main.map.mapView.getProjection().eastNorth2latlon(
-				Main.map.mapView.getCenter());
-		MapillaryData.getInstance().add(
-				new MapillaryImportedImage(pos.lat(), pos.lon() + horDev, 0,
-						file));
-		noTagsPics++;
-	}
+    /**
+     * Reads a image file that doesn't contain the needed GPS information. And
+     * creates a new icon in the middle of the map.
+     * 
+     * @param file
+     */
+    private void readNoTags(File file) {
+        double HORIZONTAL_DISTANCE = 0.0001;
+        double horDev;
+        if (noTagsPics % 2 == 0)
+            horDev = HORIZONTAL_DISTANCE * noTagsPics / 2;
+        else
+            horDev = -HORIZONTAL_DISTANCE * (noTagsPics + 1) / 2;
+        LatLon pos = Main.map.mapView.getProjection().eastNorth2latlon(
+                Main.map.mapView.getCenter());
+        MapillaryData.getInstance().add(
+                new MapillaryImportedImage(pos.lat(), pos.lon() + horDev, 0,
+                        file));
+        noTagsPics++;
+    }
 
-	private void readPNG(File file) {
-		readNoTags(file);
-	}
+    private void readPNG(File file) {
+        readNoTags(file);
+    }
 
-	private double DegMinSecToDouble(RationalNumber[] degMinSec, String ref) {
-		RationalNumber deg = degMinSec[0];
-		RationalNumber min = degMinSec[1];
-		RationalNumber sec = degMinSec[2];
-		return deg.doubleValue() + min.doubleValue() / 60 + sec.doubleValue()
-				/ 3600;
-	}
+    private double DegMinSecToDouble(RationalNumber[] degMinSec, String ref) {
+        RationalNumber deg = degMinSec[0];
+        RationalNumber min = degMinSec[1];
+        RationalNumber sec = degMinSec[2];
+        return deg.doubleValue() + min.doubleValue() / 60 + sec.doubleValue()
+                / 3600;
+    }
 }
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java	(revision 31313)
@@ -29,6 +29,6 @@
                         "Zoom Mapillary",
                         tr("Zoom to the currently selected Mapillary image"),
-                        KeyEvent.VK_M, Shortcut.NONE), false, "mapillaryZoom",
-                false);
+                        KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), false,
+                "mapillaryZoom", false);
         MapillaryData.getInstance().addListener(this);
         this.setEnabled(false);
@@ -53,5 +53,5 @@
 
     @Override
-    public void imagesAdded() {        
+    public void imagesAdded() {
     }
 }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31313)
@@ -10,4 +10,5 @@
 import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryFilterDialog;
+import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryToggleDialog;
 
 /**
@@ -51,4 +52,5 @@
         MapillaryData.getInstance().dataUpdated();
         MapillaryFilterDialog.getInstance().refresh();
+        MapillaryToggleDialog.getInstance().updateImage();
     }
 
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java	(revision 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java	(revision 31313)
@@ -193,5 +193,5 @@
 			}
 		}
-		MapillaryData.getInstance().dataUpdated();
+		Main.map.repaint();
 	}
 
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 31313)
@@ -22,4 +22,5 @@
     private JCheckBox displayHour = new JCheckBox(tr("Display hour when the picture was taken"));
     private JCheckBox format24 = new JCheckBox(tr("Use 24 hour format"));
+    private JCheckBox moveTo = new JCheckBox(tr("Move to picture's location with next/previous buttons"));
 
     @Override
@@ -38,4 +39,5 @@
         displayHour.setSelected(Main.pref.getBoolean("mapillary.display-hour", true));
         format24.setSelected(Main.pref.getBoolean("mapillary.format-24"));
+        moveTo.setSelected(Main.pref.getBoolean("mapillary.move-to-picture", true));
 
         panel.setLayout(new FlowLayout(FlowLayout.LEFT));
@@ -44,4 +46,5 @@
         panel.add(displayHour);
         panel.add(format24);
+        panel.add(moveTo);
         gui.getDisplayPreference().addSubTab(this, "Mapillary", panel);
     }
@@ -56,4 +59,5 @@
         Main.pref.put("mapillary.display-hour", displayHour.isSelected());
         Main.pref.put("mapillary.format-24", format24.isSelected());
+        Main.pref.put("mapillary.move-to-picture", moveTo.isSelected());
         return mod;
     }
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 31312)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31313)
@@ -9,4 +9,5 @@
 import java.awt.Color;
 import java.awt.Component;
+import java.awt.Event;
 import java.awt.FlowLayout;
 import java.awt.GridLayout;
@@ -32,4 +33,6 @@
 
 import javax.imageio.ImageIO;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.AbstractAction;
@@ -43,327 +46,348 @@
  */
 public class MapillaryToggleDialog extends ToggleDialog implements
-		ICachedLoaderListener, MapillaryDataListener {
-
-	public final static String BASE_TITLE = "Mapillary picture";
-
-	public static MapillaryToggleDialog INSTANCE;
-
-	public volatile MapillaryAbstractImage image;
-
-	public final SideButton nextButton = new SideButton(new nextPictureAction());
-	public final SideButton previousButton = new SideButton(
-			new previousPictureAction());
-	public final SideButton redButton = new SideButton(new redAction());
-	public final SideButton blueButton = new SideButton(new blueAction());
-
-	private JPanel buttonsPanel;
-
-	public MapillaryImageDisplay mapillaryImageDisplay;
-
-	private MapillaryCache imageCache;
-	private MapillaryCache thumbnailCache;
-
-	public MapillaryToggleDialog() {
-		super(tr(BASE_TITLE), "mapillary.png", tr("Open Mapillary window"),
-				Shortcut.registerShortcut(tr("Mapillary dialog"),
-						tr("Open Mapillary main dialog"), KeyEvent.VK_M,
-						Shortcut.NONE), 200);
-		MapillaryData.getInstance().addListener(this);
-
-		mapillaryImageDisplay = new MapillaryImageDisplay();
-
-		blueButton.setForeground(Color.BLUE);
-		redButton.setForeground(Color.RED);
-
-		createLayout(
-				mapillaryImageDisplay,
-				Arrays.asList(new SideButton[] { blueButton, previousButton,
-						nextButton, redButton }),
-				Main.pref.getBoolean("mapillary.reverse-buttons"));
-		disableAllButtons();
-	}
-
-	public static MapillaryToggleDialog getInstance() {
-		if (INSTANCE == null)
-			INSTANCE = new MapillaryToggleDialog();
-		return INSTANCE;
-	}
-
-	public static void destroyInstance() {
-		INSTANCE = null;
-	}
-
-	/**
-	 * Downloads the image of the selected MapillaryImage and sets in the
-	 * MapillaryImageDisplay object.
-	 */
-	public synchronized void updateImage() {
-		if (!SwingUtilities.isEventDispatchThread()) {
-			SwingUtilities.invokeLater(new Runnable() {
-				@Override
-				public void run() {
-					updateImage();
-				}
-			});
-		} else {
-			if (MapillaryLayer.INSTANCE == null) {
-				return;
-			}
-			if (this.image == null) {
-				mapillaryImageDisplay.setImage(null);
-				setTitle(tr(BASE_TITLE));
-				disableAllButtons();
-				return;
-			}
-			if (image instanceof MapillaryImage) {
-				mapillaryImageDisplay.hyperlink.setVisible(true);
-				MapillaryImage mapillaryImage = (MapillaryImage) this.image;
-				String title = tr(BASE_TITLE);
-				if (mapillaryImage.getUser() != null)
-					title += " -- " + mapillaryImage.getUser();
-				if (mapillaryImage.getCapturedAt() != 0)
-					title += " -- " + mapillaryImage.getDate();
-				setTitle(title);
-				this.nextButton.setEnabled(false);
-				this.previousButton.setEnabled(false);
-				// Enables/disables next/previous buttons
-				if (((MapillaryImage) image).getSequence() != null) {
-					MapillaryImage tempImage = (MapillaryImage) image;
-					while (tempImage.next() != null) {
-						tempImage = tempImage.next();
-						if (tempImage.isVisible()) {
-							this.nextButton.setEnabled(true);
-							break;
-						}
-					}
-				}
-				if (((MapillaryImage) image).getSequence() != null) {
-					MapillaryImage tempImage = (MapillaryImage) image;
-					while (tempImage.previous() != null) {
-						tempImage = tempImage.previous();
-						if (tempImage.isVisible()) {
-							this.previousButton.setEnabled(true);
-							break;
-						}
-					}
-				}
-
-				mapillaryImageDisplay.hyperlink.setURL(mapillaryImage.getKey());
-				// Downloads the thumbnail.
-				this.mapillaryImageDisplay.setImage(null);
-				if (thumbnailCache != null)
-					thumbnailCache.cancelOutstandingTasks();
-				thumbnailCache = new MapillaryCache(mapillaryImage.getKey(),
-						MapillaryCache.Type.THUMBNAIL);
-				thumbnailCache.submit(this, false);
-
-				// Downloads the full resolution image.
-				if (imageCache != null)
-					imageCache.cancelOutstandingTasks();
-				imageCache = new MapillaryCache(mapillaryImage.getKey(),
-						MapillaryCache.Type.FULL_IMAGE);
-				imageCache.submit(this, false);
-			} else if (image instanceof MapillaryImportedImage) {
-				mapillaryImageDisplay.hyperlink.setVisible(false);
-				this.nextButton.setEnabled(false);
-				this.previousButton.setEnabled(false);
-				MapillaryImportedImage mapillaryImage = (MapillaryImportedImage) this.image;
-				try {
-					mapillaryImageDisplay.setImage(mapillaryImage.getImage());
-				} catch (IOException e) {
-					Main.error(e);
-				}
-				mapillaryImageDisplay.hyperlink.setURL(null);
-			}
-		}
-	}
-
-	private void disableAllButtons() {
-		nextButton.setEnabled(false);
-		previousButton.setEnabled(false);
-		blueButton.setEnabled(false);
-		redButton.setEnabled(false);
-		mapillaryImageDisplay.hyperlink.setVisible(false);
-	}
-
-	/**
-	 * Sets a new MapillaryImage to be shown.
-	 * 
-	 * @param image
-	 */
-	public synchronized void setImage(MapillaryAbstractImage image) {
-		this.image = image;
-	}
-
-	/**
-	 * Returns the MapillaryImage objects which is being shown.
-	 * 
-	 * @return
-	 */
-	public synchronized MapillaryAbstractImage getImage() {
-		return this.image;
-	}
-
-	/**
-	 * Action class form the next image button.
-	 * 
-	 * @author Jorge
-	 *
-	 */
-	class nextPictureAction extends AbstractAction {
-		public nextPictureAction() {
-			putValue(NAME, tr("Next picture"));
-			putValue(SHORT_DESCRIPTION,
-					tr("Shows the next picture in the sequence"));
-		}
-
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (MapillaryToggleDialog.getInstance().getImage() != null) {
-				MapillaryData.getInstance().selectNext();
-			}
-		}
-	}
-
-	/**
-	 * Action class for the previous image button.
-	 * 
-	 * @author Jorge
-	 *
-	 */
-	class previousPictureAction extends AbstractAction {
-		public previousPictureAction() {
-			putValue(NAME, tr("Previous picture"));
-			putValue(SHORT_DESCRIPTION,
-					tr("Shows the previous picture in the sequence"));
-		}
-
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (MapillaryToggleDialog.getInstance().getImage() != null) {
-				MapillaryData.getInstance().selectPrevious();
-			}
-		}
-	}
-
-	/**
-	 * Action class to jump to the image following the red line.
-	 * 
-	 * @author nokutu
-	 *
-	 */
-	class redAction extends AbstractAction {
-		public redAction() {
-			putValue(NAME, tr("Jump to red"));
-			putValue(
-					SHORT_DESCRIPTION,
-					tr("Jumps to the picture at the other side of the red line"));
-		}
-
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (MapillaryToggleDialog.getInstance().getImage() != null) {
-				MapillaryData.getInstance().setSelectedImage(
-						MapillaryLayer.RED, true);
-			}
-		}
-	}
-
-	/**
-	 * Action class to jump to the image following the blue line.
-	 * 
-	 * @author nokutu
-	 *
-	 */
-	class blueAction extends AbstractAction {
-		public blueAction() {
-			putValue(NAME, tr("Jump to blue"));
-			putValue(
-					SHORT_DESCRIPTION,
-					tr("Jumps to the picture at the other side of the blue line"));
-		}
-
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (MapillaryToggleDialog.getInstance().getImage() != null) {
-				MapillaryData.getInstance().setSelectedImage(
-						MapillaryLayer.BLUE, true);
-			}
-		}
-	}
-
-	/**
-	 * When the pictures are returned from the cache, they are set in the
-	 * {@link MapillaryImageDisplay} object.
-	 */
-	@Override
-	public void loadingFinished(final CacheEntry data,
-			final CacheEntryAttributes attributes, final LoadResult result) {
-		if (!SwingUtilities.isEventDispatchThread()) {
-			SwingUtilities.invokeLater(new Runnable() {
-				@Override
-				public void run() {
-					loadingFinished(data, attributes, result);
-				}
-			});
-		} else if (data != null && result == LoadResult.SUCCESS) {
-			try {
-				BufferedImage img = ImageIO.read(new ByteArrayInputStream(data
-						.getContent()));
-				if (this.mapillaryImageDisplay.getImage() == null)
-					mapillaryImageDisplay.setImage(img);
-				else if (img.getHeight() > this.mapillaryImageDisplay
-						.getImage().getHeight()) {
-					mapillaryImageDisplay.setImage(img);
-				}
-			} catch (IOException e) {
-				Main.error(e);
-			}
-		}
-	}
-
-	/**
-	 * Creates the layout of the dialog.
-	 * 
-	 * @param data
-	 *            The content of the dialog
-	 * @param buttons
-	 *            The buttons where you can click
-	 * @param reverse
-	 *            {@code true} if the buttons should go at the top;
-	 *            {@code false} otherwise.
-	 */
-	public void createLayout(Component data, List<SideButton> buttons,
-			boolean reverse) {
-		this.removeAll();
-		JPanel panel = new JPanel();
-		panel.setLayout(new BorderLayout());
-		panel.add(data, BorderLayout.CENTER);
-		if (reverse) {
-			buttonsPanel = new JPanel(new GridLayout(1, 1));
-			if (!buttons.isEmpty() && buttons.get(0) != null) {
-				final JPanel buttonRowPanel = new JPanel(Main.pref.getBoolean(
-						"dialog.align.left", false) ? new FlowLayout(
-						FlowLayout.LEFT) : new GridLayout(1, buttons.size()));
-				buttonsPanel.add(buttonRowPanel);
-				for (SideButton button : buttons)
-					buttonRowPanel.add(button);
-			}
-			panel.add(buttonsPanel, BorderLayout.NORTH);
-			createLayout(panel, true, null);
-		} else
-			createLayout(panel, true, buttons);
-		this.add(titleBar, BorderLayout.NORTH);
-	}
-
-	@Override
-	public void selectedImageChanged(MapillaryAbstractImage oldImage,
-			MapillaryAbstractImage newImage) {
-		setImage(MapillaryData.getInstance().getSelectedImage());
-		updateImage();
-	}
-
-	@Override
-	public void imagesAdded() {
-	}
+        ICachedLoaderListener, MapillaryDataListener {
+
+    public final static String BASE_TITLE = "Mapillary picture";
+
+    public static MapillaryToggleDialog INSTANCE;
+
+    public volatile MapillaryAbstractImage image;
+
+    public final SideButton nextButton = new SideButton(new nextPictureAction());
+    public final SideButton previousButton = new SideButton(
+            new previousPictureAction());
+    public final SideButton redButton = new SideButton(new redAction());
+    public final SideButton blueButton = new SideButton(new blueAction());
+
+    private JPanel buttonsPanel;
+
+    public MapillaryImageDisplay mapillaryImageDisplay;
+
+    private MapillaryCache imageCache;
+    private MapillaryCache thumbnailCache;
+
+    public MapillaryToggleDialog() {
+        super(tr(BASE_TITLE), "mapillary.png", tr("Open Mapillary window"),
+                Shortcut.registerShortcut(tr("Mapillary dialog"),
+                        tr("Open Mapillary main dialog"), KeyEvent.VK_M,
+                        Shortcut.NONE), 200);
+        MapillaryData.getInstance().addListener(this);
+        addShortcuts();
+        mapillaryImageDisplay = new MapillaryImageDisplay();
+
+        blueButton.setForeground(Color.BLUE);
+        redButton.setForeground(Color.RED);
+
+        createLayout(
+                mapillaryImageDisplay,
+                Arrays.asList(new SideButton[] { blueButton, previousButton,
+                        nextButton, redButton }),
+                Main.pref.getBoolean("mapillary.reverse-buttons"));
+        disableAllButtons();
+
+    }
+    
+    /**
+     * Adds the shortcuts to the buttons.
+     */
+    private void addShortcuts() {
+        nextButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                KeyStroke.getKeyStroke("PAGE_DOWN"), "next");
+        nextButton.getActionMap().put("next", new nextPictureAction());
+        previousButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                KeyStroke.getKeyStroke("PAGE_UP"), "previous");
+        previousButton.getActionMap().put("previous", new previousPictureAction());
+        blueButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                KeyStroke.getKeyStroke("control PAGE_UP"), "blue");
+        blueButton.getActionMap().put("blue", new blueAction());
+        redButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+                KeyStroke.getKeyStroke("control PAGE_DOWN"), "red");
+        redButton.getActionMap().put("red", new redAction());
+    }
+
+    public static MapillaryToggleDialog getInstance() {
+        if (INSTANCE == null)
+            INSTANCE = new MapillaryToggleDialog();
+        return INSTANCE;
+    }
+
+    public static void destroyInstance() {
+        INSTANCE = null;
+    }
+
+    /**
+     * Downloads the image of the selected MapillaryImage and sets in the
+     * MapillaryImageDisplay object.
+     */
+    public synchronized void updateImage() {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    updateImage();
+                }
+            });
+        } else {
+            if (MapillaryLayer.INSTANCE == null) {
+                return;
+            }
+            if (this.image == null) {
+                mapillaryImageDisplay.setImage(null);
+                setTitle(tr(BASE_TITLE));
+                disableAllButtons();
+                return;
+            }
+            if (image instanceof MapillaryImage) {
+                mapillaryImageDisplay.hyperlink.setVisible(true);
+                MapillaryImage mapillaryImage = (MapillaryImage) this.image;
+                String title = tr(BASE_TITLE);
+                if (mapillaryImage.getUser() != null)
+                    title += " -- " + mapillaryImage.getUser();
+                if (mapillaryImage.getCapturedAt() != 0)
+                    title += " -- " + mapillaryImage.getDate();
+                setTitle(title);
+                this.nextButton.setEnabled(false);
+                this.previousButton.setEnabled(false);
+                // Enables/disables next/previous buttons
+                if (((MapillaryImage) image).getSequence() != null) {
+                    MapillaryImage tempImage = (MapillaryImage) image;
+                    while (tempImage.next() != null) {
+                        tempImage = tempImage.next();
+                        if (tempImage.isVisible()) {
+                            this.nextButton.setEnabled(true);
+                            break;
+                        }
+                    }
+                }
+                if (((MapillaryImage) image).getSequence() != null) {
+                    MapillaryImage tempImage = (MapillaryImage) image;
+                    while (tempImage.previous() != null) {
+                        tempImage = tempImage.previous();
+                        if (tempImage.isVisible()) {
+                            this.previousButton.setEnabled(true);
+                            break;
+                        }
+                    }
+                }
+
+                mapillaryImageDisplay.hyperlink.setURL(mapillaryImage.getKey());
+                // Downloads the thumbnail.
+                this.mapillaryImageDisplay.setImage(null);
+                if (thumbnailCache != null)
+                    thumbnailCache.cancelOutstandingTasks();
+                thumbnailCache = new MapillaryCache(mapillaryImage.getKey(),
+                        MapillaryCache.Type.THUMBNAIL);
+                thumbnailCache.submit(this, false);
+
+                // Downloads the full resolution image.
+                if (imageCache != null)
+                    imageCache.cancelOutstandingTasks();
+                imageCache = new MapillaryCache(mapillaryImage.getKey(),
+                        MapillaryCache.Type.FULL_IMAGE);
+                imageCache.submit(this, false);
+            } else if (image instanceof MapillaryImportedImage) {
+                mapillaryImageDisplay.hyperlink.setVisible(false);
+                this.nextButton.setEnabled(false);
+                this.previousButton.setEnabled(false);
+                MapillaryImportedImage mapillaryImage = (MapillaryImportedImage) this.image;
+                try {
+                    mapillaryImageDisplay.setImage(mapillaryImage.getImage());
+                } catch (IOException e) {
+                    Main.error(e);
+                }
+                mapillaryImageDisplay.hyperlink.setURL(null);
+            }
+        }
+    }
+
+    private void disableAllButtons() {
+        nextButton.setEnabled(false);
+        previousButton.setEnabled(false);
+        blueButton.setEnabled(false);
+        redButton.setEnabled(false);
+        mapillaryImageDisplay.hyperlink.setVisible(false);
+    }
+
+    /**
+     * Sets a new MapillaryImage to be shown.
+     * 
+     * @param image
+     */
+    public synchronized void setImage(MapillaryAbstractImage image) {
+        this.image = image;
+    }
+
+    /**
+     * Returns the MapillaryImage objects which is being shown.
+     * 
+     * @return
+     */
+    public synchronized MapillaryAbstractImage getImage() {
+        return this.image;
+    }
+
+    /**
+     * Action class form the next image button.
+     * 
+     * @author Jorge
+     *
+     */
+    class nextPictureAction extends AbstractAction {
+        public nextPictureAction() {
+            putValue(NAME, tr("Next picture"));
+            putValue(SHORT_DESCRIPTION,
+                    tr("Shows the next picture in the sequence"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (MapillaryToggleDialog.getInstance().getImage() != null) {
+                MapillaryData.getInstance().selectNext();
+            }
+        }
+    }
+
+    /**
+     * Action class for the previous image button.
+     * 
+     * @author Jorge
+     *
+     */
+    class previousPictureAction extends AbstractAction {
+        public previousPictureAction() {
+            putValue(NAME, tr("Previous picture"));
+            putValue(SHORT_DESCRIPTION,
+                    tr("Shows the previous picture in the sequence"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (MapillaryToggleDialog.getInstance().getImage() != null) {
+                MapillaryData.getInstance().selectPrevious();
+            }
+        }
+    }
+
+    /**
+     * Action class to jump to the image following the red line.
+     * 
+     * @author nokutu
+     *
+     */
+    class redAction extends AbstractAction {
+        public redAction() {
+            putValue(NAME, tr("Jump to red"));
+            putValue(
+                    SHORT_DESCRIPTION,
+                    tr("Jumps to the picture at the other side of the red line"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (MapillaryToggleDialog.getInstance().getImage() != null) {
+                MapillaryData.getInstance().setSelectedImage(
+                        MapillaryLayer.RED, true);
+            }
+        }
+    }
+
+    /**
+     * Action class to jump to the image following the blue line.
+     * 
+     * @author nokutu
+     *
+     */
+    class blueAction extends AbstractAction {
+        public blueAction() {
+            putValue(NAME, tr("Jump to blue"));
+            putValue(
+                    SHORT_DESCRIPTION,
+                    tr("Jumps to the picture at the other side of the blue line"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (MapillaryToggleDialog.getInstance().getImage() != null) {
+                MapillaryData.getInstance().setSelectedImage(
+                        MapillaryLayer.BLUE, true);
+            }
+        }
+    }
+
+    /**
+     * When the pictures are returned from the cache, they are set in the
+     * {@link MapillaryImageDisplay} object.
+     */
+    @Override
+    public void loadingFinished(final CacheEntry data,
+            final CacheEntryAttributes attributes, final LoadResult result) {
+        if (!SwingUtilities.isEventDispatchThread()) {
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    loadingFinished(data, attributes, result);
+                }
+            });
+        } else if (data != null && result == LoadResult.SUCCESS) {
+            try {
+                BufferedImage img = ImageIO.read(new ByteArrayInputStream(data
+                        .getContent()));
+                if (img == null)
+                    return;
+                if (this.mapillaryImageDisplay.getImage() == null)
+                    mapillaryImageDisplay.setImage(img);
+                else if (img.getHeight() > this.mapillaryImageDisplay
+                        .getImage().getHeight()) {
+                    mapillaryImageDisplay.setImage(img);
+                }
+            } catch (IOException e) {
+                Main.error(e);
+            }
+        }
+    }
+
+    /**
+     * Creates the layout of the dialog.
+     * 
+     * @param data
+     *            The content of the dialog
+     * @param buttons
+     *            The buttons where you can click
+     * @param reverse
+     *            {@code true} if the buttons should go at the top;
+     *            {@code false} otherwise.
+     */
+    public void createLayout(Component data, List<SideButton> buttons,
+            boolean reverse) {
+        this.removeAll();
+        JPanel panel = new JPanel();
+        panel.setLayout(new BorderLayout());
+        panel.add(data, BorderLayout.CENTER);
+        if (reverse) {
+            buttonsPanel = new JPanel(new GridLayout(1, 1));
+            if (!buttons.isEmpty() && buttons.get(0) != null) {
+                final JPanel buttonRowPanel = new JPanel(Main.pref.getBoolean(
+                        "dialog.align.left", false) ? new FlowLayout(
+                        FlowLayout.LEFT) : new GridLayout(1, buttons.size()));
+                buttonsPanel.add(buttonRowPanel);
+                for (SideButton button : buttons)
+                    buttonRowPanel.add(button);
+            }
+            panel.add(buttonsPanel, BorderLayout.NORTH);
+            createLayout(panel, true, null);
+        } else
+            createLayout(panel, true, buttons);
+        this.add(titleBar, BorderLayout.NORTH);
+    }
+
+    @Override
+    public void selectedImageChanged(MapillaryAbstractImage oldImage,
+            MapillaryAbstractImage newImage) {
+        setImage(MapillaryData.getInstance().getSelectedImage());
+        updateImage();
+    }
+
+    @Override
+    public void imagesAdded() {
+    }
 }
