Index: /applications/editors/josm/plugins/MicrosoftStreetside/build.xml
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/build.xml	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/build.xml	(revision 34348)
@@ -13,4 +13,5 @@
 	<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
 	<property name="plugin.main.version" value="13860" />
+	<property name="plugin.version" value="13860" />
 	
   <property name="plugin.author" value="renerr18" />
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideImage.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideImage.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideImage.java	(revision 34348)
@@ -48,7 +48,4 @@
   private double pi;
 
-  // Heading (equivalent to Mapillary cd attribute - not currently supported.
-  private double he;
-
   // Blurring instructions - not currently used by the plugin
   private String bl;
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadAction.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadAction.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadAction.java	(revision 34348)
@@ -47,9 +47,5 @@
   @Override
   public void actionPerformed(ActionEvent ae) {
-    if (!StreetsideLayer.hasInstance()) {
-      // A new streetside layer is created, so the active layer is not changed
-      StreetsideLayer.getInstance();
-      return;
-    } else if (!MainApplication.getLayerManager().containsLayer(StreetsideLayer.getInstance())) {
+    if (!StreetsideLayer.hasInstance() || !MainApplication.getLayerManager().containsLayer(StreetsideLayer.getInstance())) {
       MainApplication.getLayerManager().addLayer(StreetsideLayer.getInstance());
       return;
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadViewAction.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadViewAction.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideDownloadViewAction.java	(revision 34348)
@@ -26,5 +26,4 @@
 
   private static final long serialVersionUID = 6738276777802831669L;
-
   private static final String DESCRIPTION = I18n.marktr("Download Streetside images in current view");
 
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideExportAction.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideExportAction.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideExportAction.java	(revision 34348)
@@ -63,6 +63,6 @@
     cancel.addActionListener(e -> pane.setValue(JOptionPane.CANCEL_OPTION));
 
-    dialog = new StreetsideExportDialog(ok);
-    pane.setMessage(dialog);
+    this.dialog = new StreetsideExportDialog(ok);
+    pane.setMessage(this.dialog);
     pane.setOptions(new JButton[] {ok, cancel});
 
@@ -74,8 +74,8 @@
     if (pane.getValue() != null
         && (int) pane.getValue() == JOptionPane.OK_OPTION
-        && dialog.chooser != null) {
-      if (dialog.group.isSelected(dialog.all.getModel())) {
+        && this.dialog.chooser != null) {
+      if (this.dialog.group.isSelected(this.dialog.all.getModel())) {
         export(StreetsideLayer.getInstance().getData().getImages());
-      } else if (dialog.group.isSelected(dialog.sequence.getModel())) {
+      } else if (this.dialog.group.isSelected(this.dialog.sequence.getModel())) {
         Set<StreetsideAbstractImage> images = new ConcurrentSkipListSet<>();
         for (StreetsideAbstractImage image : StreetsideLayer.getInstance().getData().getMultiSelectedImages()) {
@@ -89,9 +89,9 @@
         }
         export(images);
-      } else if (dialog.group.isSelected(dialog.selected.getModel())) {
+      } else if (this.dialog.group.isSelected(dialog.selected.getModel())) {
         export(StreetsideLayer.getInstance().getData().getMultiSelectedImages());
       }
       // This option ignores the selected directory.
-    } else if (dialog.group.isSelected(dialog.rewrite.getModel())) {
+    } else if (this.dialog.group.isSelected(dialog.rewrite.getModel())) {
       ArrayList<StreetsideImportedImage> images = new ArrayList<>();
       StreetsideLayer.getInstance().getData().getImages().stream().filter(img -> img instanceof StreetsideImportedImage).forEach(img -> images.add((StreetsideImportedImage) img));
@@ -113,5 +113,5 @@
   public void export(Set<StreetsideAbstractImage> images) {
     MainApplication.worker.execute(new StreetsideExportManager(images,
-        dialog.chooser.getSelectedFile().toString()));
+        this.dialog.chooser.getSelectedFile().toString()));
   }
 
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideWalkAction.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideWalkAction.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideWalkAction.java	(revision 34348)
@@ -55,5 +55,5 @@
     if (pane.getValue() != null
         && (int) pane.getValue() == JOptionPane.OK_OPTION) {
-      thread = new WalkThread((int) dialog.spin.getValue(),
+      this.thread = new WalkThread((int) dialog.spin.getValue(),
           dialog.waitForPicture.isSelected(),
           dialog.followSelection.isSelected(), dialog.goForward.isSelected());
@@ -76,5 +76,5 @@
    */
   public void addListener(WalkListener lis) {
-    listeners.add(lis);
+    this.listeners.add(lis);
   }
 
@@ -86,13 +86,13 @@
    */
   public void removeListener(WalkListener lis) {
-    listeners.remove(lis);
+    this.listeners.remove(lis);
   }
 
   private void fireWalkStarted() {
-    if (listeners.isEmpty()) {
+    if (this.listeners.isEmpty()) {
       return;
     }
-    for (WalkListener lis : listeners) {
-      lis.walkStarted(thread);
+    for (WalkListener lis : this.listeners) {
+      lis.walkStarted(this.thread);
     }
   }
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideZoomAction.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideZoomAction.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideZoomAction.java	(revision 34348)
@@ -6,10 +6,9 @@
 import java.awt.event.ActionEvent;
 
-import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
-
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideDataListener;
+import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
 import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
 import org.openstreetmap.josm.tools.ImageProvider;
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapBuilder.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapBuilder.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapBuilder.java	(revision 34348)
@@ -44,26 +44,26 @@
 	}
 
-	@Override
-	public void selectedImageChanged(StreetsideAbstractImage oldImage, StreetsideAbstractImage newImage) {
-		startTime = System.currentTimeMillis();
-
-		if (newImage != null) {
-
-			cubemap = null;
-			cubemap = new StreetsideCubemap(newImage.getId(), newImage.getLatLon(), newImage.getHe());
-			cubemap.setCd(newImage.getCd());
-
-			// download cubemap images in different threads and then subsequently
-			// set the cubeface images in JavaFX
-			downloadCubemapImages(cubemap.getId());
-		}
-	}
-
-	public void reload(String imageId) {
-		if (cubemap != null && imageId.equals(cubemap.getId())) {
-			CubemapBuilder.getInstance().getCubemap().resetFaces2TileMap();
-			downloadCubemapImages(imageId);
-		}
-	}
+  @Override
+  public void selectedImageChanged(StreetsideAbstractImage oldImage, StreetsideAbstractImage newImage) {
+    startTime = System.nanoTime();
+
+    if (newImage != null) {
+
+      cubemap = null;
+      cubemap = new StreetsideCubemap(newImage.getId(), newImage.getLatLon(), newImage.getHe());
+      cubemap.setCd(newImage.getCd());
+
+      // download cubemap images in different threads and then subsequently
+      // set the cubeface images in JavaFX
+      downloadCubemapImages(cubemap.getId());
+    }
+  }
+
+  public void reload(String imageId) {
+    if (cubemap != null && imageId.equals(cubemap.getId())) {
+      CubemapBuilder.getInstance().getCubemap().resetFaces2TileMap();
+      downloadCubemapImages(imageId);
+    }
+  }
 
 	public void downloadCubemapImages(String imageId) {
@@ -75,5 +75,5 @@
 		int fails = 0;
 
-		long startTime = System.currentTimeMillis();
+		long startTime = System.nanoTime();
 
 		try {
@@ -102,6 +102,6 @@
 				for (Future<String> ff : results) {
 
-					Logging.debug(I18n.tr("Completed tile downloading task {0} in {1}", ff.get(),
-							CubemapUtils.msToString(startTime - System.currentTimeMillis())));
+					Logging.info(I18n.tr("Completed tile downloading task {0} in {1}", ff.get(),
+							CubemapUtils.msToString(startTime - System.nanoTime())));
 				}
 
@@ -115,5 +115,5 @@
 									+ String.valueOf(Integer.valueOf(j).toString() + Integer.valueOf(k).toString()));
 							tasks.add(new TileDownloadingTask(tileId));
-							Logging.debug(
+							Logging.info(
 									I18n.tr("Starting tile downloading task for imageId {0}, cubeface {1}, tileID {2}",
 											imageId, CubemapUtils.getFaceNumberForCount(i), tileId));
@@ -124,6 +124,6 @@
 				List<Future<String>> results = pool.invokeAll(tasks);
 				for (Future<String> ff : results) {
-					Logging.info(I18n.tr("Completed tile downloading task {0} in {1}", ff.get(),
-							CubemapUtils.msToString(startTime - System.currentTimeMillis())));
+					Logging.debug(I18n.tr("Completed tile downloading task {0} in {1}", ff.get(),
+							CubemapUtils.msToString(startTime - System.nanoTime())));
 				}
 			}
@@ -134,8 +134,8 @@
 		}
 
-		long stopTime = System.currentTimeMillis();
+		long stopTime = System.nanoTime();
 		long runTime = stopTime - startTime;
 
-		Logging.info(I18n.tr("Tile imagery downloading tasks completed in {0}", CubemapUtils.msToString(runTime)));
+		Logging.info(I18n.tr("Imagery downloading tasks completed for all tiles in {0} seconds.", runTime % 1000));
 
 		if (fails > 0) {
@@ -164,10 +164,10 @@
 
 		if (tileCount == (CubemapUtils.NUM_SIDES * maxCols * maxRows)) {
-			Logging.info(I18n.tr("{0} tile images ready for building cumbemap faces for cubemap {0}", tileCount,
+			Logging.debug(I18n.tr("{0} tile images ready for building cumbemap faces for cubemap {0}", tileCount,
 					CubemapBuilder.getInstance().getCubemap().getId()));
 
 			buildCubemapFaces();
 		} else {
-			Logging.info(I18n.tr("{0} tile images received for cubemap {1}", Integer.valueOf(tileCount).toString(),
+			Logging.debug(I18n.tr("{0} tile images received for cubemap {1}", Integer.valueOf(tileCount).toString(),
 					CubemapBuilder.getInstance().getCubemap().getId()));
 		}
@@ -246,8 +246,8 @@
 		StreetsideViewerPanel.getThreeSixtyDegreeViewerPanel().repaint();
 
-		long endTime = System.currentTimeMillis();
+		long endTime = System.nanoTime();
 		long runTime = endTime - startTime;
 		Logging.info(I18n.tr("Completed downloading, assembling and setting cubemap imagery for cubemap {0} in {1}",
-				cubemap.getId(), CubemapUtils.msToString(runTime)));
+				cubemap.getId(), runTime));
 	}
 
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/GraphicsUtils.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/GraphicsUtils.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/GraphicsUtils.java	(revision 34348)
@@ -44,64 +44,56 @@
 		BufferedImage res = null;
 
-		int pixelBuffer = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?2:1;
+		int pixelBuffer = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 2 : 1;
 
 		tiles = cropMultiTiledImages(tiles, pixelBuffer);
 
-		int rows = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?4:2; //we assume the no. of rows and cols are known and each chunk has equal width and height
-        int cols = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?4:2;
+		int rows = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 4 : 2; // we assume the no. of rows and
+																						// cols are known and each chunk
+																						// has
+																						// equal width and height
+		int cols = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 4 : 2;
 
-        int chunkWidth, chunkHeight;
+		int chunkWidth, chunkHeight;
 
-        chunkWidth = tiles[0].getWidth();
-        chunkHeight = tiles[0].getHeight();
+		chunkWidth = tiles[0].getWidth();
+		chunkHeight = tiles[0].getHeight();
 
-        //Initializing the final image
-        BufferedImage img = new BufferedImage(chunkWidth*cols, chunkHeight*rows, BufferedImage.TYPE_INT_ARGB);
+		// Initializing the final image
+		BufferedImage img = new BufferedImage(chunkWidth * cols, chunkHeight * rows, BufferedImage.TYPE_INT_ARGB);
 
-        int num = 0;
-        for (int i = 0; i < rows; i++) {
-            for (int j = 0; j < cols; j++) {
-                // TODO: this makes the image a mirror image. why!?!
-            	img.createGraphics().drawImage(tiles[num], chunkWidth * j, chunkHeight * i, null);
+		int num = 0;
+		for (int i = 0; i < rows; i++) {
+			for (int j = 0; j < cols; j++) {
+				// TODO: mirror image
+				img.createGraphics().drawImage(tiles[num], chunkWidth * j, chunkHeight * i, null);
 
-            	// TODO: remove file test!
-            	/*try {
-        			ImageIO.write(img, "jpeg", new File("/Users/renerr18/Desktop/TileImagesTest/tile16b" + Long.valueOf(System.currentTimeMillis()).toString() + "createGraphicsAfter.jpeg"));
-        			//ImageIO.write(res[i], "jpeg", outputfileAfter);
-        		} catch (IOException e) {
-        			// TODO Auto-generated catch block
-        			e.printStackTrace();
-        		}*/
+				int width = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 1014 : 510;
+				int height = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 1014 : 510;
 
-                int width = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?1014:510;
-                int height = StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?1014:510;
+				res = new BufferedImage(StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 1014 : 510,
+						StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 1014 : 510,
+						BufferedImage.TYPE_INT_ARGB);
 
-                // BufferedImage for mirror image
-                res = new BufferedImage(StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?1014:510, StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()?1014:510,
-                                                BufferedImage.TYPE_INT_ARGB);
+				// Create mirror image pixel by pixel
+				for (int y = 0; y < height; y++) {
+					for (int lx = 0, rx = width - 1; lx < width; lx++, rx--) {
+						// lx starts from the left side of the image
+						// rx starts from the right side of the image
+						// lx is used since we are getting pixel from left side
+						// rx is used to set from right side
+						// get source pixel value
+						int p = img.getRGB(lx, y);
 
-                // Create mirror image pixel by pixel
-                for (int y = 0; y < height; y++)
-                {
-                    for (int lx = 0, rx = width - 1; lx < width; lx++, rx--)
-                    {
-                        // lx starts from the left side of the image
-                        // rx starts from the right side of the image
-                        // lx is used since we are getting pixel from left side
-                        // rx is used to set from right side
-                        // get source pixel value
-                        int p = img.getRGB(lx, y);
+						// set mirror image pixel value
+						res.setRGB(rx, y, p);
+					}
+				}
+				num++;
+			}
+		}
 
-                        // set mirror image pixel value
-                        res.setRGB(rx, y, p);
-                    }
-                }
-                num++;
-            }
-        }
+		Logging.debug("Image concatenated.....");
 
-        Logging.info("Image concatenated.....");
-
-        return res;
+		return res;
 	}
 
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTask.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTask.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTask.java	(revision 34348)
@@ -22,5 +22,5 @@
 
 	private String tileId;
-	private final long startTime = System.currentTimeMillis();
+	private final long startTime = System.nanoTime();
 	private StreetsideCache cache;
 	protected CubemapBuilder cb;
@@ -120,7 +120,7 @@
 		fireTileAdded(tileId);
 
-		long endTime = System.currentTimeMillis();
-		long runTime = startTime - endTime;
-		Logging.debug("Loaded image for tile {0} in {1} seconds", tileId, CubemapUtils.msToString(runTime));
+		long endTime = System.nanoTime();
+		long runTime = endTime - startTime;
+		Logging.info("Loaded image for tile {0} in {1} seconds", tileId, runTime);
 
 		return tileId;
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/ImageInfoPanel.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/ImageInfoPanel.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/ImageInfoPanel.java	(revision 34348)
@@ -12,4 +12,5 @@
 
 import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -18,5 +19,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.openstreetmap.josm.data.osm.DataSelectionListener;
+
+import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
@@ -34,5 +37,5 @@
 import org.openstreetmap.josm.tools.I18n;
 
-public final class ImageInfoPanel extends ToggleDialog implements StreetsideDataListener, DataSelectionListener {
+public final class ImageInfoPanel extends ToggleDialog implements StreetsideDataListener, SelectionChangedListener {
   private static final long serialVersionUID = 4141847503072417190L;
   private static final Log L = LogFactory.getLog(ImageInfoPanel.class);
@@ -40,6 +43,6 @@
   private static final ImageIcon EMPTY_USER_AVATAR = new ImageIcon(new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB));
 
-  //private final JLabel numDetectionsLabel;
-  //private final JCheckBox showDetectionsCheck;
+  private final JLabel numDetectionsLabel;
+  private final JCheckBox showDetectionsCheck;
   private final JLabel usernameLabel;
   private final JTextPane imgKeyValue;
@@ -59,17 +62,13 @@
       150
     );
-    SelectionEventManager.getInstance().addSelectionListener(this);
-
-    //numDetectionsLabel = new JLabel();
-    //numDetectionsLabel.setFont(numDetectionsLabel.getFont().deriveFont(Font.PLAIN));
-
-    //showDetectionsCheck = new JCheckBox(I18n.tr("Show detections on top of image"));
-    //showDetectionsCheck.setSelected(StreetsideProperties.SHOW_DETECTED_SIGNS.get());
-    /*showDetectionsCheck.addActionListener(
-      action -> StreetsideProperties.SHOW_DETECTED_SIGNS.put(showDetectionsCheck.isSelected())
-    );
-    StreetsideProperties.SHOW_DETECTED_SIGNS.addListener(
-      valueChange -> showDetectionsCheck.setSelected(StreetsideProperties.SHOW_DETECTED_SIGNS.get())
-    );*/
+    DataSet.addSelectionListener(this);
+
+    numDetectionsLabel = new JLabel();
+    numDetectionsLabel.setFont(numDetectionsLabel.getFont().deriveFont(Font.PLAIN));
+
+    showDetectionsCheck = new JCheckBox(I18n.tr("Show detections on top of image"));
+
+    // no selections currently available for Streetside
+    showDetectionsCheck.setSelected(false);
 
     usernameLabel = new JLabel();
@@ -120,8 +119,8 @@
     gbc.gridy = 0;
     gbc.anchor = GridBagConstraints.LINE_START;
-    //root.add(numDetectionsLabel, gbc);
-    //gbc.gridy++;
-    //root.add(showDetectionsCheck, gbc);
-    //gbc.gridy++;
+    root.add(numDetectionsLabel, gbc);
+    gbc.gridy++;
+    root.add(showDetectionsCheck, gbc);
+    gbc.gridy++;
     root.add(usernameLabel, gbc);
     gbc.gridy++;
@@ -172,5 +171,5 @@
 
   /* (non-Javadoc)
-   * @see org.openstreetmap.josm.plugins.streetside.StreetsideDataListener#selectedImageChanged(org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage, org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage)
+   * @see org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener#selectedImageChanged(org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage, org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage)
    */
   @Override
@@ -182,5 +181,5 @@
     ));
 
-    //numDetectionsLabel.setText(I18n.tr("{0} detections", newImage instanceof StreetsideImage ? ((StreetsideImage) newImage).getDetections().size() : 0));
+    numDetectionsLabel.setText(I18n.tr("{0} detections", newImage instanceof StreetsideImage ? ((StreetsideImage) newImage).getDetections().size() : 0));
     imgKeyValue.setEnabled(newImage instanceof StreetsideImage);
     final String newImageKey = newImage instanceof StreetsideImage ? ((StreetsideImage) newImage).getId(): null;
@@ -209,5 +208,6 @@
     }
 
-    final UserProfile user = newImage instanceof StreetsideImage ? ((StreetsideImage) newImage).getUser() : null;
+    // Currently no user info supported in Streetside plugin
+    final UserProfile user = null;
     usernameLabel.setEnabled(user != null);
     if (user != null) {
@@ -232,6 +232,5 @@
    */
   @Override
-  public synchronized void selectionChanged(final SelectionChangeEvent event) {
-    final Collection<? extends OsmPrimitive> sel = event.getSelection();
+  public synchronized void selectionChanged(final Collection<? extends OsmPrimitive> sel) {
     L.debug(String.format("Selection changed. %d primitives are selected.", sel == null ? 0 : sel.size()));
     addStreetsideTagAction.setTarget(sel != null && sel.size() == 1 ? sel.iterator().next() : null);
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnable.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnable.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnable.java	(revision 34348)
@@ -49,13 +49,8 @@
 
     StreetsideSequence seq = new StreetsideSequence(null);
-    // TODO: re-add sequenceID
-    //StreetsideSequence seq = new StreetsideSequence(StreetsideSequenceIdGenerator.generateId());
-
-    // TODO: how can LatLon and heading / camera angles (he attribute) be set for a sequence?
-    // and does it make sense? @rrh
 
     List<StreetsideImage> bubbleImages = new ArrayList<>();
 
-    final long startTime = System.currentTimeMillis();
+    final long startTime = System.nanoTime();
 
     ObjectMapper mapper = new ObjectMapper();
@@ -69,14 +64,13 @@
     try {
 
-    JsonParser parser = mapper.getFactory().createParser(new BufferedInputStream(con.getInputStream()));
-    if(parser.nextToken() != JsonToken.START_ARRAY) {
-      parser.close();
-      throw new IllegalStateException("Expected an array");
-    }
+      JsonParser parser = mapper.getFactory().createParser(new BufferedInputStream(con.getInputStream()));
+      if (parser.nextToken() != JsonToken.START_ARRAY) {
+        parser.close();
+        throw new IllegalStateException("Expected an array");
+      }
 
+      StreetsideImage previous = null;
 
-    StreetsideImage previous = null;
-
-    while (parser.nextToken() == JsonToken.START_OBJECT) {
+      while (parser.nextToken() == JsonToken.START_OBJECT) {
         // read everything from this START_OBJECT to the matching END_OBJECT
         // and return it as a tree model ObjectNode
@@ -85,7 +79,6 @@
         if (node.get("id") != null && node.get("la") != null && node.get("lo") != null) {
           StreetsideImage image = new StreetsideImage(CubemapUtils.convertDecimal2Quaternary(node.path("id").asLong()), node.path("la").asDouble(), node.get("lo").asDouble());
-          if(previous!=null) {
-        	  // Analyze sequence behaviour
-        	  //previous.setNext(image.)
+          if (previous != null) {
+              previous.setNe(image.getNe());
           }
           image.setAd(node.path("ad").asInt());
@@ -100,6 +93,4 @@
           image.setPi(node.path("pi").asDouble());
           image.setPr(node.path("pr").asLong());
-          // TODO: inner class @rrh
-          // image.setRn(node.path("rn").asText());
           image.setRo(node.path("ro").asDouble());
 
@@ -107,55 +98,36 @@
           List<StreetsideImage> tiles = new ArrayList<StreetsideImage>();
 
-        // TODO: set previous and next @rrh
+          EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
 
-					EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
+            for (int i = 0; i < 4; i++) {
+              // Initialize four-tiled cubemap faces (four images per cube side with 18-length
+              // Quadkey)
+              if (!StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()) {
+                StreetsideImage tile = new StreetsideImage(String.valueOf(image.getId() + Integer.valueOf(i)));
+                tiles.add(tile);
+              }
+              // Initialize four-tiled cubemap faces (four images per cub eside with 20-length
+              // Quadkey)
+              if (StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()) {
+                for (int j = 0; j < 4; j++) {
+                  StreetsideImage tile = new StreetsideImage(
+                    String.valueOf(
+                      image.getId() + face.getValue() + CubemapUtils.rowCol2StreetsideCellAddressMap
+                        .get(String.valueOf(Integer.valueOf(i).toString() + Integer.valueOf(j).toString()))
+                      ));
+                  tiles.add(tile
+              );
+                }
+              }
+            }
+          });
 
-							for (int i = 0; i < 4; i++) {
-								// Initialize four-tiled cubemap faces (four images per cube side with 18-length
-								// Quadkey)
-								//if (StreetsideProperties.CUBEFACE_SIZE.get().intValue() == 4) {
-								if (!StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()) {
-									StreetsideImage tile = new StreetsideImage(
-											String.valueOf(image.getId() + Integer.valueOf(i)));
-									tiles.add(tile);
-								}
-								// Initialize four-tiled cubemap faces (four images per cub eside with 20-length
-								// Quadkey)
-								//if (StreetsideProperties.CUBEFACE_SIZE.get().intValue() == 16) {
-								if (StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get()) {
-									for (int j = 0; j < 4; j++) {
-										StreetsideImage tile = new StreetsideImage(String.valueOf(image.getId()
-												+ face.getValue() + CubemapUtils.rowCol2StreetsideCellAddressMap
-														.get(String.valueOf(Integer.valueOf(i).toString() + Integer.valueOf(j).toString()))));
-										tiles.add(tile);
-									}
-								}
-							}
-					});
-
-      	  bubbleImages.add(image);
-          Logging.info("Added image with id <" + image.getId() + ">");
-          // TODO: double check whether this pre-caches successfullly @rrh
-          //StreetsideData.downloadSurroundingCubemaps(image);
+          bubbleImages.add(image);
+          Logging.debug("Added image with id <" + image.getId() + ">");
 
         }
       }
 
-    parser.close();
-
-    //StreetsideImage[] images;
-
-      // First load all of the 'bubbles' from the request as Streetside Images
-      /*List<StreetsideImage> images = mapper
-        .readValue(new BufferedInputStream(con.getInputStream()), new TypeReference<List<StreetsideImage>>() {});
-      */
-
-
-      //images = mapper.readValue(new BufferedInputStream(con.getInputStream()), StreetsideImage[].class);
-
-      /*for (StreetsideImage image : bubbleImages) {
-        image = JsonStreetsideSequencesDecoder.decodeBubbleData(image);
-        if(image != null) bubbleImages.add(image);
-      }*/
+      parser.close();
 
     } catch (JsonParseException e) {
@@ -192,5 +164,5 @@
     }
 
-    final long endTime = System.currentTimeMillis();
+    final long endTime = System.nanoTime();//currentTimeMillis();
     Logging.info(I18n.tr("Sucessfully loaded {0} Microsoft Streetside images in {0} ",seq.getImages().size(),endTime-startTime%60));
   }
Index: /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURL.java
===================================================================
--- /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURL.java	(revision 34347)
+++ /applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURL.java	(revision 34348)
@@ -236,50 +236,50 @@
 	}
 
-	public static URL[] string2URLs(String baseUrlPrefix, String cubemapImageId, String baseUrlSuffix) {
-		List<URL> res = new ArrayList<>();
-
-		switch (StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 16 : 4) {
-
-		case 16:
-
-			EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
-				for (int i = 0; i < 4; i++) {
-					for (int j = 0; j < 4; j++) {
-						try {
-							final String urlStr = baseUrlPrefix + cubemapImageId
-									+ CubemapUtils.rowCol2StreetsideCellAddressMap
-											.get(String.valueOf(i) + String.valueOf(j))
-									+ baseUrlSuffix;
-							res.add(new URL(urlStr));
-						} catch (final MalformedURLException e) {
-							Logging.error(I18n.tr("Error creating URL String for cubemap {0}", cubemapImageId));
-							e.printStackTrace();
-						}
-
-					}
-				}
-			});
-
-		case 4:
-			EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
-				for (int i = 0; i < 4; i++) {
-
-					try {
-						final String urlStr = baseUrlPrefix + cubemapImageId
-								+ CubemapUtils.rowCol2StreetsideCellAddressMap.get(String.valueOf(i)) + baseUrlSuffix;
-						res.add(new URL(urlStr));
-					} catch (final MalformedURLException e) {
-						Logging.error(I18n.tr("Error creating URL String for cubemap {0}", cubemapImageId));
-						e.printStackTrace();
-					}
-
-				}
-			});
-			break; // break is optional
-		default:
-			// Statements
-		}
-		return res.stream().toArray(URL[]::new);
-	}
+  public static URL[] string2URLs(String baseUrlPrefix, String cubemapImageId, String baseUrlSuffix) {
+    List<URL> res = new ArrayList<>();
+
+    switch (StreetsideProperties.SHOW_HIGH_RES_STREETSIDE_IMAGERY.get() ? 16 : 4) {
+
+    case 16:
+
+      EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
+        for (int i = 0; i < 4; i++) {
+          for (int j = 0; j < 4; j++) {
+            try {
+              final String urlStr = baseUrlPrefix + cubemapImageId + CubemapUtils.rowCol2StreetsideCellAddressMap
+                .get(String.valueOf(i) + String.valueOf(j)) + baseUrlSuffix;
+              res.add(new URL(urlStr));
+            } catch (final MalformedURLException e) {
+              Logging.error(I18n.tr("Error creating URL String for cubemap {0}", cubemapImageId));
+              e.printStackTrace();
+            }
+
+          }
+        }
+      });
+
+      break;
+
+    case 4:
+      EnumSet.allOf(CubemapUtils.CubemapFaces.class).forEach(face -> {
+        for (int i = 0; i < 4; i++) {
+
+          try {
+            final String urlStr = baseUrlPrefix + cubemapImageId
+              + CubemapUtils.rowCol2StreetsideCellAddressMap.get(String.valueOf(i)) + baseUrlSuffix;
+            res.add(new URL(urlStr));
+          } catch (final MalformedURLException e) {
+            Logging.error(I18n.tr("Error creating URL String for cubemap {0}", cubemapImageId));
+            e.printStackTrace();
+          }
+
+        }
+      });
+      break; // break is optional
+    default:
+      // Statements
+    }
+    return res.stream().toArray(URL[]::new);
+  }
 
 	/**
