Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImage.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImage.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImage.java	(revision 34429)
@@ -27,10 +27,10 @@
 	protected String id;
 
+	// Image id of next image in sequence (decimal)
 	private long ne;
-  private long pr;
-
-
-	/** The time the image was captured, in Epoch format. */
-	protected long cd;
+    //Image id of previous image in sequence (decimal)
+    private long pr;
+
+
 	/** Sequence of pictures containing this object. */
 	private StreetsideSequence sequence;
@@ -38,5 +38,5 @@
 	/** Position of the picture. */
 	protected LatLon latLon;
-	/** Direction of the picture. */
+	/** Direction of the picture in degrees from true north. */
 	protected double he;
 	/** Temporal position of the picture until it is uploaded. */
@@ -116,48 +116,4 @@
 
 	/**
-	 * Returns the Epoch time when the image was captured.
-	 *
-	 * @return The long containing the Epoch time when the image was captured.
-	 */
-	public long getCd() {
-		return cd;
-	}
-
-	/**
-	 * Returns the date the picture was taken in DMY format.
-	 *
-	 * @return A String object containing the date when the picture was taken.
-	 */
-	public String getDate() {
-		final StringBuilder format = new StringBuilder(26);
-		format.append("m/d/YYYY");
-		if (StreetsideProperties.DISPLAY_HOUR.get()) {
-			if (StreetsideProperties.TIME_FORMAT_24.get()) {
-				format.append(" - HH:mm:ss");
-			} else {
-				format.append(" - h:mm:ss a");
-			}
-		}
-		return getDate(format.toString());
-	}
-
-	/**
-	 * Returns the date the picture was taken in the given format.
-	 *
-	 * @param format
-	 *            Format of the date. See {@link SimpleDateFormat}.
-	 * @return A String containing the date the picture was taken using the given
-	 *         format.
-	 * @throws NullPointerException
-	 *             if parameter format is <code>null</code>
-	 */
-	public String getDate(String format) {
-		final Date date = new Date(getCd());
-		final SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.US);
-		formatter.setTimeZone(Calendar.getInstance().getTimeZone());
-		return formatter.format(date);
-	}
-
-	/**
 	 * Returns a LatLon object containing the original coordinates of the object.
 	 *
@@ -227,5 +183,5 @@
 	 */
 	public boolean isModified() {
-		return !getMovingLatLon().equals(latLon) || Math.abs(getMovingHe() - cd) > EPSILON;
+		return !getMovingLatLon().equals(latLon) || Math.abs(getMovingHe() - he) > EPSILON;
 	}
 
@@ -277,14 +233,4 @@
 	public void setHe(final double he) {
 		this.he = he;
-	}
-
-	/**
-	 * Sets the Epoch time when the picture was captured.
-	 *
-	 * @param cd
-	 *            Epoch time when the image was captured.
-	 */
-	public synchronized void setCd(final long cd) {
-		this.cd = cd;
 	}
 
@@ -339,6 +285,6 @@
 	 *            The angle the image is moving.
 	 */
-	public void turn(final double ca) {
-		movingHe = tempHe + ca;
+	public void turn(final double he) {
+		movingHe = tempHe + he;
 	}
 
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideData.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideData.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideData.java	(revision 34429)
@@ -245,16 +245,12 @@
    */
   public void selectNext(boolean moveToPicture) {
-    if (getSelectedImage() == null) {
-		throw new IllegalStateException();
-	}
-    if (getSelectedImage().getSequence() == null) {
-		throw new IllegalStateException();
-	}
     StreetsideAbstractImage tempImage = selectedImage;
-    while (tempImage.next() != null) {
-      tempImage = tempImage.next();
-      if (tempImage.isVisible()) {
-        setSelectedImage(tempImage, moveToPicture);
-        break;
+    if (selectedImage != null && selectedImage.getSequence() != null) {
+      while (tempImage.next() != null) {
+        tempImage = tempImage.next();
+        if (tempImage.isVisible()) {
+          setSelectedImage(tempImage, moveToPicture);
+          break;
+        }
       }
     }
@@ -284,16 +280,12 @@
    */
   public void selectPrevious(boolean moveToPicture) {
-    if (getSelectedImage() == null) {
-		throw new IllegalStateException();
-	}
-    if (getSelectedImage().getSequence() == null) {
-		throw new IllegalStateException();
-	}
-    StreetsideAbstractImage tempImage = selectedImage;
-    while (tempImage.previous() != null) {
-      tempImage = tempImage.previous();
-      if (tempImage.isVisible()) {
-        setSelectedImage(tempImage, moveToPicture);
-        break;
+    if (selectedImage != null && selectedImage.getSequence() != null) {
+      StreetsideAbstractImage tempImage = selectedImage;
+      while (tempImage.previous() != null) {
+        tempImage = tempImage.previous();
+        if (tempImage.isVisible()) {
+          setSelectedImage(tempImage, moveToPicture);
+          break;
+        }
       }
     }
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 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideImage.java	(revision 34429)
@@ -73,5 +73,5 @@
   // Default constructor for Jackson/JSON Deserializattion
   public StreetsideImage() {
-    super(CubemapUtils.IMPORTED_ID, null, 0.0);
+    super(CubemapUtils.TEST_IMAGE_ID, null, 0.0);
   }
 
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideLayer.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideLayer.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsideLayer.java	(revision 34429)
@@ -322,29 +322,17 @@
     final Color directionC;
     if (selectedImg != null && getData().getMultiSelectedImages().contains(img)) {
-      markerC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_HIGHLIGHTED
-        : StreetsideColorScheme.SEQ_HIGHLIGHTED;
-      directionC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_HIGHLIGHTED_CA
-        : StreetsideColorScheme.SEQ_HIGHLIGHTED_CA;
+      markerC = StreetsideColorScheme.SEQ_HIGHLIGHTED;
+      directionC = StreetsideColorScheme.SEQ_HIGHLIGHTED_CA;
     } else if (selectedImg != null && selectedImg.getSequence() != null && selectedImg.getSequence().equals(img.getSequence())) {
-      markerC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_SELECTED
-        : StreetsideColorScheme.SEQ_SELECTED;
-      directionC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_SELECTED_CA
-        : StreetsideColorScheme.SEQ_SELECTED_CA;
+      markerC = StreetsideColorScheme.SEQ_SELECTED;
+      directionC = StreetsideColorScheme.SEQ_SELECTED_CA;
     } else {
-      markerC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_UNSELECTED
-        : StreetsideColorScheme.SEQ_UNSELECTED;
-      directionC = img instanceof StreetsideImportedImage
-        ? StreetsideColorScheme.SEQ_IMPORTED_UNSELECTED_CA
-        : StreetsideColorScheme.SEQ_UNSELECTED_CA;
+      markerC = StreetsideColorScheme.SEQ_UNSELECTED;
+      directionC = StreetsideColorScheme.SEQ_UNSELECTED_CA;
     }
 
     // Paint direction indicator
     g.setColor(directionC);
-    g.fillArc(p.x - CA_INDICATOR_RADIUS, p.y - CA_INDICATOR_RADIUS, 2 * CA_INDICATOR_RADIUS, 2 * CA_INDICATOR_RADIUS, (int) (90 - img.getMovingHe() - CA_INDICATOR_ANGLE / 2d), CA_INDICATOR_ANGLE);
+    g.fillArc(p.x - CA_INDICATOR_RADIUS, p.y - CA_INDICATOR_RADIUS, 2 * CA_INDICATOR_RADIUS, 2 * CA_INDICATOR_RADIUS, (int) (90 - /*img.getMovingHe()*/img.getHe() - CA_INDICATOR_ANGLE / 2d), CA_INDICATOR_ANGLE);
     // Paint image marker
     g.setColor(markerC);
@@ -397,8 +385,4 @@
       ))
       .append("\n\n")
-      .append(I18n.tr(
-        "{0} imported images",
-        getData().getImages().stream().filter(i -> i instanceof StreetsideImportedImage).count()
-      ))
       .append("\n+ ")
       .append(I18n.tr(
@@ -489,6 +473,6 @@
     }
     if (MainApplication.isDisplayingMapView()) {
-      //StreetsideMainDialog.getInstance().redButton.setEnabled(nearestImages.length >= 1);
-      //StreetsideMainDialog.getInstance().blueButton.setEnabled(nearestImages.length >= 2);
+      StreetsideMainDialog.getInstance().redButton.setEnabled(nearestImages.length >= 1);
+      StreetsideMainDialog.getInstance().blueButton.setEnabled(nearestImages.length >= 2);
     }
     if (nearestImages.length >= 1) {
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsidePlugin.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsidePlugin.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/StreetsidePlugin.java	(revision 34429)
@@ -25,4 +25,6 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 
+import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.StreetsideViewerPanel;
+
 /**
  * This is the main class of the Streetside plugin.
@@ -43,5 +45,4 @@
       MainMenu.add(MainApplication.getMenu().viewMenu, ZOOM_ACTION, false, 15);
       MainMenu.add(MainApplication.getMenu().fileMenu, new StreetsideDownloadViewAction(), false, 14);
-      //MainMenu.add(MainApplication.getMenu().dataMenu, new StreetsideJoinAction(), false);
       MainMenu.add(MainApplication.getMenu().moreToolsMenu, WALK_ACTION, false);
     }
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 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/actions/StreetsideExportAction.java	(revision 34429)
@@ -7,6 +7,4 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Set;
 import java.util.concurrent.ConcurrentSkipListSet;
@@ -22,5 +20,4 @@
 import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
 import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
@@ -94,13 +91,4 @@
         export(StreetsideLayer.getInstance().getData().getMultiSelectedImages());
       }
-      // This option ignores the selected directory.
-    } else if (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));
-      try {
-        MainApplication.worker.execute(new StreetsideExportManager(images));
-      } catch (IOException e1) {
-        logger.error(e1);
-      }
     }
     dlg.dispose();
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 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapBuilder.java	(revision 34429)
@@ -35,6 +35,7 @@
 	private static CubemapBuilder instance;
 	private StreetsideCubemap cubemap;
-	protected boolean cancelled;
-	private long startTime;
+	protected boolean isBuilding;
+
+  private long startTime;
 
 	private Map<String, BufferedImage> tileImages = new ConcurrentHashMap<>();
@@ -81,4 +82,6 @@
   @Override
   public void selectedImageChanged(StreetsideAbstractImage oldImage, StreetsideAbstractImage newImage) {
+
+
     startTime = System.currentTimeMillis();
 
@@ -87,5 +90,6 @@
 			cubemap = null;
 			cubemap = new StreetsideCubemap(newImage.getId(), newImage.getLatLon(), newImage.getHe());
-			cubemap.setCd(newImage.getCd());
+			currentTileCount = 0;
+			resetTileImages();
 
 			// download cubemap images in different threads and then subsequently
@@ -149,14 +153,15 @@
 
           List<Future<List<String>>> results = pool.invokeAll(tasks);
-          /*for (Future<List<String>> ff : results) {
-
-            if (StreetsideProperties.DEBUGING_ENABLED.get()) {
+          for (Future<List<String>> ff : results) {
+            if (StreetsideProperties.DEBUGING_ENABLED.get() && results!=null) {
               logger.debug(
                 MessageFormat.format(
                   "Completed tile downloading task {0} in {1} seconds.", ff.get().toString(),
-                  (System.currentTimeMillis()) / 1000 - startTime)
+                  ((System.currentTimeMillis()) - startTime)/1000)
                 );
+            } else {
+              logger.error(MessageFormat.format("Results of downloading tasks for image id {0} are null!", imageId));
             }
-          }*/
+          }
 
           // launch 16-tiled (high-res) downloading tasks
@@ -178,5 +183,5 @@
       List<Future<List<String>>> results = pool.invokeAll(tasks);
       for (Future<List<String>> ff : results) {
-        if (StreetsideProperties.DEBUGING_ENABLED.get()) {
+        if (StreetsideProperties.DEBUGING_ENABLED.get() && results!=null) {
           logger.debug(
             MessageFormat.format(
@@ -184,4 +189,6 @@
               ((System.currentTimeMillis()) - startTime)/1000)
             );
+        } else {
+          logger.error(MessageFormat.format("Results of downloading tasks for image id {0} are null!", imageId));
         }
       }
@@ -218,6 +225,6 @@
     // and set the views in the cubemap box.
 
-    if(currentTileCount>96) {
-      int x = 0;
+    if(!tileId.startsWith(cubemap.getId())) {
+      return;
     }
 
@@ -328,4 +335,5 @@
     resetTileImages();
     currentTileCount = 0;
+    isBuilding = false;
 	}
 
@@ -364,4 +372,12 @@
 
 	/**
+   * @return the isBuilding
+   */
+  public boolean isBuilding() {
+    return isBuilding;
+  }
+
+
+	/**
 	 * Destroys the unique instance of the class.
 	 */
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtils.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtils.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtils.java	(revision 34429)
@@ -72,5 +72,5 @@
 	// numerical base for decimal conversion (quaternary in the case of Streetside)
 	private static final int NUM_BASE = 4;
-	public static final String IMPORTED_ID = "00000000";
+	public static final String TEST_IMAGE_ID = "00000000";
 	public static final int NUM_SIDES = 6;
 	public static Map<String,String> rowCol2StreetsideCellAddressMap = null;
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideExportDialog.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideExportDialog.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideExportDialog.java	(revision 34429)
@@ -18,5 +18,4 @@
 
 import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
 
@@ -42,6 +41,4 @@
    */
   public final JRadioButton selected;
-  /** Button to rewrite all imported images. */
-  public final JRadioButton rewrite;
   /** Group of button containing all the options. */
   public final ButtonGroup group;
@@ -65,42 +62,37 @@
 
     RewriteButtonAction action = new RewriteButtonAction(this);
-    this.group = new ButtonGroup();
-    this.all = new JRadioButton(action);
-    this.all.setText(tr("Export all images"));
-    this.sequence = new JRadioButton(action);
-    this.sequence.setText(tr("Export selected sequence"));
-    this.selected = new JRadioButton(action);
-    this.selected.setText(tr("Export selected images"));
-    this.rewrite = new JRadioButton(action);
-    this.rewrite.setText(tr("Rewrite imported images"));
-    this.group.add(this.all);
-    this.group.add(this.sequence);
-    this.group.add(this.selected);
-    this.group.add(this.rewrite);
+    group = new ButtonGroup();
+    all = new JRadioButton(action);
+    all.setText(tr("Export all images"));
+    sequence = new JRadioButton(action);
+    sequence.setText(tr("Export selected sequence"));
+    selected = new JRadioButton(action);
+    selected.setText(tr("Export selected images"));
+    group.add(all);
+    group.add(sequence);
+    group.add(selected);
     // Some options are disabled depending on the circumstances
     sequence.setEnabled(StreetsideLayer.getInstance().getData().getSelectedImage() instanceof StreetsideImage);
     if (StreetsideLayer.getInstance().getData().getMultiSelectedImages().isEmpty()) {
-     this.selected.setEnabled(false);
+     selected.setEnabled(false);
     }
-    this.rewrite.setEnabled(StreetsideLayer.getInstance().getData().getImages().parallelStream().anyMatch(img -> img instanceof StreetsideImportedImage));
 
-    this.path = new JLabel(tr("Select a directory"));
-    this.choose = new JButton(tr("Explore"));
-    this.choose.addActionListener(this);
+    path = new JLabel(tr("Select a directory"));
+    choose = new JButton(tr("Explore"));
+    choose.addActionListener(this);
 
     // All options belong to the same JPanel so the are in line.
     JPanel jpanel = new JPanel();
     jpanel.setLayout(new BoxLayout(jpanel, BoxLayout.PAGE_AXIS));
-    jpanel.add(this.all);
-    jpanel.add(this.sequence);
-    jpanel.add(this.selected);
-    jpanel.add(this.rewrite);
+    jpanel.add(all);
+    jpanel.add(sequence);
+    jpanel.add(selected);
     jpanel.setAlignmentX(Component.CENTER_ALIGNMENT);
-    this.path.setAlignmentX(Component.CENTER_ALIGNMENT);
-    this.choose.setAlignmentX(Component.CENTER_ALIGNMENT);
+    path.setAlignmentX(Component.CENTER_ALIGNMENT);
+    choose.setAlignmentX(Component.CENTER_ALIGNMENT);
 
     add(jpanel);
-    add(this.path);
-    add(this.choose);
+    add(path);
+    add(choose);
   }
 
@@ -110,15 +102,15 @@
   @Override
   public void actionPerformed(ActionEvent e) {
-    this.chooser = new JFileChooser();
-    this.chooser.setCurrentDirectory(new java.io.File(System
+    chooser = new JFileChooser();
+    chooser.setCurrentDirectory(new java.io.File(System
         .getProperty("user.home")));
-    this.chooser.setDialogTitle(tr("Select a directory"));
-    this.chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-    this.chooser.setAcceptAllFileFilterUsed(false);
+    chooser.setDialogTitle(tr("Select a directory"));
+    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+    chooser.setAcceptAllFileFilterUsed(false);
 
-    if (this.chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
-      this.path.setText(this.chooser.getSelectedFile().toString());
-      this.updateUI();
-      this.ok.setEnabled(true);
+    if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
+      path.setText(chooser.getSelectedFile().toString());
+      updateUI();
+      ok.setEnabled(true);
     }
   }
@@ -148,13 +140,11 @@
     }
 
+    @SuppressWarnings("synthetic-access")
     @Override
     public void actionPerformed(ActionEvent arg0) {
-      StreetsideExportDialog.this.choose
-          .setEnabled(!StreetsideExportDialog.this.rewrite.isSelected());
-      if (StreetsideExportDialog.this.rewrite.isSelected()) {
-        this.lastPath = this.dlg.path.getText();
-        this.dlg.path.setText(" ");
-      } else if (this.lastPath != null) {
-        this.dlg.path.setText(this.lastPath);
+      choose
+          .setEnabled(true);
+      if (lastPath != null) {
+        dlg.path.setText(lastPath);
       }
     }
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideMainDialog.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideMainDialog.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideMainDialog.java	(revision 34429)
@@ -8,4 +8,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.List;
 
@@ -13,4 +15,6 @@
 import javax.swing.AbstractAction;
 import javax.swing.Action;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 
@@ -24,5 +28,4 @@
 import org.openstreetmap.josm.plugins.streetside.StreetsideDataListener;
 import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
 import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
@@ -31,5 +34,4 @@
 import org.openstreetmap.josm.plugins.streetside.cache.StreetsideCache;
 import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.ImageInfoHelpPopup;
-import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.StreetsideViewerHelpPopup;
 import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties;
 import org.openstreetmap.josm.tools.I18n;
@@ -57,7 +59,20 @@
 	private volatile StreetsideAbstractImage image;
 
-	private ImageInfoHelpPopup imageInfoHelp;
-
-	private StreetsideViewerHelpPopup streetsideViewerHelp;
+	private final SideButton nextButton = new SideButton(new NextPictureAction());
+  private final SideButton previousButton = new SideButton(new PreviousPictureAction());
+  /**
+   * Button used to jump to the image following the red line
+   */
+  public final SideButton redButton = new SideButton(new RedAction());
+  /**
+   * Button used to jump to the image following the blue line
+   */
+  public final SideButton blueButton = new SideButton(new BlueAction());
+
+  private final SideButton playButton = new SideButton(new PlayAction());
+  private final SideButton pauseButton = new SideButton(new PauseAction());
+  private final SideButton stopButton = new SideButton(new StopAction());
+
+  private ImageInfoHelpPopup imageInfoHelp;
 
 	/**
@@ -98,7 +113,14 @@
 	 * Adds the shortcuts to the buttons.
 	 */
-	private void addShortcuts() {
-		// next, previous, blueAction and redAction from Mapillary removed
-	}
+  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());
+  }
 
 	/**
@@ -125,15 +147,4 @@
 	}
 
-	public synchronized void setStreetsideViewerHelp(StreetsideViewerHelpPopup popup) {
-		streetsideViewerHelp = popup;
-	}
-
-	/**
-	 * @return the streetsideViewerHelp
-	 */
-	public StreetsideViewerHelpPopup getStreetsideViewerHelp() {
-		return streetsideViewerHelp;
-	}
-
 	/**
 	 * Sets a new mode for the dialog.
@@ -144,20 +155,24 @@
 		switch (mode) {
 		case WALK:
-			createLayout(
-				streetsideImageDisplay,
-				null
-				// TODO: Walk Action for Streetside - re-add buttons here
-			);
-		case NORMAL:
-		default:
-			createLayout(
-		        streetsideImageDisplay,
-		        null
-		    );
-		}
-
-		if (MODE.NORMAL.equals(mode)) {
-			updateImage();
-		} 	}
+      createLayout(
+        streetsideImageDisplay,
+        Arrays.asList(playButton, pauseButton, stopButton)
+      );
+      break;
+    case NORMAL:
+    default:
+      createLayout(
+        streetsideImageDisplay,
+        Arrays.asList(blueButton, previousButton, nextButton, redButton)
+      );
+      break;
+		}
+		disableAllButtons();
+    if (MODE.NORMAL.equals(mode)) {
+      updateImage();
+    }
+    revalidate();
+    repaint();
+	}
 
 	/**
@@ -201,23 +216,4 @@
 			}
 
-			if (image.getSequence() != null) {
-				StreetsideAbstractImage tempImage = image;
-				while (tempImage.next() != null) {
-					tempImage = tempImage.next();
-					if (tempImage.isVisible()) {
-						//nextButton.setEnabled(true);
-						break;
-					}
-				}
-			}
-			if (image.getSequence() != null) {
-				StreetsideAbstractImage tempImage = image;
-				while (tempImage.previous() != null) {
-					tempImage = tempImage.previous();
-					if (tempImage.isVisible()) {
-						break;
-					}
-				}
-			}
 			if (image instanceof StreetsideImage) {
 				final StreetsideImage streetsideImage = (StreetsideImage) image;
@@ -255,4 +251,14 @@
 
 	/**
+   * Disables all the buttons in the dialog
+   */
+  private void disableAllButtons() {
+    nextButton.setEnabled(false);
+    previousButton.setEnabled(false);
+    blueButton.setEnabled(false);
+    redButton.setEnabled(false);
+  }
+
+	/**
 	 * Sets a new StreetsideImage to be shown.
 	 *
@@ -272,14 +278,6 @@
 			final StringBuilder title = new StringBuilder(I18n.tr(StreetsideMainDialog.BASE_TITLE));
 			if (image instanceof StreetsideImage) {
-				final StreetsideImage streetsideImage = (StreetsideImage) image;
-				if (streetsideImage.getCd() != 0) {
-					title.append(StreetsideMainDialog.MESSAGE_SEPARATOR).append(streetsideImage.getDate());
-				}
-				setTitle(title.toString());
-			} else if (image instanceof StreetsideImportedImage) {
-				final StreetsideImportedImage mapillaryImportedImage = (StreetsideImportedImage) image;
-				title.append(StreetsideMainDialog.MESSAGE_SEPARATOR).append(mapillaryImportedImage.getFile().getName());
-				title.append(StreetsideMainDialog.MESSAGE_SEPARATOR).append(mapillaryImportedImage.getDate());
-				setTitle(title.toString());
+				title.append(StreetsideMainDialog.MESSAGE_SEPARATOR).append(MessageFormat.format("(heading {0}°)",Double.toString(image.getHe())));
+        setTitle(title.toString());
 			}
 		}
@@ -533,4 +531,10 @@
 	public void selectedImageChanged(StreetsideAbstractImage oldImage, StreetsideAbstractImage newImage) {
 		setImage(newImage);
+		if (newImage.getSequence() != null && newImage.next()!=null) {
+      nextButton.setEnabled(true);
+    }
+    if (newImage.getSequence() != null && newImage.previous()!=null) {
+      previousButton.setEnabled(true);
+    }
 		updateImage();
 	}
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideViewerDialog.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideViewerDialog.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/StreetsideViewerDialog.java	(revision 34429)
@@ -8,4 +8,5 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
+import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.StreetsideViewerHelpPopup;
 import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.StreetsideViewerPanel;
 
@@ -24,4 +25,7 @@
 
 	private static StreetsideViewerDialog instance;
+
+	// TODO: enable help without StreetsideViewerPanel being a ToggleDialog
+	private StreetsideViewerHelpPopup streetsideViewerHelpPopup;
 
 	/**
@@ -81,3 +85,7 @@
 	}
 
+  public void setStreetsideViewerHelpPopup(StreetsideViewerHelpPopup svhp) {
+    streetsideViewerHelpPopup = svhp;
+  }
+
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/StreetsideViewerPanel.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/StreetsideViewerPanel.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/gui/imageinfo/StreetsideViewerPanel.java	(revision 34429)
@@ -38,4 +38,6 @@
 	private static ThreeSixtyDegreeViewerPanel threeSixtyDegreeViewerPanel;
 
+  private StreetsideViewerHelpPopup streetsideViewerHelp;
+
 	public StreetsideViewerPanel() {
 
@@ -43,5 +45,6 @@
 
 		SwingUtilities.invokeLater(new Runnable() {
-		     @Override
+		     @SuppressWarnings("synthetic-access")
+        @Override
 		     public void run() {
 		    	 initializeAndStartGUI();
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 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnable.java	(revision 34429)
@@ -77,9 +77,13 @@
         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) {
+            image.setPr(Long.parseLong(previous.getId()));
+            previous.setNe(Long.parseLong(image.getId()));
+
+          }
           previous = image;
           image.setAd(node.path("ad").asInt());
           image.setAl(node.path("al").asDouble());
           image.setBl(node.path("bl").asText());
-          image.setCd(node.path("cd").asLong());
           image.setHe(node.path("he").asDouble());
           image.setMl(node.path("ml").asInt());
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportManager.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportManager.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportManager.java	(revision 34429)
@@ -7,5 +7,4 @@
 import java.io.IOException;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
@@ -18,5 +17,4 @@
 import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
 import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage;
 
 /**
@@ -63,23 +61,4 @@
   }
 
-  /**
-   * Constructor used to rewrite imported images.
-   *
-   * @param images
-   *          The set of {@link StreetsideImportedImage} object that is going to
-   *          be rewritten.
-   * @throws IOException
-   *           If the file of one of the {@link StreetsideImportedImage} objects
-   *           doesn't contain a picture.
-   */
-  public StreetsideExportManager(List<StreetsideImportedImage> images) throws IOException {
-    this(null, null);
-    for (StreetsideImportedImage image : images) {
-      queue.add(image.getImage());
-      queueImages.add(image);
-    }
-    amount = images.size();
-  }
-
   @Override
   protected void cancel() {
@@ -112,11 +91,4 @@
           logger.error(e);
         }
-      } else if (image instanceof StreetsideImportedImage) {
-        try {
-          queue.put(((StreetsideImportedImage) image).getImage());
-          queueImages.put(image);
-        } catch (InterruptedException e) {
-          logger.error(e);
-        }
       }
       try {
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportWriterThread.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportWriterThread.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/io/export/StreetsideExportWriterThread.java	(revision 34429)
@@ -14,10 +14,6 @@
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
-import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.common.ImageMetadata;
 import org.apache.commons.imaging.common.RationalNumber;
-import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
 import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter;
-import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
 import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
@@ -28,6 +24,4 @@
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
 import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
-import org.openstreetmap.josm.plugins.streetside.StreetsideImportedImage;
 
 /**
@@ -82,12 +76,5 @@
         img = queue.take();
         mimg = queueImages.take();
-        if (path == null && mimg instanceof StreetsideImportedImage) {
-          String path = ((StreetsideImportedImage) mimg).getFile().getPath();
-          finalPath = path.substring(0, path.lastIndexOf('.'));
-        } else if (mimg instanceof StreetsideImage) {
-          finalPath = path + '/' + ((StreetsideImage) mimg).getId();
-        } else if (mimg instanceof StreetsideImportedImage) {
-          finalPath = path + '/' + ((StreetsideImportedImage) mimg).getFile().getName();
-        }
+
 
         // Transforms the image into a byte array.
@@ -101,15 +88,5 @@
         TiffOutputDirectory gpsDirectory;
         // If the image is imported, loads the rest of the EXIF data.
-        if (mimg instanceof StreetsideImportedImage) {
-          final ImageMetadata metadata = Imaging
-              .getMetadata(((StreetsideImportedImage) mimg).getFile());
-          final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
-          if (null != jpegMetadata) {
-            final TiffImageMetadata exif = jpegMetadata.getExif();
-            if (null != exif) {
-              outputSet = exif.getOutputSet();
-            }
-          }
-        }
+
         if (null == outputSet) {
           outputSet = new TiffOutputSet();
@@ -127,11 +104,5 @@
 
         exifDirectory.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
-        if (mimg instanceof StreetsideImportedImage) {
-          exifDirectory.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL,
-              mimg.getDate("yyyy/MM/dd HH:mm:ss"));
-        } else if (mimg instanceof StreetsideImage) {
-          exifDirectory.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL,
-              mimg.getDate("yyyy/MM/dd HH/mm/ss"));
-        }
+
         outputSet.setGPSInDegrees(mimg.getMovingLatLon().lon(), mimg.getMovingLatLon().lat());
         OutputStream os = new BufferedOutputStream(new FileOutputStream(finalPath + ".jpg"));
Index: applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/api/JsonStreetsideSequencesDecoder.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/api/JsonStreetsideSequencesDecoder.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/src/org/openstreetmap/josm/plugins/streetside/utils/api/JsonStreetsideSequencesDecoder.java	(revision 34429)
@@ -95,5 +95,4 @@
       result.setPbn(image.getPbn());
       result.setRn(image.getRn());
-      result.setCd(image.getCd());
     }
     return result;
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideLayerTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideLayerTest.java	(revision 34428)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideLayerTest.java	(revision 34429)
@@ -48,7 +48,7 @@
   @Test
   public void testSetVisible() {
-    StreetsideLayer.getInstance().getData().add(new StreetsideImportedImage(CubemapUtils.IMPORTED_ID, new LatLon(0.0, 0.0), 0.0, new File("")));
-    StreetsideLayer.getInstance().getData().add(new StreetsideImportedImage(CubemapUtils.IMPORTED_ID, new LatLon(0.0, 0.0), 0.0, new File("")));
-    StreetsideImportedImage invisibleImage = new StreetsideImportedImage(CubemapUtils.IMPORTED_ID, new LatLon(0.0, 0.0), 0.0, new File(""));
+    StreetsideLayer.getInstance().getData().add(new StreetsideImage(CubemapUtils.TEST_IMAGE_ID, new LatLon(0.0, 0.0), 0.0));
+    StreetsideLayer.getInstance().getData().add(new StreetsideImage(CubemapUtils.TEST_IMAGE_ID, new LatLon(0.0, 0.0), 0.0));
+    StreetsideImage invisibleImage = new StreetsideImage(CubemapUtils.TEST_IMAGE_ID, new LatLon(0.0, 0.0), 0.0);
     invisibleImage.setVisible(false);
     StreetsideLayer.getInstance().getData().add(invisibleImage);
