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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31261)
@@ -6,5 +6,4 @@
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
 import org.openstreetmap.josm.plugins.mapillary.cache.MapillaryCache;
-import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryToggleDialog;
 
 import java.util.ArrayList;
@@ -26,4 +25,6 @@
 	private MapillaryAbstractImage selectedImage;
 	private final List<MapillaryAbstractImage> multiSelectedImages;
+	
+	private List<MapillaryDataListener> listeners= new ArrayList<>();
 
 	public MapillaryData() {
@@ -63,4 +64,12 @@
 		}
 		dataUpdated();
+	}
+	
+	public void addListener(MapillaryDataListener lis) {
+		listeners.add(lis);
+	}
+	
+	public void removeListener(MapillaryDataListener lis) {
+		listeners.remove(lis);
 	}
 
@@ -156,11 +165,7 @@
 	public void setSelectedImage(MapillaryAbstractImage image) {
 		selectedImage = image;
-		if (image instanceof MapillaryImage)
-			System.out.println(((MapillaryImage) image).getLocation());
 		multiSelectedImages.clear();
 		multiSelectedImages.add(image);
 		if (image != null) {
-			MapillaryToggleDialog.getInstance().setImage(selectedImage);
-			MapillaryToggleDialog.getInstance().updateImage();
 			if (image instanceof MapillaryImage) {
 				MapillaryImage mapillaryImage = (MapillaryImage) image;
@@ -186,4 +191,12 @@
 			Main.map.mapView.repaint();
 		}
+		fireSelectedImageChanged();
+	}
+	
+	private void fireSelectedImageChanged() {
+		if (listeners.isEmpty())
+			return;
+		for (MapillaryDataListener lis : listeners)
+			lis.selectedImageChanged();
 	}
 
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 31261)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryDataListener.java	(revision 31261)
@@ -0,0 +1,7 @@
+package org.openstreetmap.josm.plugins.mapillary;
+
+public interface MapillaryDataListener {
+	
+	public void selectedImageChanged();
+	
+}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java	(revision 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java	(revision 31261)
@@ -19,4 +19,8 @@
 		return ImageIO.read(file);
 	}
+	
+	public File getFile() {
+		return file;
+	}
 
 	@Override
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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31261)
@@ -54,5 +54,4 @@
 	public final static int SEQUENCE_MAX_JUMP_DISTANCE = 100;
 
-	public static Boolean INSTANCED = false;
 	public static MapillaryLayer INSTANCE;
 	public static CacheAccess<String, BufferedImageCacheEntry> CACHE;
@@ -79,5 +78,4 @@
 	 */
 	private void init() {
-		INSTANCED = true;
 		MapillaryLayer.INSTANCE = this;
 		startMouseAdapter();
@@ -110,4 +108,5 @@
 		}
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, true);
+		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.SIGNAL_MENU, true);
 		download();
 		Main.map.mapView.setActiveLayer(this);
@@ -156,7 +155,7 @@
 		MapillaryToggleDialog.getInstance().mapillaryImageDisplay
 				.setImage(null);
-		INSTANCED = false;
 		MapillaryLayer.INSTANCE = null;
 		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.EXPORT_MENU, false);
+		MapillaryPlugin.setMenuEnabled(MapillaryPlugin.SIGNAL_MENU, false);
 		MapillaryData.INSTANCE = null;
 		Main.map.mapView.removeMouseListener(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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31261)
@@ -50,8 +50,10 @@
 	private final MapillaryExportAction exportAction;
 	private final MapillaryImportAction importAction;
+	private final MapillarySignalAction signalAction;
 
 	public static JMenuItem DOWNLOAD_MENU;
 	public static JMenuItem EXPORT_MENU;
 	public static JMenuItem IMPORT_MENU;
+	public static JMenuItem SIGNAL_MENU;
 
 	public MapillaryPlugin(PluginInformation info) {
@@ -60,4 +62,5 @@
 		exportAction = new MapillaryExportAction();
 		importAction = new MapillaryImportAction();
+		signalAction = new MapillarySignalAction();
 
 		DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
@@ -67,8 +70,11 @@
 		IMPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, importAction,
 				false, 14);
+		SIGNAL_MENU = MainMenu.add(Main.main.menu.dataMenu, signalAction,
+				false);
 
 		EXPORT_MENU.setEnabled(false);
 		DOWNLOAD_MENU.setEnabled(false);
 		IMPORT_MENU.setEnabled(false);
+		SIGNAL_MENU.setEnabled(false);
 
 		MapView.addEditLayerChangeListener(this);
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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31261)
@@ -6,4 +6,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -67,13 +68,15 @@
 			} else if (dialog.group.isSelected(dialog.selected.getModel())) {
 				export(MapillaryData.getInstance().getMultiSelectedImages());
-			} else if (dialog.group.isSelected(dialog.rewrite.getModel())) {
-				ArrayList<MapillaryAbstractImage> images = new ArrayList<>();
-				for (MapillaryAbstractImage image : MapillaryData.getInstance().getMultiSelectedImages())
-					if (image instanceof MapillaryImportedImage) {
-						images.addAll(((MapillaryImage) image).getSequence().getImages());
-					}
-					else
-						images.add(image);
-				export(images);
+			} 
+		 } else if (dialog.group.isSelected(dialog.rewrite.getModel())) {
+			ArrayList<MapillaryImportedImage> images = new ArrayList<>();
+			for (MapillaryAbstractImage image : MapillaryData.getInstance().getImages())
+				if (image instanceof MapillaryImportedImage) {
+					images.add(((MapillaryImportedImage) image));
+				}
+			try {
+				Main.worker.submit(new Thread(new MapillaryExportManager(images)));
+			} catch (IOException e1) {
+				Main.error(e1);
 			}
 		}
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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31261)
@@ -39,5 +39,5 @@
 						tr("Import pictures into Mapillary layer"),
 						KeyEvent.VK_M, Shortcut.NONE), false,
-				"mapillaryDownload", false);
+				"mapillaryImport", 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 31261)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillarySignalAction.java	(revision 31261)
@@ -0,0 +1,26 @@
+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.actions.JosmAction;
+import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryToggleDialog;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public class MapillarySignalAction extends JosmAction {
+
+	public MapillarySignalAction() {
+		super(tr("Switch signal mode"), new ImageProvider("icon24signal.png"),
+				tr("Switch signal mode"), Shortcut.registerShortcut(
+						"Mapillary signal", tr("Switch signal mode on/off"),
+						KeyEvent.VK_M, Shortcut.NONE), false,
+				"mapillarySignal", false);
+	}
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		MapillaryToggleDialog.getInstance().switchMode();
+	}
+}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java	(revision 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java	(revision 31261)
@@ -48,4 +48,20 @@
 		this.path = path;
 	}
+	
+	/**
+	 * Constructor used to rewrite imported images.
+	 * @param images
+	 * @throws IOException
+	 */
+	public MapillaryExportManager(List<MapillaryImportedImage> images) throws IOException {
+		super(tr("Downloading") + "...", new PleaseWaitProgressMonitor(
+				"Exporting Mapillary Images"), true);
+		queue = new ArrayBlockingQueue<>(10);
+		queueImages = new ArrayBlockingQueue<>(10);
+		for (MapillaryImportedImage image : images) {
+			queue.add(image.getImage());
+			queueImages.add(image);
+		}
+	}
 
 	@Override
@@ -57,8 +73,17 @@
 	protected void realRun() throws SAXException, IOException,
 			OsmTransferException {
+		
 		// Starts a writer thread in order to write the pictures on the disk.
 		Thread writer = new Thread(new MapillaryExportWriterThread(path, queue,
-				queueImages, images.size(), this.getProgressMonitor()));
+				queueImages, queue.size(), this.getProgressMonitor()));
 		writer.start();
+		if (path == null) {
+			try {
+				writer.join();
+			} catch (InterruptedException e) {
+				Main.error(e);
+			}
+			return;
+		}
 		ThreadPoolExecutor ex = new ThreadPoolExecutor(20, 35, 25,
 				TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10));
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportWriterThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportWriterThread.java	(revision 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportWriterThread.java	(revision 31261)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
 
 /**
@@ -60,5 +61,9 @@
 				img = queue.take();
 				mimg = queueImages.take();
-				if (mimg instanceof MapillaryImage)
+				if (path == null && mimg instanceof MapillaryImportedImage) {
+					String path = ((MapillaryImportedImage) mimg).getFile().getPath();
+					finalPath = path.substring(0, path.lastIndexOf('.'));
+				}
+				else if (mimg instanceof MapillaryImage)
 					finalPath = path + "/" + ((MapillaryImage) mimg).getKey();
 				else
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignalDownloaderThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignalDownloaderThread.java	(revision 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignalDownloaderThread.java	(revision 31261)
@@ -48,6 +48,6 @@
 					for (MapillaryAbstractImage image : MapillaryData
 							.getInstance().getImages()) {
-						if (((MapillaryImage) image).getKey().equals(key)) {
-							if (image instanceof MapillaryImage) {
+						if (image instanceof MapillaryImage) {
+							if (((MapillaryImage) image).getKey().equals(key)) {
 								if (((MapillaryImage) image).getKey().equals(
 										key)) {
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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31261)
@@ -40,4 +40,5 @@
 			downloadSequences();
 			completeImages();
+			Main.map.statusLine.setHelpText("Downloading signals information");
 			downloadSignals();
 		} catch (InterruptedException 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 31260)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryToggleDialog.java	(revision 31261)
@@ -4,4 +4,5 @@
 
 import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
 import java.awt.image.BufferedImage;
 import java.awt.BorderLayout;
@@ -23,8 +24,10 @@
 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.MapillaryImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.cache.MapillaryCache;
+import org.openstreetmap.josm.tools.Shortcut;
 
 import javax.imageio.ImageIO;
@@ -40,5 +43,5 @@
  */
 public class MapillaryToggleDialog extends ToggleDialog implements
-		ICachedLoaderListener {
+		ICachedLoaderListener, MapillaryDataListener {
 
 	public static MapillaryToggleDialog INSTANCE;
@@ -46,9 +49,21 @@
 	public volatile MapillaryAbstractImage image;
 
-	final SideButton nextButton = new SideButton(new nextPictureAction());
-	final SideButton previousButton = new SideButton(
+	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 List<SideButton> normalMode;
+
+	public final SideButton nextSignalButton = new SideButton(
+			new NextSignalAction());
+	public final SideButton previousSignalButton = new SideButton(
+			new PreviousSignalAction());
+	private List<SideButton> signalMode;
+	// TODO change to enum
+	private int mode;
+
+	public final static int NORMAL_MODE = 0;
+	public final static int SIGNAL_MODE = 0;
 
 	private JPanel buttonsPanel;
@@ -62,5 +77,10 @@
 	public MapillaryToggleDialog() {
 		super(tr("Mapillary image"), "mapillary.png",
-				tr("Open Mapillary window"), null, 200);
+				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();
 
@@ -68,13 +88,15 @@
 		redButton.setForeground(Color.RED);
 
+		normalMode = Arrays.asList(new SideButton[] { blueButton,
+				previousButton, nextButton, redButton });
+		signalMode = Arrays.asList(new SideButton[] { previousSignalButton,
+				nextSignalButton });
+
+		mode = NORMAL_MODE;
 		this.setLayout(new BorderLayout());
 		top = new JPanel();
 		top.setLayout(new BorderLayout());
 		top.add(titleBar, BorderLayout.NORTH);
-
-		createLayout(
-				mapillaryImageDisplay,
-				Arrays.asList(new SideButton[] { blueButton, previousButton,
-						nextButton, redButton }),
+		createLayout(mapillaryImageDisplay, normalMode,
 				Main.pref.getBoolean("mapillary.reverse-buttons"));
 	}
@@ -88,4 +110,22 @@
 	public static void destroyInstance() {
 		INSTANCE = null;
+	}
+
+	public void switchMode() {
+		this.removeAll();
+		List<SideButton> list = null;
+		if (mode == NORMAL_MODE) {
+			list = signalMode;
+			mode = SIGNAL_MODE;
+		} else if (mode == SIGNAL_MODE) {
+			list = normalMode;
+			mode = NORMAL_MODE;
+		}
+		this.setLayout(new BorderLayout());
+		top = new JPanel();
+		top.setLayout(new BorderLayout());
+		top.add(titleBar, BorderLayout.NORTH);
+		createLayout(mapillaryImageDisplay, list,
+				Main.pref.getBoolean("mapillary.reverse-buttons"));
 	}
 
@@ -103,5 +143,5 @@
 			});
 		} else {
-			if (MapillaryLayer.INSTANCED == false) {
+			if (MapillaryLayer.INSTANCE == null) {
 				return;
 			}
@@ -109,11 +149,41 @@
 				return;
 			if (image instanceof MapillaryImage) {
-				this.nextButton.setEnabled(true);
-				this.previousButton.setEnabled(true);
 				MapillaryImage mapillaryImage = (MapillaryImage) this.image;
-				if (mapillaryImage.next() == null)
-					this.nextButton.setEnabled(false);
-				if (mapillaryImage.previous() == null)
-					this.previousButton.setEnabled(false);
+				if (mode == NORMAL_MODE) {
+					this.nextButton.setEnabled(true);
+					this.previousButton.setEnabled(true);
+					if (mapillaryImage.next() == null)
+						this.nextButton.setEnabled(false);
+					if (mapillaryImage.previous() == null)
+						this.previousButton.setEnabled(false);
+				} else if (mode == SIGNAL_MODE) {
+					previousSignalButton.setEnabled(true);
+					nextSignalButton.setEnabled(true);
+					int i = MapillaryData
+							.getInstance()
+							.getImages()
+							.indexOf(
+									MapillaryData.getInstance()
+											.getSelectedImage());
+					int first = -1;
+					int last = -1;
+					int c = 0;
+					for (MapillaryAbstractImage img : MapillaryData
+							.getInstance().getImages()) {
+						if (img instanceof MapillaryImage)
+							if (!((MapillaryImage) img).getSignals().isEmpty()) {
+								if (first == -1)
+									first = c;
+								last = c;
+							}
+						c++;
+					}
+					if (first >= i) {
+						previousSignalButton.setEnabled(false);
+					}
+					if (last <= i) {
+						nextSignalButton.setEnabled(false);
+					}
+				}
 
 				mapillaryImageDisplay.hyperlink.setURL(mapillaryImage.getKey());
@@ -130,6 +200,5 @@
 						MapillaryCache.Type.FULL_IMAGE);
 				imageCache.submit(this, false);
-			}
-			else if (image instanceof MapillaryImportedImage) {
+			} else if (image instanceof MapillaryImportedImage) {
 				this.nextButton.setEnabled(false);
 				this.previousButton.setEnabled(false);
@@ -314,3 +383,64 @@
 		add(top, BorderLayout.NORTH);
 	}
+
+	@Override
+	public void selectedImageChanged() {
+		setImage(MapillaryData.getInstance().getSelectedImage());
+		updateImage();
+	}
+
+	class NextSignalAction extends AbstractAction {
+		public NextSignalAction() {
+			putValue(NAME, tr("Next Signal"));
+			putValue(SHORT_DESCRIPTION,
+					tr("Jumps to the next picture that contains a siganl"));
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			if (MapillaryToggleDialog.getInstance().getImage() != null) {
+				int i = MapillaryData
+						.getInstance()
+						.getImages()
+						.indexOf(MapillaryData.getInstance().getSelectedImage());
+				for (int j = i + 1; j < MapillaryData.getInstance().getImages()
+						.size(); j++) {
+					MapillaryAbstractImage img = MapillaryData.getInstance()
+							.getImages().get(j);
+					if (img instanceof MapillaryImage)
+						if (!((MapillaryImage) img).getSignals().isEmpty()) {
+							MapillaryData.getInstance().setSelectedImage(img);
+							return;
+						}
+				}
+			}
+		}
+	}
+
+	class PreviousSignalAction extends AbstractAction {
+		public PreviousSignalAction() {
+			putValue(NAME, tr("Previous Signal"));
+			putValue(SHORT_DESCRIPTION,
+					tr("Jumps to the previous picture that contains a siganl"));
+		}
+
+		@Override
+		public void actionPerformed(ActionEvent e) {
+			if (MapillaryToggleDialog.getInstance().getImage() != null) {
+				int i = MapillaryData
+						.getInstance()
+						.getImages()
+						.indexOf(MapillaryData.getInstance().getSelectedImage());
+				for (int j = i - 1; j >= 0; j--) {
+					MapillaryAbstractImage img = MapillaryData.getInstance()
+							.getImages().get(j);
+					if (img instanceof MapillaryImage)
+						if (!((MapillaryImage) img).getSignals().isEmpty()) {
+							MapillaryData.getInstance().setSelectedImage(img);
+							return;
+						}
+				}
+			}
+		}
+	}
 }
