I'm currently trying to sort out some code that is having problems with the way it uses exceptions. At the lowest level an exception specific to a package we're using is being thrown. At the highest level the GUI is trying to switch from one tab to another. In between are all sorts of layers. The original solution in the code is to catch the low level exception, wrap it in a RuntimeException and rethrow. Not much of a solution as at the higher levels I can't see what sorts of things might go wrong. On the other hand passing a lot of lower level exceptions up through the hierarchy couples layers of the code that should remain separate. Here are Rod Waldhoff's much more articulate thoughts on the matter. They conclude by introducing ExceptionRuntimeException, a very nice technique. Java's checked exceptions were a mistake (and here's what I would like to do about it)