Index: trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 11746)
@@ -1127,5 +1127,5 @@
                 findBoundaryPolygonsStartingWith(discardedResult, traverser, result, startWay);
             }
-        } catch (Throwable t) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
             throw BugReport.intercept(t).put("traverser", traverser);
         }
@@ -1183,5 +1183,5 @@
                 }
             }
-        } catch (Throwable t) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
             throw BugReport.intercept(t).put("path", path);
         }
Index: trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/SessionLoadAction.java	(revision 11746)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.io.session.SessionReader;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -178,5 +179,5 @@
             } catch (IOException e) {
                 handleException(tr("IO Error"), e);
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 cancel();
                 throw e;
Index: trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 11746)
@@ -269,20 +269,16 @@
         String reportHeader = getReportHeader();
         text.append(reportHeader);
-        try {
-            Map<String, Setting<?>> settings = Main.pref.getAllSettings();
-            Set<String> keys = new HashSet<>(settings.keySet());
-            for (String key : keys) {
-                // Remove sensitive information from status report
-                if (key.startsWith("marker.show") || key.contains("username") || key.contains("password") || key.contains("access-token")) {
-                    settings.remove(key);
-                }
-            }
-            for (Entry<String, Setting<?>> entry : settings.entrySet()) {
-                text.append(paramCleanup(entry.getKey()))
-                    .append('=')
-                    .append(paramCleanup(entry.getValue().getValue().toString())).append('\n');
-            }
-        } catch (Exception ex) {
-            Main.error(ex);
+        Map<String, Setting<?>> settings = Main.pref.getAllSettings();
+        Set<String> keys = new HashSet<>(settings.keySet());
+        for (String key : keys) {
+            // Remove sensitive information from status report
+            if (key.startsWith("marker.show") || key.contains("username") || key.contains("password") || key.contains("access-token")) {
+                settings.remove(key);
+            }
+        }
+        for (Entry<String, Setting<?>> entry : settings.entrySet()) {
+            text.append(paramCleanup(entry.getKey()))
+                .append('=')
+                .append(paramCleanup(entry.getValue().getValue().toString())).append('\n');
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(revision 11746)
@@ -8,4 +8,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
@@ -38,5 +39,5 @@
             else
                 MarkerLayer.playAudio();
-        } catch (Exception ex) {
+        } catch (IOException | InterruptedException ex) {
             AudioPlayer.audioMalfunction(ex);
         }
Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java	(revision 11746)
@@ -3,4 +3,5 @@
 
 import java.awt.event.ActionEvent;
+import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
@@ -41,5 +42,5 @@
             if (AudioPlayer.playing() || AudioPlayer.paused())
                 AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position(), speed * multiplier);
-        } catch (Exception ex) {
+        } catch (IOException | InterruptedException ex) {
             AudioPlayer.audioMalfunction(ex);
         }
Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(revision 11746)
@@ -7,4 +7,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
@@ -36,5 +37,5 @@
             else
                 MarkerLayer.playAudio();
-        } catch (Exception ex) {
+        } catch (IOException | InterruptedException ex) {
             AudioPlayer.audioMalfunction(ex);
         }
Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java	(revision 11746)
@@ -7,4 +7,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
 import java.net.URL;
 
@@ -53,5 +54,5 @@
                 }
             }
-        } catch (Exception ex) {
+        } catch (IOException | InterruptedException ex) {
             AudioPlayer.audioMalfunction(ex);
         }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 11746)
@@ -11,4 +11,5 @@
 import java.util.Map.Entry;
 import java.util.concurrent.Future;
+import java.util.concurrent.RejectedExecutionException;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -115,5 +116,5 @@
                 // Let's load all required history
                 Main.worker.submit(new HistoryLoaderAndListener(toLoad));
-            } catch (Exception e) {
+            } catch (RejectedExecutionException e) {
                 rememberException(e);
                 setFailed(true);
Index: trunk/src/org/openstreetmap/josm/data/AutosaveTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/AutosaveTask.java	(revision 11746)
@@ -233,5 +233,5 @@
                     GuiHelper.runInEDT(this::displayNotification);
                 }
-            } catch (RuntimeException t) {
+            } catch (RuntimeException t) { // NOPMD
                 // Don't let exception stop time thread
                 Main.error("Autosave failed:");
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11746)
@@ -1420,5 +1420,6 @@
                 Utils.setObjectsAccessible(field);
                 field.set(null, ResourceBundle.getBundle("sun.awt.resources.awt"));
-            } catch (ReflectiveOperationException | RuntimeException e) {
+            } catch (ReflectiveOperationException | RuntimeException e) { // NOPMD
+                // Catch RuntimeException in order to catch InaccessibleObjectException, new in Java 9
                 Main.warn(e);
             }
Index: trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 11746)
@@ -182,5 +182,5 @@
             } catch (IOException e) {
                 throw e;
-            } catch (Exception e) {
+            } catch (Exception e) { // NOPMD
                 throw new IOException(e);
             }
Index: trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java	(revision 11746)
@@ -9,4 +9,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -212,5 +213,5 @@
             }
 
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             writer.println("Exception during dataset integrity test:");
             e.printStackTrace(writer);
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 11746)
@@ -86,4 +86,5 @@
 import org.openstreetmap.josm.tools.Geometry.AreaAndPerimeter;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -1735,5 +1736,5 @@
                 }
                 return output;
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 throw BugReport.intercept(e).put("input-size", input.size()).put("output-size", output.size());
             } finally {
@@ -1747,5 +1748,5 @@
                     osm.accept(this);
                 }
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 throw BugReport.intercept(e).put("osm", osm);
             }
@@ -1855,5 +1856,5 @@
 
             benchmark.renderDone();
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e)
                     .put("data", data)
@@ -1870,5 +1871,5 @@
         try {
             record.paintPrimitive(paintSettings, this);
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e).put("record", record);
         }
Index: trunk/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/preferences/PreferencesWriter.java	(revision 11746)
@@ -88,5 +88,5 @@
             addDefaults();
         } else {
-            throw new NullPointerException();
+            throw new IllegalArgumentException(setting.toString());
         }
     }
@@ -105,5 +105,5 @@
             addDefaults();
         } else {
-            throw new NullPointerException();
+            throw new IllegalArgumentException(setting.toString());
         }
     }
@@ -126,5 +126,5 @@
             addDefaults();
         } else {
-            throw new NullPointerException();
+            throw new IllegalArgumentException(setting.toString());
         }
     }
@@ -147,5 +147,5 @@
             addDefaults();
         } else {
-            throw new NullPointerException();
+            throw new IllegalArgumentException(setting.toString());
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 11746)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.data.projection.proj.Proj;
 import org.openstreetmap.josm.data.projection.proj.ProjParameters;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -831,5 +832,5 @@
                         }
                     }
-                } catch (RuntimeException e) {
+                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                     Main.error(e);
                 }
Index: trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 11746)
@@ -338,5 +338,5 @@
             try {
                 proj = pc.getProjection();
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 Main.warn(e, "Unable to get projection "+code+" with "+pc+':');
             }
Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 11746)
@@ -333,5 +333,5 @@
                     test.initialize();
                 }
-            } catch (Exception e) {
+            } catch (Exception e) { // NOPMD
                 Main.error(e);
                 if (!GraphicsEnvironment.isHeadless()) {
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 11746)
@@ -271,8 +271,8 @@
                 for (TaggingPresetItem i : p.data) {
                     if (i instanceof KeyedItem) {
-                        addPresetValue(p, (KeyedItem) i);
+                        addPresetValue((KeyedItem) i);
                     } else if (i instanceof CheckGroup) {
                         for (Check c : ((CheckGroup) i).checks) {
-                            addPresetValue(p, c);
+                            addPresetValue(c);
                         }
                     }
@@ -282,13 +282,9 @@
     }
 
-    private static void addPresetValue(TaggingPreset p, KeyedItem ky) {
+    private static void addPresetValue(KeyedItem ky) {
         Collection<String> values = ky.getValues();
         if (ky.key != null && values != null) {
-            try {
-                presetsValueData.putAll(ky.key, values);
-                harmonizedKeys.put(harmonizeKey(ky.key), ky.key);
-            } catch (NullPointerException e) {
-                Main.error(e, p+": Unable to initialize "+ky+'.');
-            }
+            presetsValueData.putAll(ky.key, values);
+            harmonizedKeys.put(harmonizeKey(ky.key), ky.key);
         }
     }
@@ -543,11 +539,9 @@
 
     private static String harmonizeKey(String key) {
-        key = key.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(':', '_').replace(' ', '_');
-        return Utils.strip(key, "-_;:,");
+        return Utils.strip(key.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(':', '_').replace(' ', '_'), "-_;:,");
     }
 
     private static String harmonizeValue(String value) {
-        value = value.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(' ', '_');
-        return Utils.strip(value, "-_;:,");
+        return Utils.strip(value.toLowerCase(Locale.ENGLISH).replace('-', '_').replace(' ', '_'), "-_;:,");
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/JosmUserIdentityManager.java	(revision 11746)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 
 /**
@@ -66,5 +67,5 @@
                 try {
                     instance.initFromOAuth();
-                } catch (RuntimeException e) {
+                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                     Main.error(e);
                     // Fall back to preferences if OAuth identification fails for any reason
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 11746)
@@ -1078,5 +1078,5 @@
             try {
                 thread.interrupt();
-            } catch (RuntimeException e) {
+            } catch (SecurityException e) {
                 Main.error(e);
             }
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 11746)
@@ -71,4 +71,5 @@
 import org.openstreetmap.josm.gui.layer.markerlayer.PlayHeadMarker;
 import org.openstreetmap.josm.tools.AudioPlayer;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.Utils;
@@ -354,5 +355,5 @@
                 repaint();
             }
-        } catch (RuntimeException t) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
             throw BugReport.intercept(t).put("layer", e.getAddedLayer());
         }
@@ -453,5 +454,5 @@
             painter.paint(paintGraphics);
             g.setPaintMode();
-        } catch (RuntimeException t) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
             BugReport.intercept(t).put("layer", layer).warn();
         }
@@ -467,5 +468,5 @@
                 return;
             }
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             BugReport.intercept(e).put("center", this::getCenter).warn();
             return;
@@ -537,5 +538,5 @@
         try {
             drawTemporaryLayers(tempG, getLatLonBounds(g.getClipBounds()));
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             BugReport.intercept(e).put("temporaryLayers", temporaryLayers).warn();
         }
@@ -544,5 +545,5 @@
         try {
             drawWorldBorders(tempG);
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             // getProjection() needs to be inside lambda to catch errors.
             BugReport.intercept(e).put("bounds", () -> getProjection().getWorldBoundsLatLon()).warn();
@@ -593,5 +594,5 @@
                 try {
                     mvp.paint(tempG, this, box);
-                } catch (RuntimeException e) {
+                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                     throw BugReport.intercept(e).put("mvp", mvp);
                 }
Index: trunk/src/org/openstreetmap/josm/gui/MapViewState.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 11746)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Geometry;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -145,5 +146,5 @@
         try {
             return position.getLocationOnScreen();
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e).put("position", position).put("parent", position::getParent);
         }
@@ -197,5 +198,5 @@
         try {
             return getPointFor(node.getEastNorth(getProjection()));
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e).put("node", node);
         }
Index: trunk/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 11746)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler;
 import org.xml.sax.SAXException;
@@ -112,5 +113,5 @@
                 }
             }
-        } catch (final RuntimeException |
+        } catch (final JosmRuntimeException | IllegalArgumentException | IllegalStateException |
                 OsmTransferException | IOException | SAXException | InvocationTargetException | InterruptedException e) {
             if (!ignoreException) {
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/AbstractStackTransferHandler.java	(revision 11746)
@@ -14,4 +14,5 @@
 import org.openstreetmap.josm.gui.datatransfer.importers.AbstractOsmDataPaster;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -58,5 +59,5 @@
                 } catch (UnsupportedFlavorException | IOException e) {
                     Main.warn(e);
-                } catch (RuntimeException e) {
+                } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                     BugReport.intercept(e).put("paster", df).put("flavors", support::getDataFlavors).warn();
                 }
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/ClipboardUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/ClipboardUtils.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/ClipboardUtils.java	(revision 11746)
@@ -116,5 +116,5 @@
                     Thread.currentThread().interrupt();
                 }
-            } catch (NullPointerException e) {
+            } catch (NullPointerException e) { // NOPMD
                 // JDK-6322854: On Linux/X11, NPE can happen for unknown reasons, on all versions of Java
                 Main.error(e);
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/OsmTransferHandler.java	(revision 11746)
@@ -97,5 +97,5 @@
         } catch (IllegalStateException e) {
             Main.debug(e);
-        } catch (NullPointerException e) {
+        } catch (NullPointerException e) { // NOPMD
             // JDK-6322854: On Linux/X11, NPE can happen for unknown reasons, on all versions of Java
             Main.error(e);
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 11746)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -77,5 +78,5 @@
                     updateMembers(newIds, data);
                 }
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 throw BugReport.intercept(e).put("data", data);
             }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/DialogsPanel.java	(revision 11746)
@@ -17,4 +17,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Destroyable;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -325,5 +326,5 @@
             try {
                 t.destroy();
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 throw BugReport.intercept(e).put("dialog", t).put("dialog-class", t.getClass());
             }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 11746)
@@ -54,4 +54,5 @@
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler;
 
@@ -235,5 +236,5 @@
                         GuiHelper.runInEDT(() -> HistoryBrowserDialogManager.getInstance().show(h));
                     }
-                } catch (final RuntimeException e) {
+                } catch (final JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                     GuiHelper.runInEDT(() -> BugReportExceptionHandler.handleException(e));
                 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 11746)
@@ -46,4 +46,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -808,5 +809,5 @@
             }
             return connectionType.get(i);
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e).put("i", i).put("members", members).put("relation", relation);
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/WayConnectionTypeCalculator.java	(revision 11746)
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType.Direction;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -44,5 +45,5 @@
             try {
                 lastWct = updateLinksFor(con, lastWct, i);
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 int index = i;
                 throw BugReport.intercept(e).put("i", i).put("member", () -> members.get(index)).put("con", con);
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 11746)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.WindowGeometry;
@@ -224,5 +225,5 @@
                     SwingUtilities.invokeLater(() -> show(h));
                 }
-            } catch (final RuntimeException e) {
+            } catch (final JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 BugReportExceptionHandler.handleException(e);
             }
Index: trunk/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/io/SaveLayerTask.java	(revision 11746)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 
 /**
@@ -55,5 +56,5 @@
                 layerInfo.getLayer().onPostSaveToFile();
             }
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             Main.error(e);
             setLastException(e);
Index: trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 11746)
@@ -14,4 +14,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -404,5 +405,5 @@
             try {
                 l.layerAdded(e);
-            } catch (RuntimeException t) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
                 throw BugReport.intercept(t).put("listener", l).put("event", e);
             }
@@ -421,5 +422,5 @@
             try {
                 l.layerRemoving(e);
-            } catch (RuntimeException t) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
                 throw BugReport.intercept(t).put("listener", l).put("event", e).put("layer", layer);
             }
@@ -434,5 +435,5 @@
             try {
                 l.layerOrderChanged(e);
-            } catch (RuntimeException t) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException t) {
                 throw BugReport.intercept(t).put("listener", l).put("event", e);
             }
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 11746)
@@ -83,4 +83,5 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Utils;
@@ -934,5 +935,5 @@
                 final long deciSeconds = timezoneOffsetPair.b.getMilliseconds() / 100;
                 sldSeconds.setValue((int) (deciSeconds % 60));
-            } catch (RuntimeException e) {
+            } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
                 Main.warn(e);
                 JOptionPane.showMessageDialog(Main.parent,
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 11746)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.ExifReader;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 
 import com.drew.imaging.jpeg.JpegMetadataReader;
@@ -450,5 +451,5 @@
         try {
             setExifTime(ExifReader.readTime(metadata));
-        } catch (RuntimeException ex) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException ex) {
             Main.warn(ex);
             setExifTime(null);
Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java	(revision 11746)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
 
@@ -275,5 +276,5 @@
                 setDisplacement(new EastNorth(Double.parseDouble(dx), Double.parseDouble(dy)));
             }
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw BugReport.intercept(e).put("data", data);
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java	(revision 11746)
@@ -3,4 +3,5 @@
 
 import java.awt.event.ActionEvent;
+import java.io.IOException;
 import java.net.URL;
 import java.util.Collections;
@@ -58,5 +59,5 @@
             AudioPlayer.play(audioUrl, offset + syncOffset + after);
             recentlyPlayedMarker = this;
-        } catch (Exception e) {
+        } catch (IOException | InterruptedException e) {
             AudioPlayer.audioMalfunction(e);
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 11746)
@@ -9,4 +9,5 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.io.IOException;
 
 import javax.swing.JOptionPane;
@@ -98,5 +99,5 @@
             try {
                 AudioPlayer.pause();
-            } catch (Exception ex) {
+            } catch (IOException | InterruptedException ex) {
                 AudioPlayer.audioMalfunction(ex);
             }
@@ -112,5 +113,5 @@
             try {
                 AudioPlayer.pause();
-            } catch (Exception ex) {
+            } catch (IOException | InterruptedException ex) {
                 AudioPlayer.audioMalfunction(ex);
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 11746)
@@ -599,5 +599,5 @@
                 } catch (SecurityException ex) {
                     Main.error(ex);
-                } catch (RuntimeException ex) {
+                } catch (RuntimeException ex) { // NOPMD
                     // allow to change most settings even if e.g. a plugin fails
                     BugReportExceptionHandler.handleException(ex);
@@ -616,5 +616,5 @@
             } catch (SecurityException ex) {
                 Main.error(ex);
-            } catch (RuntimeException ex) {
+            } catch (RuntimeException ex) { // NOPMD
                 BugReportExceptionHandler.handleException(ex);
             } finally {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 11746)
@@ -165,5 +165,5 @@
                 return css.title;
             }
-        } catch (RuntimeException ignore) {
+        } catch (RuntimeException ignore) { // NOPMD
             Main.debug(ignore);
         }
Index: trunk/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/progress/PleaseWaitProgressMonitor.java	(revision 11746)
@@ -66,5 +66,5 @@
             try {
                 runnable.run();
-            } catch (RuntimeException e) {
+            } catch (RuntimeException e) { // NOPMD
                 throw BugReport.intercept(e).put("monitor", this);
             }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 11746)
@@ -15,5 +15,4 @@
 import java.util.function.Function;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -219,9 +218,5 @@
             KeyedItem ki = (KeyedItem) item;
             if (ki.key != null && ki.getValues() != null) {
-                try {
-                    PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
-                } catch (NullPointerException e) {
-                    Main.error(e, p + ": Unable to cache " + ki);
-                }
+                PRESET_TAG_CACHE.putAll(ki.key, ki.getValues());
             }
         } else if (item instanceof Roles) {
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 11746)
@@ -159,5 +159,5 @@
             try {
                 return callable.call();
-            } catch (Exception e) {
+            } catch (Exception e) { // NOPMD
                 Main.error(e);
                 return null;
Index: trunk/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/JosmPasswordField.java	(revision 11746)
@@ -125,5 +125,5 @@
                     try {
                         pasteAction.actionPerformed(e);
-                    } catch (NullPointerException npe) {
+                    } catch (NullPointerException npe) { // NOPMD
                         Main.error(npe, "NullPointerException occured because of JDK bug 6322854. "
                                 +"Copy/Paste operation has not been performed. Please complain to Oracle: "+
Index: trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/io/BoundingBoxDownloader.java	(revision 11746)
@@ -17,4 +17,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.JosmRuntimeException;
 import org.xml.sax.SAXException;
 
@@ -114,5 +115,5 @@
         } catch (OsmTransferException e) {
             throw e;
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalStateException e) {
             if (cancel)
                 return null;
Index: trunk/src/org/openstreetmap/josm/io/NameFinder.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/NameFinder.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/io/NameFinder.java	(revision 11746)
@@ -241,5 +241,5 @@
                 Main.error(ex); // SAXException does not chain correctly
                 throw new SAXException(ex.getMessage(), ex);
-            } catch (NullPointerException ex) {
+            } catch (NullPointerException ex) { // NOPMD
                 Main.error(ex); // SAXException does not chain correctly
                 throw new SAXException(tr("Null pointer exception, possibly some missing tags."), ex);
Index: trunk/src/org/openstreetmap/josm/io/NmeaReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/NmeaReader.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/io/NmeaReader.java	(revision 11746)
@@ -415,5 +415,5 @@
             return true;
 
-        } catch (RuntimeException ex) {
+        } catch (IllegalArgumentException | IndexOutOfBoundsException ex) {
             // out of bounds and such
             Main.debug(ex);
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImportHandler.java	(revision 11746)
@@ -47,5 +47,5 @@
                 }
             }
-        } catch (RuntimeException ex) {
+        } catch (RuntimeException ex) { // NOPMD
             Main.warn("RemoteControl: Error parsing import remote control request:");
             Main.error(ex);
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 11746)
@@ -146,5 +146,5 @@
                 }
             }
-        } catch (RuntimeException ex) {
+        } catch (RuntimeException ex) { // NOPMD
             Main.warn("RemoteControl: Error parsing load_and_zoom remote control request:");
             Main.error(ex);
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 11746)
@@ -725,5 +725,5 @@
                         + "Delete from preferences?</html>", plugin.name, plugin.className);
             }
-        } catch (RuntimeException e) {
+        } catch (RuntimeException e) { // NOPMD
             pluginLoadingExceptions.put(plugin.name, e);
             Main.error(e);
@@ -823,5 +823,5 @@
             try {
                 task.run();
-            } catch (RuntimeException e) {
+            } catch (RuntimeException e) { // NOPMD
                 Main.error(e);
                 return null;
@@ -1001,5 +1001,5 @@
                     plugins = SubclassFilteredCollection.filter(plugins, pi -> pluginsWantedName.contains(pi.name));
                 }
-            } catch (RuntimeException e) {
+            } catch (RuntimeException e) { // NOPMD
                 Main.warn(tr("Failed to download plugin information list"));
                 Main.error(e);
@@ -1046,5 +1046,5 @@
                 try {
                     pluginDownloadTask.run();
-                } catch (RuntimeException e) {
+                } catch (RuntimeException e) { // NOPMD
                     Main.error(e);
                     alertFailedPluginUpdate(parent, pluginsToUpdate);
Index: trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/AudioPlayer.java	(revision 11746)
@@ -58,5 +58,5 @@
          * Called to execute the commands in the other thread
          */
-        protected void play(URL url, double offset, double speed) throws Exception {
+        protected void play(URL url, double offset, double speed) throws InterruptedException, IOException {
             this.url = url;
             this.offset = offset;
@@ -67,10 +67,10 @@
         }
 
-        protected void pause() throws Exception {
+        protected void pause() throws InterruptedException, IOException {
             command = Command.PAUSE;
             send();
         }
 
-        private void send() throws Exception {
+        private void send() throws InterruptedException, IOException {
             result = Result.WAITING;
             interrupt();
@@ -79,5 +79,5 @@
             }
             if (result == Result.FAILED)
-                throw exception;
+                throw new IOException(exception);
         }
 
@@ -121,7 +121,8 @@
      * start at the beginning of the stream
      * @param url The resource to play, which must be a WAV file or stream
-     * @throws Exception audio fault exception, e.g. can't open stream, unhandleable audio format
-     */
-    public static void play(URL url) throws Exception {
+     * @throws InterruptedException thread interrupted
+     * @throws IOException audio fault exception, e.g. can't open stream, unhandleable audio format
+     */
+    public static void play(URL url) throws InterruptedException, IOException {
         AudioPlayer instance = AudioPlayer.getInstance();
         if (instance != null)
@@ -133,7 +134,8 @@
      * @param url The resource to play, which must be a WAV file or stream
      * @param seconds The number of seconds into the audio to start playing
-     * @throws Exception audio fault exception, e.g. can't open stream, unhandleable audio format
-     */
-    public static void play(URL url, double seconds) throws Exception {
+     * @throws InterruptedException thread interrupted
+     * @throws IOException audio fault exception, e.g. can't open stream, unhandleable audio format
+     */
+    public static void play(URL url, double seconds) throws InterruptedException, IOException {
         AudioPlayer instance = AudioPlayer.getInstance();
         if (instance != null)
@@ -146,7 +148,8 @@
      * @param seconds The number of seconds into the audio to start playing
      * @param speed Rate at which audio playes (1.0 = real time, &gt; 1 is faster)
-     * @throws Exception audio fault exception, e.g. can't open stream,  unhandleable audio format
-     */
-    public static void play(URL url, double seconds, double speed) throws Exception {
+     * @throws InterruptedException thread interrupted
+     * @throws IOException audio fault exception, e.g. can't open stream,  unhandleable audio format
+     */
+    public static void play(URL url, double seconds, double speed) throws InterruptedException, IOException {
         AudioPlayer instance = AudioPlayer.getInstance();
         if (instance != null)
@@ -156,7 +159,8 @@
     /**
      * Pauses the currently playing audio stream. Does nothing if nothing playing.
-     * @throws Exception audio fault exception, e.g. can't open stream,  unhandleable audio format
-     */
-    public static void pause() throws Exception {
+     * @throws InterruptedException thread interrupted
+     * @throws IOException audio fault exception, e.g. can't open stream,  unhandleable audio format
+     */
+    public static void pause() throws InterruptedException, IOException {
         AudioPlayer instance = AudioPlayer.getInstance();
         if (instance != null)
@@ -220,5 +224,5 @@
             audioPlayer = new AudioPlayer();
             return audioPlayer;
-        } catch (RuntimeException ex) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException ex) {
             Main.error(ex);
             return null;
@@ -233,5 +237,5 @@
             try {
                 pause();
-            } catch (Exception e) {
+            } catch (InterruptedException | IOException e) {
                 Main.warn(e);
             }
Index: trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 11746)
@@ -82,5 +82,5 @@
                         z == null ? 18 : Integer.parseInt(z));
             }
-        } catch (NumberFormatException | NullPointerException | ArrayIndexOutOfBoundsException ex) {
+        } catch (NumberFormatException | ArrayIndexOutOfBoundsException ex) {
             Main.error(ex);
         }
Index: trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/WindowGeometry.java	(revision 11746)
@@ -194,5 +194,5 @@
                        "Cannot restore window geometry from preferences.",
                             preferenceKey, field, v), e);
-        } catch (RuntimeException e) {
+        } catch (JosmRuntimeException | IllegalArgumentException | IllegalStateException e) {
             throw new WindowGeometryException(
                     tr("Failed to parse field ''{1}'' in preference with key ''{0}''. Exception was: {2}. " +
Index: trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java	(revision 11746)
@@ -126,5 +126,5 @@
             try {
                 out.println(ShowStatusReportAction.getReportHeader());
-            } catch (RuntimeException e) {
+            } catch (RuntimeException e) { // NOPMD
                 out.println("Could not generate status report: " + e.getMessage());
             }
Index: trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportDialog.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportDialog.java	(revision 11746)
@@ -222,5 +222,5 @@
                 current = current.getParent();
             }
-        } catch (RuntimeException e) {
+        } catch (RuntimeException e) { // NOPMD
             BugReport.intercept(e).put("current", current).warn();
         }
Index: trunk/src/org/openstreetmap/josm/tools/bugreport/ReportedException.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/ReportedException.java	(revision 11745)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/ReportedException.java	(revision 11746)
@@ -66,5 +66,5 @@
         try {
             BugReportQueue.getInstance().submit(this);
-        } catch (RuntimeException e) {
+        } catch (RuntimeException e) { // NOPMD
             e.printStackTrace();
         }
@@ -218,5 +218,5 @@
                 string = value.toString();
             }
-        } catch (RuntimeException t) {
+        } catch (RuntimeException t) { // NOPMD
             Main.warn(t);
             string = "<Error calling toString()>";
