CHAINSAW-1: Add generics
diff --git a/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java b/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
index c2f5aaf..5235246 100644
--- a/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
+++ b/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
@@ -74,11 +74,11 @@
     /**
      * List of repository event listeners.
      */
-  private final ArrayList repositoryEventListeners = new ArrayList();
+  private final ArrayList<LoggerRepositoryEventListener> repositoryEventListeners = new ArrayList<>();
     /**
      * Map of HierarchyEventListener keyed by LoggingEventListener.
      */
-  private final Map loggerEventListeners = new HashMap();
+  private final Map<LoggerEventListener, HierarchyEventListenerProxy> loggerEventListeners = new HashMap<>();
     /**
      * Name of hierarchy.
      */
@@ -90,7 +90,7 @@
     /**
      * Properties.
      */
-  private final Map properties = new Hashtable();
+  private final Map<String, String> properties = new Hashtable<>();
     /**
      * Scheduler.
      */
@@ -99,13 +99,13 @@
   /** The repository can also be used as an object store
    * for various objects used by log4j components.
    */
-  private Map objectMap = new HashMap();
+  private Map<String, Object> objectMap = new HashMap<>();
 
 
     /**
      * Error list.
      */
-  private List errorList = new Vector();
+  private List<ErrorItem> errorList = new Vector<>();
 
     /**
      * True if hierarchy has not been modified.
@@ -206,7 +206,7 @@
   public void removeLoggerEventListener(final LoggerEventListener listener) {
     synchronized (loggerEventListeners) {
       HierarchyEventListenerProxy proxy =
-              (HierarchyEventListenerProxy) loggerEventListeners.get(listener);
+              loggerEventListeners.get(listener);
       if (proxy == null) {
         LogLog.warn(
           "Ignoring attempt to remove a non-registered LoggerEventListener.");
@@ -262,7 +262,7 @@
   /**
    * {@inheritDoc}
    */
-  public Map getProperties() {
+  public Map<String, String> getProperties() {
     return properties;
   }
 
@@ -270,7 +270,7 @@
    * {@inheritDoc}
    */
   public String getProperty(final String key) {
-     return (String) properties.get(key);
+     return properties.get(key);
   }
 
   /**
@@ -418,7 +418,7 @@
    * Return the the list of previously encoutered {@link ErrorItem error items}.
    * @return list of errors
    */
-  public List getErrorList() {
+  public List<ErrorItem> getErrorList() {
     return errorList;
   }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java b/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
index 722e8a3..810f319 100644
--- a/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
@@ -107,11 +107,11 @@
     add(mainPanel, BorderLayout.CENTER);
   
     Box buttonBox = Box.createHorizontalBox();
-    List buttons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
+    List<JButton> buttons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
     buttonBox.add(Box.createHorizontalGlue());
-    buttonBox.add((JButton)buttons.get(0));
+    buttonBox.add(buttons.get(0));
     buttonBox.add(Box.createHorizontalStrut(10));
-    buttonBox.add((JButton)buttons.get(1));
+    buttonBox.add(buttons.get(1));
   
     add(buttonBox, BorderLayout.SOUTH);
   
diff --git a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
index 7d1b46f..dc11119 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
@@ -59,7 +59,7 @@
     /**
      * If not 'empty', this property will be used as the URL to load log4j configuration at startup
      */
-    private Vector configurationURLs=new Vector();
+    private Vector<String> configurationURLs=new Vector<>();
 
     private String configurationURL = "";
 
@@ -209,7 +209,7 @@
       setShowSplash(model.isShowSplash());
       setToolTipDisplayMillis(model.getToolTipDisplayMillis());
       setCyclicBufferSize(model.getCyclicBufferSize());
-      Vector configurationURLs = model.getConfigurationURLs();
+      Vector<String> configurationURLs = model.getConfigurationURLs();
       if (configurationURLs != null) {
         setConfigurationURLs(configurationURLs);
       }
@@ -297,11 +297,11 @@
       return statusBar;
     }
 
-    public Vector getConfigurationURLs() {
+    public Vector<String> getConfigurationURLs() {
         return configurationURLs;
     }
 
-    public void setConfigurationURLs(Vector urls) {
+    public void setConfigurationURLs(Vector<String> urls) {
         if (urls != null) {
             configurationURLs = urls;
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
index 5981cd4..9e440c6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
@@ -69,7 +69,7 @@
   private JTextField identifierExpression;
   private JTextField toolTipDisplayMillis;
   private JTextField cyclicBufferSize;    
-  private JComboBox configurationURL;
+  private JComboBox<String> configurationURL;
   private final Logger logger;
   private GeneralAllPrefPanel generalAllPrefPanel;
 
@@ -355,7 +355,7 @@
     private final JSlider responsiveSlider =
       new JSlider(SwingConstants.HORIZONTAL, 1, 4, 2);
     private final JCheckBox confirmExit = new JCheckBox(" Confirm Exit ");
-    Dictionary sliderLabelMap = new Hashtable();
+    Dictionary<Integer, JLabel> sliderLabelMap = new Hashtable<>();
     
     private final JCheckBox okToRemoveSecurityManager = new JCheckBox(" Ok to remove SecurityManager ");
 
@@ -368,7 +368,7 @@
     private void initComponents() {
       setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 
-      configurationURL = new JComboBox(new DefaultComboBoxModel(committedPreferenceModel.getConfigurationURLs()));
+      configurationURL = new JComboBox<>(new DefaultComboBoxModel<>(committedPreferenceModel.getConfigurationURLs()));
       configurationURL.setEditable(true);
       configurationURL.setPrototypeDisplayValue("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
       configurationURL.setPreferredSize(new Dimension(375, 13));
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
index b4d670f..bbdc7bc 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppenderHandler.java
@@ -54,7 +54,7 @@
       .getInstance();
   private PropertyChangeSupport propertySupport = new PropertyChangeSupport(
       this);
-  private Map customExpressionRules = new HashMap();
+  private Map<String, Rule> customExpressionRules = new HashMap<>();
 
   /**
    * NOTE: This variable needs to be physically located LAST, because
@@ -141,7 +141,7 @@
         return null;
       }
 
-      public void receiveEventBatch(String identifier, List events) {
+      public void receiveEventBatch(String identifier, List<LoggingEvent> events) {
         System.out.println("received " + events.size());
       }
     });
@@ -216,7 +216,7 @@
    * events accumulated during that time..
    */
   class WorkQueue {
-    final ArrayList queue = new ArrayList();
+    final ArrayList<LoggingEvent> queue = new ArrayList<>();
     Thread workerThread;
 
     protected WorkQueue() {
@@ -249,7 +249,7 @@
       }
 
       public void run() {
-        List innerList = new ArrayList();
+        List<LoggingEvent> innerList = new ArrayList<>();
         while (true) {
           long timeStart = System.currentTimeMillis();
           synchronized (mutex) {
@@ -267,10 +267,10 @@
           }
           int size = innerList.size();
           if (size > 0) {
-            Iterator iter = innerList.iterator();
+            Iterator<LoggingEvent> iter = innerList.iterator();
             ChainsawEventBatch eventBatch = new ChainsawEventBatch();
             while (iter.hasNext()) {
-              LoggingEvent e = (LoggingEvent) iter.next();
+              LoggingEvent e = iter.next();
               // attempt to set the host name (without port), from
               // remoteSourceInfo
               // if 'hostname' property not provided
@@ -329,9 +329,9 @@
       private void dispatchEventBatch(ChainsawEventBatch eventBatch) {
         EventBatchListener[] listeners = listenerList
             .getListeners(EventBatchListener.class);
-        for (Iterator iter = eventBatch.identifierIterator(); iter.hasNext();) {
-          String identifier = (String) iter.next();
-          List eventList = null;
+        for (Iterator<String> iter = eventBatch.identifierIterator(); iter.hasNext();) {
+          String identifier = iter.next();
+          List<LoggingEvent> eventList = null;
           for (EventBatchListener listener : listeners) {
             if ((listener.getInterestedIdentifier() == null)
                     || listener.getInterestedIdentifier().equals(identifier)) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
index 1cfa8d1..faff682 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
@@ -33,7 +33,7 @@
  *
  */
 public class ChainsawColumns {
-  private static final List columnNames = new ArrayList();
+  private static final List<String> columnNames = new ArrayList<>();
 
   static {
     columnNames.add(ChainsawConstants.LOGGER_COL_NAME);
@@ -77,7 +77,7 @@
   private ChainsawColumns() {
   }
 
-  public static List getColumnsNames() {
+  public static List<String> getColumnsNames() {
     return columnNames;
   }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index e659f87..a33b3e3 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -72,7 +72,7 @@
   private boolean currentSortAscending;
   private int currentSortColumn;
   private final EventListenerList eventListenerList = new EventListenerList();
-  private final List columnNames = new ArrayList(ChainsawColumns.getColumnsNames());
+  private final List<String> columnNames = new ArrayList<>(ChainsawColumns.getColumnsNames());
   private boolean sortEnabled = false;
   private boolean reachedCapacity = false;
   private final Logger logger = LogManager.getLogger(ChainsawCyclicBufferTableModel.class);
@@ -116,8 +116,8 @@
     }
   }
 
-  public List getMatchingEvents(Rule rule) {
-    List list = new ArrayList();
+  public List<LoggingEventWrapper> getMatchingEvents(Rule rule) {
+    List<LoggingEventWrapper> list = new ArrayList<>();
     List unfilteredCopy;
     synchronized (mutex) {
         unfilteredCopy = new ArrayList(unfilteredList);
@@ -489,7 +489,7 @@
   }
 
   public String getColumnName(int column) {
-      return (String) columnNames.get(column);
+      return columnNames.get(column);
   }
 
   public LoggingEventWrapper getRow(int row) {
@@ -584,7 +584,7 @@
         String result = event.getProperty(columnNames.get(columnIndex).toString());
         if (result == null) {
             String lowerColName = columnNames.get(columnIndex).toString().toLowerCase(Locale.ENGLISH);
-            Set entrySet = event.getProperties().entrySet();
+            Set<Map.Entry> entrySet = event.getProperties().entrySet();
             for (Object anEntrySet : entrySet) {
                 Map.Entry thisEntry = (Map.Entry) anEntrySet;
                 if (thisEntry.getKey().toString().equalsIgnoreCase(lowerColName)) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatch.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatch.java
index 56388f3..bf1a538 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatch.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatch.java
@@ -34,7 +34,7 @@
  *
  */
 class ChainsawEventBatch {
-  private Map identEventMap = new HashMap();
+  private Map<String, List<LoggingEvent>> identEventMap = new HashMap<>();
 
   ChainsawEventBatch() {
   }
@@ -44,10 +44,10 @@
    * @param e
    */
   void addEvent(String ident, LoggingEvent e) {
-    List events = (List)identEventMap.get(ident);
+    List<LoggingEvent> events = identEventMap.get(ident);
 
     if (events == null) {
-      events = new ArrayList();
+      events = new ArrayList<>();
       identEventMap.put(ident, events);
     }
 
@@ -61,7 +61,7 @@
    *
    * @return Iterator
    */
-  Iterator identifierIterator() {
+  Iterator<String> identifierIterator() {
     return identEventMap.keySet().iterator();
   }
 
@@ -71,7 +71,7 @@
    * @param identifier
    * @return Collection of LoggingEvent instances
    */
-  List entrySet(String identifier) {
-    return (List) identEventMap.get(identifier);
+  List<LoggingEvent> entrySet(String identifier) {
+    return identEventMap.get(identifier);
   }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawSplash.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawSplash.java
index 4385dc7..ee0e882 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawSplash.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawSplash.java
@@ -57,7 +57,7 @@
     String[] preferredFontNames =
       new String[] { "Arial", "Helvetica", "SansSerif" };
 
-    Set availableFontNames = new HashSet();
+    Set<String> availableFontNames = new HashSet<>();
     Font[] allFonts =
       GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventBatchListener.java b/src/main/java/org/apache/log4j/chainsaw/EventBatchListener.java
index e7140fe..354bee2 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventBatchListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventBatchListener.java
@@ -44,5 +44,5 @@
    * @param events List of LoggingEvent instances
    * @param identifier the identifier this list of LoggingEvents is associated with
    */
-  void receiveEventBatch(String identifier, List events);
+  void receiveEventBatch(String identifier, List<org.apache.log4j.spi.LoggingEvent> events);
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
index db7ef82..179ec96 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
@@ -64,7 +64,7 @@
    */
   void clearModel();
 
-  List getMatchingEvents(Rule rule);
+  List<LoggingEventWrapper> getMatchingEvents(Rule rule);
 
   /**
    * Configures this model to use Cyclic or non-cyclic models.
diff --git a/src/main/java/org/apache/log4j/chainsaw/Generator.java b/src/main/java/org/apache/log4j/chainsaw/Generator.java
index 65228f3..e735e95 100644
--- a/src/main/java/org/apache/log4j/chainsaw/Generator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/Generator.java
@@ -57,7 +57,7 @@
   private LoggingEvent createEvent(
     Level level, Logger logger, String msg, Throwable t) {
       ThrowableInformation ti = new ThrowableInformation(t);
-      Map properties = new HashMap();
+      Map<String, String> properties = new HashMap<>();
       properties.put(Constants.APPLICATION_KEY, getName());
       properties.put(Constants.HOSTNAME_KEY, "localhost");
       LocationInfo li = new LocationInfo("file", logger.getClass().getName(), "method", "123");
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
index 6357835..032c267 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
@@ -148,7 +148,7 @@
         return buffer.toString();
     }
 
-  public static Map getAppenderConfiguration(File file) {
+  public static Map<String, Map<String, String>> getAppenderConfiguration(File file) {
     try {
       return getXMLFileAppenderConfiguration(file);
     } catch (IOException | SAXException | ParserConfigurationException e) {
@@ -160,11 +160,11 @@
       //ignore
     }
     //don't return null
-    return new HashMap();
+    return new HashMap<>();
   }
 
-  public static Map getPropertiesFileAppenderConfiguration(File propertyFile) throws IOException {
-    Map result = new HashMap();
+  public static Map<String, Map<String, String>> getPropertiesFileAppenderConfiguration(File propertyFile) throws IOException {
+    Map<String, Map<String, String>> result = new HashMap<>();
     String appenderPrefix = "log4j.appender";
     Properties props = new Properties();
     FileInputStream inputStream = null;
@@ -172,7 +172,7 @@
       inputStream = new FileInputStream(propertyFile);
       props.load(inputStream);
       Enumeration propertyNames = props.propertyNames();
-      Map appenders = new HashMap();
+      Map<String, String> appenders = new HashMap<>();
       while (propertyNames.hasMoreElements()) {
         String propertyName = propertyNames.nextElement().toString();
         if (propertyName.startsWith(appenderPrefix)) {
@@ -193,7 +193,7 @@
                     String conversion = props.getProperty(appenderPrefix + "." + appenderName + ".layout.ConversionPattern");
                     String file = props.getProperty(appenderPrefix + "." + appenderName + ".File");
                     if (conversion != null && file != null) {
-                        Map entry = new HashMap();
+                        Map<String, String> entry = new HashMap<>();
                         entry.put("file", file.trim());
                         entry.put("conversion", conversion.trim());
                         result.put(appenderName, entry);
@@ -222,8 +222,8 @@
     return result;
   }
 
-  private static Map getXMLFileAppenderConfiguration(File file) throws IOException, ParserConfigurationException, SAXException {
-      Map result = new HashMap();
+  private static Map<String, Map<String, String>> getXMLFileAppenderConfiguration(File file) throws IOException, ParserConfigurationException, SAXException {
+      Map<String, Map<String, String>> result = new HashMap<>();
       try (InputStream stream = file.toURI().toURL().openStream()) {
           InputSource src = new InputSource(stream);
           src.setSystemId(file.toURI().toURL().toString());
@@ -245,7 +245,7 @@
                   if (appenderClass.getNodeValue().toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
                       String appenderName = appenderAttributes.getNamedItem("name").getNodeValue();
                       //subclass of FileAppender - add it
-                      Map entry = new HashMap();
+                      Map<String, String> entry = new HashMap<>();
                       NodeList appenderChildren = appender.getChildNodes();
                       for (int j = 0; j < appenderChildren.getLength(); j++) {
                           Node appenderChild = appenderChildren.item(j);
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index a7f8109..dcf16a0 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -278,7 +278,7 @@
    * @param identifier used to load and save settings
    */
   public LogPanel(final ChainsawStatusBar statusBar, final String identifier, int cyclicBufferSize,
-                  Map allColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
+                  Map<String, RuleColorizer> allColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
     this.identifier = identifier;
     this.statusBar = statusBar;
     this.applicationPreferenceModel = applicationPreferenceModel;
@@ -298,7 +298,7 @@
     findCombo.setPrototypeDisplayValue(prototypeValue);
     buildCombo(findCombo, false, filterCombo.model);
 
-    final Map columnNameKeywordMap = new HashMap();
+    final Map<Object, String> columnNameKeywordMap = new HashMap<>();
     columnNameKeywordMap.put(ChainsawConstants.CLASS_COL_NAME, LoggingEventFieldResolver.CLASS_FIELD);
     columnNameKeywordMap.put(ChainsawConstants.FILE_COL_NAME, LoggingEventFieldResolver.FILE_FIELD);
     columnNameKeywordMap.put(ChainsawConstants.LEVEL_COL_NAME, LoggingEventFieldResolver.LEVEL_FIELD);
@@ -2033,7 +2033,7 @@
    * @param ident identifier shared by events
    * @param events list of LoggingEvent objects
    */
-  public void receiveEventBatch(String ident, final List events) {
+  public void receiveEventBatch(String ident, final List<LoggingEvent> events) {
 
     SwingHelper.invokeOnEDT(() -> {
       /*
@@ -2275,9 +2275,9 @@
     preferenceModel.setHiddenExpression(logTreePanel.getHiddenExpression());
     preferenceModel.setAlwaysDisplayExpression(logTreePanel.getAlwaysDisplayExpression());
     List visibleOrder = new ArrayList();
-    Enumeration cols = table.getColumnModel().getColumns();
+    Enumeration<TableColumn> cols = table.getColumnModel().getColumns();
     while (cols.hasMoreElements()) {
-    	TableColumn c = (TableColumn)cols.nextElement();
+    	TableColumn c = cols.nextElement();
     	visibleOrder.add(c);
     }
     preferenceModel.setVisibleColumnOrder(visibleOrder);
@@ -2409,7 +2409,7 @@
   	return tableModel.getFilteredEvents();
   }
   
-  List getMatchingEvents(Rule rule) {
+  List<LoggingEventWrapper> getMatchingEvents(Rule rule) {
     return tableModel.getMatchingEvents(rule);
   }
 
@@ -3015,8 +3015,8 @@
     TableColumnModel columnModel = table.getColumnModel();
     TableColumnModel searchColumnModel = searchTable.getColumnModel();
 
-    Map columnNameMap = new HashMap();
-    Map searchColumnNameMap = new HashMap();
+    Map<String, TableColumn> columnNameMap = new HashMap<>();
+    Map<String, TableColumn> searchColumnNameMap = new HashMap<>();
 
     for (int i = 0; i < columnModel.getColumnCount(); i++) {
       columnNameMap.put(table.getColumnName(i).toUpperCase(), columnModel.getColumn(i));
@@ -3028,7 +3028,7 @@
 
     int index;
     StringTokenizer tok = new StringTokenizer(columnOrder, ",");
-    List sortedColumnList = new ArrayList();
+    List<TableColumn> sortedColumnList = new ArrayList<>();
 
     /*
        remove all columns from the table that exist in the model
@@ -3037,7 +3037,7 @@
      **/
     while (tok.hasMoreElements()) {
       String element = tok.nextElement().toString().trim().toUpperCase();
-      TableColumn column = (TableColumn) columnNameMap.get(element);
+      TableColumn column = columnNameMap.get(element);
 
       if (column != null) {
         sortedColumnList.add(column);
@@ -3607,7 +3607,7 @@
     private class MarkerCellEditor implements TableCellEditor {
       JTable currentTable;
       JTextField textField = new JTextField();
-      Set cellEditorListeners = new HashSet();
+      Set<CellEditorListener> cellEditorListeners = new HashSet<>();
       private LoggingEventWrapper currentLoggingEventWrapper;
       private final Object mutex = new Object();
 
@@ -3642,9 +3642,9 @@
             }
 
             ChangeEvent event = new ChangeEvent(currentTable);
-            Set cellEditorListenersCopy;
+            Set<CellEditorListener> cellEditorListenersCopy;
             synchronized(mutex) {
-                cellEditorListenersCopy = new HashSet(cellEditorListeners);
+                cellEditorListenersCopy = new HashSet<>(cellEditorListeners);
             }
 
           for (Object aCellEditorListenersCopy : cellEditorListenersCopy) {
@@ -3658,9 +3658,9 @@
 
         public void cancelCellEditing()
         {
-            Set cellEditorListenersCopy;
+            Set<CellEditorListener> cellEditorListenersCopy;
             synchronized(mutex) {
-                cellEditorListenersCopy = new HashSet(cellEditorListeners);
+                cellEditorListenersCopy = new HashSet<>(cellEditorListeners);
             }
 
            ChangeEvent event = new ChangeEvent(currentTable);
@@ -3889,8 +3889,8 @@
     }
 
     abstract class AbstractEventMatchThumbnail extends JPanel {
-        protected List primaryList = new ArrayList();
-        protected List secondaryList = new ArrayList();
+        protected List<ThumbnailLoggingEventWrapper> primaryList = new ArrayList<>();
+        protected List<ThumbnailLoggingEventWrapper> secondaryList = new ArrayList<>();
         protected final int maxEventHeight = 6;
 
         AbstractEventMatchThumbnail() {
@@ -3956,15 +3956,15 @@
                 } else if (e.getType() == TableModelEvent.DELETE) {
                     //find each eventwrapper with an id in the deleted range and remove it...
 //                        System.out.println("delete- current warnings: " + warnings.size() + ", errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow + ", displayed event count: " + displayedEvents.size() );
-                    for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
-                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                    for (Iterator<ThumbnailLoggingEventWrapper> iter = secondaryList.iterator(); iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("deleting find: " + wrapper);
                             iter.remove();
                         }
                     }
-                    for (Iterator iter = primaryList.iterator();iter.hasNext();) {
-                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                    for (Iterator<ThumbnailLoggingEventWrapper> iter = primaryList.iterator(); iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("deleting error: " + wrapper);
                             iter.remove();
@@ -3976,15 +3976,15 @@
                 } else if (e.getType() == TableModelEvent.UPDATE) {
 //                        System.out.println("update - about to delete old warnings in range: " + firstRow + " to " + lastRow + ", current warnings: " + warnings.size() + ", errors: " + errors.size());
                     //find each eventwrapper with an id in the deleted range and remove it...
-                    for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
-                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                    for (Iterator<ThumbnailLoggingEventWrapper> iter = secondaryList.iterator(); iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("update - deleting warning: " + wrapper);
                             iter.remove();
                         }
                     }
-                    for (Iterator iter = primaryList.iterator();iter.hasNext();) {
-                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                    for (Iterator<ThumbnailLoggingEventWrapper> iter = primaryList.iterator(); iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("update - deleting error: " + wrapper);
                             iter.remove();
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
index 0c98207..6ce8bdf 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
@@ -42,7 +42,7 @@
  */
 class LogPanelLoggerTreeModel extends DefaultTreeModel
   implements LoggerNameListener {
-  private Map fullPackageMap = new HashMap();
+  private Map<String, LogPanelTreeNode> fullPackageMap = new HashMap<>();
   private final Logger logger = LogManager.getLogger(LogPanelLoggerTreeModel.class);
 
   LogPanelLoggerTreeModel() {
@@ -144,7 +144,7 @@
 
   LogPanelTreeNode lookupLogger(String newLogger) {
     if (fullPackageMap.containsKey(newLogger)) {
-      return (LogPanelTreeNode) fullPackageMap.get(newLogger);
+      return fullPackageMap.get(newLogger);
     }else{
         logger.debug("No logger found matching '" + newLogger + "'");
         logger.debug("Map Dump: " + fullPackageMap);
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
index 360820c..47187da 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanelPreferenceModel.java
@@ -51,7 +51,7 @@
     Properties properties = SettingsManager.getInstance().getDefaultSettings();
 
       for (Map.Entry<Object, Object> objectObjectEntry : properties.entrySet()) {
-          Map.Entry entry = objectObjectEntry;
+          Map.Entry<Object, Object> entry = objectObjectEntry;
 
           if (entry.getKey().toString().startsWith("DateFormat")) {
               list.add(entry.getValue());
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index cbaee9a..8ace4fd 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -156,8 +156,8 @@
   private ApplicationPreferenceModelPanel applicationPreferenceModelPanel;
   private final Map tableModelMap = new HashMap();
   private final Map tableMap = new HashMap();
-  private final List filterableColumns = new ArrayList();
-  private final Map panelMap = new HashMap();
+  private final List<String> filterableColumns = new ArrayList<>();
+  private final Map<String, Component> panelMap = new HashMap<>();
   ChainsawAppenderHandler handler;
   private ChainsawToolBarAndMenus tbms;
   private ChainsawAbout aboutBox;
@@ -165,7 +165,7 @@
   private final JFrame tutorialFrame = new JFrame("Chainsaw Tutorial");
   private JSplitPane mainReceiverSplitPane;
   private double lastMainReceiverSplitLocation = DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION;
-  private final List identifierPanels = new ArrayList();
+  private final List<LogPanel> identifierPanels = new ArrayList<>();
   private int dividerSize;
   private int cyclicBufferSize;
   private static Logger logger;
@@ -199,7 +199,7 @@
   
   private PluginRegistry pluginRegistry;
   //map of tab names to rulecolorizers
-  private Map allColorizers = new HashMap();
+  private Map<String, RuleColorizer> allColorizers = new HashMap<>();
   private ReceiverConfigurationPanel receiverConfigurationPanel = new ReceiverConfigurationPanel();
 
   /**
@@ -585,8 +585,8 @@
 //    cc.activateOptions();
     
     try {
-        Class pluginClass = Class.forName("org.apache.log4j.chainsaw.zeroconf.ZeroConfPlugin");
-        Plugin plugin = (Plugin) pluginClass.newInstance();
+        Class<? extends Plugin> pluginClass = Class.forName("org.apache.log4j.chainsaw.zeroconf.ZeroConfPlugin").asSubclass(Plugin.class);
+        Plugin plugin = pluginClass.newInstance();
         pluginRegistry.addPlugin(plugin);
         plugin.activateOptions();
         MessageCenter.getInstance().getLogger().info("Looks like ZeroConf is available... WooHoo!");
@@ -705,7 +705,7 @@
 
     event.saveSetting(LogUI.MAIN_WINDOW_WIDTH, getWidth());
     event.saveSetting(LogUI.MAIN_WINDOW_HEIGHT, getHeight());
-    RuleColorizer colorizer = (RuleColorizer) allColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
+    RuleColorizer colorizer = allColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
     colorizer.saveColorSettings(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
     if (receiverConfigurationPanel.getModel().getLogFormat() != null ) {
       event.saveSetting("SavedConfig.logFormat", receiverConfigurationPanel.getModel().getLogFormat());
@@ -1360,7 +1360,7 @@
                           }
                           applicationPreferenceModel.setShowNoReceiverWarning(!receiverConfigurationPanel.isDontWarnMeAgain());
                           //remove existing plugins
-                          List plugins = pluginRegistry.getPlugins();
+                          List<Plugin> plugins = pluginRegistry.getPlugins();
                           for (Object plugin1 : plugins) {
                               Plugin plugin = (Plugin) plugin1;
                               //don't stop ZeroConfPlugin if it is registered
@@ -1374,8 +1374,8 @@
                               int port = receiverConfigurationPanel.getModel().getNetworkReceiverPort();
 
                               try {
-                                  Class receiverClass = receiverConfigurationPanel.getModel().getNetworkReceiverClass();
-                                  Receiver networkReceiver = (Receiver) receiverClass.newInstance();
+                                  Class<? extends Receiver> receiverClass = receiverConfigurationPanel.getModel().getNetworkReceiverClass();
+                                  Receiver networkReceiver = receiverClass.newInstance();
                                   networkReceiver.setName(receiverClass.getSimpleName() + "-" + port);
 
                                   Method portMethod =
@@ -1399,7 +1399,7 @@
                               File log4jConfigFile = receiverConfigurationPanel.getModel().getLog4jConfigFile();
                               if (log4jConfigFile != null) {
                                   try {
-                                      Map entries = LogFilePatternLayoutBuilder.getAppenderConfiguration(log4jConfigFile);
+                                      Map<String, Map<String, String>> entries = LogFilePatternLayoutBuilder.getAppenderConfiguration(log4jConfigFile);
                                       for (Object o : entries.entrySet()) {
                                           try {
                                               Map.Entry entry = (Map.Entry) o;
@@ -1568,7 +1568,7 @@
 
   Map getPanels() {
     Map m = new HashMap();
-    Set panelSet = getPanelMap().entrySet();
+    Set<Map.Entry<String, Component>> panelSet = getPanelMap().entrySet();
 
       for (Object aPanelSet : panelSet) {
           Map.Entry entry = (Map.Entry) aPanelSet;
@@ -1582,7 +1582,7 @@
   }
 
   void displayPanel(String panelName, boolean display) {
-    Component p = (Component)getPanelMap().get(panelName);
+    Component p = getPanelMap().get(panelName);
 
     int index = getTabbedPane().indexOfTab(panelName);
 
@@ -1779,7 +1779,7 @@
    *
    * @return DOCUMENT ME!
    */
-  public Map getPanelMap() {
+  public Map<String, Component> getPanelMap() {
     return panelMap;
   }
 
@@ -1801,7 +1801,7 @@
    *
    * @return DOCUMENT ME!
    */
-  public List getFilterableColumns() {
+  public List<String> getFilterableColumns() {
     return filterableColumns;
   }
 
@@ -1893,7 +1893,7 @@
   }
 
   private void buildLogPanel(
-      boolean customExpression, final String ident, final List events)
+      boolean customExpression, final String ident, final List<LoggingEvent> events)
       throws IllegalArgumentException {
       final LogPanel thisPanel = new LogPanel(getStatusBar(), ident, cyclicBufferSize, allColorizers, applicationPreferenceModel);
 
@@ -1971,7 +1971,7 @@
   public void createCustomExpressionLogPanel(String ident) {
     //collect events matching the rule from all of the tabs
     try {
-      List list = new ArrayList();
+      List<LoggingEvent> list = new ArrayList<>();
       Rule rule = ExpressionRule.getRule(ident);
 
         for (Object identifierPanel : identifierPanels) {
@@ -2062,7 +2062,7 @@
          * @param events
          */
     public void receiveEventBatch(
-      final String ident, final List events) {
+      final String ident, final List<LoggingEvent> events) {
       if (events.size() == 0) {
         return;
       }
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java b/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
index 5d682d4..2a835a6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggerNameModelSupport.java
@@ -34,7 +34,7 @@
  */
 public class LoggerNameModelSupport implements LoggerNameModel {
   
-  private Set loggerNameSet = new HashSet();
+  private Set<String> loggerNameSet = new HashSet<>();
   private EventListenerList listenerList = new EventListenerList();
   
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java b/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
index b65ec41..24081ec 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggerNameTreePanel.java
@@ -1245,7 +1245,7 @@
         break;
       }
 
-      List depths = new ArrayList();
+      List<Integer> depths = new ArrayList<>();
 
       while (depthEnum.hasMoreElements()) {
         depths.add(
@@ -1255,7 +1255,7 @@
       Collections.sort(depths);
       Collections.reverse(depths);
 
-      int maxDepth = (Integer) depths.get(0);
+      int maxDepth = depths.get(0);
 
       if (maxDepth > WARN_DEPTH) {
         logger.warn("Should warn user, depth=" + maxDepth);
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 7244179..be19870 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -46,6 +46,7 @@
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 import org.apache.log4j.net.SocketReceiver;
 import org.apache.log4j.net.UDPReceiver;
+import org.apache.log4j.plugins.Receiver;
 
 
 /**
@@ -59,10 +60,10 @@
     private final PanelModel panelModel = new PanelModel();
 
     //network receiver widgets
-    private JComboBox networkReceiverPortComboBox;
-    private JComboBox networkReceiverClassNameComboBox;
-    private DefaultComboBoxModel networkReceiverClassNameComboBoxModel;
-    private DefaultComboBoxModel networkReceiverPortComboBoxModel;
+    private JComboBox<String> networkReceiverPortComboBox;
+    private JComboBox<String> networkReceiverClassNameComboBox;
+    private DefaultComboBoxModel<String> networkReceiverClassNameComboBoxModel;
+    private DefaultComboBoxModel<String> networkReceiverPortComboBoxModel;
 
     //log4j config receiver widgets
     private JButton browseLog4jConfigButton;
@@ -70,18 +71,18 @@
 
     //logfile receiver widgets
     private JButton browseLogFileButton;
-    private JComboBox logFileFormatTypeComboBox;
+    private JComboBox<String> logFileFormatTypeComboBox;
 
-    private JComboBox logFileFormatComboBox;
-    private JComboBox logFileFormatTimestampFormatComboBox;
+    private JComboBox<String> logFileFormatComboBox;
+    private JComboBox<String> logFileFormatTimestampFormatComboBox;
     private JTextField logFileURLTextField;
-    private DefaultComboBoxModel logFileFormatComboBoxModel;
-    private DefaultComboBoxModel logFileFormatTimestampFormatComboBoxModel;
+    private DefaultComboBoxModel<String> logFileFormatComboBoxModel;
+    private DefaultComboBoxModel<String> logFileFormatTimestampFormatComboBoxModel;
 
     //use existing configuration widgets
     private JButton browseForAnExistingConfigurationButton;
-    private DefaultComboBoxModel existingConfigurationComboBoxModel;
-    private JComboBox existingConfigurationComboBox;
+    private DefaultComboBoxModel<String> existingConfigurationComboBoxModel;
+    private JComboBox<String> existingConfigurationComboBox;
 
     //don't warn again widgets
     private JCheckBox dontwarnIfNoReceiver;
@@ -215,20 +216,20 @@
         okButton = new JButton(" OK ");
         cancelButton = new JButton(" Cancel ");
 
-        List okCancelButtons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
+        List<JButton> okCancelButtons = SwingHelper.orderOKCancelButtons(okButton, cancelButton);
 
         c = new GridBagConstraints();
         c.fill = GridBagConstraints.HORIZONTAL;
         c.gridx = 2;
         c.gridy = 0;
         c.insets = new Insets(0, 0, 0, 10);
-        panel.add((JButton)okCancelButtons.get(0), c);
+        panel.add(okCancelButtons.get(0), c);
 
         c = new GridBagConstraints();
         c.fill = GridBagConstraints.HORIZONTAL;
         c.gridx = 3;
         c.gridy = 0;
-        panel.add((JButton)okCancelButtons.get(1), c);
+        panel.add(okCancelButtons.get(1), c);
 
         cancelButton.addActionListener(new ActionListener()
         {
@@ -292,19 +293,19 @@
     }
 
     private JPanel buildNetworkReceiverPanel() {
-        networkReceiverPortComboBoxModel = new DefaultComboBoxModel();
+        networkReceiverPortComboBoxModel = new DefaultComboBoxModel<>();
         networkReceiverPortComboBoxModel.addElement("4445");
         networkReceiverPortComboBoxModel.addElement("4560");
 
-        networkReceiverPortComboBox = new JComboBox(networkReceiverPortComboBoxModel);
+        networkReceiverPortComboBox = new JComboBox<>(networkReceiverPortComboBoxModel);
         networkReceiverPortComboBox.setEditable(true);
         networkReceiverPortComboBox.setOpaque(false);
 
-        networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel();
+        networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
         networkReceiverClassNameComboBoxModel.addElement(SocketReceiver.class.getName());
         networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
 
-        networkReceiverClassNameComboBox = new JComboBox(networkReceiverClassNameComboBoxModel);
+        networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
 
         networkReceiverClassNameComboBox.setEditable(false);
         networkReceiverClassNameComboBox.setOpaque(false);
@@ -426,11 +427,11 @@
         c.insets = new Insets(0, 0, 5, 5);
         panel.add(new JLabel(" Log file format type "), c);
 
-        DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel();
+        DefaultComboBoxModel<String> comboBoxModel = new DefaultComboBoxModel<>();
         comboBoxModel.addElement("LogFilePatternReceiver LogFormat");
         comboBoxModel.addElement("PatternLayout format");
 
-        logFileFormatTypeComboBox = new JComboBox(comboBoxModel);
+        logFileFormatTypeComboBox = new JComboBox<>(comboBoxModel);
         logFileFormatTypeComboBox.setOpaque(false);
 
         c = new GridBagConstraints();
@@ -447,9 +448,9 @@
         c.insets = new Insets(0, 5, 5, 5);
         panel.add(new JLabel(" Log file format "), c);
 
-        logFileFormatComboBoxModel = new DefaultComboBoxModel();
+        logFileFormatComboBoxModel = new DefaultComboBoxModel<>();
         seedLogFileFormatComboBoxModel();
-        logFileFormatComboBox = new JComboBox(logFileFormatComboBoxModel);
+        logFileFormatComboBox = new JComboBox<>(logFileFormatComboBoxModel);
         logFileFormatComboBox.setEditable(true);
         logFileFormatComboBox.setOpaque(false);
         logFileFormatComboBox.setSelectedIndex(0);
@@ -469,9 +470,9 @@
         c.insets = new Insets(0, 5, 5, 5);
         panel.add(new JLabel(" Log file timestamp format "), c);
 
-        logFileFormatTimestampFormatComboBoxModel = new DefaultComboBoxModel();
+        logFileFormatTimestampFormatComboBoxModel = new DefaultComboBoxModel<>();
         seedLogFileFormatTimestampComboBoxModel();
-        logFileFormatTimestampFormatComboBox = new JComboBox(logFileFormatTimestampFormatComboBoxModel);
+        logFileFormatTimestampFormatComboBox = new JComboBox<>(logFileFormatTimestampFormatComboBoxModel);
         logFileFormatTimestampFormatComboBox.setEditable(true);
         logFileFormatTimestampFormatComboBox.setOpaque(false);
 
@@ -513,9 +514,9 @@
     }
 
     private JPanel buildUseExistingConfigurationPanel() {
-        existingConfigurationComboBoxModel = new DefaultComboBoxModel();
+        existingConfigurationComboBoxModel = new DefaultComboBoxModel<>();
 
-        existingConfigurationComboBox = new JComboBox(existingConfigurationComboBoxModel);
+        existingConfigurationComboBox = new JComboBox<>(existingConfigurationComboBoxModel);
         existingConfigurationComboBox.setOpaque(false);
         existingConfigurationComboBox.setToolTipText("Previously loaded configurations can be chosen here");
         existingConfigurationComboBox.setEditable(true);
@@ -708,8 +709,8 @@
             return Integer.parseInt(networkReceiverPortComboBoxModel.getSelectedItem().toString());
         }
 
-        Class getNetworkReceiverClass() throws ClassNotFoundException {
-            return Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString());
+        Class<? extends Receiver> getNetworkReceiverClass() throws ClassNotFoundException {
+            return Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString()).asSubclass(Receiver.class);
         }
 
         boolean isLoadConfig() {
diff --git a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
index 1b20aec..3b6a662 100644
--- a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
@@ -78,7 +78,7 @@
  */
 public class TableColorizingRenderer extends DefaultTableCellRenderer {
   private static final DateFormat DATE_FORMATTER = new SimpleDateFormat(Constants.SIMPLE_TIME_PATTERN);
-  private static final Map iconMap = LevelIconFactory.getInstance().getLevelToIconMap();
+  private static final Map<String, Icon> iconMap = LevelIconFactory.getInstance().getLevelToIconMap();
   private RuleColorizer colorizer;
   private boolean levelUseIcons = false;
   private boolean wrap = false;
@@ -371,7 +371,7 @@
     case ChainsawColumns.INDEX_LEVEL_COL_NAME:
       if (levelUseIcons) {
         levelTextPane.setText("");
-        levelTextPane.insertIcon((Icon) iconMap.get(value.toString()));
+        levelTextPane.insertIcon(iconMap.get(value.toString()));
         if (!toolTipsVisible) {
           levelTextPane.setToolTipText(value.toString());
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ThresholdSlider.java b/src/main/java/org/apache/log4j/chainsaw/ThresholdSlider.java
index a91bae9..f6fed76 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ThresholdSlider.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ThresholdSlider.java
@@ -65,7 +65,7 @@
       new DefaultBoundedRangeModel(
         priorityList.indexOf(Level.TRACE), 0, 0, priorityList.size() - 1));
 
-    Hashtable labelMap = new Hashtable();
+    Hashtable<Integer, JLabel> labelMap = new Hashtable<>();
 
       for (Object aPriorityList : priorityList) {
           Level item = (Level) aPriorityList;
diff --git a/src/main/java/org/apache/log4j/chainsaw/WelcomePanel.java b/src/main/java/org/apache/log4j/chainsaw/WelcomePanel.java
index b74c3ef..0fef5ca 100644
--- a/src/main/java/org/apache/log4j/chainsaw/WelcomePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/WelcomePanel.java
@@ -48,7 +48,7 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public class WelcomePanel extends JPanel {
-  private Stack urlStack = new Stack();
+  private Stack<URL> urlStack = new Stack<>();
   private final JEditorPane textInfo = new JEditorPane();
   private final URLToolbar urlToolbar = new URLToolbar();
 
@@ -113,7 +113,7 @@
             return;
           }
 
-          setURL((URL) urlStack.pop());
+          setURL(urlStack.pop());
         }
       };
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
index 41bdcf5..3d0789b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
@@ -92,27 +92,27 @@
   private JTable table;
   private ActionListener closeListener;
   private JLabel statusBar;
-  private Vector columns;
+  private Vector<String> columns;
   private final String noTab = "None";
   private DefaultComboBoxModel logPanelColorizersModel;
-  private Map allLogPanelColorizers;
+  private Map<String, RuleColorizer> allLogPanelColorizers;
   private RuleColorizer currentLogPanelColorizer;
   private JTable searchTable;
   private DefaultTableModel searchTableModel;
-  private Vector searchColumns;
-  private Vector searchDataVector;
-  private Vector searchDataVectorEntry;
+  private Vector<String> searchColumns;
+  private Vector<Vector<Color>> searchDataVector;
+  private Vector<Color> searchDataVectorEntry;
 
   private JTable alternatingColorTable;
   private DefaultTableModel alternatingColorTableModel;
-  private Vector alternatingColorColumns;
-  private Vector alternatingColorDataVector;
-  private Vector alternatingColorDataVectorEntry;
+  private Vector<String> alternatingColorColumns;
+  private Vector<Vector<Color>> alternatingColorDataVector;
+  private Vector<Color> alternatingColorDataVectorEntry;
   private ApplicationPreferenceModel applicationPreferenceModel;
   private JCheckBox bypassSearchColorsCheckBox;
 
   public ColorPanel(final RuleColorizer currentLogPanelColorizer, final FilterModel filterModel,
-                      final Map allLogPanelColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
+                    final Map<String, RuleColorizer> allLogPanelColorizers, final ApplicationPreferenceModel applicationPreferenceModel) {
     super(new BorderLayout());
 
     this.currentLogPanelColorizer = currentLogPanelColorizer;
@@ -139,29 +139,29 @@
     alternatingColorTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
     alternatingColorTable.setPreferredScrollableViewportSize(new Dimension(30, 30));
 
-    columns = new Vector();
+    columns = new Vector<>();
     columns.add("Expression");
     columns.add("Background");
     columns.add("Foreground");
 
-    searchColumns = new Vector();
+    searchColumns = new Vector<>();
     searchColumns.add("Background");
     searchColumns.add("Foreground");
 
-    alternatingColorColumns = new Vector();
+    alternatingColorColumns = new Vector<>();
     alternatingColorColumns.add("Background");
     alternatingColorColumns.add("Foreground");
 
     //searchtable contains only a single-entry vector containing a two-item vector (foreground, background)
-    searchDataVector = new Vector();
-    searchDataVectorEntry = new Vector();
+    searchDataVector = new Vector<>();
+    searchDataVectorEntry = new Vector<>();
     searchDataVectorEntry.add(applicationPreferenceModel.getSearchBackgroundColor());
     searchDataVectorEntry.add(applicationPreferenceModel.getSearchForegroundColor());
     searchDataVector.add(searchDataVectorEntry);
     searchTableModel.setDataVector(searchDataVector, searchColumns);
 
-    alternatingColorDataVector = new Vector();
-    alternatingColorDataVectorEntry = new Vector();
+    alternatingColorDataVector = new Vector<>();
+    alternatingColorDataVectorEntry = new Vector<>();
     alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorBackgroundColor());
     alternatingColorDataVectorEntry.add(applicationPreferenceModel.getAlternatingColorForegroundColor());
     alternatingColorDataVector.add(alternatingColorDataVectorEntry);
@@ -170,7 +170,7 @@
     table.setPreferredScrollableViewportSize(new Dimension(525, 200));
     tableScrollPane = new JScrollPane(table);
 
-    Vector data = getColorizerVector();
+    Vector<Vector<java.io.Serializable>> data = getColorizerVector();
     tableModel.setDataVector(data, columns);
 
     table.sizeColumnsToFit(0);
@@ -256,7 +256,7 @@
               tableModel.getDataVector().clear();
               Object selectedItem = loadPanelColorizersComboBox.getSelectedItem();
               if (selectedItem != null) {
-                RuleColorizer sourceColorizer = (RuleColorizer) allLogPanelColorizers.get(selectedItem.toString());
+                RuleColorizer sourceColorizer = allLogPanelColorizers.get(selectedItem.toString());
                 colorizer.setRules(sourceColorizer.getRules());
                 updateColors();
               }
@@ -344,8 +344,8 @@
     tableModel.fireTableDataChanged();
   }
   
-  private Vector getColorizerVector() {
-      Vector data = new Vector();
+  private Vector<Vector<java.io.Serializable>> getColorizerVector() {
+      Vector<Vector<java.io.Serializable>> data = new Vector<>();
       Map map = colorizer.getRules();
       for (Object o1 : map.entrySet()) {
           Map.Entry entry = (Map.Entry) o1;
@@ -354,7 +354,7 @@
 
               for (Object o : ((List) entry.getValue())) {
                   ColorRule rule = (ColorRule) o;
-                  Vector v = new Vector();
+                  Vector<java.io.Serializable> v = new Vector<>();
                   v.add(rule.getExpression());
                   v.add(rule.getBackgroundColor());
                   v.add(rule.getForegroundColor());
@@ -510,7 +510,7 @@
     saveAsDefaultButton.addActionListener(
       new AbstractAction() {
         public void actionPerformed(ActionEvent evt) {
-          RuleColorizer defaultColorizer = (RuleColorizer) allLogPanelColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
+          RuleColorizer defaultColorizer = allLogPanelColorizers.get(ChainsawConstants.DEFAULT_COLOR_RULE_NAME);
           applyRules(currentRuleSet, defaultColorizer);
         }
     });
@@ -669,7 +669,7 @@
       new AbstractAction() {
         public void actionPerformed(ActionEvent evt) {
           int currentRow = table.getSelectedRow();
-          Vector v = new Vector();
+          Vector<java.io.Serializable> v = new Vector<>();
           v.add("");
           v.add(Color.white);
           v.add(Color.black);
diff --git a/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java b/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
index d1c00d0..9bd1078 100644
--- a/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
+++ b/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
@@ -58,7 +58,7 @@
     private List fileList;
 
     private JComponent guiTarget;
-    private Map dropTargets = new HashMap();
+    private Map<JComponent, DropTarget> dropTargets = new HashMap<>();
     
     
     private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
diff --git a/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java b/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java
index 561230c..37c8885 100644
--- a/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java
@@ -35,15 +35,15 @@
  *
  */
 public class EventTypeEntryContainer {
-  private Set ColumnNames = new HashSet();
-  private Set Methods = new HashSet();
-  private Set Classes = new HashSet();
-  private Set NDCs = new HashSet();
+  private Set<String> ColumnNames = new HashSet<>();
+  private Set<String> Methods = new HashSet<>();
+  private Set<String> Classes = new HashSet<>();
+  private Set<String> NDCs = new HashSet<>();
   private Set Levels = new HashSet();
-  private Set Loggers = new HashSet();
-  private Set Threads = new HashSet();
-  private Set FileNames = new HashSet();
-  private DefaultListModel columnNameListModel = new DefaultListModel();
+  private Set<String> Loggers = new HashSet<>();
+  private Set<String> Threads = new HashSet<>();
+  private Set<String> FileNames = new HashSet<>();
+  private DefaultListModel<String> columnNameListModel = new DefaultListModel<>();
   private DefaultListModel methodListModel = new DefaultListModel();
   private DefaultListModel classesListModel = new DefaultListModel();
   private DefaultListModel propListModel = new DefaultListModel();
diff --git a/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java b/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
index 03d6983..2597d51 100644
--- a/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
@@ -36,7 +36,7 @@
  *         &lt;psmith@apache.org&gt;
  */
 class HelpLocator {
-  private List classLoaders = new ArrayList();
+  private List<ClassLoader> classLoaders = new ArrayList<>();
   private static Logger logger = LogManager.getLogger(HelpLocator.class);
   HelpLocator() {
   }
diff --git a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
index 052c693..f0882f1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
@@ -96,8 +96,8 @@
     return System.getProperty("os.name").toLowerCase(Locale.ENGLISH).startsWith("mac os x");
   }
 
-  public static List orderOKCancelButtons(JButton okButton, JButton cancelButton) {
-    List result = new ArrayList();
+  public static List<JButton> orderOKCancelButtons(JButton okButton, JButton cancelButton) {
+    List<JButton> result = new ArrayList<>();
     if (isMacOSX()) {
       result.add(cancelButton);
       result.add(okButton);
diff --git a/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java b/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java
index 3f00f78..50dd1e8 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java
@@ -36,7 +36,7 @@
    */ 
   public static final TableCellEditor createBooleanTableCellEditor() {
   
-    JComboBox comboBox = new JComboBox(new Boolean[] {Boolean.TRUE, Boolean.FALSE});
+    JComboBox<Boolean> comboBox = new JComboBox<>(new Boolean[] {Boolean.TRUE, Boolean.FALSE});
     return new DefaultCellEditor(comboBox);
     
   }
@@ -53,7 +53,7 @@
    */
   public static Object createLevelTableCellEditor()
   {
-    JComboBox comboBox = new JComboBox(new Level[] {Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.OFF, Level.ALL});
+    JComboBox<Level> comboBox = new JComboBox<>(new Level[] {Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.OFF, Level.ALL});
     return new DefaultCellEditor(comboBox); 
   }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java b/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java
index fd28b47..1de2fda 100644
--- a/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java
@@ -30,7 +30,7 @@
  */
 public class LevelIconFactory {
   private static final LevelIconFactory instance = new LevelIconFactory();
-  private final Map iconMap = new HashMap();
+  private final Map<String, javax.swing.Icon> iconMap = new HashMap<>();
 
   private LevelIconFactory() {
     //reuse ERROR icon for FATAL level
@@ -69,7 +69,7 @@
     return instance;
   }
 
-  public Map getLevelToIconMap() {
+  public Map<String, javax.swing.Icon> getLevelToIconMap() {
     return iconMap;
   }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
index a1801ff..82e0f74 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
@@ -185,7 +185,7 @@
     if (event.locationInformationExists()) {
         li = formatLocationInfo(event);
     }
-    Hashtable properties = formatProperties(event);
+    Hashtable<String, String> properties = formatProperties(event);
     LoggingEvent copy = new LoggingEvent(null,
 	   logger, event.getTimeStamp(),
 	   event.getLevel(),
@@ -234,9 +234,9 @@
    * @param event
    * @return
    */
-  private static Hashtable formatProperties(LoggingEvent event) {
+  private static Hashtable<String, String> formatProperties(LoggingEvent event) {
     Set keySet = event.getPropertyKeySet();
-    Hashtable hashTable = new Hashtable();
+    Hashtable<String, String> hashTable = new Hashtable<>();
 
       for (Object key : keySet) {
           Object value = event.getProperty(key.toString());
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
index 37fd3d6..a95635b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
@@ -166,7 +166,7 @@
       *
       */
   private void createEvent() {
-    Hashtable hashTable = new Hashtable();
+    Hashtable<String, String> hashTable = new Hashtable<>();
     hashTable.put("key1", "val1");
     hashTable.put("key2", "val2");
     hashTable.put("key3", "val3");
diff --git a/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java b/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
index ba782a1..f2751ee 100644
--- a/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
+++ b/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
@@ -73,7 +73,7 @@
   private static final MessageCenter instance = new MessageCenter();
   private final Logger logger = Logger.getLogger(MessageCenter.class);
   private Layout layout = new TTCCLayout();
-  private final JList messageList = new JList();
+  private final JList<org.apache.log4j.spi.LoggingEvent> messageList = new JList<>();
   private final ListModelAppender appender = new ListModelAppender();
   private ListCellRenderer listCellRenderer =
     new LayoutListCellRenderer(layout);
@@ -176,7 +176,7 @@
     return componentPanel;
   }
 
-  public ListModel getModel() {
+  public ListModel<org.apache.log4j.spi.LoggingEvent> getModel() {
     return messageList.getModel();
   }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/plugins/PluginClassLoaderFactory.java b/src/main/java/org/apache/log4j/chainsaw/plugins/PluginClassLoaderFactory.java
index 06a7505..a96dd15 100644
--- a/src/main/java/org/apache/log4j/chainsaw/plugins/PluginClassLoaderFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/plugins/PluginClassLoaderFactory.java
@@ -72,7 +72,7 @@
         String[] strings = pluginDirectory.list((dir, name) -> name.toUpperCase().endsWith(".JAR"));
         
       
-        List list = new ArrayList();
+        List<URL> list = new ArrayList<>();
         // add the plugin directory as a resource loading path
         try {
 			list.add(pluginDirectory.toURI().toURL());
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java
index d0b8f0b..2a848da 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java
@@ -66,7 +66,7 @@
     Collection c = new ArrayList();
 
       for (Map.Entry<Object, Object> objectObjectEntry : properties.entrySet()) {
-          Map.Entry entry = objectObjectEntry;
+          Map.Entry<Object, Object> entry = objectObjectEntry;
           if (entry.getKey().toString().startsWith(string)) {
               c.add(entry.getValue());
           }
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java b/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java
index 258918f..f93f163 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java
@@ -35,7 +35,7 @@
     private static MRUFileList log4jList = new MRUFileList();
     private static final int DEFAULT_MRU_SIZE = 5;
     
-    private List fileList = new ArrayList();
+    private List<URL> fileList = new ArrayList<>();
     private int size = DEFAULT_MRU_SIZE;
     
     private static transient EventListenerList listeners = new EventListenerList();
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java
index c1b41dc..8e4645a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java
@@ -95,8 +95,8 @@
 
       if (t.getThreshold() != null) {
         levelLabel.setIcon(
-          (Icon) LevelIconFactory.getInstance().getLevelToIconMap().get(
-            t.getThreshold().toString()));
+                LevelIconFactory.getInstance().getLevelToIconMap().get(
+                  t.getThreshold().toString()));
 
         if (levelLabel.getIcon() == null) {
           levelLabel.setText(t.getThreshold().toString());
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 5912aa1..18ac3a6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversHelper.java
@@ -65,7 +65,7 @@
     private static final ReceiversHelper instance = new ReceiversHelper();
 
     private final Logger logger = LogManager.getLogger(ReceiversHelper.class);
-    private List receiverClassList = new ArrayList();
+    private List<Class> receiverClassList = new ArrayList<>();
     /**
      *
      */
@@ -134,8 +134,8 @@
   public void saveReceiverConfiguration(File file) {
     LoggerRepository repo = LogManager.getLoggerRepository();
     PluginRegistry pluginRegistry = ((LoggerRepositoryEx) repo).getPluginRegistry();
-    List fullPluginList = pluginRegistry.getPlugins();
-    List pluginList = new ArrayList();
+    List<Plugin> fullPluginList = pluginRegistry.getPlugins();
+    List<Plugin> pluginList = new ArrayList<>();
       for (Object aFullPluginList : fullPluginList) {
           Plugin thisPlugin = (Plugin) aFullPluginList;
           if (thisPlugin instanceof Receiver) {
@@ -169,7 +169,7 @@
                 pluginElement.setAttribute("class", receiver.getClass().getName());
 
                 BeanInfo beanInfo = Introspector.getBeanInfo(receiver.getClass());
-                List list = new ArrayList(Arrays.asList(beanInfo.getPropertyDescriptors()));
+                List<PropertyDescriptor> list = new ArrayList<>(Arrays.asList(beanInfo.getPropertyDescriptors()));
 
                 for (Object aList : list) {
                     PropertyDescriptor d = (PropertyDescriptor) aList;
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index d206fa5..aaa4642 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -801,11 +801,11 @@
 
     private JRadioButtonMenuItem createLevelRadioButton(
       final Receiver r, final Level l) {
-      Map levelIconMap = LevelIconFactory.getInstance().getLevelToIconMap();
+      Map<String, Icon> levelIconMap = LevelIconFactory.getInstance().getLevelToIconMap();
 
       Action action =
         new AbstractAction(
-          l.toString(), (Icon) levelIconMap.get(l.toString())) {
+          l.toString(), levelIconMap.get(l.toString())) {
           public void actionPerformed(ActionEvent e) {
             if (r != null) {
               r.setThreshold(l);
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java
index f5ffe5d..27572b7 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java
@@ -27,7 +27,7 @@
 
 public class ZeroConfDeviceModel extends AbstractTableModel implements ServiceListener {
 
-    private List deviceList = new ArrayList();
+    private List<ServiceInfo> deviceList = new ArrayList<>();
     private ZeroConfPreferenceModel zeroConfPreferenceModel;
     private transient ZeroConfPlugin plugin;
     
@@ -43,10 +43,10 @@
     }
 
     public ServiceInfo getServiceInfoAtRow(int row) {
-        return (ServiceInfo) deviceList.get(row);
+        return deviceList.get(row);
     }
     public Object getValueAt(int rowIndex, int columnIndex) {
-        ServiceInfo info = (ServiceInfo) deviceList.get(rowIndex);
+        ServiceInfo info = deviceList.get(rowIndex);
         if(info == null) {
             return "";
         }
@@ -73,8 +73,8 @@
     }
 
     public void serviceRemoved(ServiceEvent event) {
-        for (Iterator iter = deviceList.iterator(); iter.hasNext();) {
-            ServiceInfo info = (ServiceInfo) iter.next();
+        for (Iterator<ServiceInfo> iter = deviceList.iterator(); iter.hasNext();) {
+            ServiceInfo info = iter.next();
             if(info.getName().equals(event.getName())) {
                 iter.remove();
             }
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index 93b69f9..7f08c25 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -88,7 +88,7 @@
 
     private ZeroConfPreferenceModel preferenceModel;
     
-    private final Map serviceInfoToReceiveMap = new HashMap();
+    private final Map<ServiceInfo, Plugin> serviceInfoToReceiveMap = new HashMap<>();
 
     private JMenu connectToMenu = new JMenu("Connect to");
     private JMenuItem helpItem = new JMenuItem(new AbstractAction("Learn more about ZeroConf...",
@@ -169,8 +169,8 @@
             public void pluginStopped(PluginEvent e) {
                 Plugin plugin = e.getPlugin();
                 synchronized(serviceInfoToReceiveMap) {
-                    for (Iterator iter = serviceInfoToReceiveMap.entrySet().iterator(); iter.hasNext();) {
-                        Map.Entry entry = (Map.Entry) iter.next();
+                    for (Iterator<Map.Entry<ServiceInfo, Plugin>> iter = serviceInfoToReceiveMap.entrySet().iterator(); iter.hasNext();) {
+                        Map.Entry<ServiceInfo, Plugin> entry = iter.next();
                         if(entry.getValue() == plugin) {
                                 iter.remove();
                         }
@@ -198,7 +198,7 @@
 
     private void registerServiceListenersForAppenders()
     {
-        Set serviceNames = new HashSet();
+        Set<String> serviceNames = new HashSet<>();
         serviceNames.add(MULTICAST_APPENDER_SERVICE_NAME);
         serviceNames.add(SOCKET_APPENDER_SERVICE_NAME);
         serviceNames.add(SOCKETHUB_APPENDER_SERVICE_NAME);
@@ -422,7 +422,7 @@
         }
         Plugin plugin;
         synchronized (serviceInfoToReceiveMap) {
-            plugin = (Plugin) serviceInfoToReceiveMap.get(info);
+            plugin = serviceInfoToReceiveMap.get(info);
         }
         ((LoggerRepositoryEx)LogManager.getLoggerRepository()).getPluginRegistry().stopPlugin(plugin.getName());
         
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java
index 1ac13c4..4b31690 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java
@@ -23,8 +23,8 @@
 
 public class ZeroConfPreferenceModel {
 
-    private List monitoredZones = new ArrayList();
-    private Set autoConnectDevices = new HashSet();
+    private List<String> monitoredZones = new ArrayList<>();
+    private Set<String> autoConnectDevices = new HashSet<>();
     
 //   TODO expose addPropertyChangeListener
     
@@ -38,19 +38,19 @@
         monitoredZones.add(zone);
     }
 
-    public Set getAutoConnectDevices() {
+    public Set<String> getAutoConnectDevices() {
         return autoConnectDevices;
     }
 
-    public void setAutoConnectDevices(Set autoConnectDevices) {
+    public void setAutoConnectDevices(Set<String> autoConnectDevices) {
         this.autoConnectDevices = autoConnectDevices;
     }
 
-    public List getMonitoredZones() {
+    public List<String> getMonitoredZones() {
         return monitoredZones;
     }
 
-    public void setMonitoredZones(List monitoredZones) {
+    public void setMonitoredZones(List<String> monitoredZones) {
         this.monitoredZones = monitoredZones;
     }
 
diff --git a/src/main/java/org/apache/log4j/db/CustomSQLDBReceiver.java b/src/main/java/org/apache/log4j/db/CustomSQLDBReceiver.java
index 55ade75..dc7fcce 100644
--- a/src/main/java/org/apache/log4j/db/CustomSQLDBReceiver.java
+++ b/src/main/java/org/apache/log4j/db/CustomSQLDBReceiver.java
@@ -294,13 +294,13 @@
                 String threadName;
                 Object message;
                 String ndc;
-                Hashtable mdc;
+                Hashtable<String, String> mdc;
                 String[] throwable;
                 String className;
                 String methodName;
                 String fileName;
                 String lineNumber;
-                Hashtable properties;
+                Hashtable<String, String> properties;
 
                 String currentSQLStatement;
                 if (whereExists) {
@@ -335,7 +335,7 @@
                     ndc = rs.getString("NDC");
 
                     String mdcString = rs.getString("MDC");
-                    mdc = new Hashtable();
+                    mdc = new Hashtable<>();
 
                     if (mdcString != null) {
                         // support MDC being wrapped in {{name, value}}
@@ -369,7 +369,7 @@
                     // property
                     // are set)
                     String propertiesString = rs.getString("PROPERTIES");
-                    properties = new Hashtable();
+                    properties = new Hashtable<>();
 
                     if (propertiesString != null) {
                         // support properties being wrapped in {{name,
diff --git a/src/main/java/org/apache/log4j/db/DBReceiverJob.java b/src/main/java/org/apache/log4j/db/DBReceiverJob.java
index 30139b4..80af7cc 100644
--- a/src/main/java/org/apache/log4j/db/DBReceiverJob.java
+++ b/src/main/java/org/apache/log4j/db/DBReceiverJob.java
@@ -203,7 +203,7 @@
       statement.setLong(1, id);
       ResultSet rs = statement.executeQuery();
 
-      Vector v = new Vector();
+      Vector<String> v = new Vector<>();
 
       while (rs.next()) {
         //int i = rs.getShort(1);
@@ -213,7 +213,7 @@
       int len = v.size();
       String[] strRep = new String[len];
       for (int i = 0; i < len; i++) {
-        strRep[i] = (String) v.get(i);
+        strRep[i] = v.get(i);
       }
       // we've filled strRep, we now attach it to the event
       return new ThrowableInformation(strRep);
diff --git a/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java b/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
index b15fbca..4fec74d 100644
--- a/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
+++ b/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
@@ -168,8 +168,8 @@
      * Gets list of supported levels.
      * @return  list of supported levels.
      */
-    public static List getAllPossibleLevels() {
-        ArrayList list = new ArrayList();
+    public static List<UtilLoggingLevel> getAllPossibleLevels() {
+        ArrayList<UtilLoggingLevel> list = new ArrayList<>();
         list.add(FINE);
         list.add(FINER);
         list.add(FINEST);
diff --git a/src/main/java/org/apache/log4j/net/MulticastAppender.java b/src/main/java/org/apache/log4j/net/MulticastAppender.java
index c74f467..2e4cff8 100644
--- a/src/main/java/org/apache/log4j/net/MulticastAppender.java
+++ b/src/main/java/org/apache/log4j/net/MulticastAppender.java
@@ -121,7 +121,7 @@
     }
       
     if (advertiseViaMulticastDNS) {
-        Map properties = new HashMap();
+        Map<String, String> properties = new HashMap<>();
         properties.put("multicastAddress", remoteHost);
         zeroConf = new ZeroConfSupport(ZONE, port, getName(), properties);
         zeroConf.advertise();
diff --git a/src/main/java/org/apache/log4j/net/MulticastReceiver.java b/src/main/java/org/apache/log4j/net/MulticastReceiver.java
index f0a542f..69b33ec 100644
--- a/src/main/java/org/apache/log4j/net/MulticastReceiver.java
+++ b/src/main/java/org/apache/log4j/net/MulticastReceiver.java
@@ -174,7 +174,7 @@
     }
 
     class MulticastHandlerThread extends Thread {
-    private final List list = new ArrayList();
+    private final List<String> list = new ArrayList<>();
 
     public MulticastHandlerThread() {
       setDaemon(true);
@@ -188,7 +188,7 @@
     }
 
     public void run() {
-      ArrayList list2 = new ArrayList();
+      ArrayList<String> list2 = new ArrayList<>();
 
       while (isAlive()) {
         synchronized (list) {
@@ -209,7 +209,7 @@
 
             for (Object aList2 : list2) {
                 String data = (String) aList2;
-                List v = decoderImpl.decodeEvents(data.trim());
+                List<LoggingEvent> v = decoderImpl.decodeEvents(data.trim());
 
                 if (v != null) {
 
diff --git a/src/main/java/org/apache/log4j/net/SocketReceiver.java b/src/main/java/org/apache/log4j/net/SocketReceiver.java
index 821935f..29725ab 100644
--- a/src/main/java/org/apache/log4j/net/SocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/SocketReceiver.java
@@ -53,7 +53,7 @@
     /**
      * socket map.
      */
-  private Map socketMap = new HashMap();
+  private Map<Socket, SocketNode13> socketMap = new HashMap<>();
     /**
      * Paused.
      */
@@ -73,7 +73,7 @@
     /**
      * Socket list.
      */
-  private Vector socketList = new Vector();
+  private Vector<Socket> socketList = new Vector<>();
 
   /**
    * The MulticastDNS zone advertised by a SocketReceiver
@@ -332,15 +332,15 @@
    * been responsible for creating.
    * @return Vector of SocketDetails
    */
-  public Vector getConnectedSocketDetails() {
-    Vector details = new Vector(socketList.size());
+  public Vector<SocketDetail> getConnectedSocketDetails() {
+    Vector<SocketDetail> details = new Vector<>(socketList.size());
 
-    for (Enumeration enumeration = socketList.elements();
+    for (Enumeration<Socket> enumeration = socketList.elements();
          enumeration.hasMoreElements();
             ) {
-      Socket socket = (Socket) enumeration.nextElement();
+      Socket socket = enumeration.nextElement();
       details.add(
-        new SocketDetail(socket, (SocketNode13) socketMap.get(socket)));
+        new SocketDetail(socket, socketMap.get(socket)));
     }
 
     return details;
diff --git a/src/main/java/org/apache/log4j/net/UDPReceiver.java b/src/main/java/org/apache/log4j/net/UDPReceiver.java
index 562d495..fefab1e 100644
--- a/src/main/java/org/apache/log4j/net/UDPReceiver.java
+++ b/src/main/java/org/apache/log4j/net/UDPReceiver.java
@@ -171,7 +171,7 @@
   }
 
   class UDPHandlerThread extends Thread {
-    private final List list = new ArrayList();
+    private final List<String> list = new ArrayList<>();
 
     public UDPHandlerThread() {
       setDaemon(true);
@@ -194,7 +194,7 @@
     }
 
     public void run() {
-      ArrayList list2 = new ArrayList();
+      ArrayList<String> list2 = new ArrayList<>();
 
       while (!UDPReceiver.this.closed) {
         synchronized (list) {
@@ -215,7 +215,7 @@
 
             for (Object aList2 : list2) {
                 String data = (String) aList2;
-                List v = decoderImpl.decodeEvents(data);
+                List<LoggingEvent> v = decoderImpl.decodeEvents(data);
 
                 if (v != null) {
 
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketNode.java b/src/main/java/org/apache/log4j/net/XMLSocketNode.java
index b6b0c53..99d1fe0 100644
--- a/src/main/java/org/apache/log4j/net/XMLSocketNode.java
+++ b/src/main/java/org/apache/log4j/net/XMLSocketNode.java
@@ -131,7 +131,7 @@
               "no bytes read from stream - closing connection.");
             break;
           }
-          List v = decoder.decodeEvents(new String(b, 0, length));
+          List<LoggingEvent> v = decoder.decodeEvents(new String(b, 0, length));
 
           if (v != null) {
 
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
index ad60a89..104b2f7 100644
--- a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
@@ -55,7 +55,7 @@
   //default to log4j xml decoder
   protected String decoder = "org.apache.log4j.xml.XMLDecoder";
   private ServerSocket serverSocket;
-  private List socketList = new Vector();
+  private List<Socket> socketList = new Vector<>();
   private Thread rThread;
   public static final int DEFAULT_PORT = 4448;
   protected int port = DEFAULT_PORT;
diff --git a/src/main/java/org/apache/log4j/plugins/PluginRegistry.java b/src/main/java/org/apache/log4j/plugins/PluginRegistry.java
index 5b22529..72909c1 100644
--- a/src/main/java/org/apache/log4j/plugins/PluginRegistry.java
+++ b/src/main/java/org/apache/log4j/plugins/PluginRegistry.java
@@ -40,7 +40,7 @@
      * The pluginMap is keyed by plugin name and contains plugins as values.
      * key=plugin.getName, value=plugin
      */
-    private final Map pluginMap;
+    private final Map<String, Plugin> pluginMap;
     /**
      * Logger repository.
      */
@@ -62,7 +62,7 @@
      */
     public PluginRegistry(final LoggerRepositoryEx repository) {
         super();
-        pluginMap = new HashMap();
+        pluginMap = new HashMap<>();
         this.loggerRepository = repository;
         this.loggerRepository.addLoggerRepositoryEventListener(listener);
     }
@@ -106,7 +106,7 @@
             // make sure the plugin has reference to repository
             plugin.setLoggerRepository(getLoggerRepository());
 
-            Plugin existingPlugin = (Plugin) pluginMap.get(name);
+            Plugin existingPlugin = pluginMap.get(name);
             if (existingPlugin != null) {
                 existingPlugin.shutdown();
             }
@@ -161,9 +161,9 @@
      *
      * @return List list of plugins from the repository.
      */
-    public List getPlugins() {
+    public List<Plugin> getPlugins() {
         synchronized (pluginMap) {
-            List pluginList = new ArrayList(pluginMap.size());
+            List<Plugin> pluginList = new ArrayList<>(pluginMap.size());
 
             pluginList.addAll(pluginMap.values());
             return pluginList;
@@ -201,7 +201,7 @@
      */
     public Plugin stopPlugin(final String pluginName) {
         synchronized (pluginMap) {
-            Plugin plugin = (Plugin) pluginMap.get(pluginName);
+            Plugin plugin = pluginMap.get(pluginName);
 
             if (plugin == null) {
                 return null;
diff --git a/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java b/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
index 5c2686e..9cff769 100644
--- a/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
+++ b/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
@@ -46,7 +46,7 @@
      * @param props
      */
     public void setProperties(String props) {
-        Map hashTable = new HashMap();
+        Map<String, String> hashTable = new HashMap<>();
         StringTokenizer pairs = new StringTokenizer(props, ",");
         while (pairs.hasMoreTokens()) {
             StringTokenizer entry = new StringTokenizer(pairs.nextToken(), "=");
diff --git a/src/main/java/org/apache/log4j/scheduler/Scheduler.java b/src/main/java/org/apache/log4j/scheduler/Scheduler.java
index 906dcc4..92c5e3e 100644
--- a/src/main/java/org/apache/log4j/scheduler/Scheduler.java
+++ b/src/main/java/org/apache/log4j/scheduler/Scheduler.java
@@ -35,7 +35,7 @@
     /**
      * Job list.
      */
-    List jobList;
+    List<ScheduledJobEntry> jobList;
     /**
      * If set true, scheduler has or should shut down.
      */
@@ -46,7 +46,7 @@
      */
     public Scheduler() {
         super();
-        jobList = new Vector();
+        jobList = new Vector<>();
     }
 
     /**
@@ -60,7 +60,7 @@
 
         int i = 0;
         for (; i < size; i++) {
-            ScheduledJobEntry se = (ScheduledJobEntry) jobList.get(i);
+            ScheduledJobEntry se = jobList.get(i);
             if (se.job == job) {
                 found = true;
                 break;
@@ -88,7 +88,7 @@
         }
         int i = findIndex(job);
         if (i != -1) {
-            ScheduledJobEntry se = (ScheduledJobEntry) jobList.remove(i);
+            ScheduledJobEntry se = jobList.remove(i);
             if (se.job != job) { // this should never happen
                 new IllegalStateException("Internal programming error");
             }
@@ -152,7 +152,7 @@
         if (i == -1) {
             return false;
         } else {
-            ScheduledJobEntry se = (ScheduledJobEntry) jobList.get(i);
+            ScheduledJobEntry se = jobList.get(i);
             se.period = newPeriod;
             return true;
         }
@@ -174,7 +174,7 @@
         int i = 0;
         for (; i < max; i++) {
 
-            ScheduledJobEntry sje = (ScheduledJobEntry) jobList.get(i);
+            ScheduledJobEntry sje = jobList.get(i);
 
             if (desiredExecutionTime < sje.desiredExecutionTime) {
                 break;
@@ -202,7 +202,7 @@
             if (jobList.isEmpty()) {
                 linger();
             } else {
-                ScheduledJobEntry sje = (ScheduledJobEntry) jobList.get(0);
+                ScheduledJobEntry sje = jobList.get(0);
                 long now = System.currentTimeMillis();
                 if (now >= sje.desiredExecutionTime) {
                     executeInABox(sje.job);
diff --git a/src/main/java/org/apache/log4j/spi/Decoder.java b/src/main/java/org/apache/log4j/spi/Decoder.java
index d4686ad..c1096d0 100644
--- a/src/main/java/org/apache/log4j/spi/Decoder.java
+++ b/src/main/java/org/apache/log4j/spi/Decoder.java
@@ -38,7 +38,7 @@
      * @param document document to decode.
      * @return list of LoggingEvent instances.
      */
-  Vector decodeEvents(String document);
+  Vector<LoggingEvent> decodeEvents(String document);
 
     /**
      * Decode event from string.
@@ -53,7 +53,7 @@
      * @return list of LoggingEvent instances.
      * @throws IOException if IO error resolving document.
      */
-  Vector decode(URL url) throws IOException;
+  Vector<LoggingEvent> decode(URL url) throws IOException;
 
     /**
      * Sets additional properties.
diff --git a/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java b/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
index c079a2c..ae30e4b 100644
--- a/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
+++ b/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
@@ -134,7 +134,7 @@
    * Get the properties specific for this repository.
    * @return property map.
    */
-  Map getProperties();
+  Map<String, String> getProperties();
 
   /**
    * Get the property of this repository.
@@ -155,7 +155,7 @@
    *
    * @return List
    */
-  List getErrorList();
+  List<ErrorItem> getErrorList();
 
   /**
    * Errors which cannot be logged, go to the error list.
diff --git a/src/main/java/org/apache/log4j/varia/ListModelAppender.java b/src/main/java/org/apache/log4j/varia/ListModelAppender.java
index ccbc9be..46ab7fc 100644
--- a/src/main/java/org/apache/log4j/varia/ListModelAppender.java
+++ b/src/main/java/org/apache/log4j/varia/ListModelAppender.java
@@ -36,7 +36,7 @@
     /**
      * Default list model.
      */
-  private final DefaultListModel model = new DefaultListModel();
+  private final DefaultListModel<LoggingEvent> model = new DefaultListModel<>();
 
   /**
    * Constructs a ListModelAppender.
@@ -50,7 +50,7 @@
    *
    * @return the list model
    */
-  public ListModel getModel() {
+  public ListModel<LoggingEvent> getModel() {
     return model;
   }
 
diff --git a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
index a73ab59..8aa53bc 100644
--- a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
+++ b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
@@ -137,7 +137,7 @@
  *@author Scott Deboy
  */
 public class LogFilePatternReceiver extends Receiver {
-  private final List keywords = new ArrayList();
+  private final List<String> keywords = new ArrayList<>();
 
   private static final String PROP_START = "PROP(";
   private static final String PROP_END = ")";
@@ -189,8 +189,8 @@
   private Rule expressionRule;
 
   private Map currentMap;
-  private List additionalLines;
-  private List matchingKeywords;
+  private List<String> additionalLines;
+  private List<String> matchingKeywords;
 
   private String regexp;
   private Reader reader;
@@ -201,7 +201,7 @@
   private boolean useCurrentThread;
   public static final int MISSING_FILE_RETRY_MILLIS = 10000;
   private boolean appendNonMatches;
-  private final Map customLevelDefinitionMap = new HashMap();
+  private final Map<String, Level> customLevelDefinitionMap = new HashMap<>();
 
   //default to one line - this number is incremented for each (NL) found in the logFormat
   private int lineCount = 1;
@@ -410,7 +410,7 @@
    */
   private int getExceptionLine() {
     for (int i = 0; i < additionalLines.size(); i++) {
-      Matcher exceptionMatcher = exceptionPattern.matcher((String)additionalLines.get(i));
+      Matcher exceptionMatcher = exceptionPattern.matcher(additionalLines.get(i));
       if (exceptionMatcher.matches()) {
         return i;
       }
@@ -463,7 +463,7 @@
     }
     String[] exception = new String[additionalLines.size() - exceptionLine - 1];
     for (int i = 0; i < exception.length; i++) {
-      exception[i] = (String) additionalLines.get(i + exceptionLine);
+      exception[i] = additionalLines.get(i + exceptionLine);
     }
     return exception;
   }
@@ -672,8 +672,8 @@
 	}
 
     currentMap = new HashMap();
-    additionalLines = new ArrayList();
-    matchingKeywords = new ArrayList();
+    additionalLines = new ArrayList<>();
+    matchingKeywords = new ArrayList<>();
 
     if (timestampFormat != null) {
       dateFormat = new SimpleDateFormat(quoteTimeStampChars(timestampFormat));
@@ -689,7 +689,7 @@
       getLogger().warn("Invalid filter expression: " + filterExpression, e);
     }
 
-    List buildingKeywords = new ArrayList();
+    List<String> buildingKeywords = new ArrayList<>();
 
     String newPattern = logFormat;
 
@@ -707,7 +707,7 @@
     String current = newPattern;
     //build a list of property names and temporarily replace the property with an empty string,
     //we'll rebuild the pattern later
-    List propertyNames = new ArrayList();
+    List<String> propertyNames = new ArrayList<>();
     index = 0;
     while (index > -1) {
         if (current.contains(PROP_START) && current.contains(PROP_END)) {
@@ -771,7 +771,7 @@
     newPattern = newPattern.replaceAll(Pattern.quote(PATTERN_WILDCARD), REGEXP_DEFAULT_WILDCARD);
     //use buildingKeywords here to ensure correct order
     for (int i = 0;i<buildingKeywords.size();i++) {
-      String keyword = (String) buildingKeywords.get(i);
+      String keyword = buildingKeywords.get(i);
       //make the final keyword greedy (we're assuming it's the message)
       if (i == (buildingKeywords.size() - 1)) {
         newPattern = singleReplace(newPattern, String.valueOf(i), GREEDY_GROUP);
@@ -950,7 +950,7 @@
         levelImpl = Level.DEBUG;
     } else {
         //first try to resolve against custom level definition map, then fall back to regular levels
-        levelImpl = (Level) customLevelDefinitionMap.get(level);
+        levelImpl = customLevelDefinitionMap.get(level);
         if (levelImpl == null) {
             levelImpl = Level.toLevel(level.trim());
             if (!level.equals(levelImpl.toString())) {
diff --git a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
index c725467..921a036 100644
--- a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
+++ b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
@@ -259,7 +259,7 @@
         shutdown();
     }
 
-    private void processEvents(Collection c) {
+    private void processEvents(Collection<LoggingEvent> c) {
         if (c == null) {
             return;
         }
diff --git a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
index a217415..00d6f7c 100644
--- a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
@@ -179,7 +179,7 @@
    * @return Vector of LoggingEvents
    * @throws IOException if IO error during processing.
    */
-  public Vector decode(final URL url) throws IOException {
+  public Vector<LoggingEvent> decode(final URL url) throws IOException {
     LineNumberReader reader;
     boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
     InputStream inputStream;
@@ -198,10 +198,10 @@
     } else {
         reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
     }
-    Vector v = new Vector();
+    Vector<LoggingEvent> v = new Vector<>();
 
       String line;
-      Vector events;
+      Vector<LoggingEvent> events;
       try {
           while ((line = reader.readLine()) != null) {
               StringBuilder buffer = new StringBuilder(line);
@@ -232,7 +232,7 @@
    * @param document to decode events from
    * @return Vector of LoggingEvents
    */
-  public Vector decodeEvents(final String document) {
+  public Vector<LoggingEvent> decodeEvents(final String document) {
 
       if (document != null) {
 
@@ -290,10 +290,10 @@
       return null;
     }
 
-    Vector events = decodeEvents(document);
+    Vector<LoggingEvent> events = decodeEvents(document);
 
     if (events.size() > 0) {
-      return (LoggingEvent) events.firstElement();
+      return events.firstElement();
     }
 
     return null;
@@ -304,8 +304,8 @@
    * @param document XML document
    * @return Vector of LoggingEvents
    */
-  private Vector decodeEvents(final Document document) {
-    Vector events = new Vector();
+  private Vector<LoggingEvent> decodeEvents(final Document document) {
+    Vector<LoggingEvent> events = new Vector<>();
 
     NodeList eventList = document.getElementsByTagName("record");
 
@@ -371,7 +371,7 @@
         }
 
         if (tagName.equalsIgnoreCase("exception")) {
-          ArrayList exceptionList = new ArrayList();
+          ArrayList<String> exceptionList = new ArrayList<>();
           NodeList exList = list.item(y).getChildNodes();
           int exlistLength = exList.getLength();
 
diff --git a/src/main/java/org/apache/log4j/xml/XMLDecoder.java b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
index 6395a23..52a3146 100644
--- a/src/main/java/org/apache/log4j/xml/XMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
@@ -177,7 +177,7 @@
    * @return Vector of LoggingEvents
    * @throws IOException if IO error during processing.
    */
-  public Vector decode(final URL url) throws IOException {
+  public Vector<LoggingEvent> decode(final URL url) throws IOException {
     LineNumberReader reader;
     boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
     InputStream inputStream;
@@ -197,10 +197,10 @@
         reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
     }
 
-    Vector v = new Vector();
+    Vector<LoggingEvent> v = new Vector<>();
 
     String line;
-    Vector events;
+    Vector<LoggingEvent> events;
     try {
         while ((line = reader.readLine()) != null) {
             StringBuilder buffer = new StringBuilder(line);
@@ -231,7 +231,7 @@
      * @param document to decode events from
      * @return Vector of LoggingEvents
      */
-  public Vector decodeEvents(final String document) {
+  public Vector<LoggingEvent> decodeEvents(final String document) {
     if (document != null) {
       if (document.trim().equals("")) {
         return null;
@@ -286,10 +286,10 @@
       return null;
     }
 
-    Vector events = decodeEvents(document);
+    Vector<LoggingEvent> events = decodeEvents(document);
 
     if (events.size() > 0) {
-      return (LoggingEvent) events.firstElement();
+      return events.firstElement();
     }
 
     return null;
@@ -300,8 +300,8 @@
    * @param document XML document
    * @return Vector of LoggingEvents
    */
-  private Vector decodeEvents(final Document document) {
-    Vector events = new Vector();
+  private Vector<LoggingEvent> decodeEvents(final Document document) {
+    Vector<LoggingEvent> events = new Vector<>();
 
     Logger logger;
     long timeStamp;
diff --git a/src/test/java/org/apache/log4j/VectorAppender.java b/src/test/java/org/apache/log4j/VectorAppender.java
index 52026d0..b0de7c4 100644
--- a/src/test/java/org/apache/log4j/VectorAppender.java
+++ b/src/test/java/org/apache/log4j/VectorAppender.java
@@ -25,13 +25,13 @@
    @author Ceki  G&uuml;lc&uuml;
 */
 public class VectorAppender extends AppenderSkeleton {
-  public Vector vector;
+  public Vector<LoggingEvent> vector;
 
   long delay = 0;
   
   public VectorAppender() {
     super(true);
-    vector = new Vector();
+    vector = new Vector<>();
   }
 
 
@@ -50,7 +50,7 @@
    * Returns a vector of {@link LoggingEvent}.
    * @return a vector of {@link LoggingEvent}.
    */
-  public Vector getVector() {
+  public Vector<LoggingEvent> getVector() {
     return vector;
   }
 
diff --git a/src/test/java/org/apache/log4j/db/FullCycleDBTest.java b/src/test/java/org/apache/log4j/db/FullCycleDBTest.java
index bbac287..7107f11 100644
--- a/src/test/java/org/apache/log4j/db/FullCycleDBTest.java
+++ b/src/test/java/org/apache/log4j/db/FullCycleDBTest.java
@@ -58,7 +58,7 @@
 public class FullCycleDBTest
        extends TestCase {
   
-  Vector witnessEvents;
+  Vector<LoggingEvent> witnessEvents;
   Hierarchy lrWrite;
   LoggerRepository lrRead;
   String appendConfigFile = null;
@@ -74,7 +74,7 @@
     appendConfigFile = "append-with-drivermanager1.xml";
     readConfigFile = "read-with-drivermanager1.xml";
 
-    witnessEvents = new Vector();
+    witnessEvents = new Vector<LoggingEvent>();
     lrWrite = new Hierarchy(new RootLogger(Level.DEBUG));
     lrRead = new LoggerRepositoryExImpl(new Hierarchy(new RootLogger(Level.DEBUG)));
 
@@ -224,19 +224,19 @@
     // wait a little to allow events to be read
     try { Thread.sleep(3100); } catch(Exception e) {}
     VectorAppender va = (VectorAppender) lrRead.getRootLogger().getAppender("VECTOR");
-    Vector returnedEvents = getRelevantEventsFromVA(va, startTime);
+    Vector<LoggingEvent> returnedEvents = getRelevantEventsFromVA(va, startTime);
     
     compareEvents(witnessEvents, returnedEvents);
     
   }
   
-  void compareEvents(Vector l, Vector r) {
+  void compareEvents(Vector<LoggingEvent> l, Vector<LoggingEvent> r) {
     assertNotNull("left vector of events should not be null");
     assertEquals(l.size(), r.size());
     
     for(int i = 0; i < r.size(); i++) {
-      LoggingEvent le = (LoggingEvent) l.get(i);
-      LoggingEvent re = (LoggingEvent) r.get(i);
+      LoggingEvent le = l.get(i);
+      LoggingEvent re = r.get(i);
       assertEquals(le.getMessage(),        re.getMessage());
       assertEquals(le.getLoggerName(),     re.getLoggerName());
       assertEquals(le.getLevel(),          re.getLevel());
@@ -286,10 +286,10 @@
     }
   }
   
-  Vector getRelevantEventsFromVA(VectorAppender va, long startTime) {
+  Vector<LoggingEvent> getRelevantEventsFromVA(VectorAppender va, long startTime) {
     assertNotNull(va);
-    Vector v = va.getVector();
-    Vector r = new Vector();
+    Vector<LoggingEvent> v = va.getVector();
+    Vector<LoggingEvent> r = new Vector<LoggingEvent>();
     // remove all elements older than startTime
       for (Object aV : v) {
           LoggingEvent event = (LoggingEvent) aV;
diff --git a/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java b/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
index 4328dc9..442b205 100644
--- a/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
+++ b/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
@@ -61,7 +61,7 @@
         logger.info("Message 0");
         MDC.put("p1", "Hola");
 
-        Map msg = new TreeMap();
+        Map<String, String> msg = new TreeMap<>();
         msg.put("p1", "Hello");
         msg.put("p2", "World");
         msg.put("x1", "Mundo");
diff --git a/src/test/java/org/apache/log4j/util/Compare.java b/src/test/java/org/apache/log4j/util/Compare.java
index b68ea31..958d74a 100644
--- a/src/test/java/org/apache/log4j/util/Compare.java
+++ b/src/test/java/org/apache/log4j/util/Compare.java
@@ -33,7 +33,7 @@
   static final int B2_NULL = -2;
 
   private static final InputStream open(
-          final Class testClass,
+          final Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
           final String fileName) throws IOException {
       String resourceName = fileName;
       if (fileName.startsWith("witness/")) {
@@ -52,7 +52,7 @@
       return is;
   }
 
-  public static boolean compare(Class testClass,
+  public static boolean compare(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
                                 final String file1,
                                 final String file2)
     throws IOException {
@@ -64,7 +64,7 @@
   }
     
  public static boolean compare(
-         Class testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
+         Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
 
     String s1;
     int lineCounter = 0;
@@ -105,7 +105,7 @@
    * Prints file on the console.
    *
    */
-  private static void outputFile(Class testClass, String file)
+  private static void outputFile(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file)
     throws IOException {
     InputStream is = open(testClass, file);
     BufferedReader in1 = new BufferedReader(new InputStreamReader(is));
@@ -135,7 +135,7 @@
   }
 
 
-    public static boolean gzCompare(final Class testClass,
+    public static boolean gzCompare(final Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass,
                                     final String actual,
                                     final String expected)
       throws IOException {
@@ -155,7 +155,7 @@
         }
     }
 
-    public static boolean gzCompare(Class testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
+    public static boolean gzCompare(Class<org.apache.log4j.rewrite.RewriteAppenderTest> testClass, String file1, String file2, BufferedReader in1, BufferedReader in2) throws IOException {
 
       String s1;
       int lineCounter = 0;
diff --git a/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java b/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
index bd9e7bc..59cba7f 100644
--- a/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
+++ b/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
@@ -58,28 +58,28 @@
     public void testDecodeEventsString1() throws Exception {
         String xmlStr = getStringFromResource("xmlLayout.1.xml", 10000);
         XMLDecoder decoder = new XMLDecoder();
-        Vector events = decoder.decodeEvents(xmlStr);
+        Vector<org.apache.log4j.spi.LoggingEvent> events = decoder.decodeEvents(xmlStr);
         assertEquals(17, events.size());
     }
 
   public void testDecodeEventsString2() throws Exception {
       String xmlStr = getStringFromResource("xsltLayout.1.xml", 10000);
       XMLDecoder decoder = new XMLDecoder();
-      Vector events = decoder.decodeEvents(xmlStr);
+      Vector<org.apache.log4j.spi.LoggingEvent> events = decoder.decodeEvents(xmlStr);
       assertEquals(15, events.size());
   }
 
     public void testDecodeEventsURL1() throws Exception {
         URL resource = XMLDecoderTest.class.getResource("xmlLayout.1.xml");
         XMLDecoder decoder = new XMLDecoder();
-        Vector events = decoder.decode(resource);
+        Vector<org.apache.log4j.spi.LoggingEvent> events = decoder.decode(resource);
         assertEquals(17, events.size());
     }
 
     public void testDecodeEventsURL2() throws Exception {
         URL resource = XMLDecoderTest.class.getResource("xsltLayout.1.xml");
         XMLDecoder decoder = new XMLDecoder();
-        Vector events = decoder.decode(resource);
+        Vector<org.apache.log4j.spi.LoggingEvent> events = decoder.decode(resource);
         assertEquals(15, events.size());
     }