Index: /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 4183)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 4184)
@@ -927,5 +927,5 @@
             res += p;
         }
-        return tr("Supported projections are: {1}", res);
+        return tr("Supported projections are: {0}", res);
     }
 }
Index: /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java	(revision 4183)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java	(revision 4184)
@@ -78,5 +78,5 @@
         try
         {
-            Matcher m = Pattern.compile(".*srs=([a-z0-9:]+).*").matcher(baseURL.toUpperCase());
+            Matcher m = Pattern.compile(".*SRS=([a-z0-9:]+).*", Pattern.CASE_INSENSITIVE).matcher(baseURL.toUpperCase());
             if(m.matches())
             {
@@ -112,5 +112,5 @@
 
         if (urlWithPatterns) {
-            str = str.replaceAll("\\{proj\\}", myProj)
+            str = str.replaceAll("\\{proj(\\([^})]+\\))?\\}", myProj)
             .replaceAll("\\{bbox\\}", bbox)
             .replaceAll("\\{w\\}", latLonFormat.format(w))
@@ -138,12 +138,28 @@
         try
         {
-            Matcher m = Pattern.compile(".*srs=([a-z0-9:]+).*").matcher(baseURL.toUpperCase());
+            Matcher m = Pattern.compile(".*\\{PROJ\\(([^)}]+)\\)\\}.*").matcher(baseURL.toUpperCase());
             if(m.matches())
             {
-                serverProjections.add(m.group(1));
-                if(m.group(1).equals("EPSG:4326"))
+                boolean hasepsg = false;
+                for(String p : m.group(1).split(","))
+                {
+                    serverProjections.add(p);
+                    if(p.equals("EPSG:4326"))
+                        hasepsg = true;
+                }
+                if(hasepsg && !serverProjections.contains(new Mercator().toCode()))
                     serverProjections.add(new Mercator().toCode());
             }
-            /* TODO: here should be an "else" code checking server capabilities */
+            else
+            {
+                m = Pattern.compile(".*SRS=([a-z0-9:]+).*", Pattern.CASE_INSENSITIVE).matcher(baseURL.toUpperCase());
+                if(m.matches())
+                {
+                    serverProjections.add(m.group(1));
+                    if(m.group(1).equals("EPSG:4326"))
+                        serverProjections.add(new Mercator().toCode());
+                }
+                /* TODO: here should be an "else" code checking server capabilities */
+            }
         }
         catch(Exception e)
