diff --git a/org.eclipse.virgo.util.jmx/src/main/java/org/eclipse/virgo/util/jmx/ExceptionCleaner.aj b/org.eclipse.virgo.util.jmx/src/main/java/org/eclipse/virgo/util/jmx/ExceptionCleaner.aj
index 4689d7a..f83fa01 100644
--- a/org.eclipse.virgo.util.jmx/src/main/java/org/eclipse/virgo/util/jmx/ExceptionCleaner.aj
+++ b/org.eclipse.virgo.util.jmx/src/main/java/org/eclipse/virgo/util/jmx/ExceptionCleaner.aj
@@ -15,19 +15,23 @@
 import javax.management.MXBean;
 
 /**
- * An aspect that catches all {@link Exception}s thrown through @{@link MXBean} annotated interfaces and filters
- * them to make sure they can be safely thrown to a JMX client. Safe means that there will be no types thrown that
- * cannot be loaded by the JMX client.
+ * An aspect that catches all {@link Exception}s thrown through @{@link MXBean} annotated interfaces and filters them to
+ * make sure they can be safely thrown to a JMX client. Safe means that there will be no types thrown that cannot be
+ * loaded by the JMX client.
  * <p/>
- * This is accomplished by throwing a <em>cleaned</em> exception instead, after logging the original exception at error level with the logger for the throwing class.
- * <p/>  
- * A <em>cleaned</em> exception, <code>cleaned(t)</code>, is a new {@link RuntimeException} with message that of <code>t</code> (prefixed with the
- * class name of <code>t</code>), with cause <code>cleaned(t.getCause())</code>, and with stack trace set to <code>t.getStackTrace()</code>.
- * <br/><em>Notice that this definition is recursive; <code>cleaned(<b>null</b>)</code> is defined to be <code><b>null</b></code>.</em>
+ * This is accomplished by throwing a <em>cleaned</em> exception instead, after logging the original exception at error
+ * level with the logger for the throwing class.
  * <p/>
- * The {@link StackTraceElement StackTrace} from the original exception is attached to the new {@link RuntimeException} for information purposes.
+ * A <em>cleaned</em> exception, <code>cleaned(t)</code>, is a new {@link RuntimeException} with message that of
+ * <code>t</code> (prefixed with the class name of <code>t</code>), with cause <code>cleaned(t.getCause())</code>, and
+ * with stack trace set to <code>t.getStackTrace()</code>. <br/>
+ * <em>Notice that this definition is recursive; <code>cleaned(<b>null</b>)</code> is defined to be
+ * <code><b>null</b></code>.</em>
  * <p/>
- * (Moved from <code>com.springsource.kernel.model.management.internal</code> package and enhanced to catch 
+ * The {@link StackTraceElement StackTrace} from the original exception is attached to the new {@link RuntimeException}
+ * for information purposes.
+ * <p/>
+ * (Moved from <code>com.springsource.kernel.model.management.internal</code> package and enhanced to catch
  * all @{@link MXBean} annotated interfaces.)
  * <p/>
  * 
@@ -42,27 +46,24 @@
     pointcut exposedViaJmx(Object o) : this(o) && execution(* (@MXBean *).*(..));
 
     /**
-     * Catch {@link Exception}s and clean them and the nested causes (if any).
-     * {@link Throwable}s are trapped, so we can advise methods that do not declare a throws, but {@link Exception}s are filtered out.
+     * Catch {@link Exception}s and clean them and the nested causes (if any). {@link Throwable}s are trapped, so we can
+     * advise methods that do not declare a throws, but {@link Exception}s are filtered out.
      */
-    after(Object o) throwing(Throwable t) : exposedViaJmx(o) {
-        if (t instanceof Exception) {
-            Exception e = (Exception) t;
-            LoggerFactory.getLogger(o.getClass()).error("Exception filtered from JMX invocation", e);
-            throw cleanException(e);            
-        }
+    after(Object o) throwing(Exception e) : exposedViaJmx(o) {
+        LoggerFactory.getLogger(o.getClass()).error("Exception filtered from JMX invocation", e);
+        throw cleanException(e);
     }
-    
+
     private RuntimeException cleanException(Throwable throwable) {
         Throwable cause = throwable.getCause();
         RuntimeException cleanCause = null;
         if (cause != null) {
             cleanCause = cleanException(cause);
         }
-        
+
         RuntimeException rte = new RuntimeException(throwable.getClass().getName() + ": " + throwable.getMessage(), cleanCause);
         rte.setStackTrace(throwable.getStackTrace());
-        
+
         return rte;
     }
 }
