Index: src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java	(revision 201)
+++ src/org/openstreetmap/josm/gui/annotation/AnnotationPreset.java	(revision 202)
@@ -95,5 +95,5 @@
 		public String text;
 		public String values;
-		public String display_values = "";
+		public String display_values;
 		public String default_;
 		public boolean delete_if_empty = false;
@@ -103,5 +103,5 @@
 
 		public void addToPanel(JPanel p) {
-			combo = new JComboBox(display_values.split(","));
+			combo = new JComboBox((display_values != null ? display_values : values).split(","));
 			combo.setEditable(editable);
 			combo.setSelectedItem(default_);
Index: src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 201)
+++ src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 202)
@@ -181,8 +181,10 @@
 		instance.addMouseListener(new MouseAdapter(){
 			private void openPopup(MouseEvent e) {
+				Point p = listScrollPane.getMousePosition();
+				if (p == null)
+					return; // user is faster than swing with mouse movement
 				int index = instance.locationToIndex(e.getPoint());
 				Layer layer = (Layer)instance.getModel().getElementAt(index);
 				LayerListPopup menu = new LayerListPopup(instance, layer);
-				Point p = listScrollPane.getMousePosition();
 				menu.show(listScrollPane, p.x, p.y-3);
 			}
Index: src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
===================================================================
--- src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 201)
+++ src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 202)
@@ -12,5 +12,7 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.LinkedList;
 
 import javax.swing.JLabel;
@@ -39,4 +41,5 @@
 			}
 
+			// Check for an explicit problem when calling a plugin function
 			if (e instanceof PluginException) {
 				PluginProxy plugin = ((PluginException)e).getPlugin();
@@ -48,10 +51,37 @@
 			}
 
+			// Try a heuristic to guess whether the problem may be within a plugin
+			String pluginName = guessPlugin(e);
+			if (pluginName != null) {
+				LinkedList<String> plugins = new LinkedList<String>(Arrays.asList(Main.pref.get("plugins").split(",")));
+				if (plugins.contains(pluginName)) {
+					String author = findPluginAuthor(pluginName);
+					int answer = JOptionPane.showConfirmDialog(
+							Main.parent, 
+							tr("An unexpected exception occoured, that may come from in the ''{0}'' plugin.", pluginName)+"\n"+
+								(author != null ? tr("According to the information within the plugin, the author is {0}.", author) : "")+"\n"+
+								tr("Should the plugin be disabled?"),
+							tr("Disable plugin"),
+							JOptionPane.YES_NO_OPTION);
+					if (answer == JOptionPane.OK_OPTION) {
+						plugins.remove(pluginName);
+						String p = "";
+						for (String s : plugins)
+							p += ","+s;
+						if (p.length() > 0)
+							p = p.substring(1);
+						Main.pref.put("plugins", p);
+						JOptionPane.showMessageDialog(Main.parent, tr("The plugin has been removed from the configuration. Please restart JOSM to unload the plugin."));
+						return;
+					}
+				}
+			}
+
 			Object[] options = new String[]{tr("Do nothing"), tr("Report Bug")};
 			int answer = JOptionPane.showOptionDialog(Main.parent, tr("An unexpected exception occoured.\n\n" +
 					"This is always a coding error. If you are running the latest\n" +
-					"version of JOSM, please consider be kind and file a bug report."),
-					tr("Unexpected Exception"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE,
-					null, options, options[0]);
+			"version of JOSM, please consider be kind and file a bug report."),
+			tr("Unexpected Exception"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE,
+			null, options, options[0]);
 			if (answer == 1) {
 				try {
@@ -97,3 +127,40 @@
 		}
 	}
+
+	/**
+	 * Try to find the author of the given plugin. Return <code>null</code>
+	 * if no author specified or the plugin is not found.
+	 */
+	private String findPluginAuthor(String pluginName) {
+		for (PluginProxy proxy : Main.plugins)
+			if (pluginName.equals(proxy.info.name))
+				return proxy.info.author;
+		return null;
+	}
+
+	/**
+	 * Analyze the stack of the argument and return a name of a plugin, if
+	 * some known problem pattern has been found or <code>null</code>, if
+	 * the stack does not contain plugin-code.
+	 * 
+	 * Note: This heuristic is not meant as discrimination against specific
+	 * plugins, but only to stop the flood of similar bug reports about plugins.
+	 * Of course, plugin writers are free to install their own version of 
+	 * an exception handler with their email address listed to receive 
+	 * bug reports ;-). 
+	 */
+	private String guessPlugin(Throwable e) {
+		for (StackTraceElement element : e.getStackTrace()) {
+			String c = element.getClassName();
+			if (c.contains("wmsplugin.") || c.contains(".WMSLayer"))
+				return "wmsplugin";
+			if (c.contains("landsat.") || c.contains(".LandsatLayer"))
+				return "landsat";
+			if (c.contains("mappaint."))
+				return "mappaint";
+			if (c.contains("annotationtester."))
+				return "annotation-tester";
+		}
+		return null;
+	}
 }
