Index: src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java	(nonexistent)
+++ src/org/openstreetmap/josm/actions/ReorderImageryLayersAction.java	(working copy)
@@ -0,0 +1,56 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.layer.ImageryLayer;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Reorders all non-overlay imagery layers in a cyclic manner.
+ * @since xxx
+ */
+public class ReorderImageryLayersAction extends JosmAction {
+
+    private static final int VK_SQUARE = 0x10000b2;
+
+    /**
+     * Constructs a new {@code ReorderImageryLayersAction}.
+     */
+    public ReorderImageryLayersAction() {
+        // TODO: find a suitable icon
+        super(tr("Reorder imagery layers"), "dialogs/layerlist", tr("Reorders non-overlay imagery layers."),
+            Shortcut.registerShortcut("imagery:reorder", tr("Reorder imagery layers"), KeyEvent.VK_DEAD_TILDE, Shortcut.DIRECT), true);
+        // On AZERTY keyboard layour the key displays the character '²'
+        MainApplication.registerActionShortcut(this,
+            Shortcut.registerShortcut("imagery:reorderbis", tr("Reorder imagery layers"), VK_SQUARE, Shortcut.DIRECT));
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        List<ImageryLayer> layers = getNonOverlayImageryLayers().collect(Collectors.toList());
+        int size = layers.size();
+        if (size > 1) {
+            // Move the first non-overlay layer at the position of the last non-overlay layer
+            getLayerManager().moveLayer(layers.get(0),
+                    getLayerManager().getLayers().indexOf(layers.get(size - 1)));
+        }
+    }
+
+    @Override
+    protected void updateEnabledState() {
+        setEnabled(getNonOverlayImageryLayers().count() > 1);
+    }
+
+    private Stream<ImageryLayer> getNonOverlayImageryLayers() {
+        return getLayerManager().getLayersOfType(ImageryLayer.class).stream()
+                .filter(l -> !l.getInfo().isOverlay());
+    }
+}

Property changes on: src\org\openstreetmap\josm\actions\ReorderImageryLayersAction.java
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
Index: src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainMenu.java	(revision 13858)
+++ src/org/openstreetmap/josm/gui/MainMenu.java	(working copy)
@@ -79,6 +79,7 @@
 import org.openstreetmap.josm.actions.PreferencesAction;
 import org.openstreetmap.josm.actions.PurgeAction;
 import org.openstreetmap.josm.actions.RedoAction;
+import org.openstreetmap.josm.actions.ReorderImageryLayersAction;
 import org.openstreetmap.josm.actions.ReportBugAction;
 import org.openstreetmap.josm.actions.RestartAction;
 import org.openstreetmap.josm.actions.ReverseWayAction;
@@ -391,6 +392,8 @@
     public final JosmAction moveLeftAction = new MoveAction(MoveAction.Direction.LEFT);
     public final JosmAction moveRightAction = new MoveAction(MoveAction.Direction.RIGHT);
 
+    public final ReorderImageryLayersAction reorderImageryLayersAction = new ReorderImageryLayersAction();
+
     public final TaggingPresetSearchAction presetSearchAction = new TaggingPresetSearchAction();
     public final TaggingPresetSearchPrimitiveDialog.Action presetSearchPrimitiveAction = new TaggingPresetSearchPrimitiveDialog.Action();
     public final DialogsToggleAction dialogsToggleAction = new DialogsToggleAction();
@@ -760,6 +763,7 @@
                 tr("Click to open the tagging presets tab in the preferences"), TaggingPresetPreference.class));
         presetsMenu.addSeparator();
 
+        add(imageryMenu, reorderImageryLayersAction);
         add(imageryMenu, PreferencesAction.forPreferenceTab(tr("Imagery preferences"),
                 tr("Click to open the imagery tab in the preferences"), ImageryPreference.class));
 
