Index: trunk/test/unit/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerActionTest.java	(revision 18893)
+++ trunk/test/unit/org/openstreetmap/josm/gui/dialogs/layer/DeleteLayerActionTest.java	(revision 18895)
@@ -11,4 +11,5 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.util.Collections;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -22,4 +23,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
 import org.openstreetmap.josm.testutils.annotations.Main;
 import org.openstreetmap.josm.testutils.annotations.Projection;
@@ -123,4 +125,45 @@
     }
 
+    @Test
+    void testRemoveBottomActiveWithBackgroundLayer() {
+        GeoImageLayer geoImageLayer = new GeoImageLayer(Collections.emptyList(), null, "imageLayer");
+        OsmDataLayer osmDataLayer1 = new OsmDataLayer(new DataSet(), "dataLayer1", null);
+        OsmDataLayer osmDataLayer2 = new OsmDataLayer(new DataSet(), "dataLayer2", null);
+
+        // remove all the layers added in BeforeEach()
+        for (Layer l : MainApplication.getLayerManager().getLayers()) {
+            MainApplication.getLayerManager().removeLayer(l);
+        }
+        MainApplication.getLayerManager().addLayer(geoImageLayer);
+        MainApplication.getLayerManager().addLayer(osmDataLayer1);
+        MainApplication.getLayerManager().addLayer(osmDataLayer2);
+
+        model.getLayerManager().setActiveLayer(osmDataLayer1);
+        model.setSelectedLayer(osmDataLayer1);
+
+        deleteLayerAction.actionPerformed(null);
+
+        assertSame(model.getLayerManager().getActiveLayer(), model.getLayer(0));
+        assertEquals("dataLayer2", Objects.requireNonNull(model.getLayerManager().getActiveLayer().getName()));
+        assertAll(model.getLayers().stream().map(layer -> () -> assertNotSame(osmDataLayer1, layer)));
+    }
+
+    @Test
+    void testRemoveBottomActiveAllHidden() {
+        hideRange(0, 9);
+        final Layer toRemove = model.getLayer(9);
+        assertNotNull(toRemove);
+        assertFalse(toRemove.isVisible());
+        assertEquals(0, model.getLayers().stream().filter(Layer::isVisible).count());
+
+        model.getLayerManager().setActiveLayer(toRemove);
+        model.setSelectedLayer(toRemove);
+        deleteLayerAction.actionPerformed(null);
+
+        assertSame(model.getLayerManager().getActiveLayer(), model.getLayer(8));
+        assertEquals("testActiveLayer1", Objects.requireNonNull(model.getLayer(8)).getName());
+        assertAll(model.getLayers().stream().map(layer -> () -> assertNotSame(toRemove, layer)));
+    }
+
     private void hideRange(int start, int end) {
         model.getSelectionModel().setSelectionInterval(start, end);
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java	(revision 18893)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java	(revision 18895)
@@ -6,4 +6,5 @@
 import java.util.Collections;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -19,4 +20,11 @@
 @Main
 class GeoImageLayerTest {
+    @AfterEach
+    void tearDown() {
+        if (ImageViewerDialog.hasInstance()) {
+            ImageViewerDialog.getInstance().destroy();
+        }
+    }
+
     /**
      * Test that {@link GeoImageLayer#mergeFrom} throws IAE for invalid arguments
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImagesLoaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImagesLoaderTest.java	(revision 18893)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/ImagesLoaderTest.java	(revision 18895)
@@ -16,4 +16,6 @@
 import org.openstreetmap.josm.io.GpxReader;
 import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
+import org.openstreetmap.josm.testutils.annotations.Main;
+import org.openstreetmap.josm.testutils.annotations.Projection;
 
 /**
@@ -21,4 +23,6 @@
  */
 @BasicPreferences
+@Main
+@Projection
 class ImagesLoaderTest {
     /**
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/WikimediaCommonsLoaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/WikimediaCommonsLoaderTest.java	(revision 18893)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/geoimage/WikimediaCommonsLoaderTest.java	(revision 18895)
@@ -11,10 +11,10 @@
 import java.util.List;
 
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
-import org.openstreetmap.josm.tools.Http1Client;
-import org.openstreetmap.josm.tools.HttpClient;
+import org.openstreetmap.josm.testutils.annotations.HTTP;
+import org.openstreetmap.josm.testutils.annotations.Main;
 
 import com.github.tomakehurst.wiremock.WireMockServer;
@@ -24,9 +24,12 @@
  */
 @BasicPreferences
+@HTTP
+@Main
 class WikimediaCommonsLoaderTest {
-
-    @BeforeAll
-    static void beforeAll() {
-        HttpClient.setFactory(Http1Client::new);
+    @AfterEach
+    void tearDown() {
+        if (ImageViewerDialog.hasInstance()) {
+            ImageViewerDialog.getInstance().destroy();
+        }
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarkerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarkerTest.java	(revision 18893)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarkerTest.java	(revision 18895)
@@ -8,4 +8,5 @@
 import java.net.MalformedURLException;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.TestUtils;
@@ -13,4 +14,5 @@
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog;
 import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
 import org.openstreetmap.josm.testutils.annotations.Main;
@@ -22,4 +24,11 @@
 @Main
 class ImageMarkerTest {
+    @AfterEach
+    void tearDown() {
+        if (ImageViewerDialog.hasInstance()) {
+            ImageViewerDialog.getInstance().destroy();
+        }
+    }
+
     /**
      * Unit test of {@link ImageMarker#ImageMarker}.
