Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31277)
@@ -132,7 +132,11 @@
 	
 	public String getDate() {
+		return getDate("dd/MM/yyyy - hh:mm:ss");
+	}
+	
+	public String getDate(String format) {
 		Date date = new Date(getCapturedAt());
 
-		SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy - hh:mm:ss");
+		SimpleDateFormat formatter = new SimpleDateFormat(format);
 		return formatter.format(date);
 	}
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java	(revision 31277)
@@ -13,8 +13,11 @@
 	 */
 	protected File file;
+	public final String datetimeOriginal;
 
-	public MapillaryImportedImage(double lat, double lon, double ca, File file) {
+	public MapillaryImportedImage(double lat, double lon, double ca, File file, String datetimeOriginal) {
 		super(lat, lon, ca);
 		this.file = file;
+		System.out.println(datetimeOriginal);
+		this.datetimeOriginal = datetimeOriginal;
 	}
 
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31277)
@@ -4,4 +4,5 @@
 
 import org.apache.commons.jcs.access.CacheAccess;
+import org.openstreetmap.josm.plugins.mapillary.actions.MapillaryDownloadViewAction;
 import org.openstreetmap.josm.plugins.mapillary.cache.MapillaryCache;
 import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryDownloader;
@@ -46,4 +47,5 @@
 import javax.swing.Action;
 import javax.swing.Icon;
+import javax.swing.JOptionPane;
 
 import java.util.List;
@@ -53,5 +55,6 @@
 		DataSetListener, EditLayerChangeListener, LayerChangeListener {
 
-	public final static int SEQUENCE_MAX_JUMP_DISTANCE = 100;
+	public final static int SEQUENCE_MAX_JUMP_DISTANCE = Main.pref.getInteger(
+			"mapillary.sequence-max-jump-distance", 100);
 
 	public static MapillaryLayer INSTANCE;
@@ -62,5 +65,5 @@
 	private final MapillaryData mapillaryData = MapillaryData.getInstance();
 
-	private List<Bounds> bounds;
+	public List<Bounds> bounds;
 
 	private MapillaryToggleDialog mtd;
@@ -68,7 +71,9 @@
 
 	private MouseAdapter mouseAdapter;
-	
-    int highlightPointRadius = Main.pref.getInteger("mappaint.highlight.radius", 7);
-    private int highlightStep = Main.pref.getInteger("mappaint.highlight.step", 4);
+
+	int highlightPointRadius = Main.pref.getInteger(
+			"mappaint.highlight.radius", 7);
+	private int highlightStep = Main.pref.getInteger("mappaint.highlight.step",
+			4);
 
 	public MapillaryLayer() {
@@ -128,7 +133,11 @@
 
 	/**
-	 * Downloads all images of the area covered by the OSM data.
+	 * Downloads all images of the area covered by the OSM data. This is only
+	 * just for automatic download.
 	 */
 	public void download() {
+		checkBigAreas();
+		if (Main.pref.getBoolean("mapillary.download-manually"))
+			return;
 		for (Bounds bounds : Main.map.mapView.getEditLayer().data
 				.getDataSourceBounds()) {
@@ -141,4 +150,19 @@
 	}
 
+	private void checkBigAreas() {
+		double area = 0;
+		for (Bounds bounds : Main.map.mapView.getEditLayer().data
+				.getDataSourceBounds()) {
+			area += bounds.getArea();
+		}
+		if (area > MapillaryDownloadViewAction.MAX_AREA) {
+			Main.pref.put("mapillary.download-manually", true);
+			JOptionPane
+					.showMessageDialog(
+							Main.parent,
+							tr("The downloaded OSM area is too big. Download mode has been change to manual. You can change this back to automatic in preferences settings."));
+		}
+	}
+
 	/**
 	 * Returns the MapillaryData object, which acts as the database of the
@@ -158,4 +182,5 @@
 		MapillaryToggleDialog.getInstance().mapillaryImageDisplay
 				.setImage(null);
+		MapillaryData.getInstance().getImages().clear();
 		MapillaryLayer.INSTANCE = null;
 		MapillaryData.INSTANCE = null;
@@ -252,24 +277,26 @@
 		}
 	}
-	
+
 	/**
 	 * Draws the highlight of the icon.
+	 * 
 	 * @param g
 	 * @param p
 	 * @param size
 	 */
-    private void drawPointHighlight(Graphics2D g, Point p, int size) {
-    	Color oldColor = g.getColor();
-        Color highlightColor = PaintColors.HIGHLIGHT.get();
-        Color highlightColorTransparent = new Color(highlightColor.getRed(), highlightColor.getGreen(), highlightColor.getBlue(), 100);
-        g.setColor(highlightColorTransparent);
-        int s = size + highlightPointRadius;
-        while(s >= size) {
-            int r = (int) Math.floor(s/2d);
-            g.fillRoundRect(p.x-r, p.y-r, s, s, r, r);
-            s -= highlightStep;
-        }
-        g.setColor(oldColor);
-    }
+	private void drawPointHighlight(Graphics2D g, Point p, int size) {
+		Color oldColor = g.getColor();
+		Color highlightColor = PaintColors.HIGHLIGHT.get();
+		Color highlightColorTransparent = new Color(highlightColor.getRed(),
+				highlightColor.getGreen(), highlightColor.getBlue(), 100);
+		g.setColor(highlightColorTransparent);
+		int s = size + highlightPointRadius;
+		while (s >= size) {
+			int r = (int) Math.floor(s / 2d);
+			g.fillRoundRect(p.x - r, p.y - r, s, s, r, r);
+			s -= highlightStep;
+		}
+		g.setColor(oldColor);
+	}
 
 	/**
@@ -305,5 +332,4 @@
 	}
 
-
 	@Override
 	public Icon getIcon() {
@@ -319,5 +345,5 @@
 	public void mergeFrom(Layer from) {
 		throw new UnsupportedOperationException(
-				"Notes layer does not support merging yet");
+				"This layer does not support merging yet");
 	}
 
@@ -458,10 +484,9 @@
 		if (newLayer == this) {
 			if (MapillaryData.getInstance().getImages().size() > 0)
-				Main.map.statusLine.setHelpText(tr("Total images: ")
-						+ MapillaryData.getInstance().getImages().size());
+				Main.map.statusLine.setHelpText(tr("Total images: {0}",
+						MapillaryData.getInstance().getImages().size()));
 			else
 				Main.map.statusLine.setHelpText(tr("No images found"));
 		}
-
 	}
 
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryMouseAdapter.java	(revision 31277)
@@ -42,5 +42,6 @@
 			return;
 		MapillaryAbstractImage closestTemp = getClosest(e.getPoint());
-		if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer && closestTemp != null) {
+		if (Main.map.mapView.getActiveLayer() instanceof OsmDataLayer
+				&& closestTemp != null) {
 			this.lastClicked = this.closest;
 			MapillaryData.getInstance().setSelectedImage(closestTemp);
@@ -134,4 +135,11 @@
 		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()) {
@@ -141,4 +149,5 @@
 				for (MapillaryAbstractImage img : MapillaryData.getInstance()
 						.getMultiSelectedImages()) {
+
 					img.move(to.getX() - from.getX(), to.getY() - from.getY());
 				}
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31277)
@@ -52,4 +52,5 @@
 	private final MapillarySignAction signAction;
 	private final MapillaryZoomAction zoomAction;
+	private final MapillaryDownloadViewAction downloadViewAction;
 
 	public static JMenuItem DOWNLOAD_MENU;
@@ -58,4 +59,5 @@
 	public static JMenuItem SIGN_MENU;
 	public static JMenuItem ZOOM_MENU;
+	public static JMenuItem DOWNLOAD_VIEW_MENU;
 
 	public MapillaryPlugin(PluginInformation info) {
@@ -66,4 +68,5 @@
 		signAction = new MapillarySignAction();
 		zoomAction = new MapillaryZoomAction();
+		downloadViewAction = new MapillaryDownloadViewAction();
 
 		DOWNLOAD_MENU = MainMenu.add(Main.main.menu.imageryMenu,
@@ -73,9 +76,10 @@
 		IMPORT_MENU = MainMenu.add(Main.main.menu.fileMenu, importAction,
 				false, 14);
-		SIGN_MENU = MainMenu
-				.add(Main.main.menu.dataMenu, signAction, false);
+		SIGN_MENU = MainMenu.add(Main.main.menu.dataMenu, signAction, false);
 		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);
@@ -83,4 +87,5 @@
 		SIGN_MENU.setEnabled(false);
 		ZOOM_MENU.setEnabled(false);
+		DOWNLOAD_VIEW_MENU.setEnabled(false);
 
 		MapView.addEditLayerChangeListener(this);
@@ -119,7 +124,9 @@
 			DOWNLOAD_MENU.setEnabled(true);
 			IMPORT_MENU.setEnabled(true);
+			DOWNLOAD_VIEW_MENU.setEnabled(true);
 		} else if (oldLayer != null && newLayer == null) {
 			DOWNLOAD_MENU.setEnabled(false);
 			IMPORT_MENU.setEnabled(false);
+			DOWNLOAD_VIEW_MENU.setEnabled(false);
 		}
 	}
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31277)
@@ -14,7 +14,7 @@
 	private final List<MapillaryImage> images;
 	private final String key;
-	private final int created_at;
+	private final long created_at;
 
-	public MapillarySequence(String key, int created_at) {
+	public MapillarySequence(String key, long created_at) {
 		this.images = new ArrayList<>();
 		this.key = key;
@@ -31,5 +31,5 @@
 	}
 
-	public int getCreatedAt() {
+	public long getCreatedAt() {
 		return created_at;
 	}
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadAction.java	(revision 31277)
@@ -9,5 +9,4 @@
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -23,5 +22,4 @@
  */
 public class MapillaryDownloadAction extends JosmAction {
-	MapillaryLayer layer;
 
 	public MapillaryDownloadAction() {
@@ -36,15 +34,10 @@
 	@Override
 	public void actionPerformed(ActionEvent arg0) {
-		this.layer = null;
-		for (Layer layer : Main.map.mapView.getAllLayers())
-			if (layer instanceof MapillaryLayer)
-				this.layer = (MapillaryLayer) layer;
-
-		if (this.layer == null) {
-			layer = new MapillaryLayer();
-			layer.download();
-		} else {
-			if (Main.map.mapView.getActiveLayer() != layer)
-				Main.map.mapView.setActiveLayer(layer);
+		if (MapillaryLayer.INSTANCE == null)
+			MapillaryLayer.getInstance().download();
+		else {
+			if (Main.map.mapView.getActiveLayer() != MapillaryLayer
+					.getInstance())
+				Main.map.mapView.setActiveLayer(MapillaryLayer.getInstance());
 			else
 				Main.map.mapView
@@ -52,3 +45,4 @@
 		}
 	}
+
 }
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 31277)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryDownloadViewAction.java	(revision 31277)
@@ -0,0 +1,46 @@
+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 javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
+import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryDownloader;
+import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public class MapillaryDownloadViewAction extends JosmAction {
+
+	public static double MAX_AREA = Main.pref.getDouble(
+			"mapillary.max-download-area", 0.025);
+
+	public MapillaryDownloadViewAction() {
+		super(tr("Download Mapillary images in current view"),
+				new ImageProvider("icon24.png"),
+				tr("Download Mapillary images in current view"),
+				Shortcut.registerShortcut("Mapillary area",
+						tr("Download Mapillary images in current view"),
+						KeyEvent.VK_M, Shortcut.NONE), false, "mapillaryArea",
+				false);
+		this.setEnabled(false);
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent arg0) {
+		MapillaryLayer.getInstance();
+		MapillaryLayer.getInstance().bounds.add(Main.map.mapView
+				.getRealBounds());
+		if (Main.map.mapView.getRealBounds().getArea() <= MAX_AREA) {
+			new MapillaryDownloader().getImages(Main.map.mapView
+					.getRealBounds());
+		} else {
+			JOptionPane.showMessageDialog(Main.parent,
+					tr("This area too big to be downloaded"));
+		}
+	}
+}
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31277)
@@ -7,4 +7,6 @@
 import java.io.File;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 
 import javax.swing.JFileChooser;
@@ -17,4 +19,5 @@
 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.imaging.formats.tiff.TiffField;
+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
 import org.openstreetmap.josm.Main;
@@ -114,4 +117,10 @@
 			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;
@@ -129,11 +138,12 @@
 			if (lon_ref.getValue().toString().equals("W"))
 				lonValue = -lonValue;
-			if (latValue != 0 && lonValue != 0) {
+			if (datetimeOriginal != null)
 				MapillaryData.getInstance().add(
 						new MapillaryImportedImage(latValue, lonValue, caValue,
-								file));
-			} else {
-				readNoTags(file);
-			}
+								file, datetimeOriginal.getStringValue()));
+			else
+				MapillaryData.getInstance().add(
+						new MapillaryImportedImage(latValue, lonValue, caValue,
+								file, currentDate()));
 		}
 	}
@@ -156,5 +166,5 @@
 		MapillaryData.getInstance().add(
 				new MapillaryImportedImage(pos.lat(), pos.lon() + horDev, 0,
-						file));
+						file, currentDate()));
 		noTagsPics++;
 	}
@@ -171,3 +181,11 @@
 				/ 3600;
 	}
+	
+	private String currentDate() {
+		   Calendar cal = Calendar.getInstance();
+
+			SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
+			return formatter.format(cal);
+	
+	}
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java	(revision 31277)
@@ -48,11 +48,16 @@
 		url2 += buildParameters(hash);
 		url3 += buildParameters(hash);
+		System.out.println(url2);
 		
 		try {
 			Main.info("MapillaryPlugin GET " + url2);
-			Main.worker.submit(new MapillarySquareDownloadManagerThread(url1, url2, url3, new Bounds(minLatLon, maxLatLon)));
+			Main.worker.submit(new MapillarySquareDownloadManagerThread(url1, url2, url3));
 		} catch (Exception e) {
 			Main.error(e);
 		}
+	}
+	
+	public void getImages(Bounds bounds) {
+		getImages(bounds.getMin(), bounds.getMax());
 	}
 
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java	(revision 31277)
@@ -35,4 +35,5 @@
 	ArrayBlockingQueue<MapillaryAbstractImage> queueImages;
 
+	final int amount;
 	List<MapillaryAbstractImage> images;
 	String path;
@@ -46,4 +47,5 @@
 
 		this.images = images;
+		amount = images.size();
 		this.path = path;
 	}
@@ -63,4 +65,5 @@
 			queueImages.add(image);
 		}
+		amount = images.size();		
 	}
 
@@ -73,8 +76,7 @@
 	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, queue.size(), this.getProgressMonitor()));
+				queueImages, amount, this.getProgressMonitor()));
 		writer.start();
 		if (path == null) {
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportWriterThread.java	(revision 31277)
@@ -15,4 +15,5 @@
 import org.apache.commons.imaging.common.RationalNumber;
 import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
 import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
@@ -62,8 +63,8 @@
 				mimg = queueImages.take();
 				if (path == null && mimg instanceof MapillaryImportedImage) {
-					String path = ((MapillaryImportedImage) mimg).getFile().getPath();
+					String path = ((MapillaryImportedImage) mimg).getFile()
+							.getPath();
 					finalPath = path.substring(0, path.lastIndexOf('.'));
-				}
-				else if (mimg instanceof MapillaryImage)
+				} else if (mimg instanceof MapillaryImage)
 					finalPath = path + "/" + ((MapillaryImage) mimg).getKey();
 				else
@@ -76,6 +77,5 @@
 				// Write EXIF tags
 				TiffOutputSet outputSet = new TiffOutputSet();
-				TiffOutputDirectory exifDirectory = outputSet
-						.getOrCreateGPSDirectory();
+				TiffOutputDirectory exifDirectory = outputSet.getOrCreateExifDirectory();
 				exifDirectory
 						.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION_REF,
@@ -83,4 +83,13 @@
 				exifDirectory.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION,
 						RationalNumber.valueOf(mimg.getCa()));
+				if (mimg instanceof MapillaryImportedImage) {
+					exifDirectory.add(
+							ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL,
+							((MapillaryImportedImage) mimg).datetimeOriginal);
+				}
+				else if (mimg instanceof MapillaryImage) 
+					exifDirectory.add(
+							ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL,
+							((MapillaryImage) mimg).getDate("yyyy/MM/dd hh/mm/ss"));
 				outputSet.setGPSInDegrees(mimg.getLatLon().lon(), mimg
 						.getLatLon().lat());
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31277)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.MapillarySequence;
 
@@ -33,11 +34,10 @@
 	private String url;
 	private ExecutorService ex;
-	private Bounds bounds;
+	private List<Bounds> bounds;
 
-	public MapillarySequenceDownloadThread(ExecutorService ex, String url,
-			Bounds bounds) {
+	public MapillarySequenceDownloadThread(ExecutorService ex, String url) {
 		this.url = url;
 		this.ex = ex;
-		this.bounds = bounds;
+		this.bounds = MapillaryLayer.getInstance().bounds;
 	}
 
@@ -77,11 +77,6 @@
 				MapillarySequence sequence = new MapillarySequence(
 						jsonobj.getString("key"), jsonobj.getJsonNumber(
-								"captured_at").intValue());
-				for (MapillaryAbstractImage mimage : MapillaryData
-						.getInstance().getImages())
-					if (mimage instanceof MapillaryImage
-							&& ((MapillaryImage) mimage).getSequence().getKey()
-									.equals(sequence.getKey()))
-						break;
+								"captured_at").longValue());
+								
 				int first = -1;
 				int last = -1;
@@ -91,10 +86,10 @@
 				// area.
 				for (MapillaryAbstractImage img : images) {
-					if (first == -1 && bounds.contains(img.getLatLon()))
+					if (first == -1 && isInside(img))
 						first = pos;
 					else if (first != -1 && last == -1
-							&& !bounds.contains(img.getLatLon()))
+							&& !isInside(img))
 						last = pos;
-					else if (last != -1 && bounds.contains(img.getLatLon()))
+					else if (last != -1 && isInside(img))
 						last = -1;
 					pos++;
@@ -107,4 +102,5 @@
 				List<MapillaryImage> finalImages = images.subList(first, last);
 				for (MapillaryImage img : finalImages) {
+					MapillaryData.getInstance().getImages().remove(img);
 					img.setSequence(sequence);
 				}
@@ -118,3 +114,11 @@
 		}
 	}
+	
+	private boolean isInside(MapillaryAbstractImage image) {
+		for (int i = 0; i < bounds.size(); i++) {
+			if (bounds.get(i).contains(image.getLatLon()))
+				return true;
+		}
+		return false;
+	}
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignDownloaderThread.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignDownloaderThread.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySignDownloaderThread.java	(revision 31277)
@@ -48,5 +48,5 @@
 						rects = rectversions.getJsonObject(j).getJsonArray("rects");
 						for (int k = 0; k < rects.size(); k++) {
-							JsonObject data = rects.getJsonObject(j);
+							JsonObject data = rects.getJsonObject(k);
 							for (MapillaryAbstractImage image : MapillaryData
 									.getInstance().getImages())
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31277)
@@ -8,5 +8,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 
@@ -25,12 +24,10 @@
 	private final String urlSequences;
 	private final String urlSigns;
-	private final Bounds bounds;
 
 	public MapillarySquareDownloadManagerThread(String urlImages,
-			String urlSequences, String urlSigns, Bounds bounds) {
+			String urlSequences, String urlSigns) {
 		this.urlImages = urlImages;
 		this.urlSequences = urlSequences;
 		this.urlSigns = urlSigns;
-		this.bounds = bounds;
 	}
 
@@ -39,6 +36,7 @@
 		try {
 			downloadSequences();
+			Main.map.statusLine.setHelpText("Downloading image's information");
 			completeImages();
-			Main.map.statusLine.setHelpText("Downloading signs information");
+			Main.map.statusLine.setHelpText("Downloading signs");
 			downloadSigns();
 		} catch (InterruptedException e) {
@@ -59,5 +57,5 @@
 		while (!ex.isShutdown()) {
 			ex.execute(new MapillarySequenceDownloadThread(ex, urlSequences
-					+ "&page=" + page + "&limit=1", bounds));
+					+ "&page=" + page + "&limit=1"));
 			while (ex.getQueue().remainingCapacity() == 0)
 				Thread.sleep(100);
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java	(revision 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryImageDisplay.java	(revision 31277)
@@ -21,4 +21,6 @@
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.Main;
+
 /**
  * This object is a responsible JComponent which lets you zoom and drag. It is
@@ -31,7 +33,7 @@
 public class MapillaryImageDisplay extends JComponent {
 
-	private static final int DRAG_BUTTON = 3;
-	private static final int OPTION_BUTTON = 2;
-	private static final int ZOOM_BUTTON = 1;
+	private static final int DRAG_BUTTON = Main.pref.getInteger("mapillary.picture-drag-button", 3);
+	private static final int OPTION_BUTTON = Main.pref.getInteger("mapillary.picture-option-button", 2);
+	private static final int ZOOM_BUTTON = Main.pref.getInteger("mapillary.picture-zoom-button", 1);
 
 	/** The image currently displayed */
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 31276)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 31277)
@@ -14,5 +14,7 @@
 public class MapillaryPreferenceSetting implements SubPreferenceSetting {
 
-	private JCheckBox reverseButtons = new JCheckBox(tr("Reverse buttons position when displaying images."));;
+	private JCheckBox reverseButtons = new JCheckBox(tr("Reverse buttons position when displaying images."));
+	private JCheckBox downloadMode = new JCheckBox(tr("Download images manually"));
+
 	
 	@Override
@@ -26,7 +28,9 @@
 		
 		reverseButtons.setSelected(Main.pref.getBoolean("mapillary.reverse-buttons"));
+		downloadMode.setSelected(Main.pref.getBoolean("mapillary.download-manually"));
 		
+		panel.setLayout(new FlowLayout(FlowLayout.LEFT));
 		panel.add(reverseButtons);
-		panel.setLayout(new FlowLayout(FlowLayout.LEFT));
+		panel.add(downloadMode);
         gui.getDisplayPreference().addSubTab(this, "Mapillary", panel);
 	}
@@ -36,4 +40,5 @@
         boolean mod = false;
         Main.pref.put("mapillary.reverse-buttons", reverseButtons.isSelected());
+        Main.pref.put("mapillary.download-manually", downloadMode.isSelected());
         return mod;
 	}
