Index: applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPlugin.java
===================================================================
--- applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPlugin.java	(revision 12187)
+++ applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPlugin.java	(revision 12321)
@@ -10,4 +10,5 @@
 import java.util.Map;
 import java.util.TreeSet;
+import java.util.TreeMap;
 import java.io.*;
 
@@ -40,4 +41,5 @@
 
 	static ArrayList<WMSInfo> wmsList = new ArrayList<WMSInfo>();
+	static TreeMap<String,String> wmsListDefault = new TreeMap<String,String>();
 
 	// remember state of menu item to restore on changed preferences
@@ -102,10 +104,11 @@
 				wmsList.add(new WMSInfo(name, url, prefid));
 		}
-		setDefault(tr("Landsat"), "http://onearth.jpl.nasa.gov/wms.cgi?request=GetMap&"+
+		setDefault(true, tr("Landsat"), "http://onearth.jpl.nasa.gov/wms.cgi?request=GetMap&"+
 		"layers=global_mosaic&styles=&srs=EPSG:4326&format=image/jpeg");
-		setDefault(tr("NPE Maps"), "http://nick.dev.openstreetmap.org/openpaths/freemap.php?layers=npe&");
-		setDefault(tr("YAHOO (GNOME)"), "yahoo://gnome-web-photo --mode=photo --format=png {0} /dev/stdout");
-		setDefault(tr("YAHOO (GNOME Fix)"), "yahoo://gnome-web-photo-fixed {0}");
-		setDefault(tr("YAHOO (WebKit)"), "yahoo://webkit-image {0}");
+		setDefault(true, tr("NPE Maps"), "http://nick.dev.openstreetmap.org/openpaths/freemap.php?layers=npe&");
+		setDefault(false, tr("YAHOO (GNOME)"), "yahoo://gnome-web-photo --mode=photo --format=png {0} /dev/stdout");
+		setDefault(false, tr("YAHOO (GNOME Fix)"), "yahoo://gnome-web-photo-fixed {0}");
+		setDefault(true, tr("YAHOO (WebKit)"), "yahoo://webkit-image {0}");
+		setDefault(false, tr("YAHOO (WebKit GTK)"), "yahoo://webkit-image-gtk {0}");
 
 		Collections.sort(wmsList);
@@ -140,8 +143,10 @@
 
 	/* add a default entry in case the URL does not yet exist */
-	private static void setDefault(String name, String url)
+	private static void setDefault(Boolean force, String name, String url)
 	{
 		String testurl = url.replaceAll("=", "_");
-		if(!Main.pref.getBoolean("wmsplugin.default."+testurl))
+		wmsListDefault.put(name, url);
+
+		if(force && !Main.pref.getBoolean("wmsplugin.default."+testurl))
 		{
 			Main.pref.put("wmsplugin.default."+testurl, true);
Index: applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java
===================================================================
--- applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 12187)
+++ applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 12321)
@@ -31,5 +31,5 @@
 	private DefaultTableModel model;
 	private HashMap<Integer, WMSInfo> oldValues = new HashMap<Integer, WMSInfo>();
-	
+
 	public void addGui(final PreferenceDialog gui) {
 		JPanel p = gui.createPreferenceTab("wms", tr("WMS Plugin Preferences"), tr("Modify list of WMS servers displayed in the WMS plugin menu"));
@@ -39,5 +39,5 @@
 		JScrollPane scroll = new JScrollPane(list);
 		p.add(scroll, GBC.eol().fill(GBC.BOTH));
-		scroll.setPreferredSize(new Dimension(400,200));
+		scroll.setPreferredSize(new Dimension(200,200));
 		
 		for (WMSInfo i : WMSPlugin.wmsList) {
@@ -45,5 +45,18 @@
 			model.addRow(new String[]{i.name, i.url});
 		}
-		
+
+		final DefaultTableModel modeldef = new DefaultTableModel(
+		new String[]{tr("Menu Name (Default)"), tr("WMS URL (Default)")}, 0);
+		final JTable listdef = new JTable(modeldef){
+			public boolean isCellEditable(int row,int column){return false;}
+		};;
+		JScrollPane scrolldef = new JScrollPane(listdef);
+		p.add(scrolldef, GBC.eol().insets(0,5,0,0).fill(GBC.BOTH));
+		scrolldef.setPreferredSize(new Dimension(200,200));
+
+		for (Map.Entry<String,String> i : WMSPlugin.wmsListDefault.entrySet()) {
+			modeldef.addRow(new String[]{i.getKey(), i.getValue()});
+		}
+
 		JButton add = new JButton(tr("Add"));
 		p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL));
@@ -76,4 +89,19 @@
 					while ((i = list.getSelectedRow()) != -1)
 						model.removeRow(i);
+				}
+			}
+		});
+		
+		JButton copy = new JButton(tr("Copy Default"));
+		p.add(copy, GBC.std().insets(0,5,0,0));
+		copy.addActionListener(new ActionListener(){
+			public void actionPerformed(ActionEvent e) {
+				Integer line = listdef.getSelectedRow();
+				if (line == -1)
+					JOptionPane.showMessageDialog(gui, tr("Please select the row to copy."));
+				else
+				{
+					model.addRow(new String[]{modeldef.getValueAt(line, 0).toString(),
+					modeldef.getValueAt(line, 1).toString()});
 				}
 			}
Index: applications/editors/josm/plugins/wmsplugin/webkit-image-gtk.cpp
===================================================================
--- applications/editors/josm/plugins/wmsplugin/webkit-image-gtk.cpp	(revision 12321)
+++ applications/editors/josm/plugins/wmsplugin/webkit-image-gtk.cpp	(revision 12321)
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <webkit.h>
+
+#define WIDTH 2000
+
+/* compile with:
+gcc -W webkit-image-gtk.cpp `pkg-config --libs --cflags WebKitGtk gtk+-2.0`
+*/
+
+static void
+on_finished (WebKitWebView *view, WebKitWebFrame *frame)
+{
+        GdkPixmap *pixmap;
+        GdkColormap *cmap;
+        GdkPixbuf *pixbuf;
+        gchar *buffer;
+        gsize size;
+
+        pixmap = gtk_widget_get_snapshot (GTK_WIDGET (view), NULL);
+        cmap = gdk_colormap_get_system ();
+        pixbuf = gdk_pixbuf_get_from_drawable (NULL, GDK_DRAWABLE (pixmap), cmap,
+                                               0, 0, 0, 0, WIDTH, WIDTH);
+
+        gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &size, "png", NULL, NULL);
+
+        fwrite (buffer, 1, size, stdout);
+
+        exit (1);
+}
+
+int main (int argc, char **argv)
+{
+        GtkWidget *window;
+        GtkWidget *view;
+
+        if (argc != 2)
+                exit (20);
+
+        gtk_init (&argc, &argv);
+
+        /* Horribly hacky */
+        window = gtk_window_new (GTK_WINDOW_POPUP);
+        gtk_window_set_opacity (GTK_WINDOW (window), 0.0);
+
+        view = webkit_web_view_new ();
+        webkit_web_view_open (WEBKIT_WEB_VIEW (view), argv[1]);
+        gtk_widget_set_size_request (view, WIDTH, WIDTH);
+        gtk_container_add (GTK_CONTAINER (window), view);
+
+        gtk_widget_show_all (window);
+
+        g_signal_connect (G_OBJECT (view), "load-finished",
+                          G_CALLBACK (on_finished), NULL);
+
+        gtk_main ();
+        return 0;
+}
