Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImageTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImageTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideAbstractImageTest.java	(revision 36064)
@@ -2,17 +2,13 @@
 package org.openstreetmap.josm.plugins.streetside;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 
-public class StreetsideAbstractImageTest {
-
-  /*@Rule
-  public JOSMTestRules rules = new StreetsideTestRules().platform();*/
-
+class StreetsideAbstractImageTest {
   @Test
-  public void testIsModified() {
+  void testIsModified() {
     StreetsideImage img = new StreetsideImage("key___________________", new LatLon(0, 0), 0);
     assertFalse(img.isModified());
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideDataTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideDataTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideDataTest.java	(revision 36064)
@@ -2,12 +2,15 @@
 package org.openstreetmap.josm.plugins.streetside;
 
-import static org.junit.Assert.assertEquals;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.Arrays;
 import java.util.concurrent.ConcurrentSkipListSet;
 
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledIf;
 import org.openstreetmap.josm.data.coor.LatLon;
 
@@ -18,5 +21,6 @@
  * @see StreetsideData
  */
-public class StreetsideDataTest {
+@DisabledIf(value = "org.openstreetmap.josm.plugins.streetside.utils.TestUtil#cannotLoadImages", disabledReason = "At JOSM maintainer request (flaky?)")
+class StreetsideDataTest {
 
   /*@Rule
@@ -33,5 +37,5 @@
    * objects and a {@link StreetsideSequence} object.
    */
-  @Before
+  @BeforeEach
   public void setUp() {
     img1 = new StreetsideImage("id1__________________", new LatLon(0.1, 0.1), 90);
@@ -51,7 +55,6 @@
    * another one in the database, the one that is being added should be ignored.
    */
-  @Ignore
   @Test
-  public void addTest() {
+  void testAdd() {
     data = new StreetsideData();
     assertEquals(0, data.getImages().size());
@@ -69,7 +72,6 @@
    * Test that the size is properly calculated.
    */
-  @Ignore
   @Test
-  public void sizeTest() {
+  void testSize() {
     assertEquals(4, data.getImages().size());
     data.add(new StreetsideImage("id5__________________", new LatLon(0.1, 0.1), 90));
@@ -81,12 +83,11 @@
    * and {@link StreetsideData#getHighlightedImage()} methods.
    */
-  @Ignore
   @Test
-  public void highlighTest() {
+  void testHighlight() {
     data.setHighlightedImage(img1);
     assertEquals(img1, data.getHighlightedImage());
 
     data.setHighlightedImage(null);
-    assertEquals(null, data.getHighlightedImage());
+    assertNull(data.getHighlightedImage());
   }
 
@@ -94,7 +95,6 @@
    * Tests the selection of images.
    */
-  @Ignore
   @Test
-  public void selectTest() {
+  void testSelect() {
     data.setSelectedImage(img1);
     assertEquals(img1, data.getSelectedImage());
@@ -104,5 +104,5 @@
 
     data.setSelectedImage(null);
-    assertEquals(null, data.getSelectedImage());
+    assertNull(data.getSelectedImage());
   }
 
@@ -111,7 +111,6 @@
    * {@link StreetsideData#selectPrevious()} methods.
    */
-  @Ignore
   @Test
-  public void nextAndPreviousTest() {
+  void testNextAndPrevious() {
     data.setSelectedImage(img1);
 
@@ -126,16 +125,14 @@
   }
 
-  @Ignore
-  @Test(expected=IllegalStateException.class)
-  public void nextOfNullImgTest() {
+  @Test
+  void testNextOfNullImg() {
     data.setSelectedImage(null);
-    data.selectNext();
+    assertThrows(IllegalStateException.class, data::selectNext);
   }
 
-  @Ignore
-  @Test(expected=IllegalStateException.class)
-  public void previousOfNullImgTest() {
+  @Test
+  void testPreviousOfNullImg() {
     data.setSelectedImage(null);
-    data.selectPrevious();
+    assertThrows(IllegalStateException.class, data::selectPrevious);
   }
 
@@ -144,7 +141,6 @@
    * multiselected List should reset.
    */
-  @Ignore
   @Test
-  public void multiSelectTest() {
+  void testMultiSelect() {
     assertEquals(0, data.getMultiSelectedImages().size());
     data.setSelectedImage(img1);
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 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideLayerTest.java	(revision 36064)
@@ -2,12 +2,11 @@
 package org.openstreetmap.josm.plugins.streetside;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledIf;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
@@ -15,37 +14,37 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.plugins.streetside.cubemap.CubemapUtils;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
+import org.openstreetmap.josm.testutils.annotations.Main;
+import org.openstreetmap.josm.testutils.annotations.Projection;
 
-public class StreetsideLayerTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules().main().preferences().projection();
-
+@BasicPreferences
+@Main
+@Projection
+@DisabledIf(value = "org.openstreetmap.josm.plugins.streetside.utils.TestUtil#cannotLoadImages", disabledReason = "At JOSM maintainer request (flaky?)")
+class StreetsideLayerTest {
   private static Layer getDummyLayer() {
     return ImageryLayer.create(new ImageryInfo("dummy", "https://example.org"));
   }
 
-  @Ignore
   @Test
-  public void testGetIcon() {
+  void testGetIcon() {
     assertNotNull(StreetsideLayer.getInstance().getIcon());
   }
 
-  @Ignore
   @Test
-  public void testIsMergable() {
+  void testIsMergable() {
     assertFalse(StreetsideLayer.getInstance().isMergable(getDummyLayer()));
   }
 
-  @Ignore
-  @Test(expected = UnsupportedOperationException.class)
-  public void testMergeFrom() {
-    StreetsideLayer.getInstance().mergeFrom(getDummyLayer());
+  @Test
+  void testMergeFrom() {
+    StreetsideLayer layer = StreetsideLayer.getInstance();
+    Layer dummyLayer = getDummyLayer();
+    assertThrows(UnsupportedOperationException.class, () -> layer.mergeFrom(dummyLayer));
   }
 
-  @Ignore
   @Test
-  public void testSetVisible() {
+  void testSetVisible() {
     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));
@@ -56,5 +55,5 @@
     StreetsideLayer.getInstance().setVisible(false);
     for (StreetsideAbstractImage img : StreetsideLayer.getInstance().getData().getImages()) {
-      assertEquals(false, img.isVisible());
+      assertFalse(img.isVisible());
     }
 
@@ -62,11 +61,10 @@
     StreetsideLayer.getInstance().setVisible(true);
     for (StreetsideAbstractImage img : StreetsideLayer.getInstance().getData().getImages()) {
-      assertEquals(true, img.isVisible());
+      assertTrue(img.isVisible());
     }
   }
 
-  @Ignore
   @Test
-  public void testGetInfoComponent() {
+  void testGetInfoComponent() {
     Object comp = StreetsideLayer.getInstance().getInfoComponent();
     assertTrue(comp instanceof String);
@@ -74,7 +72,6 @@
   }
 
-  @Ignore
   @Test
-  public void testClearInstance() {
+  void testClearInstance() {
     StreetsideLayer.getInstance();
     assertTrue(StreetsideLayer.hasInstance());
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideSequenceTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideSequenceTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/StreetsideSequenceTest.java	(revision 36064)
@@ -2,14 +2,12 @@
 package org.openstreetmap.josm.plugins.streetside;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 
@@ -20,5 +18,5 @@
  * @see StreetsideSequence
  */
-public class StreetsideSequenceTest {
+class StreetsideSequenceTest {
 
   private final StreetsideImage img1 = new StreetsideImage("key1", new LatLon(0.1, 0.1), 90);
@@ -33,5 +31,5 @@
    * {@link StreetsideSequence} object.
    */
-  @Before
+  @BeforeEach
   public void setUp() {
     seq.add(Arrays.asList(img1, img2, img3, img4));
@@ -43,5 +41,5 @@
    */
   @Test
-  public void nextAndPreviousTest() {
+  void testNextAndPrevious() {
     assertEquals(img2, img1.next());
     assertEquals(img1, img2.previous());
@@ -60,18 +58,9 @@
     // Test IllegalArgumentException when asking for the next image of an image
     // that is not in the sequence.
-    try {
-      seq.next(imgWithoutSeq);
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertTrue(true);
-    }
+    assertThrows(IllegalArgumentException.class, () -> seq.next(imgWithoutSeq));
+
     // Test IllegalArgumentException when asking for the previous image of an
     // image that is not in the sequence.
-    try {
-      seq.previous(imgWithoutSeq);
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertTrue(true);
-    }
+    assertThrows(IllegalArgumentException.class, () -> seq.previous(imgWithoutSeq));
   }
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/CachesTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/CachesTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/CachesTest.java	(revision 36064)
@@ -2,12 +2,12 @@
 package org.openstreetmap.josm.plugins.streetside.cache;
 
-import org.junit.Test;
 
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.plugins.streetside.utils.TestUtil;
 
-public class CachesTest {
+class CachesTest {
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(Caches.class);
   }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/StreetsideCacheTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/StreetsideCacheTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cache/StreetsideCacheTest.java	(revision 36064)
@@ -1,24 +1,18 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.streetside.cache;
-//License: GPL. For details, see LICENSE file.
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.openstreetmap.josm.plugins.streetside.cache.StreetsideCache.Type;
+import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
 
-import org.openstreetmap.josm.plugins.streetside.cache.StreetsideCache.Type;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-public class StreetsideCacheTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules().preferences();
+@BasicPreferences
+class StreetsideCacheTest {
 
   @Test
-  public void test() {
+  void testCache() {
     StreetsideCache cache = new StreetsideCache("00000", Type.FULL_IMAGE);
     assertNotNull(cache.getUrl());
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtilsTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtilsTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/CubemapUtilsTest.java	(revision 36064)
@@ -1,16 +1,16 @@
 package org.openstreetmap.josm.plugins.streetside.cubemap;
 
-import static org.junit.Assert.assertEquals;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class CubemapUtilsTest {
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-  @SuppressWarnings("static-method")
+class CubemapUtilsTest {
+
   @Test
-  public final void testConvertDecimal2Quaternary() {
-   final long decimal0 = 680730040l;
-   final long decimal1 = 680931568l;
+  void testConvertDecimal2Quaternary() {
+   final long decimal0 = 680730040L;
+   final long decimal1 = 680931568L;
    String res = CubemapUtils.convertDecimal2Quaternary(decimal0);
    assertEquals("220210301312320", res);
@@ -19,7 +19,6 @@
   }
 
-  @SuppressWarnings("static-method")
   @Test
-  public final void testConvertQuaternary2Decimal() {
+  void testConvertQuaternary2Decimal() {
     final String quadKey0 = "220210301312320";
     final String quadKey1 = "220211203003300";
@@ -30,8 +29,7 @@
   }
 
-  @SuppressWarnings("static-method")
-  @Ignore
+  @Disabled
   @Test
-  public final void testGetFaceNumberForCount() {
+  void testGetFaceNumberForCount() {
     String faceNrFront = CubemapUtils.getFaceNumberForCount(0);
     String faceNrRight = CubemapUtils.getFaceNumberForCount(1);
@@ -48,8 +46,7 @@
   }
 
-  @SuppressWarnings("static-method")
-  @Ignore
+  @Disabled
   @Test
-  public final void testGetCount4FaceNumber() {
+  void testGetCount4FaceNumber() {
     int count4Front = CubemapUtils.getCount4FaceNumber("01");
     int count4Right = CubemapUtils.getCount4FaceNumber("02");
@@ -66,7 +63,6 @@
   }
 
-  @SuppressWarnings("static-method")
   @Test
-  public final void testConvertDoubleCountNrto16TileNr() {
+  void testConvertDoubleCountNrto16TileNr() {
     String x0y0 = CubemapUtils.convertDoubleCountNrto16TileNr("00");
     String x0y1 = CubemapUtils.convertDoubleCountNrto16TileNr("01");
@@ -92,5 +88,5 @@
     assertEquals(x1y0, "02");
     assertEquals(x1y1, "03");
-    assertEquals(x1y2,"12");
+    assertEquals(x1y2, "12");
     assertEquals(x1y3, "13");
     assertEquals(x2y0, "20");
@@ -99,8 +95,7 @@
     assertEquals(x2y3, "31");
     assertEquals(x3y0, "22");
-    assertEquals(x3y1,"23");
+    assertEquals(x3y1, "23");
     assertEquals(x3y2, "32");
     assertEquals(x3y3, "33");
   }
-
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTaskTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTaskTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/cubemap/TileDownloadingTaskTest.java	(revision 36064)
@@ -1,6 +1,6 @@
 package org.openstreetmap.josm.plugins.streetside.cubemap;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.util.ArrayList;
@@ -11,23 +11,17 @@
 import java.util.concurrent.Future;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-public class TileDownloadingTaskTest {
+@Disabled
+class TileDownloadingTaskTest {
 
-  @SuppressWarnings("static-method")
-  @Ignore
   @Test
-  public final void testCall() {
+  final void testCall() throws InterruptedException {
     ExecutorService pool = Executors.newFixedThreadPool(1);
     List<Callable<List<String>>> tasks = new ArrayList<>(1);
       tasks.add(new TileDownloadingTask("2202112030033001233"));
-      try {
-        List<Future<List<String>>> results = pool.invokeAll(tasks);
-        assertEquals(results.get(0),"2202112030033001233");
-      } catch (InterruptedException e) {
-        e.printStackTrace();
-        fail("Test threw an exception.");
-      }
+    List<Future<List<String>>> results = pool.invokeAll(tasks);
+    assertEquals(results.get(0), "2202112030033001233");
   }
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/ImageDisplayTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/ImageDisplayTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/ImageDisplayTest.java	(revision 36064)
@@ -2,5 +2,5 @@
 package org.openstreetmap.josm.plugins.streetside.gui;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.awt.GraphicsEnvironment;
@@ -11,21 +11,17 @@
 import javax.swing.JFrame;
 
-import org.junit.Rule;
-import org.junit.Test;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.junit.jupiter.api.Test;
+import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
 
 /**
  * Tests {@link StreetsideImageDisplay}
  */
-public class ImageDisplayTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules().preferences();
+@BasicPreferences
+class ImageDisplayTest {
 
   private static final BufferedImage DUMMY_IMAGE = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
 
   @Test
-  public void testImagePersistence() {
+  void testImagePersistence() {
     StreetsideImageDisplay display = new StreetsideImageDisplay();
     display.setImage(DUMMY_IMAGE, null);
@@ -39,5 +35,5 @@
 
   @Test
-  public void testMouseWheelMoved() {
+  void testMouseWheelMoved() {
     if (GraphicsEnvironment.isHeadless()) {
       return;
@@ -65,5 +61,5 @@
    */
   @Test
-  public void testMouseClicked() {
+  void testMouseClicked() {
     if (GraphicsEnvironment.isHeadless()) {
       return;
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/StreetsidePreferenceSettingTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/StreetsidePreferenceSettingTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/StreetsidePreferenceSettingTest.java	(revision 36064)
@@ -1,6 +1,5 @@
 package org.openstreetmap.josm.plugins.streetside.gui;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.openstreetmap.josm.plugins.streetside.utils.TestUtil.getPrivateFieldValue;
 
@@ -11,23 +10,19 @@
 import javax.swing.SpinnerNumberModel;
 
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.plugins.streetside.io.download.StreetsideDownloader.DOWNLOAD_MODE;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.testutils.annotations.Main;
 
-public class StreetsidePreferenceSettingTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules().main();
-
+@Main
+@Disabled
+class StreetsidePreferenceSettingTest {
   // TODO: repair broken unit test from Mapillary
-  @Ignore
   @Test
-  public void testAddGui() {
+  void testAddGui() {
     if (GraphicsEnvironment.isHeadless()) {
       return;
@@ -42,14 +37,12 @@
   }
 
-  @Ignore
   @Test
-  public void testIsExpert() {
-    assertFalse(new StreetsidePreferenceSetting().isExpert());
+  void testIsExpert() {
+    Assertions.assertFalse(new StreetsidePreferenceSetting().isExpert());
   }
 
   @SuppressWarnings("unchecked")
-  @Ignore
   @Test
-  public void testOk() {
+  void testOk() {
     StreetsidePreferenceSetting settings = new StreetsidePreferenceSetting();
 
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/boilerplate/SelectableLabelTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/boilerplate/SelectableLabelTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/gui/boilerplate/SelectableLabelTest.java	(revision 36064)
@@ -2,12 +2,13 @@
 package org.openstreetmap.josm.plugins.streetside.gui.boilerplate;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-public class SelectableLabelTest {
+
+class SelectableLabelTest {
   @Test
-  public void test() {
+  void testSelectableLabel() {
     SelectableLabel l1 = new SelectableLabel();
     assertFalse(l1.isEditable());
@@ -15,5 +16,4 @@
     assertTrue(l2.getText().contains("some text"));
     assertFalse(l2.isEditable());
-
   }
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/history/StreetsideRecordTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/history/StreetsideRecordTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/history/StreetsideRecordTest.java	(revision 36064)
@@ -2,6 +2,7 @@
 package org.openstreetmap.josm.plugins.streetside.history;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.Arrays;
@@ -9,8 +10,7 @@
 import java.util.concurrent.ConcurrentSkipListSet;
 
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
@@ -22,6 +22,6 @@
 import org.openstreetmap.josm.plugins.streetside.history.commands.CommandUnjoin;
 import org.openstreetmap.josm.plugins.streetside.history.commands.StreetsideCommand;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.testutils.annotations.Main;
+import org.openstreetmap.josm.testutils.annotations.Projection;
 
 /**
@@ -30,8 +30,8 @@
  * @author nokutu
  */
-public class StreetsideRecordTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules().main().projection();
+@Main
+@Projection
+@Disabled
+class StreetsideRecordTest {
 
   private StreetsideRecord record;
@@ -44,5 +44,5 @@
    * objects.
    */
-  @Before
+  @BeforeEach
   public void setUp() {
     record = new StreetsideRecord();
@@ -58,7 +58,6 @@
    * Test commands in general.
    */
-  @Ignore
-  @Test
-  public void commandTest() {
+  @Test
+  void testCommand() {
     StreetsideCommand cmd12 = new CommandMove(
             new ConcurrentSkipListSet<>(Arrays.asList(img1, img2)),
@@ -115,7 +114,6 @@
    * Tests {@link CommandMove} class.
    */
-  @Ignore
-  @Test
-  public void commandMoveTest() {
+  @Test
+  void testCommandMove() {
     CommandMove cmd1 = new CommandMove(
             new ConcurrentSkipListSet<>(Arrays.asList(img1, img2)),
@@ -150,7 +148,6 @@
    * Tests {@link CommandTurn} class.
    */
-  @Ignore
-  @Test
-  public void commandTurnTest() {
+  @Test
+  void testCommandTurn() {
     CommandTurn cmd1 = new CommandTurn(
             new ConcurrentSkipListSet<>(Arrays.asList(img1, img2)),
@@ -182,7 +179,6 @@
    * Tests {@link CommandJoin} class.
    */
-  @Ignore
-  @Test
-  public void commandJoinClass() {
+  @Test
+  void testCommandJoinClass() {
     CommandJoin cmd1 = new CommandJoin(img1, img2);
     CommandJoin cmd2 = new CommandJoin(img2, img3);
@@ -199,14 +195,12 @@
   }
 
-  @Ignore
-  @Test(expected=NullPointerException.class)
-  public void commandJoinNull1() {
-    new CommandJoin(img1, null);
-  }
-
-  @Ignore
-  @Test(expected=NullPointerException.class)
-  public void commandJoinNull2() {
-    new CommandJoin(null, img1);
+  @Test
+  void testCommandJoinNull1() {
+    assertThrows(NullPointerException.class, () -> new CommandJoin(img1, null));
+  }
+
+  @Test
+  void commandJoinNull2() {
+    assertThrows(NullPointerException.class, () -> new CommandJoin(null, img1));
   }
 
@@ -214,7 +208,6 @@
    * Tests {@link CommandUnjoin} class.
    */
-  @Ignore
-  @Test
-  public void commandUnjoinClass() {
+  @Test
+  void testCommandUnjoinClass() {
     CommandJoin join1 = new CommandJoin(img1, img2);
     CommandJoin join2 = new CommandJoin(img2, img3);
@@ -237,10 +230,6 @@
     assertEquals(1, img2.getSequence().getImages().size());
 
-    try {
-      record.addCommand(new CommandUnjoin(Arrays.asList(new StreetsideAbstractImage[]{img1, img2, img3})));
-      fail();
-    } catch (IllegalArgumentException e) {
-      // Expected output.
-    }
+    CommandUnjoin command = new CommandUnjoin(Arrays.asList(new StreetsideAbstractImage[]{img1, img2, img3}));
+    assertThrows(IllegalArgumentException.class, () -> record.addCommand(command));
   }
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnableTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnableTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/io/download/SequenceDownloadRunnableTest.java	(revision 36064)
@@ -2,5 +2,6 @@
 package org.openstreetmap.josm.plugins.streetside.io.download;
 
-import static org.junit.Assert.assertEquals;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.lang.reflect.Field;
@@ -9,19 +10,14 @@
 import java.util.function.Function;
 
-import org.junit.AfterClass;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
 import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties;
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.testutils.annotations.LayerManager;
 
-public class SequenceDownloadRunnableTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules();
+@Disabled
+@LayerManager
+class SequenceDownloadRunnableTest {
 
   private static final Function<Bounds, URL> SEARCH_SEQUENCES_URL_GEN = b -> {
@@ -30,24 +26,17 @@
   private Field urlGenField;
 
-  @AfterClass
-  public static void tearDown() {
-    MainApplication.getLayerManager().resetState();
-  }
 
-  @Ignore
   @Test
-  public void testRun1() throws IllegalArgumentException, IllegalAccessException {
+  void testRun1() throws IllegalArgumentException, IllegalAccessException {
     testNumberOfDecodedImages(4, SEARCH_SEQUENCES_URL_GEN, new Bounds(7.246497, 16.432955, 7.249027, 16.432976));
   }
 
-  @Ignore
   @Test
-  public void testRun2() throws IllegalArgumentException, IllegalAccessException {
+  void testRun2() throws IllegalArgumentException, IllegalAccessException {
     testNumberOfDecodedImages(0, SEARCH_SEQUENCES_URL_GEN, new Bounds(0, 0, 0, 0));
   }
 
-  @Ignore
   @Test
-  public void testRun3() throws IllegalArgumentException, IllegalAccessException {
+  void testRun3() throws IllegalArgumentException, IllegalAccessException {
     testNumberOfDecodedImages(0, b -> {
       try { return new URL("https://streetside/nonexistentURL"); } catch (MalformedURLException e) { return null; }
@@ -55,14 +44,12 @@
   }
 
-  @Ignore
   @Test
-  public void testRun4() throws IllegalArgumentException, IllegalAccessException {
+  void testRun4() throws IllegalArgumentException, IllegalAccessException {
     StreetsideProperties.CUT_OFF_SEQUENCES_AT_BOUNDS.put(true);
     testNumberOfDecodedImages(4, SEARCH_SEQUENCES_URL_GEN, new Bounds(7.246497, 16.432955, 7.249027, 16.432976));
   }
 
-  @Ignore
   @Test
-  public void testRun5() throws IllegalArgumentException, IllegalAccessException {
+  void testRun5() throws IllegalArgumentException, IllegalAccessException {
     StreetsideProperties.CUT_OFF_SEQUENCES_AT_BOUNDS.put(true);
     testNumberOfDecodedImages(0, SEARCH_SEQUENCES_URL_GEN, new Bounds(0, 0, 0, 0));
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/ImageUtilTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/ImageUtilTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/ImageUtilTest.java	(revision 36064)
@@ -2,5 +2,6 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import static org.junit.Assert.assertEquals;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.awt.image.BufferedImage;
@@ -8,15 +9,16 @@
 import javax.swing.ImageIcon;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-public class ImageUtilTest {
+
+class ImageUtilTest {
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(ImageUtil.class);
   }
 
   @Test
-  public void testScaleImageIcon() {
+  void testScaleImageIcon() {
     ImageIcon largeLandscape = new ImageIcon(new BufferedImage(72, 60, BufferedImage.TYPE_4BYTE_ABGR));
     ImageIcon largePortrait = new ImageIcon(new BufferedImage(56, 88, BufferedImage.TYPE_4BYTE_ABGR));
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/PluginStateTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/PluginStateTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/PluginStateTest.java	(revision 36064)
@@ -2,9 +2,12 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import static org.junit.Assert.assertEquals;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import javax.swing.JOptionPane;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.mockers.JOptionPaneSimpleMocker;
@@ -16,5 +19,5 @@
  * @see PluginState
  */
-public class PluginStateTest {
+class PluginStateTest {
 
   /**
@@ -22,14 +25,14 @@
    */
   @Test
-  public void downloadTest() {
-    assertEquals(false, PluginState.isDownloading());
+  void testDownload() {
+    assertFalse(PluginState.isDownloading());
     PluginState.startDownload();
-    assertEquals(true, PluginState.isDownloading());
+    assertTrue(PluginState.isDownloading());
     PluginState.startDownload();
-    assertEquals(true, PluginState.isDownloading());
+    assertTrue(PluginState.isDownloading());
     PluginState.finishDownload();
-    assertEquals(true, PluginState.isDownloading());
+    assertTrue(PluginState.isDownloading());
     PluginState.finishDownload();
-    assertEquals(false, PluginState.isDownloading());
+    assertFalse(PluginState.isDownloading());
   }
 
@@ -38,5 +41,5 @@
    */
   @Test
-  public void uploadTest() {
+  void testUpload() {
     TestUtils.assumeWorkingJMockit();
     JOptionPaneSimpleMocker jopsMocker = new JOptionPaneSimpleMocker();
@@ -45,14 +48,14 @@
             JOptionPane.OK_OPTION
         );
-    assertEquals(false, PluginState.isUploading());
+    assertFalse(PluginState.isUploading());
     PluginState.addImagesToUpload(2);
     assertEquals(2, PluginState.getImagesToUpload());
     assertEquals(0, PluginState.getImagesUploaded());
-    assertEquals(true, PluginState.isUploading());
+    assertTrue(PluginState.isUploading());
     PluginState.imageUploaded();
     assertEquals(1, PluginState.getImagesUploaded());
-    assertEquals(true, PluginState.isUploading());
+    assertTrue(PluginState.isUploading());
     PluginState.imageUploaded();
-    assertEquals(false, PluginState.isUploading());
+    assertFalse(PluginState.isUploading());
     assertEquals(2, PluginState.getImagesToUpload());
     assertEquals(2, PluginState.getImagesUploaded());
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideColorSchemeTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideColorSchemeTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideColorSchemeTest.java	(revision 36064)
@@ -2,19 +2,21 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+
 import javax.swing.JComponent;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-public class StreetsideColorSchemeTest {
+class StreetsideColorSchemeTest {
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(StreetsideColorScheme.class);
   }
 
   @Test
-  public void testStyleAsDefaultPanel() {
-    StreetsideColorScheme.styleAsDefaultPanel();
-    StreetsideColorScheme.styleAsDefaultPanel((JComponent[]) null);
+  void testStyleAsDefaultPanel() {
+    assertDoesNotThrow(() -> StreetsideColorScheme.styleAsDefaultPanel());
+    assertDoesNotThrow(() -> StreetsideColorScheme.styleAsDefaultPanel((JComponent[]) null));
   }
 }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsidePropertiesTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsidePropertiesTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsidePropertiesTest.java	(revision 36064)
@@ -2,17 +2,9 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.openstreetmap.josm.plugins.streetside.utils.TestUtil.StreetsideTestRules;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.junit.jupiter.api.Test;
 
 public class StreetsidePropertiesTest {
-
-  @Rule
-  public JOSMTestRules rules = new StreetsideTestRules();
-
   @Test
-  public void test() {
+  public void testUtilityClass() {
     TestUtil.testUtilityClass(StreetsideProperties.class);
   }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURLTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURLTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideURLTest.java	(revision 36064)
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.lang.reflect.InvocationTargetException;
@@ -11,8 +11,9 @@
 import java.net.URL;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-public class StreetsideURLTest {
+class StreetsideURLTest {
   // TODO: replace with Streetside URL @rrh
   private static final String CLIENT_ID_QUERY_PART = "client_id=T1Fzd20xZjdtR0s1VDk5OFNIOXpYdzoxNDYyOGRkYzUyYTFiMzgz";
@@ -44,17 +45,14 @@
 
 	@Test
-    public void testParseNextFromHeaderValue() throws MalformedURLException {
+    void testParseNextFromHeaderValue() throws MalformedURLException {
       String headerVal =
         "<https://a.streetside.com/v3/sequences?page=1&per_page=200&client_id=TG1sUUxGQlBiYWx2V05NM0pQNUVMQTo2NTU3NTBiNTk1NzM1Y2U2>; rel=\"first\", " +
         "<https://a.streetside.com/v3/sequences?page=2&per_page=200&client_id=TG1sUUxGQlBiYWx2V05NM0pQNUVMQTo2NTU3NTBiNTk1NzM1Y2U2>; rel=\"prev\", " +
         "<https://a.streetside.com/v3/sequences?page=4&per_page=200&client_id=TG1sUUxGQlBiYWx2V05NM0pQNUVMQTo2NTU3NTBiNTk1NzM1Y2U2>; rel=\"next\"";
-      assertEquals(
-        new URL("https://a.streetside.com/v3/sequences?page=4&per_page=200&client_id=TG1sUUxGQlBiYWx2V05NM0pQNUVMQTo2NTU3NTBiNTk1NzM1Y2U2"),
-        StreetsideURL.APIv3.parseNextFromLinkHeaderValue(headerVal)
-      );
+      assertEquals(new URL("https://a.streetside.com/v3/sequences?page=4&per_page=200&client_id=TG1sUUxGQlBiYWx2V05NM0pQNUVMQTo2NTU3NTBiNTk1NzM1Y2U2"), StreetsideURL.APIv3.parseNextFromLinkHeaderValue(headerVal));
     }
 
     @Test
-    public void testParseNextFromHeaderValue2() throws MalformedURLException {
+    void testParseNextFromHeaderValue2() throws MalformedURLException {
       String headerVal =
         "<https://urlFirst>; rel=\"first\", " +
@@ -66,11 +64,11 @@
 
     @Test
-    public void testParseNextFromHeaderValueNull() {
-      assertEquals(null, StreetsideURL.APIv3.parseNextFromLinkHeaderValue(null));
+    void testParseNextFromHeaderValueNull() {
+      assertNull(StreetsideURL.APIv3.parseNextFromLinkHeaderValue(null));
     }
 
     @Test
-    public void testParseNextFromHeaderValueMalformed() {
-      assertEquals(null, StreetsideURL.APIv3.parseNextFromLinkHeaderValue("<###>; rel=\"next\", blub"));
+    void testParseNextFromHeaderValueMalformed() {
+      assertNull(StreetsideURL.APIv3.parseNextFromLinkHeaderValue("<###>; rel=\"next\", blub"));
     }
 
@@ -85,21 +83,18 @@
   }*/
 
-  @Ignore
+  @Disabled
   @Test
-  public void testBrowseImageURL() throws MalformedURLException {
-    assertEquals(
-        new URL("https://www.streetside.com/map/im/1234567890123456789012"),
-        StreetsideURL.MainWebsite.browseImage("1234567890123456789012")
-    );
+  void testBrowseImageURL() throws MalformedURLException {
+    assertEquals(new URL("https://www.streetside.com/map/im/1234567890123456789012"), StreetsideURL.MainWebsite.browseImage("1234567890123456789012"));
   }
 
-  @Test(expected = IllegalArgumentException.class)
-  public void testIllegalBrowseImageURL() {
-    StreetsideURL.MainWebsite.browseImage(null);
+  @Test
+  void testIllegalBrowseImageURL() {
+    assertThrows(IllegalArgumentException.class, () -> StreetsideURL.MainWebsite.browseImage(null));
   }
 
-  @Ignore
+  @Disabled
   @Test
-  public void testConnectURL() {
+  void testConnectURL() {
     /*assertUrlEquals(
         StreetsideURL.MainWebsite.connect("http://redirect-host/ä"),
@@ -128,7 +123,7 @@
   }
 
-  @Ignore
+  @Disabled
   @Test
-  public void testUploadSecretsURL() throws MalformedURLException {
+  void testUploadSecretsURL() throws MalformedURLException {
     /*assertEquals(
         new URL("https://a.streetside.com/v2/me/uploads/secrets?"+CLIENT_ID_QUERY_PART),
@@ -137,7 +132,7 @@
   }
 
-  @Ignore
+  @Disabled
   @Test
-  public void testUserURL() throws MalformedURLException {
+  void testUserURL() throws MalformedURLException {
     /*assertEquals(
         new URL("https://a.streetside.com/v3/me?"+CLIENT_ID_QUERY_PART),
@@ -147,14 +142,14 @@
 
   @Test
-  public void testString2MalformedURL()
+  void testString2MalformedURL()
       throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
     Method method = StreetsideURL.class.getDeclaredMethod("string2URL", String[].class);
     method.setAccessible(true);
-    assertNull(method.invoke(null, new Object[]{new String[]{"malformed URL"}})); // this simply invokes string2URL("malformed URL")
-    assertNull(method.invoke(null, new Object[]{null})); // invokes string2URL(null)
+    Assertions.assertNull(method.invoke(null, new Object[]{new String[]{"malformed URL"}})); // this simply invokes string2URL("malformed URL")
+    Assertions.assertNull(method.invoke(null, new Object[]{null})); // invokes string2URL(null)
   }
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(StreetsideURL.class);
     TestUtil.testUtilityClass(StreetsideURL.APIv3.class);
@@ -173,8 +168,5 @@
         parameterIsPresent |= actualParams[acIndex].equals(expectedParams[exIndex]);
       }
-      assertTrue(
-          expectedParams[exIndex] + " was expected in the query string of " + actualUrl.toString() + " but wasn't there.",
-          parameterIsPresent
-      );
+      Assertions.assertTrue(parameterIsPresent, expectedParams[exIndex] + " was expected in the query string of " + actualUrl.toString() + " but wasn't there.");
     }
   }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideUtilsTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideUtilsTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/StreetsideUtilsTest.java	(revision 36064)
@@ -2,9 +2,9 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.commons.imaging.common.RationalNumber;
 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
@@ -15,8 +15,8 @@
  *
  */
-public class StreetsideUtilsTest {
+class StreetsideUtilsTest {
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(StreetsideUtils.class);
   }
@@ -27,5 +27,5 @@
    */
   @Test
-  public void degMinSecToDoubleTest() {
+  void testDegMinSecToDouble() {
     RationalNumber[] num = new RationalNumber[3];
     num[0] = new RationalNumber(1, 1);
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/TestUtil.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/TestUtil.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/TestUtil.java	(revision 36064)
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.plugins.streetside.utils;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.GraphicsEnvironment;
@@ -15,6 +15,9 @@
 
 import org.junit.runners.model.InitializationError;
-
+import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.MemoryPreferences;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
@@ -27,4 +30,16 @@
   private TestUtil() {
     // Prevent instantiation
+  }
+
+  /**
+   * Check if we can load images
+   * @return {@code true} if the {@link StreetsidePlugin#LOGO} could be loaded
+   */
+  public static boolean cannotLoadImages() {
+    // The class-level @DisabledIf seems to be run prior to any possible setup code
+    if (Config.getPref() == null) {
+      Config.setPreferencesInstance(new MemoryPreferences());
+    }
+    return new ImageProvider("streetside-logo").setOptional(true).getResource() == null;
   }
 
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonDecoderTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonDecoderTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonDecoderTest.java	(revision 36064)
@@ -2,5 +2,6 @@
 package org.openstreetmap.josm.plugins.streetside.utils.api;
 
-import static org.junit.Assert.assertNull;
+
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.io.ByteArrayInputStream;
@@ -11,17 +12,16 @@
 import javax.json.JsonObject;
 
-import org.junit.Test;
-
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.plugins.streetside.utils.TestUtil;
 
-public class JsonDecoderTest {
+class JsonDecoderTest {
 
   @Test
-  public void testUtilityClass() {
+  void testUtilityClass() {
     TestUtil.testUtilityClass(JsonDecoder.class);
   }
 
   @Test
-  public void testDecodeDoublePair() {
+  void testDecodeDoublePair() {
     assertNull(JsonDecoder.decodeDoublePair(null));
   }
Index: applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonSequencesDecoderTest.java
===================================================================
--- applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonSequencesDecoderTest.java	(revision 36062)
+++ applications/editors/josm/plugins/MicrosoftStreetside/test/unit/org/openstreetmap/josm/plugins/streetside/utils/api/JsonSequencesDecoderTest.java	(revision 36064)
@@ -2,7 +2,6 @@
 package org.openstreetmap.josm.plugins.streetside.utils.api;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.openstreetmap.josm.plugins.streetside.utils.api.JsonDecoderTest.assertDecodesToNull;
 
@@ -19,6 +18,7 @@
 import javax.json.JsonValue;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.plugins.streetside.StreetsideImage;
@@ -27,9 +27,9 @@
 import org.openstreetmap.josm.plugins.streetside.utils.TestUtil;
 
-public class JsonSequencesDecoderTest {
-
-  @Ignore
-  @Test
-  public void testDecodeSequences() {
+class JsonSequencesDecoderTest {
+
+  @Disabled
+  @Test
+  void testDecodeSequences() {
     Collection<StreetsideSequence> exampleSequences = JsonDecoder.decodeFeatureCollection(
       Json.createReader(this.getClass().getResourceAsStream("test/data/api/v3/responses/searchSequences.json")).readObject(),
@@ -51,8 +51,8 @@
     assertEquals(329.94820000000004, seq.getImages().get(3).getHe(), 1e-10);
 
-    assertEquals(new LatLon(7.246497, 16.432958),  seq.getImages().get(0).getLatLon());
-    assertEquals(new LatLon(7.246567, 16.432955),  seq.getImages().get(1).getLatLon());
-    assertEquals(new LatLon(7.248372, 16.432971),  seq.getImages().get(2).getLatLon());
-    assertEquals(new LatLon(7.249027, 16.432976),  seq.getImages().get(3).getLatLon());
+    assertEquals(new LatLon(7.246497, 16.432958), seq.getImages().get(0).getLatLon());
+    assertEquals(new LatLon(7.246567, 16.432955), seq.getImages().get(1).getLatLon());
+    assertEquals(new LatLon(7.248372, 16.432971), seq.getImages().get(2).getLatLon());
+    assertEquals(new LatLon(7.249027, 16.432976), seq.getImages().get(3).getLatLon());
 
     assertEquals(1_457_963_093_860L, seq.getCd()); // 2016-03-14T13:44:53.860 UTC
@@ -60,5 +60,5 @@
 
   @Test
-  public void testDecodeSequencesInvalid() {
+  void testDecodeSequencesInvalid() {
     // null input
     assertEquals(0, JsonDecoder.decodeFeatureCollection(null, JsonSequencesDecoder::decodeSequence).size());
@@ -76,21 +76,18 @@
 
   @Test
-  public void testDecodeSequencesWithArbitraryObjectAsFeature() {
+  void testDecodeSequencesWithArbitraryObjectAsFeature() {
     assertNumberOfDecodedSequences(0, "{\"type\": \"FeatureCollection\", \"features\": [{}]}");
   }
 
   private static void assertNumberOfDecodedSequences(int expectedNumberOfSequences, String jsonString) {
-    assertEquals(
-      expectedNumberOfSequences,
-      JsonDecoder.decodeFeatureCollection(
-        Json.createReader(new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8))).readObject(),
-        JsonSequencesDecoder::decodeSequence
-      ).size()
-    );
-  }
-
-  @Ignore
-  @Test
-  public void testDecodeSequence() {
+    assertEquals(expectedNumberOfSequences, JsonDecoder.decodeFeatureCollection(
+      Json.createReader(new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8))).readObject(),
+      JsonSequencesDecoder::decodeSequence
+    ).size());
+  }
+
+  @Disabled
+  @Test
+  void testDecodeSequence() {
     StreetsideSequence exampleSequence = JsonSequencesDecoder.decodeSequence(
       Json.createReader(this.getClass().getResourceAsStream("/api/v3/responses/sequence.json")).readObject()
@@ -100,18 +97,12 @@
     assertEquals(2, exampleSequence.getImages().size());
 
-    assertEquals(
-      new StreetsideImage("76P0YUrlDD_lF6J7Od3yoA", new LatLon(16.43279, 7.246085), 96.71454),
-      exampleSequence.getImages().get(0)
-    );
-    assertEquals(
-      new StreetsideImage("Ap_8E0BwoAqqewhJaEbFyQ", new LatLon(16.432799, 7.246082), 96.47705000000002),
-      exampleSequence.getImages().get(1)
-    );
-  }
-
-  @Test
-  public void testDecodeSequenceInvalid() {
+    assertEquals(new StreetsideImage("76P0YUrlDD_lF6J7Od3yoA", new LatLon(16.43279, 7.246085), 96.71454), exampleSequence.getImages().get(0));
+    assertEquals(new StreetsideImage("Ap_8E0BwoAqqewhJaEbFyQ", new LatLon(16.432799, 7.246082), 96.47705000000002), exampleSequence.getImages().get(1));
+  }
+
+  @Test
+  void testDecodeSequenceInvalid() {
     // null input
-    assertNull(JsonSequencesDecoder.decodeSequence(null));
+    Assertions.assertNull(JsonSequencesDecoder.decodeSequence(null));
     // `properties` key is not set
     assertDecodesToNull(JsonSequencesDecoder::decodeSequence, "{\"type\": \"Feature\"}");
@@ -150,17 +141,14 @@
    */
   @Test
-  public void testDecodeJsonArray()
+  void testDecodeJsonArray()
       throws NoSuchMethodException, SecurityException, IllegalAccessException,
       IllegalArgumentException, InvocationTargetException {
     Method method = JsonSequencesDecoder.class.getDeclaredMethod("decodeJsonArray", JsonArray.class, Function.class, Class.class);
     method.setAccessible(true);
-    assertEquals(
-      0,
-      ((String[]) method.invoke(null, null, (Function<JsonValue, String>) val -> null, String.class)).length
-    );
-  }
-
-  @Test
-  public void testDecodeCoordinateProperty() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+    assertEquals(0, ((String[]) method.invoke(null, null, (Function<JsonValue, String>) val -> null, String.class)).length);
+  }
+
+  @Test
+  void testDecodeCoordinateProperty() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
     Method decodeCoordinateProperty = JsonSequencesDecoder.class.getDeclaredMethod(
       "decodeCoordinateProperty",
@@ -172,21 +160,15 @@
     decodeCoordinateProperty.setAccessible(true);
 
-    assertEquals(
-      0,
-      ((String[]) decodeCoordinateProperty.invoke(
-        null, null, "key", (Function<JsonValue, String>) val -> "string", String.class
-      )).length
-    );
-
-    assertEquals(
-      0,
-      ((String[]) decodeCoordinateProperty.invoke(
-        null, JsonUtil.string2jsonObject("{\"coordinateProperties\":{\"key\":0}}"), "key", (Function<JsonValue, String>) val -> "string", String.class
-      )).length
-    );
-  }
-
-  @Test
-  public void testDecodeLatLons()
+    assertEquals(0, ((String[]) decodeCoordinateProperty.invoke(
+      null, null, "key", (Function<JsonValue, String>) val -> "string", String.class
+    )).length);
+
+    assertEquals(0, ((String[]) decodeCoordinateProperty.invoke(
+      null, JsonUtil.string2jsonObject("{\"coordinateProperties\":{\"key\":0}}"), "key", (Function<JsonValue, String>) val -> "string", String.class
+    )).length);
+  }
+
+  @Test
+  void testDecodeLatLons()
       throws NoSuchMethodException, SecurityException, IllegalAccessException,
       IllegalArgumentException, InvocationTargetException {
@@ -206,11 +188,11 @@
     )).readObject());
     assertEquals(3, example.length);
-    assertNull(example[0]);
-    assertNull(example[1]);
-    assertNull(example[2]);
-  }
-
-  @Test
-  public void testUtilityClass() {
+    Assertions.assertNull(example[0]);
+    Assertions.assertNull(example[1]);
+    Assertions.assertNull(example[2]);
+  }
+
+  @Test
+  void testUtilityClass() {
     TestUtil.testUtilityClass(JsonSequencesDecoder.class);
   }
