Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 17654)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 17655)
@@ -5,4 +5,9 @@
 
 import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.StructUtils;
@@ -10,4 +15,5 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
+import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
@@ -32,17 +38,21 @@
     public String getPermissionMessage() {
         return tr("Remote Control has been asked to load an imagery layer from the following URL:")
-                + "<br>" + args.get("url");
+                + "<br>" + args.getOrDefault("url", args.get("id"));
     }
 
     @Override
     public String[] getMandatoryParams() {
-        return new String[]{"url"};
+        return new String[0];
     }
 
     @Override
     public String[] getOptionalParams() {
-        return StructUtils.serializeStruct(new ImageryPreferenceEntry(), ImageryPreferenceEntry.class,
-                StructUtils.SerializeOptions.INCLUDE_NULL, StructUtils.SerializeOptions.INCLUDE_DEFAULT
-        ).keySet().toArray(new String[0]);
+        Set<String> params = new LinkedHashSet<>();
+        params.add("url");
+        params.add("id");
+        Map<String, String> struct = StructUtils.serializeStruct(new ImageryPreferenceEntry(), ImageryPreferenceEntry.class,
+                StructUtils.SerializeOptions.INCLUDE_NULL, StructUtils.SerializeOptions.INCLUDE_DEFAULT);
+        params.addAll(struct.keySet());
+        return params.toArray(new String[0]);
     }
 
@@ -53,4 +63,13 @@
 
     protected ImageryInfo buildImageryInfo() {
+        String id = args.get("id");
+        if (id != null) {
+            Optional<ImageryInfo> byId = ImageryLayerInfo.instance.getLayers().stream()
+                    .filter(l -> Objects.equals(l.getId(), id))
+                    .findFirst();
+            if (byId.isPresent()) {
+                return byId.get();
+            }
+        }
         args.computeIfAbsent("type", ignore -> ImageryType.WMS.getDefault().getTypeString());
         args.computeIfAbsent("name", ignore -> args.getOrDefault("title", tr("Remote imagery")));
@@ -83,5 +102,6 @@
         try {
             CheckParameterUtil.ensureParameterNotNull(args);
-            CheckParameterUtil.ensureParameterNotNull(args.get("url"));
+            CheckParameterUtil.ensureThat(args.containsKey("url") || args.containsKey("id"),
+                    tr("The following keys are mandatory, but have not been provided: {0}", "url/id"));
             ImageryLayer.create(buildImageryInfo());
         } catch (IllegalArgumentException e) {
@@ -100,4 +120,5 @@
                 ImageryType::getTypeString));
         return new String[] {
+            "/imagery?id=Bing",
             "/imagery?title=osm&type=tms&url=https://a.tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png",
             "/imagery?title=landsat&type=wms&url=http://irs.gis-lab.info/?" +
