Index: trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 5998)
+++ trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 6000)
@@ -5,4 +5,5 @@
 
 import java.awt.Dimension;
+import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.io.IOException;
@@ -10,5 +11,7 @@
 import javax.swing.Action;
 import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
 import javax.swing.JOptionPane;
+import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import org.openstreetmap.josm.Main;
@@ -20,4 +23,5 @@
 import org.openstreetmap.josm.io.imagery.WMSImagery;
 import org.openstreetmap.josm.gui.preferences.imagery.WMSLayerTree;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -77,14 +81,20 @@
             final WMSLayerTree tree = new WMSLayerTree();
             tree.updateTree(wms);
+            final JComboBox formats = new JComboBox(wms.getFormats().toArray());
+            formats.setToolTipText(tr("Select image format for WMS layer"));
 
             if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) {{
                 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree());
-                setContent(scrollPane);
                 scrollPane.setPreferredSize(new Dimension(400, 400));
+                final JPanel panel = new JPanel(new GridBagLayout());
+                panel.add(scrollPane, GBC.eol().fill());
+                panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL));
+                setContent(panel);
             }}.showDialog().getValue()) {
                 return null;
             }
 
-            String url = wms.buildGetMapUrl(tree.getSelectedLayers());
+            final String url = wms.buildGetMapUrl(
+                    tree.getSelectedLayers(), (String) formats.getSelectedItem());
             return new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());
         } // exception handling from AddWMSLayerPanel.java
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java	(revision 5998)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java	(revision 6000)
@@ -12,7 +12,9 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
+import javax.swing.DefaultComboBoxModel;
 
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -31,4 +33,5 @@
     private final JCheckBox endpoint = new JCheckBox(tr("Store WMS endpoint only, select layers at usage"));
     private final WMSLayerTree tree = new WMSLayerTree();
+    private final JComboBox formats = new JComboBox();
     private final JLabel wmsInstruction;
     private final JosmTextArea wmsUrl = new JosmTextArea(3, 40);
@@ -53,9 +56,12 @@
         add(new JScrollPane(showBounds), GBC.eop().fill());
 
-        add(wmsInstruction = new JLabel(tr("3. Verify generated WMS URL")), GBC.eol());
+        add(new JLabel(tr("3. Select image format")), GBC.eol());
+        add(formats, GBC.eol().fill());
+
+        add(wmsInstruction = new JLabel(tr("4. Verify generated WMS URL")), GBC.eol());
         add(wmsUrl, GBC.eop().fill());
         wmsUrl.setLineWrap(true);
 
-        add(new JLabel(tr("4. Enter name for this layer")), GBC.eol());
+        add(new JLabel(tr("5. Enter name for this layer")), GBC.eol());
         add(name, GBC.eop().fill());
 
@@ -66,4 +72,5 @@
                     wms.attemptGetCapabilities(rawUrl.getText());
                     tree.updateTree(wms);
+                    formats.setModel(new DefaultComboBoxModel(wms.getFormats().toArray()));
                 } catch (MalformedURLException ex) {
                     JOptionPane.showMessageDialog(getParent(), tr("Invalid service URL."),
@@ -87,4 +94,5 @@
                 showBounds.setEnabled(!endpoint.isSelected());
                 wmsInstruction.setEnabled(!endpoint.isSelected());
+                formats.setEnabled(!endpoint.isSelected());
                 wmsUrl.setEnabled(!endpoint.isSelected());
                 if (endpoint.isSelected()) {
@@ -99,4 +107,11 @@
             @Override
             public void propertyChange(PropertyChangeEvent evt) { 
+                onLayerSelectionChanged();
+            }
+        });
+
+        formats.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
                 onLayerSelectionChanged();
             }
@@ -124,5 +139,5 @@
     protected final void onLayerSelectionChanged() {
         if (wms.getServiceUrl() != null) {
-            wmsUrl.setText(wms.buildGetMapUrl(tree.getSelectedLayers()));
+            wmsUrl.setText(wms.buildGetMapUrl(tree.getSelectedLayers(), (String) formats.getSelectedItem()));
             name.setText(wms.getServiceUrl().getHost() + ": " + Utils.join(", ", tree.getSelectedLayers()));
         }
Index: trunk/src/org/openstreetmap/josm/io/imagery/WMSImagery.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/imagery/WMSImagery.java	(revision 5998)
+++ trunk/src/org/openstreetmap/josm/io/imagery/WMSImagery.java	(revision 6000)
@@ -10,7 +10,7 @@
 import java.net.URL;
 import java.net.URLConnection;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
@@ -51,4 +51,5 @@
     private List<LayerDetails> layers;
     private URL serviceUrl;
+    private List<String> formats;
 
     public List<LayerDetails> getLayers() {
@@ -58,4 +59,8 @@
     public URL getServiceUrl() {
         return serviceUrl;
+    }
+
+    public List<String> getFormats() {
+        return formats;
     }
 
@@ -83,6 +88,10 @@
 
     public String buildGetMapUrl(Collection<LayerDetails> selectedLayers) {
+        return buildGetMapUrl(selectedLayers, "image/jpeg");
+    }
+
+    public String buildGetMapUrl(Collection<LayerDetails> selectedLayers, String format) {
         return buildRootUrl()
-                + "FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS="
+                + "FORMAT=" + format + "&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS="
                 + Utils.join(",", Utils.transform(selectedLayers, new Utils.Function<LayerDetails, String>() {
             @Override
@@ -151,4 +160,12 @@
             child = getChild(child, "Request");
             child = getChild(child, "GetMap");
+
+            formats = new ArrayList<String>(Utils.transform(getChildren(child, "Format"), new Utils.Function<Element, String>() {
+                @Override
+                public String apply(Element x) {
+                    return x.getTextContent();
+                }
+            }));
+
             child = getChild(child, "DCPType");
             child = getChild(child, "HTTP");
@@ -185,5 +202,5 @@
 
     private List<LayerDetails> parseLayers(List<Element> children, Set<String> parentCrs) {
-        List<LayerDetails> details = new LinkedList<LayerDetails>();
+        List<LayerDetails> details = new ArrayList<LayerDetails>();
         for (Element element : children) {
             details.add(parseLayer(element, parentCrs));
@@ -281,5 +298,5 @@
 
     private static List<Element> getChildren(Element parent, String name) {
-        List<Element> retVal = new LinkedList<Element>();
+        List<Element> retVal = new ArrayList<Element>();
         for (Node child = parent.getFirstChild(); child != null; child = child.getNextSibling()) {
             if (child instanceof Element && name.equals(child.getNodeName())) {
