diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
index 3e1ab8b..314494a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
@@ -328,7 +328,7 @@
        * @param eventBatch
        */
       private void dispatchEventBatch(ChainsawEventBatch eventBatch) {
-        EventBatchListener[] listeners = (EventBatchListener[]) listenerList
+        EventBatchListener[] listeners = listenerList
             .getListeners(EventBatchListener.class);
         for (Iterator iter = eventBatch.identifierIterator(); iter.hasNext();) {
           String identifier = (String) iter.next();
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index 9bed427..751a268 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -285,9 +285,7 @@
   }
 
   public void notifyCountListeners() {
-    EventCountListener[] listeners =
-      (EventCountListener[]) eventListenerList.getListeners(
-        EventCountListener.class);
+    EventCountListener[] listeners = eventListenerList.getListeners(EventCountListener.class);
 
     int filteredListSize;
     int unfilteredListSize;
@@ -753,7 +751,7 @@
   */
   private void fireNewKeyColumnAdded(NewKeyEvent e) {
     NewKeyListener[] listeners =
-      (NewKeyListener[]) eventListenerList.getListeners(NewKeyListener.class);
+            eventListenerList.getListeners(NewKeyListener.class);
 
     for (int i = 0; i < listeners.length; i++) {
       NewKeyListener listener = listeners[i];
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 6fe2a8b..c7b2e84 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -735,8 +735,7 @@
         public void eventCountChanged(int currentCount, int totalCount) {
           if (preferenceModel.isCyclic()) {
             double percent =
-              ((double) totalCount) / ((ChainsawCyclicBufferTableModel) tableModel)
-              .getMaxSize();
+              ((double) totalCount) / tableModel.getMaxSize();
             String msg = null;
             boolean wasWarning = warning75 || warning100;
             if ((percent > 0.75) && (percent < 1.0) && !warning75) {
@@ -4273,11 +4272,7 @@
 
             ThumbnailLoggingEventWrapper that = (ThumbnailLoggingEventWrapper) o;
 
-            if (loggingEventWrapper != null ? !loggingEventWrapper.equals(that.loggingEventWrapper) : that.loggingEventWrapper != null) {
-                return false;
-            }
-
-            return true;
+            return loggingEventWrapper != null ? loggingEventWrapper.equals(that.loggingEventWrapper) : that.loggingEventWrapper == null;
         }
 
         public int hashCode() {
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index e252fd0..538cae5 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -1165,8 +1165,7 @@
       new PropertyChangeListener() {
         public void propertyChange(PropertyChangeEvent evt) {
           stopTutorial.setEnabled(
-            ((Boolean) startTutorial.getValue("TutorialStarted")).equals(
-              Boolean.TRUE));
+            startTutorial.getValue("TutorialStarted").equals(Boolean.TRUE));
           startButton.setSelected(stopTutorial.isEnabled());
         }
       };
@@ -1281,7 +1280,7 @@
 
           if (method != null) {
             try {
-              method.invoke(e.getPlugin(), new Object[] { socketListener });
+              method.invoke(e.getPlugin(), socketListener);
             } catch (Exception ex) {
               MessageCenter.getInstance().getLogger().error(
                 "Failed to add a SocketNodeEventListener", ex);
@@ -1293,7 +1292,7 @@
           try {
             return p.getClass().getMethod(
               "removeSocketNodeEventListener",
-              new Class[] { SocketNodeEventListener.class });
+                    SocketNodeEventListener.class);
           } catch (Exception e) {
             return null;
           }
@@ -1303,7 +1302,7 @@
           try {
             return p.getClass().getMethod(
               "addSocketNodeEventListener",
-              new Class[] { SocketNodeEventListener.class });
+                    SocketNodeEventListener.class);
           } catch (Exception e) {
             return null;
           }
@@ -1314,7 +1313,7 @@
 
           if (method != null) {
             try {
-              method.invoke(e.getPlugin(), new Object[] { socketListener });
+              method.invoke(e.getPlugin(), socketListener);
             } catch (Exception ex) {
               MessageCenter.getInstance().getLogger().error(
                 "Failed to remove SocketNodeEventListener", ex);
@@ -1470,9 +1469,9 @@
 
                 Method portMethod =
                   networkReceiver.getClass().getMethod(
-                    "setPort", new Class[] { int.class });
+                    "setPort", int.class);
                 portMethod.invoke(
-                  networkReceiver, new Object[] { new Integer(port) });
+                  networkReceiver, new Integer(port));
 
                 networkReceiver.setThreshold(Level.TRACE);
 
@@ -1772,8 +1771,8 @@
    */
   private void fireShutdownEvent() {
     ShutdownListener[] listeners =
-      (ShutdownListener[]) shutdownListenerList.getListeners(
-        ShutdownListener.class);
+            shutdownListenerList.getListeners(
+              ShutdownListener.class);
 
     for (int i = 0; i < listeners.length; i++) {
       listeners[i].shuttingDown();
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java b/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
index 9f5ca76..26e2f34 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
@@ -61,7 +61,7 @@
 
   public void reset() {
       loggerNameSet.clear();
-      LoggerNameListener[] eventListeners = (LoggerNameListener[]) listenerList.getListeners(LoggerNameListener.class);
+      LoggerNameListener[] eventListeners = listenerList.getListeners(LoggerNameListener.class);
 
       for (int i = 0; i < eventListeners.length; i++)
       {
@@ -77,7 +77,7 @@
    */
   private void notifyListeners(String loggerName)
   {
-    LoggerNameListener[] eventListeners = (LoggerNameListener[]) listenerList.getListeners(LoggerNameListener.class);
+    LoggerNameListener[] eventListeners = listenerList.getListeners(LoggerNameListener.class);
 
     for (int i = 0; i < eventListeners.length; i++)
     {
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java b/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
index d537aea..9d73a5c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
@@ -591,7 +591,7 @@
       hiddenSet.remove(logger);
     }
 
-    visibilityRuleDelegate.firePropertyChange("hiddenSet", (Object) null, (Object) null);
+    visibilityRuleDelegate.firePropertyChange("hiddenSet", null, null);
   }
 
   /**
@@ -1317,7 +1317,7 @@
   private void fireChangeEvent()
   {
     ChangeListener[] listeners =
-      (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
+            listenerList.getListeners(ChangeListener.class);
     ChangeEvent e = null;
 
     for (int i = 0; i < listeners.length; i++)
diff --git a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
index dec20b0..7d67687 100644
--- a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
+++ b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
@@ -52,13 +52,13 @@
             applicationInstance = applicationClazz.newInstance();
             
 //            now register that we want that Preferences menu
-            Method enablePreferenceMethod = applicationClazz.getMethod("setEnabledPreferencesMenu", new Class[] {boolean.class});
-            enablePreferenceMethod.invoke(applicationInstance, new Object[] {Boolean.TRUE});
+            Method enablePreferenceMethod = applicationClazz.getMethod("setEnabledPreferencesMenu", boolean.class);
+            enablePreferenceMethod.invoke(applicationInstance, Boolean.TRUE);
             
             
             // no About menu for us for now.
-            Method enableAboutMethod = applicationClazz.getMethod("setEnabledAboutMenu", new Class[] {boolean.class});
-            enableAboutMethod.invoke(applicationInstance, new Object[] {Boolean.TRUE});
+            Method enableAboutMethod = applicationClazz.getMethod("setEnabledAboutMenu", boolean.class);
+            enableAboutMethod.invoke(applicationInstance, Boolean.TRUE);
             
             // Need to create a Proxy object to represent an anonymous impl of the ApplicationListener class
             Object listenerProxy = Proxy.newProxyInstance(OSXIntegration.class.getClassLoader(), 
@@ -81,12 +81,12 @@
                 }
 
                 private void setHandled(Object event, Boolean val) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
-                    Method handleMethod =   event.getClass().getMethod("setHandled", new Class[] {boolean.class});
-                    handleMethod.invoke(event, new Object[] {val});
+                    Method handleMethod =   event.getClass().getMethod("setHandled", boolean.class);
+                    handleMethod.invoke(event, val);
                 }});           
             // register the proxy object via the addApplicationListener method, cross fingers...
-            Method registerListenerMethod = applicationClazz.getMethod("addApplicationListener", new Class[] {listenerClass});
-            registerListenerMethod.invoke(applicationInstance, new Object[] {listenerProxy});
+            Method registerListenerMethod = applicationClazz.getMethod("addApplicationListener", listenerClass);
+            registerListenerMethod.invoke(applicationInstance, listenerProxy);
         } catch (Exception e) {
             LOG.error("Failed to setup OSXIntegration", e);
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
index 2c1ef2b..b4f5385 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
@@ -282,8 +282,7 @@
 
                 try {
 
-                    Object object = d.getReadMethod().invoke(plugin,
-                            new Object[0]);
+                    Object object = d.getReadMethod().invoke(plugin);
 
                     if (object != null) {
 
@@ -360,7 +359,7 @@
 
                 try {
                     descriptors[rowIndex].getWriteMethod().invoke(plugin,
-                        new Object[] { aValue });
+                            aValue);
                     fireTableCellUpdated(rowIndex, columnIndex);
                 } catch (IllegalArgumentException e) {
                     // ignore
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java
index a1737f4..9837481 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java
@@ -179,7 +179,7 @@
                     if (d.getReadMethod().getName().equals("getLoggerRepository")) {
                         continue;
                     }
-                    Object o = d.getReadMethod().invoke(receiver, new Object[] {} );
+                    Object o = d.getReadMethod().invoke(receiver);
                     if (o != null) {
                         Element paramElement = document.createElement("param");
                         paramElement.setAttribute("name", d.getName());
diff --git a/src/main/java/org/apache/log4j/db/DBAppender.java b/src/main/java/org/apache/log4j/db/DBAppender.java
index f94e98b..e87132e 100644
--- a/src/main/java/org/apache/log4j/db/DBAppender.java
+++ b/src/main/java/org/apache/log4j/db/DBAppender.java
@@ -301,7 +301,7 @@
               
               for (Iterator i = propertiesKeys.iterator(); i.hasNext();) {
                   String key = (String) i.next();
-                  String value = (String) event.getProperty(key);
+                  String value = event.getProperty(key);
                   
                   //LogLog.info("id " + eventId + ", key " + key + ", value " + value);
                   insertPropertiesStatement.setInt(1, eventId);
