applied spotless
diff --git a/.flattened-pom.xml b/.flattened-pom.xml
new file mode 100644
index 0000000..f9226c9
--- /dev/null
+++ b/.flattened-pom.xml
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.logging</groupId>
+    <artifactId>logging-parent</artifactId>
+    <version>10.4.0</version>
+    <relativePath></relativePath>
+  </parent>
+  <groupId>log4j</groupId>
+  <artifactId>apache-chainsaw</artifactId>
+  <version>2.2.0-SNAPSHOT</version>
+  <name>Apache Chainsaw</name>
+  <description>Graphical Viewer for Logging events from a local or remote log4j event system.</description>
+  <url>https://logging.apache.org/chainsaw</url>
+  <inceptionYear>2002</inceptionYear>
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <developers>
+    <developer>
+      <id>mwomack</id>
+      <name>Mark Womack</name>
+      <email>mwomack@apache.org</email>
+    </developer>
+    <developer>
+      <id>carnold</id>
+      <name>Curt Arnold</name>
+      <email>carnold@apache.org</email>
+    </developer>
+    <developer>
+      <id>sdeboy</id>
+      <name>Scott Deboy</name>
+      <email>sdeboy@apache.org</email>
+    </developer>
+    <developer>
+      <id>psmith</id>
+      <name>Paul Smith</name>
+      <email>psmith@apache.org</email>
+    </developer>
+    <developer>
+      <id>mattsicker</id>
+      <name>Matt Sicker</name>
+      <email>mattsicker@apache.org</email>
+    </developer>
+    <developer>
+      <id>grobmeier</id>
+      <name>Christian Grobmeier</name>
+      <email>grobmeier@apache.org</email>
+    </developer>
+  </developers>
+  <contributors>
+    <contributor>
+      <name>Isuru Suriarachchi</name>
+    </contributor>
+  </contributors>
+  <mailingLists>
+    <mailingList>
+      <name>log4j-user</name>
+      <subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
+      <post>log4j-user@logging.apache.org</post>
+      <archive>https://lists.apache.org/list.html?log4j-user@logging.apache.org</archive>
+      <otherArchives>
+        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-log4j-user/</otherArchive>
+        <otherArchive>http://marc.info/?l=log4j-user</otherArchive>
+        <otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.user</otherArchive>
+      </otherArchives>
+    </mailingList>
+    <mailingList>
+      <name>dev : development of the logging projects including chainsaw</name>
+      <subscribe>dev-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@logging.apache.org</unsubscribe>
+      <post>dev@logging.apache.org</post>
+      <archive>https://lists.apache.org/list.html?dev@logging.apache.org</archive>
+      <otherArchives>
+        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-dev/</otherArchive>
+      </otherArchives>
+    </mailingList>
+    <mailingList>
+      <name>logging commits : all svn/git commits of the logging projects including chainsaw</name>
+      <subscribe>commits-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>commits-unsubscribe@logging.apache.org</unsubscribe>
+      <post>Read-Only List</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/logging-commits/</archive>
+    </mailingList>
+  </mailingLists>
+  <scm>
+    <connection>scm:git:https://github.com/apache/logging-chainsaw.git</connection>
+    <developerConnection>scm:git:https://github.com/apache/logging-chainsaw.git</developerConnection>
+    <url>https://github.com/apache/logging-chainsaw</url>
+  </scm>
+  <issueManagement>
+    <system>GitHub</system>
+    <url>https://github.com/apache/logging-chainsaw/issues</url>
+  </issueManagement>
+  <distributionManagement>
+    <site>
+      <id>www.example.com</id>
+      <url>scp://www.example.com/www/docs/project/</url>
+    </site>
+    <downloadUrl>https://logging.apache.org/log4j/chainsaw/download.html</downloadUrl>
+  </distributionManagement>
+  <properties>
+    <maven.compiler.release>11</maven.compiler.release>
+    <chainsaw.mainclass>org.apache.log4j.chainsaw.ChainsawStarter</chainsaw.mainclass>
+    <maven.compiler.target>11</maven.compiler.target>
+    <ChainsawReleaseManager>Robert Middleton</ChainsawReleaseManager>
+    <maven.compiler.source>11</maven.compiler.source>
+    <log4j.version>2.22.0</log4j.version>
+    <dependency.locations.enabled>false</dependency.locations.enabled>
+    <ChainsawReleaseVersion>2.1.0</ChainsawReleaseVersion>
+    <ChainsawReleaseKey>B095DD52</ChainsawReleaseKey>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>${log4j.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>${log4j.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jmdns</groupId>
+      <artifactId>jmdns</artifactId>
+      <version>3.5.8</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-vfs2</artifactId>
+      <version>2.9.0</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.13.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>5.0-2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.jcraft</groupId>
+      <artifactId>jsch</artifactId>
+      <version>0.1.55</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jms_1.1_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>com.owlike</groupId>
+      <artifactId>genson</artifactId>
+      <version>1.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-configuration2</artifactId>
+      <version>2.9.0</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-beanutils</groupId>
+      <artifactId>commons-beanutils</artifactId>
+      <version>1.9.4</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.spotbugs</groupId>
+      <artifactId>spotbugs-annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.12.0</version>
+        <configuration>
+          <source>${maven.compiler.source}</source>
+          <target>${maven.compiler.target}</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <reporting>
+    <excludeDefaults>true</excludeDefaults>
+    <plugins>
+      <plugin>
+        <artifactId>maven-jxr-plugin</artifactId>
+        <version>2.5</version>
+      </plugin>
+      <plugin>
+        <artifactId>maven-release-plugin</artifactId>
+        <configuration>
+          <goals>site-deploy</goals>
+          <goals>assembly:assembly</goals>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-changes-plugin</artifactId>
+        <version>2.12.1</version>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>jira-report</report>
+              <report>changes-report</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+      <plugin>
+        <artifactId>maven-pmd-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <version>3.3.2</version>
+        <configuration>
+          <bottom>&lt;p align="center">Copyright &amp;#169; {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.&lt;br />
+          Apache Logging, Apache Log4j, Log4j, Apache Chainsaw, Chainsaw, Apache, the Apache feather logo, the Apache Logging project logo,
+          and the Apache Log4j logo are trademarks of The Apache Software Foundation.&lt;/p></bottom>
+          <encoding>UTF-8</encoding>
+          <doclint>none</doclint>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-project-info-reports-plugin</artifactId>
+        <version>2.9</version>
+        <reportSets>
+          <reportSet>
+            <reports>
+              <report>scm</report>
+              <report>project-team</report>
+              <report>issue-tracking</report>
+              <report>mailing-list</report>
+              <report>dependencies</report>
+            </reports>
+          </reportSet>
+        </reportSets>
+      </plugin>
+    </plugins>
+  </reporting>
+  <profiles>
+    <profile>
+      <id>mac</id>
+      <activation>
+        <os>
+          <family>mac</family>
+        </os>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.rat</groupId>
+            <artifactId>apache-rat-plugin</artifactId>
+            <configuration>
+              <consoleOutput>true</consoleOutput>
+              <excludes>
+                <exclude>**/*.log</exclude>
+                <exclude>.java-version</exclude>
+                <exclude>.mvn/jvm.config</exclude>
+                <exclude>**/*.txt</exclude>
+                <exclude>src/changelog/**/*.xml</exclude>
+                <exclude>.github/ISSUE_TEMPLATE/*.md</exclude>
+                <exclude>.github/pull_request_template.md</exclude>
+              </excludes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>development</id>
+      <repositories>
+        <repository>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <id>apache.snapshots</id>
+          <name>Apache Snapshot Repository</name>
+          <url>https://repository.apache.org/snapshots</url>
+        </repository>
+      </repositories>
+    </profile>
+    <profile>
+      <id>packaging</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.rat</groupId>
+            <artifactId>apache-rat-plugin</artifactId>
+          </plugin>
+          <plugin>
+            <artifactId>maven-project-info-reports-plugin</artifactId>
+          </plugin>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <workingDirectory>target</workingDirectory>
+            </configuration>
+          </plugin>
+          <plugin>
+            <artifactId>maven-jar-plugin</artifactId>
+            <version>3.2.2</version>
+            <configuration>
+              <archive>
+                <manifest>
+                  <mainClass>${chainsaw.mainclass}</mainClass>
+                  <addClasspath>true</addClasspath>
+                </manifest>
+                <manifestSections>
+                  <manifestSection>
+                    <name>org.apache.log4j</name>
+                    <manifestEntries>
+                      <Implementation-Title>${project.name}</Implementation-Title>
+                      <Implementation-Version>${project.version}</Implementation-Version>
+                      <Implementation-Vendor>Apache Software Foundation</Implementation-Vendor>
+                    </manifestEntries>
+                  </manifestSection>
+                </manifestSections>
+              </archive>
+            </configuration>
+          </plugin>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>appassembler-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <phase>package</phase>
+                <goals>
+                  <goal>assemble</goal>
+                </goals>
+              </execution>
+            </executions>
+            <configuration>
+              <showConsoleWindow>false</showConsoleWindow>
+              <programs>
+                <program>
+                  <mainClass>${chainsaw.mainclass}</mainClass>
+                  <name>chainsaw</name>
+                </program>
+              </programs>
+            </configuration>
+          </plugin>
+          <plugin>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>make-assembly</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <descriptors>
+                    <descriptor>src/assembly/bin.xml</descriptor>
+                    <descriptor>src/assembly/standalone.xml</descriptor>
+                  </descriptors>
+                  <appendAssemblyId>true</appendAssemblyId>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>build-helper-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>attach-artifacts</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>attach-artifact</goal>
+                </goals>
+                <configuration>
+                  <artifacts>
+                    <artifact>
+                      <file>target/${project.artifactId}-${project.version}-standalone.zip</file>
+                      <type>zip</type>
+                      <classifier>standalone</classifier>
+                    </artifact>
+                  </artifacts>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-source-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>jar</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-site-plugin</artifactId>
+            <version>3.8.2</version>
+            <dependencies>
+              <dependency>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>1.5.6</version>
+              </dependency>
+            </dependencies>
+            <configuration>
+              <locales>en</locales>
+              <moduleExcludes>
+                <xdoc>navigation.xml,changes.xml</xdoc>
+              </moduleExcludes>
+              <asciidoc>
+                <attributes>
+                  <ChainsawReleaseVersion>${ChainsawReleaseVersion}</ChainsawReleaseVersion>
+                  <ChainsawReleaseManager>${ChainsawReleaseManager}</ChainsawReleaseManager>
+                  <ChainsawReleaseKey>${ChainsawReleaseKey}</ChainsawReleaseKey>
+                </attributes>
+              </asciidoc>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/.github/workflows/chainsaw.yml b/.github/workflows/chainsaw.yml
index 293ffbd..5c673d9 100644
--- a/.github/workflows/chainsaw.yml
+++ b/.github/workflows/chainsaw.yml
@@ -1,7 +1,8 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
+# The ASF licenses this file to you under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
 #
@@ -12,6 +13,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+#
 name: chainsaw
 
 on: [push, pull_request]
@@ -69,4 +71,3 @@
         with:
           name: chainsaw.dmg
           path: target/*.dmg
-
diff --git a/pom.xml b/pom.xml
index 2f366eb..14de62a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,7 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
   ~ this work for additional information regarding copyright ownership.
@@ -18,58 +16,29 @@
   ~ limitations under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.logging</groupId>
     <artifactId>logging-parent</artifactId>
     <version>10.4.0</version>
-    <relativePath/>
+    <relativePath />
   </parent>
-  <modelVersion>4.0.0</modelVersion>
   <groupId>log4j</groupId>
   <artifactId>apache-chainsaw</artifactId>
-  <name>Apache Chainsaw</name>
   <version>2.2.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+  <name>Apache Chainsaw</name>
   <description>Graphical Viewer for Logging events from a local or remote log4j event system.</description>
   <url>https://logging.apache.org/chainsaw</url>
   <inceptionYear>2002</inceptionYear>
-  <packaging>jar</packaging>
 
-  <issueManagement>
-    <system>GitHub</system>
-    <url>https://github.com/apache/logging-chainsaw/issues</url>
-  </issueManagement>
-
-  <mailingLists>
-    <mailingList>
-      <name>log4j-user</name>
-      <subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
-      <unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
-      <post>log4j-user@logging.apache.org</post>
-      <archive>https://lists.apache.org/list.html?log4j-user@logging.apache.org</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-log4j-user/</otherArchive>
-        <otherArchive>http://marc.info/?l=log4j-user</otherArchive>
-        <otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.user</otherArchive>
-      </otherArchives>
-    </mailingList>
-    <mailingList>
-      <name>dev : development of the logging projects including chainsaw</name>
-      <subscribe>dev-subscribe@logging.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@logging.apache.org</unsubscribe>
-      <post>dev@logging.apache.org</post>
-      <archive>https://lists.apache.org/list.html?dev@logging.apache.org</archive>
-      <otherArchives>
-        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-dev/</otherArchive>
-      </otherArchives>
-    </mailingList>
-    <mailingList>
-      <name>logging commits : all svn/git commits of the logging projects including chainsaw</name>
-      <subscribe>commits-subscribe@logging.apache.org</subscribe>
-      <unsubscribe>commits-unsubscribe@logging.apache.org</unsubscribe>
-      <post>Read-Only List</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/logging-commits/</archive>
-    </mailingList>
-  </mailingLists>
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
 
   <developers>
     <developer>
@@ -109,13 +78,37 @@
     </contributor>
   </contributors>
 
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
+  <mailingLists>
+    <mailingList>
+      <name>log4j-user</name>
+      <subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
+      <post>log4j-user@logging.apache.org</post>
+      <archive>https://lists.apache.org/list.html?log4j-user@logging.apache.org</archive>
+      <otherArchives>
+        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-log4j-user/</otherArchive>
+        <otherArchive>http://marc.info/?l=log4j-user</otherArchive>
+        <otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.user</otherArchive>
+      </otherArchives>
+    </mailingList>
+    <mailingList>
+      <name>dev : development of the logging projects including chainsaw</name>
+      <subscribe>dev-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@logging.apache.org</unsubscribe>
+      <post>dev@logging.apache.org</post>
+      <archive>https://lists.apache.org/list.html?dev@logging.apache.org</archive>
+      <otherArchives>
+        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-dev/</otherArchive>
+      </otherArchives>
+    </mailingList>
+    <mailingList>
+      <name>logging commits : all svn/git commits of the logging projects including chainsaw</name>
+      <subscribe>commits-subscribe@logging.apache.org</subscribe>
+      <unsubscribe>commits-unsubscribe@logging.apache.org</unsubscribe>
+      <post>Read-Only List</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/logging-commits/</archive>
+    </mailingList>
+  </mailingLists>
 
   <scm>
     <connection>scm:git:https://github.com/apache/logging-chainsaw.git</connection>
@@ -123,6 +116,19 @@
     <url>https://github.com/apache/logging-chainsaw</url>
   </scm>
 
+  <issueManagement>
+    <system>GitHub</system>
+    <url>https://github.com/apache/logging-chainsaw/issues</url>
+  </issueManagement>
+
+  <distributionManagement>
+    <site>
+      <id>www.example.com</id>
+      <url>scp://www.example.com/www/docs/project/</url>
+    </site>
+    <downloadUrl>https://logging.apache.org/log4j/chainsaw/download.html</downloadUrl>
+  </distributionManagement>
+
   <properties>
     <chainsaw.mainclass>org.apache.log4j.chainsaw.ChainsawStarter</chainsaw.mainclass>
     <maven.compiler.source>11</maven.compiler.source>
@@ -135,21 +141,6 @@
     <ChainsawReleaseKey>B095DD52</ChainsawReleaseKey>
   </properties>
 
-    <build>
-        <plugins>
-            <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-compiler-plugin</artifactId>
-            <version>3.12.0</version>
-            <configuration>
-              <source>${maven.compiler.source}</source>
-              <target>${maven.compiler.target}</target>
-            </configuration>
-            </plugin>
-            
-        </plugins>
-    </build>
-    
   <dependencies>
 
     <dependency>
@@ -195,8 +186,8 @@
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jms_1.1_spec</artifactId>
       <version>1.0</version>
-      <optional>true</optional>
       <scope>provided</scope>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>com.owlike</groupId>
@@ -213,7 +204,7 @@
       <groupId>commons-beanutils</groupId>
       <artifactId>commons-beanutils</artifactId>
       <version>1.9.4</version>
-     </dependency>
+    </dependency>
     <dependency>
       <groupId>com.github.spotbugs</groupId>
       <artifactId>spotbugs-annotations</artifactId>
@@ -221,6 +212,21 @@
     </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.12.0</version>
+        <configuration>
+          <source>${maven.compiler.source}</source>
+          <target>${maven.compiler.target}</target>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
   <reporting>
     <excludeDefaults>true</excludeDefaults>
     <plugins>
@@ -285,14 +291,6 @@
     </plugins>
   </reporting>
 
-  <distributionManagement>
-    <downloadUrl>https://logging.apache.org/log4j/chainsaw/download.html</downloadUrl>
-    <site>
-      <id>www.example.com</id>
-      <url>scp://www.example.com/www/docs/project/</url>
-    </site>
-  </distributionManagement>
-
   <profiles>
     <profile>
       <id>mac</id>
@@ -342,6 +340,26 @@
             </executions>
           </plugin>
           -->
+          <plugin>
+            <groupId>org.apache.rat</groupId>
+            <artifactId>apache-rat-plugin</artifactId>
+            <configuration>
+              <consoleOutput>true</consoleOutput>
+              <excludes>
+                <!-- usually testing log files -->
+                <exclude>**/*.log</exclude>
+
+                <!-- should come by parent, but parent does not allow override so far (PR in progress -->
+                <exclude>.java-version</exclude>
+                <exclude>.mvn/jvm.config</exclude>
+                <exclude>**/*.txt</exclude>
+                <exclude>src/changelog/**/*.xml</exclude>
+                <exclude>.github/ISSUE_TEMPLATE/*.md</exclude>
+                <exclude>.github/pull_request_template.md</exclude>
+
+              </excludes>
+            </configuration>
+          </plugin>
         </plugins>
       </build>
     </profile>
@@ -350,19 +368,19 @@
       <id>development</id>
       <repositories>
         <repository>
-          <id>apache.snapshots</id>
-          <name>Apache Snapshot Repository</name>
-          <url>https://repository.apache.org/snapshots</url>
           <releases>
             <enabled>false</enabled>
           </releases>
+          <id>apache.snapshots</id>
+          <name>Apache Snapshot Repository</name>
+          <url>https://repository.apache.org/snapshots</url>
         </repository>
       </repositories>
     </profile>
-    
+
     <profile>
-        <id>packaging</id>
-        <build>
+      <id>packaging</id>
+      <build>
         <plugins>
           <plugin>
             <groupId>org.apache.rat</groupId>
@@ -379,7 +397,7 @@
               <workingDirectory>target</workingDirectory>
             </configuration>
           </plugin>
-          
+
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-jar-plugin</artifactId>
@@ -403,18 +421,10 @@
               </archive>
             </configuration>
           </plugin>
-          
+
           <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>appassembler-maven-plugin</artifactId>
-            <executions>
-              <execution>
-                <phase>package</phase>
-                <goals>
-                  <goal>assemble</goal>
-                </goals>
-              </execution>
-            </executions>
             <configuration>
               <showConsoleWindow>false</showConsoleWindow>
               <programs>
@@ -424,6 +434,14 @@
                 </program>
               </programs>
             </configuration>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>assemble</goal>
+                </goals>
+                <phase>package</phase>
+              </execution>
+            </executions>
           </plugin>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
@@ -431,10 +449,10 @@
             <executions>
               <execution>
                 <id>make-assembly</id>
-                <phase>package</phase>
                 <goals>
                   <goal>single</goal>
                 </goals>
+                <phase>package</phase>
                 <configuration>
                   <descriptors>
                     <descriptor>src/assembly/bin.xml</descriptor>
@@ -453,10 +471,10 @@
             <executions>
               <execution>
                 <id>attach-artifacts</id>
-                <phase>package</phase>
                 <goals>
                   <goal>attach-artifact</goal>
                 </goals>
+                <phase>package</phase>
                 <configuration>
                   <artifacts>
                     <artifact>
@@ -484,13 +502,6 @@
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-site-plugin</artifactId>
             <version>3.8.2</version>
-            <dependencies>
-              <dependency>
-                <groupId>org.asciidoctor</groupId>
-                <artifactId>asciidoctor-maven-plugin</artifactId>
-                <version>1.5.6</version>
-              </dependency>
-            </dependencies>
             <configuration>
               <!-- only build English site even on other language OS -->
               <locales>en</locales>
@@ -509,10 +520,16 @@
                 </attributes>
               </asciidoc>
             </configuration>
+            <dependencies>
+              <dependency>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>1.5.6</version>
+              </dependency>
+            </dependencies>
           </plugin>
         </plugins>
-        </build>
+      </build>
     </profile>
   </profiles>
 </project>
-
diff --git a/src/assembly/bin.xml b/src/assembly/bin.xml
index a108121..bf5b5cd 100644
--- a/src/assembly/bin.xml
+++ b/src/assembly/bin.xml
@@ -1,24 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <assembly>
 <!-- We deliberately don't specify an ID here, because during the assembly process we don't want the
 		bin assembly to have any suffix on its name. Other assemblies need their Id suffixed, but this one
-		doesn't 
+		doesn't
 		<id>bin</id> -->
 	<id>bin</id>
     <formats>
@@ -47,5 +47,5 @@
 			</includes>
 		</fileSet>
 	</fileSets>
-	
+
 </assembly>
diff --git a/src/assembly/standalone.xml b/src/assembly/standalone.xml
index 667fb0e..7528231 100644
--- a/src/assembly/standalone.xml
+++ b/src/assembly/standalone.xml
@@ -1,21 +1,20 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <assembly>
   <id>standalone</id>
   <formats>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7e1597d..e818a3a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -1,20 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <document>
   <properties>
     <title>Apache Chainsaw&#x2122;</title>
diff --git a/src/main/java/org/apache/log4j/ULogger.java b/src/main/java/org/apache/log4j/ULogger.java
index de4c813..bc540bf 100644
--- a/src/main/java/org/apache/log4j/ULogger.java
+++ b/src/main/java/org/apache/log4j/ULogger.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j;
 
-
 /**
  * A proxy for org.slf4j.ULogger.  In slf4j implementing builds, this
  * interface will extend org.slf4j.ULogger and add no additional methods.
@@ -27,7 +25,6 @@
  */
 public interface ULogger {
 
-
     /**
      * Is the logger instance enabled for the DEBUG level?
      *
@@ -42,7 +39,6 @@
      */
     void debug(Object msg);
 
-
     /**
      * Log a parameterized message object at the DEBUG level.
      * <p>
@@ -77,7 +73,6 @@
      */
     void debug(Object msg, Throwable t);
 
-
     /**
      * Is the logger instance enabled for the INFO level?
      *
@@ -126,7 +121,6 @@
      */
     void info(Object msg, Throwable t);
 
-
     /**
      * Is the logger instance enabled for the WARN level?
      *
@@ -175,7 +169,6 @@
      */
     void warn(Object msg, Throwable t);
 
-
     /**
      * Is the logger instance enabled for the ERROR level?
      *
@@ -223,5 +216,4 @@
      * @param t   the exception to log, including its stack trace.
      */
     void error(Object msg, Throwable t);
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java b/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
index 63bb0b9..67c6c92 100644
--- a/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/AbstractPreferencePanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,18 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
-import javax.swing.*;
-import javax.swing.tree.*;
 import java.awt.*;
 import java.awt.event.ActionListener;
 import java.util.Enumeration;
 import java.util.List;
+import javax.swing.*;
+import javax.swing.tree.*;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 
 /**
  * Some basic plumbing for Preference related dialogs.
@@ -97,24 +95,19 @@
 
         add(buttonBox, BorderLayout.SOUTH);
 
-        DefaultTreeSelectionModel treeSelectionModel =
-            new DefaultTreeSelectionModel();
-        treeSelectionModel.setSelectionMode(
-            TreeSelectionModel.SINGLE_TREE_SELECTION);
+        DefaultTreeSelectionModel treeSelectionModel = new DefaultTreeSelectionModel();
+        treeSelectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
         prefTree.setSelectionModel(treeSelectionModel);
-        prefTree.addTreeSelectionListener(
-            e -> {
-                TreePath path = e.getNewLeadSelectionPath();
-                DefaultMutableTreeNode node =
-                    (DefaultMutableTreeNode) path.getLastPathComponent();
-                setDisplayedPrefPanel((JComponent) node.getUserObject());
-            });
+        prefTree.addTreeSelectionListener(e -> {
+            TreePath path = e.getNewLeadSelectionPath();
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
+            setDisplayedPrefPanel((JComponent) node.getUserObject());
+        });
 
         // ensure the first pref panel is selected and displayed
         DefaultMutableTreeNode root =
-            (DefaultMutableTreeNode) prefTree.getModel().getRoot();
-        DefaultMutableTreeNode firstNode =
-            (DefaultMutableTreeNode) root.getFirstChild();
+                (DefaultMutableTreeNode) prefTree.getModel().getRoot();
+        DefaultMutableTreeNode firstNode = (DefaultMutableTreeNode) root.getFirstChild();
         prefTree.setSelectionPath(new TreePath(firstNode.getPath()));
     }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
index 803d3d0..8623b05 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,12 @@
  */
 package org.apache.log4j.chainsaw;
 
+import java.awt.*;
+import java.util.List;
+import javax.swing.*;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.commons.configuration2.event.EventListener;
-import org.apache.log4j.varia.LogFilePatternReceiver;
-
-import javax.swing.*;
-import java.awt.*;
-import java.util.Collections;
-import java.util.List;
 
 /**
  * Encapsulates the Chainsaw Application wide properties
@@ -73,8 +70,7 @@
     private final boolean isToolbarDefault = true;
     private final boolean confirmExitDefault = true;
     private final boolean showSplashDefault = true;
-    private List<String> defaultColumns = List.of("LOGGER","MARKER","TIMESTAMP","LEVEL","MESSAGE");
-
+    private List<String> defaultColumns = List.of("LOGGER", "MARKER", "TIMESTAMP", "LEVEL", "MESSAGE");
 
     public ApplicationPreferenceModel(AbstractConfiguration globalConfiguration) {
         this.globalConfiguration = globalConfiguration;
@@ -129,23 +125,26 @@
      */
     public void apply(ApplicationPreferenceModel model) {
         setIdentifierExpression(model.getIdentifierExpression());
-        setShowNoReceiverWarning(model.isShowNoReceiverWarning() || (model.getConfigurationURL() == null || model.getConfigurationURL().trim().isEmpty()));
+        setShowNoReceiverWarning(model.isShowNoReceiverWarning()
+                || (model.getConfigurationURL() == null
+                        || model.getConfigurationURL().trim().isEmpty()));
         setResponsiveness(model.getResponsiveness());
         setTabPlacement(model.getTabPlacement());
         setStatusBarVisible(model.isStatusBarVisible());
         setToolbarVisible(model.isToolbarVisible());
         setReceiversVisible(model.isReceiversVisible());
-        if (model.getLookAndFeelClassName() != null && !model.getLookAndFeelClassName().trim().isEmpty()) {
+        if (model.getLookAndFeelClassName() != null
+                && !model.getLookAndFeelClassName().trim().isEmpty()) {
             setLookAndFeelClassName(model.getLookAndFeelClassName());
         } else {
-            //ensure current look and feel is selected
+            // ensure current look and feel is selected
             setLookAndFeelClassName(UIManager.getLookAndFeel().getClass().getName());
         }
         setConfirmExit(model.isConfirmExit());
         setShowSplash(model.isShowSplash());
         setToolTipDisplayMillis(model.getToolTipDisplayMillis());
         setCyclicBufferSize(model.getCyclicBufferSize());
-        //only set current config URL if bypass is null
+        // only set current config URL if bypass is null
         if (model.getBypassConfigurationURL() == null) {
             setConfigurationURL(model.getConfigurationURL());
         }
@@ -168,21 +167,21 @@
         setBypassSearchColors(model.isBypassSearchColors());
     }
 
-    //use a lighter version of search color as the delta color
+    // use a lighter version of search color as the delta color
     public Color getDeltaColor() {
         float factor = 1.3F;
         Color search = getSearchBackgroundColor();
 
-        return new Color(boundColorValue((int) (search.getRed() * factor)),
-            boundColorValue((int) (search.getGreen() * factor)),
-            boundColorValue((int) (search.getBlue() * factor)));
+        return new Color(
+                boundColorValue((int) (search.getRed() * factor)),
+                boundColorValue((int) (search.getGreen() * factor)),
+                boundColorValue((int) (search.getBlue() * factor)));
     }
 
     private int boundColorValue(int colorValue) {
         return Math.min(Math.max(0, colorValue), 255);
     }
 
-
     /**
      * @return Returns the responsiveness.
      */
@@ -249,7 +248,6 @@
         return globalConfiguration.get(Color.class, ALTERNATING_FOREGROUND_COLOR, alternatingForegroundColorDefault);
     }
 
-
     public Color getSearchBackgroundColor() {
         return globalConfiguration.get(Color.class, SEARCH_BACKGROUND_COLOR, searchBackgroundColorDefault);
     }
@@ -340,8 +338,8 @@
     }
 
     /*
-      Set to null to un-bypass
-     */
+     Set to null to un-bypass
+    */
     public void setBypassConfigurationURL(String bypassConfigurationURL) {
         globalConfiguration.setProperty(BYPASS_CONFIGURATION_URL, bypassConfigurationURL);
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
index 5d96c77..38c0c34 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ApplicationPreferenceModelPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,24 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.log4j.chainsaw.osx.OSXIntegration;
-
-import javax.swing.*;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
 import java.awt.*;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Locale;
+import javax.swing.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
+import org.apache.log4j.chainsaw.osx.OSXIntegration;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
-
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A panel used by the user to modify any application-wide preferences.
@@ -45,14 +42,15 @@
     private JTextField toolTipDisplayMillis;
     private JTextField cyclicBufferSize;
     private GeneralAllPrefPanel generalAllPrefPanel;
-    public ApplicationPreferenceModelPanel(SettingsManager settingsManager, ApplicationPreferenceModel applicationPreferenceModel) {
+
+    public ApplicationPreferenceModelPanel(
+            SettingsManager settingsManager, ApplicationPreferenceModel applicationPreferenceModel) {
         this.applicationPreferenceModel = applicationPreferenceModel;
         initComponents();
-        getOkButton().addActionListener(
-            e -> {
-                settingsManager.saveGlobalSettings();
-                hidePanel();
-            });
+        getOkButton().addActionListener(e -> {
+            settingsManager.saveGlobalSettings();
+            hidePanel();
+        });
 
         getCancelButton().addActionListener(e -> hidePanel());
     }
@@ -61,16 +59,13 @@
      * @see org.apache.log4j.chainsaw.AbstractPreferencePanel#createTreeModel()
      */
     protected TreeModel createTreeModel() {
-        final DefaultMutableTreeNode rootNode =
-            new DefaultMutableTreeNode("Preferences");
+        final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Preferences");
         DefaultTreeModel model = new DefaultTreeModel(rootNode);
 
         generalAllPrefPanel = new GeneralAllPrefPanel();
-        DefaultMutableTreeNode general =
-            new DefaultMutableTreeNode(generalAllPrefPanel);
+        DefaultMutableTreeNode general = new DefaultMutableTreeNode(generalAllPrefPanel);
 
-        DefaultMutableTreeNode visuals =
-            new DefaultMutableTreeNode(new VisualsPrefPanel());
+        DefaultMutableTreeNode visuals = new DefaultMutableTreeNode(new VisualsPrefPanel());
 
         rootNode.add(general);
         rootNode.add(visuals);
@@ -90,8 +85,8 @@
         private VisualsPrefPanel() {
             super("Visuals");
 
-            //Nimbus has major issues with colors in tables..just remove it from the list..
-            //only use this if nimbus was found..
+            // Nimbus has major issues with colors in tables..just remove it from the list..
+            // only use this if nimbus was found..
             UIManager.LookAndFeelInfo[] newLookAndFeels = new UIManager.LookAndFeelInfo[lookAndFeels.length];
             boolean useNewLookAndFeels = false;
             int j = 0;
@@ -103,7 +98,8 @@
                 }
             }
             if (useNewLookAndFeels) {
-                UIManager.LookAndFeelInfo[] replacedLookAndFeels = new UIManager.LookAndFeelInfo[lookAndFeels.length - 1];
+                UIManager.LookAndFeelInfo[] replacedLookAndFeels =
+                        new UIManager.LookAndFeelInfo[lookAndFeels.length - 1];
                 System.arraycopy(newLookAndFeels, 0, replacedLookAndFeels, 0, newLookAndFeels.length - 1);
                 lookAndFeels = replacedLookAndFeels;
             }
@@ -117,59 +113,54 @@
          *
          */
         private void setupListeners() {
-            topPlacement.addActionListener(
-                e -> applicationPreferenceModel.setTabPlacement(SwingConstants.TOP));
-            bottomPlacement.addActionListener(
-                e -> applicationPreferenceModel.setTabPlacement(SwingConstants.BOTTOM));
+            topPlacement.addActionListener(e -> applicationPreferenceModel.setTabPlacement(SwingConstants.TOP));
+            bottomPlacement.addActionListener(e -> applicationPreferenceModel.setTabPlacement(SwingConstants.BOTTOM));
 
-            statusBar.addActionListener(
-                e -> applicationPreferenceModel.setStatusBarVisible(statusBar.isSelected()));
+            statusBar.addActionListener(e -> applicationPreferenceModel.setStatusBarVisible(statusBar.isSelected()));
 
-            toolBar.addActionListener(
-                e -> applicationPreferenceModel.setToolbarVisible(toolBar.isSelected()));
+            toolBar.addActionListener(e -> applicationPreferenceModel.setToolbarVisible(toolBar.isSelected()));
 
-            receivers.addActionListener(
-                e -> applicationPreferenceModel.setReceiversVisible(receivers.isSelected()));
+            receivers.addActionListener(e -> applicationPreferenceModel.setReceiversVisible(receivers.isSelected()));
 
-//            uncommittedPreferenceModel.addPropertyChangeListener(
-//                "tabPlacement",
-//                evt -> {
-//                    int value = (Integer) evt.getNewValue();
-//
-//                    configureTabPlacement(value);
-//                });
-//
-//            uncommittedPreferenceModel.addPropertyChangeListener(
-//                "statusBar",
-//                evt -> statusBar.setSelected(
-//                    (Boolean) evt.getNewValue()));
-//
-//            uncommittedPreferenceModel.addPropertyChangeListener(
-//                "toolbar",
-//                evt -> toolBar.setSelected((Boolean) evt.getNewValue()));
-//
-//            uncommittedPreferenceModel.addPropertyChangeListener(
-//                "receivers",
-//                evt -> receivers.setSelected(
-//                    (Boolean) evt.getNewValue()));
-//
-//            uncommittedPreferenceModel.addPropertyChangeListener(
-//                "lookAndFeelClassName",
-//                evt -> {
-//                    String lf = evt.getNewValue().toString();
-//
-//                    Enumeration enumeration = lookAndFeelGroup.getElements();
-//
-//                    while (enumeration.hasMoreElements()) {
-//                        JRadioButton button = (JRadioButton) enumeration.nextElement();
-//
-//                        if (button.getName() != null && button.getName().equals(lf)) {
-//                            button.setSelected(true);
-//
-//                            break;
-//                        }
-//                    }
-//                });
+            //            uncommittedPreferenceModel.addPropertyChangeListener(
+            //                "tabPlacement",
+            //                evt -> {
+            //                    int value = (Integer) evt.getNewValue();
+            //
+            //                    configureTabPlacement(value);
+            //                });
+            //
+            //            uncommittedPreferenceModel.addPropertyChangeListener(
+            //                "statusBar",
+            //                evt -> statusBar.setSelected(
+            //                    (Boolean) evt.getNewValue()));
+            //
+            //            uncommittedPreferenceModel.addPropertyChangeListener(
+            //                "toolbar",
+            //                evt -> toolBar.setSelected((Boolean) evt.getNewValue()));
+            //
+            //            uncommittedPreferenceModel.addPropertyChangeListener(
+            //                "receivers",
+            //                evt -> receivers.setSelected(
+            //                    (Boolean) evt.getNewValue()));
+            //
+            //            uncommittedPreferenceModel.addPropertyChangeListener(
+            //                "lookAndFeelClassName",
+            //                evt -> {
+            //                    String lf = evt.getNewValue().toString();
+            //
+            //                    Enumeration enumeration = lookAndFeelGroup.getElements();
+            //
+            //                    while (enumeration.hasMoreElements()) {
+            //                        JRadioButton button = (JRadioButton) enumeration.nextElement();
+            //
+            //                        if (button.getName() != null && button.getName().equals(lf)) {
+            //                            button.setSelected(true);
+            //
+            //                            break;
+            //                        }
+            //                    }
+            //                });
         }
 
         /**
@@ -213,17 +204,15 @@
                 final JRadioButton lfItem = new JRadioButton(" " + lfInfo.getName() + " ");
                 lfItem.setName(lfInfo.getClassName());
                 lfItem.addActionListener(
-                    e -> applicationPreferenceModel.setLookAndFeelClassName(lfInfo.getClassName()));
+                        e -> applicationPreferenceModel.setLookAndFeelClassName(lfInfo.getClassName()));
                 lookAndFeelGroup.add(lfItem);
                 lfPanel.add(lfItem);
             }
 
             try {
-                final Class gtkLF =
-                    Class.forName("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
+                final Class gtkLF = Class.forName("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
                 final JRadioButton lfIGTK = new JRadioButton(" GTK+ 2.0 ");
-                lfIGTK.addActionListener(
-                    e -> applicationPreferenceModel.setLookAndFeelClassName(gtkLF.getName()));
+                lfIGTK.addActionListener(e -> applicationPreferenceModel.setLookAndFeelClassName(gtkLF.getName()));
                 lookAndFeelGroup.add(lfIGTK);
                 lfPanel.add(lfIGTK);
             } catch (Exception e) {
@@ -232,10 +221,8 @@
 
             add(lfPanel);
 
-            add(
-                new JLabel(
-                    "<html>Look and Feel change will apply the next time you start Chainsaw.<br>" +
-                        "If this value is not set, the default L&F of your system is used.</html>"));
+            add(new JLabel("<html>Look and Feel change will apply the next time you start Chainsaw.<br>"
+                    + "If this value is not set, the default L&F of your system is used.</html>"));
         }
 
         private void configureTabPlacement(int value) {
@@ -255,7 +242,7 @@
             }
         }
 
-        public void updateModel(){
+        public void updateModel() {
             statusBar.setSelected(applicationPreferenceModel.isStatusBarVisible());
             receivers.setSelected(applicationPreferenceModel.isReceiversVisible());
             toolBar.setSelected(applicationPreferenceModel.isToolbarVisible());
@@ -276,8 +263,7 @@
      */
     public class GeneralAllPrefPanel extends BasicPrefPanel {
         private final JCheckBox showSplash = new JCheckBox(" Show Splash screen at startup ");
-        private final JSlider responsiveSlider =
-            new JSlider(SwingConstants.HORIZONTAL, 1, 4, 2);
+        private final JSlider responsiveSlider = new JSlider(SwingConstants.HORIZONTAL, 1, 4, 2);
         private final JCheckBox confirmExit = new JCheckBox(" Confirm Exit ");
         Dictionary<Integer, JLabel> sliderLabelMap = new Hashtable<>();
 
@@ -337,7 +323,7 @@
 
         private void initSliderComponent() {
             responsiveSlider.setToolTipText(
-                "Adjust to set the responsiveness of the app.  How often the view is updated.");
+                    "Adjust to set the responsiveness of the app.  How often the view is updated.");
             responsiveSlider.setSnapToTicks(true);
             responsiveSlider.setLabelTable(sliderLabelMap);
             responsiveSlider.setPaintLabels(true);
@@ -347,71 +333,64 @@
         }
 
         private void setupListeners() {
-            applicationPreferenceModel.addEventListener(
-                evt -> {
-                    if( evt.getPropertyName().equals(ApplicationPreferenceModel.SHOW_SPLASH) ){
-                        boolean value = (Boolean) evt.getPropertyValue();
-                        showSplash.setSelected(value);
-                    }
-                });
+            applicationPreferenceModel.addEventListener(evt -> {
+                if (evt.getPropertyName().equals(ApplicationPreferenceModel.SHOW_SPLASH)) {
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    showSplash.setSelected(value);
+                }
+            });
 
-            applicationPreferenceModel.addEventListener(
-                evt -> {
-                    if( evt.getPropertyName().equals(ApplicationPreferenceModel.RESPONSIVENESS) ){
-                        int value = (Integer) evt.getPropertyValue();
-                        if (value >= 1000) {
-                            int newValue = (value - 750) / 1000;
-                            logger.debug("Adjusting old Responsiveness value from {} to {}", value, newValue);
-                            value = newValue;
-                        }
-
-                        responsiveSlider.setValue(value);
+            applicationPreferenceModel.addEventListener(evt -> {
+                if (evt.getPropertyName().equals(ApplicationPreferenceModel.RESPONSIVENESS)) {
+                    int value = (Integer) evt.getPropertyValue();
+                    if (value >= 1000) {
+                        int newValue = (value - 750) / 1000;
+                        logger.debug("Adjusting old Responsiveness value from {} to {}", value, newValue);
+                        value = newValue;
                     }
-                });
 
-            applicationPreferenceModel.addEventListener(
-                evt -> {
-                    if( evt.getPropertyName().equals(ApplicationPreferenceModel.TOOL_TIP_DISPLAY_MILLIS) ){
-                        toolTipDisplayMillis.setText(evt.getPropertyValue().toString());
-                    }
-                });
+                    responsiveSlider.setValue(value);
+                }
+            });
 
-            applicationPreferenceModel.addEventListener(
-                evt -> {
-                    if( evt.getPropertyName().equals(ApplicationPreferenceModel.CYCLIC_BUFFER_SIZE) ){
-                        cyclicBufferSize.setText(evt.getPropertyValue().toString());
-                    }
-                });
+            applicationPreferenceModel.addEventListener(evt -> {
+                if (evt.getPropertyName().equals(ApplicationPreferenceModel.TOOL_TIP_DISPLAY_MILLIS)) {
+                    toolTipDisplayMillis.setText(evt.getPropertyValue().toString());
+                }
+            });
 
-            applicationPreferenceModel.addEventListener(
-                evt -> {
-                    if( evt.getPropertyName().equals(ApplicationPreferenceModel.CONFIRM_EXIT) ){
-                        boolean value = (Boolean) evt.getPropertyValue();
-                        confirmExit.setSelected(value);
-                    }
-                });
+            applicationPreferenceModel.addEventListener(evt -> {
+                if (evt.getPropertyName().equals(ApplicationPreferenceModel.CYCLIC_BUFFER_SIZE)) {
+                    cyclicBufferSize.setText(evt.getPropertyValue().toString());
+                }
+            });
+
+            applicationPreferenceModel.addEventListener(evt -> {
+                if (evt.getPropertyName().equals(ApplicationPreferenceModel.CONFIRM_EXIT)) {
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    confirmExit.setSelected(value);
+                }
+            });
 
             showSplash.addActionListener(e -> applicationPreferenceModel.setShowSplash(showSplash.isSelected()));
-            responsiveSlider.getModel().addChangeListener(
-                e -> {
-                    if (responsiveSlider.getValueIsAdjusting()) {
-                        /**
-                         * We'll wait until it stops.
-                         */
-                    } else {
-                        int value = responsiveSlider.getValue();
+            responsiveSlider.getModel().addChangeListener(e -> {
+                if (responsiveSlider.getValueIsAdjusting()) {
+                    /**
+                     * We'll wait until it stops.
+                     */
+                } else {
+                    int value = responsiveSlider.getValue();
 
-                        if (value == 0) {
-                            value = 1;
-                        }
-
-                        logger.debug("Adjust responsiveness to {}", value);
-                        applicationPreferenceModel.setResponsiveness(value);
+                    if (value == 0) {
+                        value = 1;
                     }
-                });
 
-            confirmExit.addActionListener(
-                e -> applicationPreferenceModel.setConfirmExit(confirmExit.isSelected()));
+                    logger.debug("Adjust responsiveness to {}", value);
+                    applicationPreferenceModel.setResponsiveness(value);
+                }
+            });
+
+            confirmExit.addActionListener(e -> applicationPreferenceModel.setConfirmExit(confirmExit.isSelected()));
         }
 
         private void setupInitialValues() {
@@ -420,7 +399,6 @@
             sliderLabelMap.put(3, new JLabel(" Medium "));
             sliderLabelMap.put(4, new JLabel(" Slow "));
 
-
             confirmExit.setSelected(applicationPreferenceModel.isConfirmExit());
             showSplash.setSelected(applicationPreferenceModel.isShowSplash());
             toolTipDisplayMillis.setText(String.valueOf(applicationPreferenceModel.getToolTipDisplayMillis()));
diff --git a/src/main/java/org/apache/log4j/chainsaw/BasicPrefPanel.java b/src/main/java/org/apache/log4j/chainsaw/BasicPrefPanel.java
index fabc1d0..f62fba4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/BasicPrefPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/BasicPrefPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -18,7 +18,6 @@
 
 import javax.swing.*;
 
-
 /**
  * All of the Preferences panels used in this class extend from
  * this, it is used to provide standard L&amp;F required by all.
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppender.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppender.java
index 9d41f58..2b6b47e 100755
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawAppender.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawAppender.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -37,30 +37,30 @@
 
     @PluginFactory
     public static ChainsawAppender createAppender(@PluginAttribute("name") String name) {
-        System.out.println( "create the chainsaw appender" );
+        System.out.println("create the chainsaw appender");
 
         if (name == null) {
             LOGGER.error("No name provided for ChainsawAppender");
             return null;
         }
-        
+
         return new ChainsawAppender(name);
     }
 
     @Override
-    public void append(final LogEvent event){
+    public void append(final LogEvent event) {
         ChainsawLoggingEventBuilder builder = new ChainsawLoggingEventBuilder();
 
-        builder.setLevelFromString( event.getLevel().name() )
-                .setLogger( event.getLoggerName() )
-                .setMessage( event.getMessage().getFormattedMessage() )
-                .setThreadName( event.getThreadName() )
-                .setTimestamp( Instant.ofEpochMilli(event.getInstant().getEpochMillisecond()) );
+        builder.setLevelFromString(event.getLevel().name())
+                .setLogger(event.getLoggerName())
+                .setMessage(event.getMessage().getFormattedMessage())
+                .setThreadName(event.getThreadName())
+                .setTimestamp(Instant.ofEpochMilli(event.getInstant().getEpochMillisecond()));
 
         receiver.append(builder.create());
     }
 
-    public ChainsawReceiver getReceiver(){
+    public ChainsawReceiver getReceiver() {
         return receiver;
     }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
index 3ff83b7..2374f57 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawColumns.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
-import javax.swing.*;
 import java.awt.*;
 import java.util.ArrayList;
 import java.util.List;
-
+import javax.swing.*;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 
 /**
  * @author Paul Smith &lt;psmith@apache.org&gt;
@@ -38,7 +35,8 @@
         columnNames.add(ChainsawConstants.LOGGER_COL_NAME);
         columnNames.add(ChainsawConstants.MESSAGE_COL_NAME);
 
-        //NOTE:  ID must ALWAYS be last field because the model adds this value itself as an identifier to the end of the consructed vector
+        // NOTE:  ID must ALWAYS be last field because the model adds this value itself as an identifier to the end of
+        // the consructed vector
         columnNames.add(ChainsawConstants.ID_COL_NAME);
     }
 
@@ -52,11 +50,11 @@
     public static final Cursor CURSOR_FOCUS_ON;
 
     static {
-        CURSOR_FOCUS_ON = Toolkit.getDefaultToolkit().createCustomCursor(new ImageIcon(ChainsawIcons.WINDOW_ICON).getImage(), new Point(3, 3), "FocusOn");
+        CURSOR_FOCUS_ON = Toolkit.getDefaultToolkit()
+                .createCustomCursor(new ImageIcon(ChainsawIcons.WINDOW_ICON).getImage(), new Point(3, 3), "FocusOn");
     }
 
-    private ChainsawColumns() {
-    }
+    private ChainsawColumns() {}
 
     public static List<String> getColumnsNames() {
         return columnNames;
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawConstants.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawConstants.java
index 1af38f1..28ac900 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawConstants.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawConstants.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
 import java.awt.*;
@@ -27,8 +26,7 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public class ChainsawConstants {
-    private ChainsawConstants() {
-    }
+    private ChainsawConstants() {}
 
     public static final int MILLIS_DELTA_RENDERING_HEIGHT_MAX = 50;
     public static final float MILLIS_DELTA_RENDERING_FACTOR = .002F;
@@ -37,9 +35,9 @@
     public static final Color COLOR_DEFAULT_BACKGROUND = new Color(255, 255, 255);
     public static final Color COLOR_DEFAULT_FOREGROUND = Color.BLACK;
 
-    //top, bottom left and right border are all 2
+    // top, bottom left and right border are all 2
     public static final int TABLE_BORDER_WIDTH = 2;
-    //JTable defines its default height as 16, plus top & bottom borders
+    // JTable defines its default height as 16, plus top & bottom borders
     public static final int DEFAULT_ROW_HEIGHT = 16 + (TABLE_BORDER_WIDTH * 2);
     public static final Color FIND_LOGGER_BACKGROUND = new Color(213, 226, 235);
     public static final Color FIND_LOGGER_FOREGROUND = Color.BLACK;
@@ -52,16 +50,16 @@
     public static final Color COLOR_EVEN_ROW_BACKGROUND = COLOR_DEFAULT_BACKGROUND;
     public static final Color COLOR_EVEN_ROW_FOREGROUND = Color.BLACK;
 
-    public static final URL WELCOME_URL = ChainsawConstants.class.getClassLoader().getResource(
-        "org/apache/log4j/chainsaw/WelcomePanel.html");
+    public static final URL WELCOME_URL =
+            ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/WelcomePanel.html");
 
     public static final URL EXAMPLE_CONFIG_URL =
-        ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/log4j-receiver-sample.xml");
+            ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/log4j-receiver-sample.xml");
 
     public static final URL TUTORIAL_URL =
-        ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/help/tutorial.html");
+            ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/help/tutorial.html");
     public static final URL RELEASE_NOTES_URL =
-        ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/help/release-notes.html");
+            ChainsawConstants.class.getClassLoader().getResource("org/apache/log4j/chainsaw/help/release-notes.html");
 
     static final String MAIN_PANEL = "panel";
     static final String LOWER_PANEL = "lower";
@@ -70,7 +68,7 @@
     static final String FILTERS_EXTENSION = ".filters";
     static final String SETTINGS_EXTENSION = ".settings";
 
-    //COLUMN NAMES
+    // COLUMN NAMES
     public static final String LOGGER_COL_NAME = "LOGGER";
     public static final String LOG4J_MARKER_COL_NAME = "MARKER";
     public static final String TIMESTAMP_COL_NAME = "TIMESTAMP";
@@ -87,7 +85,7 @@
     public static final String MILLIS_DELTA_COL_NAME_LOWERCASE = "millisdelta";
     public static final String ID_COL_NAME = "ID";
 
-    //none is not a real column name, but is used by filters as a way to apply no filter for colors or display
+    // none is not a real column name, but is used by filters as a way to apply no filter for colors or display
     static final String NONE_COL_NAME = "None";
     static final String LOG4J_REMOTEHOST_KEY = "log4j.remoteSourceInfo";
     static final String UNKNOWN_TAB_NAME = "Unknown";
@@ -98,10 +96,8 @@
     static final String LEVEL_DISPLAY_ICONS = "icons";
     static final String LEVEL_DISPLAY_TEXT = "text";
 
-
     static final String DATETIME_FORMAT = "EEE MMM dd HH:mm:ss z yyyy";
 
     //  TODO come up with a better page not found url
     public static final URL URL_PAGE_NOT_FOUND = WELCOME_URL;
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index 455a1a9..4f4ec2e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,23 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.color.RuleColorizer;
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameListener;
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModel;
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModelSupport;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.Rule;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.swing.*;
-import javax.swing.event.EventListenerList;
-import javax.swing.table.AbstractTableModel;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
@@ -41,7 +26,19 @@
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
-
+import javax.swing.*;
+import javax.swing.event.EventListenerList;
+import javax.swing.table.AbstractTableModel;
+import org.apache.log4j.chainsaw.color.RuleColorizer;
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameListener;
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModel;
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModelSupport;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.Rule;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A CyclicBuffer implementation of the EventContainer.
@@ -57,14 +54,14 @@
  * @author Stephen Pain
  */
 public class ChainsawCyclicBufferTableModel extends AbstractTableModel
-    implements EventContainer, PropertyChangeListener {
+        implements EventContainer, PropertyChangeListener {
 
-    //cyclic field used internally in this class, but not exposed via the eventcontainer
+    // cyclic field used internally in this class, but not exposed via the eventcontainer
     private boolean cyclic = true;
     private final int cyclicBufferSize;
-    //original list of LoggingEventWrapper instances
+    // original list of LoggingEventWrapper instances
     private List<LoggingEventWrapper> unfilteredList;
-    //filtered list of LoggingEventWrapper instances
+    // filtered list of LoggingEventWrapper instances
     private List<LoggingEventWrapper> filteredList;
     private boolean currentSortAscending;
     private int currentSortColumn;
@@ -78,8 +75,8 @@
     private final LoggerNameModel loggerNameModelDelegate = new LoggerNameModelSupport();
     private final Object mutex = new Object();
 
-    //because we may be using a cyclic buffer, if an ID is not provided in the property,
-    //use and increment this row counter as the ID for each received row
+    // because we may be using a cyclic buffer, if an ID is not provided in the property,
+    // use and increment this row counter as the ID for each received row
     private int uniqueRow;
     private final Set uniquePropertyKeys = new HashSet();
     private Rule ruleMediator;
@@ -105,7 +102,7 @@
         if (evt.getSource() instanceof Rule) {
             if (evt.getSource() == ruleMediator && evt.getPropertyName().equals("findRule")) {
                 if (((RuleMediator) evt.getSource()).isFindRuleRequired()) {
-                    //only refilter if find rule is required
+                    // only refilter if find rule is required
                     reFilter();
                 }
             } else {
@@ -136,7 +133,7 @@
         final int previousSize;
         final int newSize;
         synchronized (mutex) {
-            //post refilter with newValue of TRUE (filtering is about to begin)
+            // post refilter with newValue of TRUE (filtering is about to begin)
             propertySupport.firePropertyChange("refilter", Boolean.FALSE, Boolean.TRUE);
             previousSize = filteredList.size();
             filteredList.clear();
@@ -169,26 +166,27 @@
         SwingHelper.invokeOnEDT(() -> {
             if (newSize > 0) {
                 if (previousSize == newSize) {
-                    //same - update all
+                    // same - update all
                     fireTableRowsUpdated(0, newSize - 1);
                 } else if (previousSize > newSize) {
-                    //less now..update and delete difference
+                    // less now..update and delete difference
                     fireTableRowsUpdated(0, newSize - 1);
-//swing bug exposed by variable height rows when calling fireTableRowsDeleted..use tabledatacchanged
+                    // swing bug exposed by variable height rows when calling fireTableRowsDeleted..use
+                    // tabledatacchanged
                     fireTableDataChanged();
                 } else if (previousSize < newSize) {
-                    //more now..update and insert difference
+                    // more now..update and insert difference
                     if (previousSize > 0) {
                         fireTableRowsUpdated(0, previousSize - 1);
                     }
                     fireTableRowsInserted(Math.max(0, previousSize), newSize - 1);
                 }
             } else {
-                //no rows to show
+                // no rows to show
                 fireTableDataChanged();
             }
             notifyCountListeners();
-//post refilter with newValue of FALSE (filtering is complete)
+            // post refilter with newValue of FALSE (filtering is complete)
             SwingHelper.invokeOnEDT(() -> propertySupport.firePropertyChange("refilter", Boolean.TRUE, Boolean.FALSE));
         });
     }
@@ -205,7 +203,7 @@
                     return i;
                 }
             }
-            //if there was no match, start at row zero and go to startLocation
+            // if there was no match, start at row zero and go to startLocation
             for (int i = 0; i < startLocation; i++) {
                 if (rule.evaluate((filteredListCopy.get(i)).getLoggingEvent(), null)) {
                     return i;
@@ -217,7 +215,7 @@
                     return i;
                 }
             }
-            //if there was no match, start at row list.size() - 1 and go to startLocation
+            // if there was no match, start at row list.size() - 1 and go to startLocation
             for (int i = filteredListCopy.size() - 1; i > startLocation; i--) {
                 if (rule.evaluate((filteredListCopy.get(i)).getLoggingEvent(), null)) {
                     return i;
@@ -279,8 +277,7 @@
             unfilteredListSize = unfilteredList.size();
         }
         for (EventCountListener listener : listeners) {
-            listener.eventCountChanged(
-                filteredListSize, unfilteredListSize);
+            listener.eventCountChanged(filteredListSize, unfilteredListSize);
         }
     }
 
@@ -316,7 +313,7 @@
             filteredListSize = filteredList.size();
             sort = (sortEnabled && filteredListSize > 0);
             if (sort) {
-                //reset display (used to ensure row height is updated)
+                // reset display (used to ensure row height is updated)
                 LoggingEventWrapper lastEvent = null;
                 for (LoggingEventWrapper e : filteredList) {
                     e.setDisplayed(true);
@@ -324,8 +321,7 @@
                     lastEvent = e;
                 }
                 filteredList.sort(new ColumnComparator(
-                    getColumnName(currentSortColumn), currentSortColumn,
-                    currentSortAscending));
+                        getColumnName(currentSortColumn), currentSortColumn, currentSortAscending));
             }
         }
         if (sort) {
@@ -390,7 +386,7 @@
 
     @Override
     public void removePropertyFromEvents(String propName) {
-        //first remove the event from any displayed events, so we can fire row updated event
+        // first remove the event from any displayed events, so we can fire row updated event
         List<LoggingEventWrapper> filteredListCopy;
         List<LoggingEventWrapper> unfilteredListCopy;
         synchronized (mutex) {
@@ -404,7 +400,7 @@
                 fireRowUpdated(i, false);
             }
         }
-        //now remove the event from all events
+        // now remove the event from all events
         for (LoggingEventWrapper loggingEventWrapper : unfilteredListCopy) {
             loggingEventWrapper.removeProperty(propName);
         }
@@ -419,7 +415,7 @@
         }
         for (LoggingEventWrapper loggingEventWrapper : unfilteredListCopy) {
             loggingEventWrapper.evaluateSearchRule(findRule);
-            //return the count of visible search matches
+            // return the count of visible search matches
             if (loggingEventWrapper.isSearchMatch() && loggingEventWrapper.isDisplayed()) {
                 count++;
             }
@@ -436,32 +432,32 @@
         if (searchForward) {
             for (int i = startLocation; i < filteredListCopy.size(); i++) {
                 LoggingEventWrapper event = filteredListCopy.get(i);
-                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
-                    !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                        || !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
                     return i;
                 }
             }
-            //searching forward, no colorized event was found - now start at row zero and go to startLocation
+            // searching forward, no colorized event was found - now start at row zero and go to startLocation
             for (int i = 0; i < startLocation; i++) {
                 LoggingEventWrapper event = filteredListCopy.get(i);
-                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
-                    !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                        || !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
                     return i;
                 }
             }
         } else {
             for (int i = startLocation; i > -1; i--) {
                 LoggingEventWrapper event = filteredListCopy.get(i);
-                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
-                    !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                        || !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
                     return i;
                 }
             }
-            //searching backward, no colorized event was found - now start at list.size() - 1 and go to startLocation
+            // searching backward, no colorized event was found - now start at list.size() - 1 and go to startLocation
             for (int i = filteredListCopy.size() - 1; i > startLocation; i--) {
                 LoggingEventWrapper event = filteredListCopy.get(i);
-                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
-                    !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
+                if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                        || !event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
                     return i;
                 }
             }
@@ -535,11 +531,11 @@
             case ChainsawColumns.INDEX_LOG4J_MARKER_COL_NAME:
                 return event.getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
 
-/*
-            case ChainsawColumns.INDEX_MILLIS_DELTA_COL_NAME:
-                return event.getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+                /*
+                            case ChainsawColumns.INDEX_MILLIS_DELTA_COL_NAME:
+                                return event.getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
 
-*/
+                */
             case ChainsawColumns.INDEX_LOGGER_COL_NAME:
                 return event.m_logger;
 
@@ -549,47 +545,48 @@
             case ChainsawColumns.INDEX_MESSAGE_COL_NAME:
                 return event.m_message;
 
-/*
-            case ChainsawColumns.INDEX_NDC_COL_NAME:
-                return event.m_ndc;
+                /*
+                            case ChainsawColumns.INDEX_NDC_COL_NAME:
+                                return event.m_ndc;
 
-            case ChainsawColumns.INDEX_THREAD_COL_NAME:
-                return event.m_threadName;
+                            case ChainsawColumns.INDEX_THREAD_COL_NAME:
+                                return event.m_threadName;
 
-            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
-                return "IMPLEMENT ME";
+                            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
+                                return "IMPLEMENT ME";
 
-            case ChainsawColumns.INDEX_CLASS_COL_NAME:
-                return info == null ? "" : info.className;
+                            case ChainsawColumns.INDEX_CLASS_COL_NAME:
+                                return info == null ? "" : info.className;
 
-            case ChainsawColumns.INDEX_FILE_COL_NAME:
-                return info == null ? "" : info.fileName;
+                            case ChainsawColumns.INDEX_FILE_COL_NAME:
+                                return info == null ? "" : info.fileName;
 
-            case ChainsawColumns.INDEX_LINE_COL_NAME:
-                return info == null ? -1 : info.lineNumber;
+                            case ChainsawColumns.INDEX_LINE_COL_NAME:
+                                return info == null ? -1 : info.lineNumber;
 
-            case ChainsawColumns.INDEX_METHOD_COL_NAME:
-                return info == null ? "" : info.methodName;
-*/
+                            case ChainsawColumns.INDEX_METHOD_COL_NAME:
+                                return info == null ? "" : info.methodName;
+                */
 
             default:
 
-//                if (columnIndex < columnNames.size()) {
-//                    //case may not match..try case sensitive and fall back to case-insensitive
-//                    String result = event.getProperty(columnNames.get(columnIndex).toString());
-//                    if (result == null) {
-//                        String lowerColName = columnNames.get(columnIndex).toString().toLowerCase(Locale.ENGLISH);
-//                        Set<String> entrySet = event.entrySet();
-//                        for (String entry : entrySet) {
-//                            if (entry.equalsIgnoreCase(lowerColName)) {
-//                                result = thisEntry.getValue().toString();
-//                            }
-//                        }
-//                    }
-//                    if (result != null) {
-//                        return result;
-//                    }
-//                }
+                //                if (columnIndex < columnNames.size()) {
+                //                    //case may not match..try case sensitive and fall back to case-insensitive
+                //                    String result = event.getProperty(columnNames.get(columnIndex).toString());
+                //                    if (result == null) {
+                //                        String lowerColName =
+                // columnNames.get(columnIndex).toString().toLowerCase(Locale.ENGLISH);
+                //                        Set<String> entrySet = event.entrySet();
+                //                        for (String entry : entrySet) {
+                //                            if (entry.equalsIgnoreCase(lowerColName)) {
+                //                                result = thisEntry.getValue().toString();
+                //                            }
+                //                        }
+                //                    }
+                //                    if (result != null) {
+                //                        return result;
+                //                    }
+                //                }
         }
         return "";
     }
@@ -598,13 +595,15 @@
     public boolean isAddRow(LoggingEventWrapper loggingEventWrapper) {
         Object id = loggingEventWrapper.getLoggingEvent().getProperty(Constants.LOG4J_ID_KEY);
 
-        //only set the property if it doesn't already exist
+        // only set the property if it doesn't already exist
         if (id == null) {
             id = ++uniqueRow;
             loggingEventWrapper.setProperty(Constants.LOG4J_ID_KEY, id.toString());
         }
 
-        loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+        loggingEventWrapper.updateColorRuleColors(
+                colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()),
+                colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
         Rule findRule = colorizer.getFindRule();
         if (findRule != null) {
             loggingEventWrapper.evaluateSearchRule(colorizer.getFindRule());
@@ -646,11 +645,13 @@
         return rowAdded;
     }
 
-    private void updateEventMillisDelta(LoggingEventWrapper loggingEventWrapper, LoggingEventWrapper lastLoggingEventWrapper) {
+    private void updateEventMillisDelta(
+            LoggingEventWrapper loggingEventWrapper, LoggingEventWrapper lastLoggingEventWrapper) {
         if (lastLoggingEventWrapper != null) {
-            loggingEventWrapper.setPreviousDisplayedEventTimestamp(lastLoggingEventWrapper.getLoggingEvent().m_timestamp);
+            loggingEventWrapper.setPreviousDisplayedEventTimestamp(
+                    lastLoggingEventWrapper.getLoggingEvent().m_timestamp);
         } else {
-            //delta to same event = 0
+            // delta to same event = 0
             loggingEventWrapper.setPreviousDisplayedEventTimestamp(loggingEventWrapper.getLoggingEvent().m_timestamp);
         }
     }
@@ -669,13 +670,15 @@
             for (Object o : loggingEventWrapper.getPropertyKeySet()) {
                 String key = o.toString().toUpperCase();
 
-                //add all keys except the 'log4jid' key (columnNames is all-caps)
+                // add all keys except the 'log4jid' key (columnNames is all-caps)
                 if (!columnNames.contains(key) && !(Constants.LOG4J_ID_KEY.equalsIgnoreCase(key))) {
                     columnNames.add(key);
-                    logger.debug("Adding col '{}', columnNames={}" ,key, columnNames);
-                    fireNewKeyColumnAdded(
-                        new NewKeyEvent(
-                            this, columnNames.indexOf(key), key, loggingEventWrapper.getLoggingEvent().getProperty(key)));
+                    logger.debug("Adding col '{}', columnNames={}", key, columnNames);
+                    fireNewKeyColumnAdded(new NewKeyEvent(
+                            this,
+                            columnNames.indexOf(key),
+                            key,
+                            loggingEventWrapper.getLoggingEvent().getProperty(key)));
                 }
             }
         }
@@ -686,12 +689,12 @@
         SwingHelper.invokeOnEDT(() -> {
             if (cyclic) {
                 if (!reachedCapacity) {
-//if we didn't loop and it's the 1st time, insert
+                    // if we didn't loop and it's the 1st time, insert
                     if ((begin + count) < cyclicBufferSize) {
                         fireTableRowsInserted(begin, end);
                     } else {
-//we did loop - insert and then update rows
-//rows are zero-indexed, subtract 1 from cyclicbuffersize for the event notification
+                        // we did loop - insert and then update rows
+                        // rows are zero-indexed, subtract 1 from cyclicbuffersize for the event notification
                         fireTableRowsInserted(begin, cyclicBufferSize - 1);
                         fireTableRowsUpdated(0, cyclicBufferSize - 1);
                         reachedCapacity = true;
@@ -709,7 +712,9 @@
     public void fireRowUpdated(int row, boolean checkForNewColumns) {
         LoggingEventWrapper loggingEventWrapper = getRow(row);
         if (loggingEventWrapper != null) {
-            loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+            loggingEventWrapper.updateColorRuleColors(
+                    colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()),
+                    colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
             Rule findRule = colorizer.getFindRule();
             if (findRule != null) {
                 loggingEventWrapper.evaluateSearchRule(colorizer.getFindRule());
@@ -717,15 +722,14 @@
 
             fireTableRowsUpdated(row, row);
             if (checkForNewColumns) {
-                //row may have had a column added..if so, make sure a column is added
+                // row may have had a column added..if so, make sure a column is added
                 checkForNewColumn(loggingEventWrapper);
             }
         }
     }
 
     private void fireNewKeyColumnAdded(NewKeyEvent e) {
-        NewKeyListener[] listeners =
-            eventListenerList.getListeners(NewKeyListener.class);
+        NewKeyListener[] listeners = eventListenerList.getListeners(NewKeyListener.class);
 
         for (NewKeyListener listener : listeners) {
             listener.newKeyAdded(e);
@@ -763,7 +767,6 @@
         }
 
         return columnIndex < columnNames.size() && super.isCellEditable(rowIndex, columnIndex);
-
     }
 
     /* (non-Javadoc)
@@ -792,8 +795,7 @@
      * @see org.apache.log4j.chainsaw.EventContainer#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
      */
     @Override
-    public void addPropertyChangeListener(
-        String propertyName, PropertyChangeListener l) {
+    public void addPropertyChangeListener(String propertyName, PropertyChangeListener l) {
         propertySupport.addPropertyChangeListener(propertyName, l);
     }
 
@@ -813,58 +815,56 @@
          */
         @Override
         public void propertyChange(PropertyChangeEvent arg0) {
-            Thread thread =
-                new Thread(
-                    () -> {
-                        ProgressMonitor monitor = null;
+            Thread thread = new Thread(() -> {
+                ProgressMonitor monitor = null;
 
-                        int index = 0;
+                int index = 0;
 
-                        try {
-                            synchronized (mutex) {
-                                monitor =
-                                    new ProgressMonitor(
-                                        null, "Switching models...",
-                                        "Transferring between data structures, please wait...", 0,
-                                        unfilteredList.size() + 1);
-                                monitor.setMillisToDecideToPopup(250);
-                                monitor.setMillisToPopup(100);
-                                logger.debug(
-                                    "Changing Model, isCyclic is now {}", cyclic);
+                try {
+                    synchronized (mutex) {
+                        monitor = new ProgressMonitor(
+                                null,
+                                "Switching models...",
+                                "Transferring between data structures, please wait...",
+                                0,
+                                unfilteredList.size() + 1);
+                        monitor.setMillisToDecideToPopup(250);
+                        monitor.setMillisToPopup(100);
+                        logger.debug("Changing Model, isCyclic is now {}", cyclic);
 
-                                List newUnfilteredList;
-                                List newFilteredList;
+                        List newUnfilteredList;
+                        List newFilteredList;
 
-                                if (cyclic) {
-                                    newUnfilteredList = new CyclicBufferList(cyclicBufferSize);
-                                    newFilteredList = new CyclicBufferList(cyclicBufferSize);
-                                } else {
-                                    newUnfilteredList = new ArrayList(cyclicBufferSize);
-                                    newFilteredList = new ArrayList(cyclicBufferSize);
-                                }
-
-                                for (Object anUnfilteredList : unfilteredList) {
-                                    LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) anUnfilteredList;
-                                    newUnfilteredList.add(loggingEventWrapper);
-                                    monitor.setProgress(index++);
-                                }
-
-                                unfilteredList = newUnfilteredList;
-                                filteredList = newFilteredList;
-                            }
-
-                            monitor.setNote("Refiltering...");
-                            reFilter();
-
-                            monitor.setProgress(index++);
-                        } finally {
-                            if (monitor != null) {
-                                monitor.close();
-                            }
+                        if (cyclic) {
+                            newUnfilteredList = new CyclicBufferList(cyclicBufferSize);
+                            newFilteredList = new CyclicBufferList(cyclicBufferSize);
+                        } else {
+                            newUnfilteredList = new ArrayList(cyclicBufferSize);
+                            newFilteredList = new ArrayList(cyclicBufferSize);
                         }
 
-                        logger.debug("Model Change completed");
-                    });
+                        for (Object anUnfilteredList : unfilteredList) {
+                            LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) anUnfilteredList;
+                            newUnfilteredList.add(loggingEventWrapper);
+                            monitor.setProgress(index++);
+                        }
+
+                        unfilteredList = newUnfilteredList;
+                        filteredList = newFilteredList;
+                    }
+
+                    monitor.setNote("Refiltering...");
+                    reFilter();
+
+                    monitor.setProgress(index++);
+                } finally {
+                    if (monitor != null) {
+                        monitor.close();
+                    }
+                }
+
+                logger.debug("Model Change completed");
+            });
             thread.setPriority(Thread.MIN_PRIORITY + 1);
             thread.start();
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatchListener.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatchListener.java
index 522ca64..dcd5d7f 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatchListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawEventBatchListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
index 61a6d7f..153d639 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawStarter.java
@@ -1,15 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.log4j.chainsaw;
 
-import org.apache.commons.configuration2.AbstractConfiguration;
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.log4j.chainsaw.osx.OSXIntegration;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.chainsaw.components.splash.SplashViewer;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.LoggerContext;
-
-import javax.swing.*;
 import java.awt.*;
 import java.security.AllPermission;
 import java.security.CodeSource;
@@ -17,6 +23,15 @@
 import java.security.Permissions;
 import java.security.Policy;
 import java.util.Locale;
+import javax.swing.*;
+import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.log4j.chainsaw.components.splash.SplashViewer;
+import org.apache.log4j.chainsaw.logui.LogUI;
+import org.apache.log4j.chainsaw.osx.OSXIntegration;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
 
 public class ChainsawStarter {
     private static final Logger logger = LogManager.getLogger(ChainsawStarter.class);
@@ -38,26 +53,26 @@
             if (lookAndFeelClassName == null || lookAndFeelClassName.trim().isEmpty()) {
                 String osName = System.getProperty("os.name");
                 if (osName.toLowerCase(Locale.ENGLISH).startsWith("mac")) {
-                    //no need to assign look and feel
+                    // no need to assign look and feel
                 } else if (osName.toLowerCase(Locale.ENGLISH).startsWith("windows")) {
                     lookAndFeelClassName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
-                    configuration.setProperty("lookAndFeelClassName",lookAndFeelClassName);
+                    configuration.setProperty("lookAndFeelClassName", lookAndFeelClassName);
                 } else if (osName.toLowerCase(Locale.ENGLISH).startsWith("linux")) {
                     lookAndFeelClassName = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
-                    configuration.setProperty("lookAndFeelClassName",lookAndFeelClassName);
+                    configuration.setProperty("lookAndFeelClassName", lookAndFeelClassName);
                 }
             }
 
             if (lookAndFeelClassName != null && !(lookAndFeelClassName.trim().isEmpty())) {
-                try{
+                try {
                     UIManager.setLookAndFeel(lookAndFeelClassName);
-                } catch (Exception ex){
+                } catch (Exception ex) {
                     logger.error(ex);
                 }
-            }else{
-                try{
+            } else {
+                try {
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-                } catch (Exception ex){
+                } catch (Exception ex) {
                     logger.error(ex);
                 }
             }
@@ -104,7 +119,7 @@
          * the Plugins directory can find them (this is particularly
          * important for the Web start version of Chainsaw
          */
-        //configuration initialized here
+        // configuration initialized here
 
         Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
             logger.error("Uncaught exception in thread {}", t.getName(), e);
@@ -117,6 +132,5 @@
         EventQueue.invokeLater(logUI::buildChainsawLogPanel);
 
         logger.info("SecurityManager is now: {}", System.getSecurityManager());
-
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java
index d872600..05b2a28 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawStatusBar.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,19 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.commons.configuration2.AbstractConfiguration;
-import org.apache.commons.configuration2.event.ConfigurationEvent;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.logui.LogUI;
-
-import javax.swing.*;
-import javax.swing.border.Border;
 import java.awt.*;
 import java.text.NumberFormat;
-
+import javax.swing.*;
+import javax.swing.border.Border;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.logui.LogUI;
 
 /**
  * A general purpose status bar for all Frame windows
@@ -46,24 +41,22 @@
     private volatile long lastReceivedConnection = System.currentTimeMillis();
     private final Thread connectionThread;
     private final Icon pausedIcon = new ImageIcon(ChainsawIcons.PAUSE);
-    private final Icon netConnectIcon =
-        new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT);
+    private final Icon netConnectIcon = new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT);
     private final NumberFormat nf = NumberFormat.getNumberInstance();
     private final Border statusBarComponentBorder =
-        BorderFactory.createLineBorder(statusMsg.getBackground().darker());
+            BorderFactory.createLineBorder(statusMsg.getBackground().darker());
     private final LogUI logUI;
 
     public ChainsawStatusBar(LogUI logUI, ApplicationPreferenceModel applicationPreferenceModel) {
         setLayout(new GridBagLayout());
         this.logUI = logUI;
 
-        applicationPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(ApplicationPreferenceModel.STATUS_BAR_VISIBLE)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    setVisible(value);
-                }
-            });
+        applicationPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(ApplicationPreferenceModel.STATUS_BAR_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                setVisible(value);
+            }
+        });
 
         nf.setMaximumFractionDigits(0);
         nf.setMinimumFractionDigits(0);
@@ -75,59 +68,52 @@
         statusMsgPanel.setBorder(statusBarComponentBorder);
 
         pausedLabel.setBorder(statusBarComponentBorder);
-        pausedLabel.setMinimumSize(
-            new Dimension(pausedIcon.getIconWidth(), pausedIcon.getIconHeight()));
+        pausedLabel.setMinimumSize(new Dimension(pausedIcon.getIconWidth(), pausedIcon.getIconHeight()));
 
-        pausedLabel.setToolTipText(
-            "Shows whether the current Log panel is paused or not");
+        pausedLabel.setToolTipText("Shows whether the current Log panel is paused or not");
 
         receivedEventLabel.setBorder(statusBarComponentBorder);
         receivedEventLabel.setToolTipText(
-            "Indicates whether Chainsaw is receiving events, and how fast it is processing them");
-        receivedEventLabel.setMinimumSize(
-            new Dimension(
-                receivedEventLabel.getFontMetrics(receivedEventLabel.getFont())
-                    .stringWidth("99999999999.9/s") + 5,
+                "Indicates whether Chainsaw is receiving events, and how fast it is processing them");
+        receivedEventLabel.setMinimumSize(new Dimension(
+                receivedEventLabel.getFontMetrics(receivedEventLabel.getFont()).stringWidth("99999999999.9/s") + 5,
                 (int) receivedEventLabel.getPreferredSize().getHeight()));
 
         eventCountLabel.setBorder(statusBarComponentBorder);
         eventCountLabel.setToolTipText("<# viewable events>:<# total events>");
-        eventCountLabel.setMinimumSize(
-            new Dimension(
-                eventCountLabel.getFontMetrics(eventCountLabel.getFont())
-                    .stringWidth("Filtered/Total: 999999999999:999999999999") + 5,
+        eventCountLabel.setMinimumSize(new Dimension(
+                eventCountLabel
+                                .getFontMetrics(eventCountLabel.getFont())
+                                .stringWidth("Filtered/Total: 999999999999:999999999999")
+                        + 5,
                 (int) eventCountLabel.getPreferredSize().getHeight()));
 
         searchMatchLabel.setBorder(statusBarComponentBorder);
         searchMatchLabel.setToolTipText("<# viewable events>:<# total events>");
-        searchMatchLabel.setMinimumSize(
-            new Dimension(
-                searchMatchLabel.getFontMetrics(eventCountLabel.getFont()).stringWidth("Find matches: 999999999999") + 5,
+        searchMatchLabel.setMinimumSize(new Dimension(
+                searchMatchLabel.getFontMetrics(eventCountLabel.getFont()).stringWidth("Find matches: 999999999999")
+                        + 5,
                 (int) searchMatchLabel.getPreferredSize().getHeight()));
 
         receivedConnectionlabel.setBorder(statusBarComponentBorder);
-        receivedConnectionlabel.setToolTipText(
-            "Indicates whether Chainsaw has received a remote connection");
-        receivedConnectionlabel.setMinimumSize(
-            new Dimension(
-                netConnectIcon.getIconWidth() + 4,
-                (int) receivedConnectionlabel.getPreferredSize().getHeight()));
+        receivedConnectionlabel.setToolTipText("Indicates whether Chainsaw has received a remote connection");
+        receivedConnectionlabel.setMinimumSize(new Dimension(netConnectIcon.getIconWidth() + 4, (int)
+                receivedConnectionlabel.getPreferredSize().getHeight()));
 
         lineSelectionLabel.setBorder(statusBarComponentBorder);
-        lineSelectionLabel.setMinimumSize(
-            new Dimension(
-                lineSelectionLabel.getFontMetrics(lineSelectionLabel.getFont())
-                    .stringWidth("999999999"),
+        lineSelectionLabel.setMinimumSize(new Dimension(
+                lineSelectionLabel.getFontMetrics(lineSelectionLabel.getFont()).stringWidth("999999999"),
                 (int) lineSelectionLabel.getPreferredSize().getHeight()));
-        lineSelectionLabel.setToolTipText(
-            "The current line # selected");
+        lineSelectionLabel.setToolTipText("The current line # selected");
 
-        JComponent[] toFix =
-            new JComponent[]{
-                searchMatchLabel, eventCountLabel,
-                receivedConnectionlabel, lineSelectionLabel, receivedEventLabel,
-                pausedLabel
-            };
+        JComponent[] toFix = new JComponent[] {
+            searchMatchLabel,
+            eventCountLabel,
+            receivedConnectionlabel,
+            lineSelectionLabel,
+            receivedEventLabel,
+            pausedLabel
+        };
 
         for (JComponent aToFix : toFix) {
             aToFix.setPreferredSize(aToFix.getMinimumSize());
@@ -181,33 +167,28 @@
 
         add(pausedLabel, c);
 
-        connectionThread =
-            new Thread(
-                () -> {
-                    while (true) {
-                        try {
-                            Thread.sleep(DELAY_PERIOD);
-                        } catch (InterruptedException e) {
-                        }
+        connectionThread = new Thread(() -> {
+            while (true) {
+                try {
+                    Thread.sleep(DELAY_PERIOD);
+                } catch (InterruptedException e) {
+                }
 
-                        Icon icon = null;
+                Icon icon = null;
 
-                        if (
-                            (System.currentTimeMillis() - lastReceivedConnection) < DELAY_PERIOD) {
-                            icon = netConnectIcon;
-                        }
+                if ((System.currentTimeMillis() - lastReceivedConnection) < DELAY_PERIOD) {
+                    icon = netConnectIcon;
+                }
 
-                        final Icon theIcon = icon;
-                        SwingUtilities.invokeLater(
-                            () -> receivedConnectionlabel.setIcon(theIcon));
-                    }
-                });
+                final Icon theIcon = icon;
+                SwingUtilities.invokeLater(() -> receivedConnectionlabel.setIcon(theIcon));
+            }
+        });
         connectionThread.start();
     }
 
     void setDataRate(final double dataRate) {
-        SwingUtilities.invokeLater(
-            () -> receivedEventLabel.setText(nf.format(dataRate) + "/s"));
+        SwingUtilities.invokeLater(() -> receivedEventLabel.setText(nf.format(dataRate) + "/s"));
     }
 
     /**
@@ -232,25 +213,21 @@
      */
     void setPaused(final boolean isPaused, String tabName) {
         if (tabName.equals(logUI.getActiveTabName())) {
-            Runnable runnable =
-                () -> {
-                    pausedLabel.setIcon(isPaused ? pausedIcon : null);
-                    pausedLabel.setToolTipText(
-                        isPaused ? "This Log panel is currently paused"
-                            : "This Log panel is not paused");
-                };
+            Runnable runnable = () -> {
+                pausedLabel.setIcon(isPaused ? pausedIcon : null);
+                pausedLabel.setToolTipText(
+                        isPaused ? "This Log panel is currently paused" : "This Log panel is not paused");
+            };
             SwingUtilities.invokeLater(runnable);
         }
     }
 
-    public void setSelectedLine(
-        final int selectedLine, final int lineCount, final int total, String tabName) {
+    public void setSelectedLine(final int selectedLine, final int lineCount, final int total, String tabName) {
         if (tabName.equals(logUI.getActiveTabName())) {
-            SwingUtilities.invokeLater(
-                () -> {
-                    lineSelectionLabel.setText(selectedLine + "");
-                    eventCountLabel.setText("Filtered/Total: " + lineCount + ":" + total);
-                });
+            SwingUtilities.invokeLater(() -> {
+                lineSelectionLabel.setText(selectedLine + "");
+                eventCountLabel.setText("Filtered/Total: " + lineCount + ":" + total);
+            });
         }
     }
 
@@ -265,19 +242,16 @@
     }
 
     public void setNothingSelected() {
-        SwingUtilities.invokeLater(
-            () -> lineSelectionLabel.setText(""));
+        SwingUtilities.invokeLater(() -> lineSelectionLabel.setText(""));
     }
 
     void clear() {
         setMessage(DEFAULT_MSG);
         setNothingSelected();
-        SwingUtilities.invokeLater(
-            () -> receivedEventLabel.setText(""));
+        SwingUtilities.invokeLater(() -> receivedEventLabel.setText(""));
     }
 
     public void setMessage(final String msg) {
-        SwingUtilities.invokeLater(
-            () -> statusMsg.setText(" " + msg));
+        SwingUtilities.invokeLater(() -> statusMsg.setText(" " + msg));
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
index 9792426..545985e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawToolBarAndMenus.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,8 +16,13 @@
  */
 package org.apache.log4j.chainsaw;
 
-import org.apache.commons.configuration2.AbstractConfiguration;
-import org.apache.commons.configuration2.event.ConfigurationEvent;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import org.apache.log4j.chainsaw.components.elements.SmallButton;
 import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
@@ -28,14 +33,6 @@
 import org.apache.log4j.chainsaw.logui.LogUI;
 import org.apache.log4j.chainsaw.osx.OSXIntegration;
 
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-
 /**
  * Encapsulates the full Toolbar, and menus and all the actions that can be performed from it.
  *
@@ -117,131 +114,135 @@
         createMenuBar();
         createToolbar();
 
-        applicationPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(ApplicationPreferenceModel.TOOLBAR_VISIBLE)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    toolbar.setVisible(value);
-                }
-            });
+        applicationPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(ApplicationPreferenceModel.TOOLBAR_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                toolbar.setVisible(value);
+            }
+        });
         boolean showToolbar = applicationPreferenceModel.isToolbarVisible();
         toolbar.setVisible(showToolbar);
 
-        logPanelSpecificActions =
-            new Action[]{
-                pauseAction, findNextColorizedEventAction, findPreviousColorizedEventAction,
-                findNextMarkerAction, findPreviousMarkerAction,
-                toggleMarkerAction, clearAllMarkersAction, scrollToTopAction, clearAction,
-                fileMenu.getFileSaveAction(), toggleDetailPaneAction,
-                showPreferencesAction, showColorPanelAction, undockAction,
-                toggleLogTreeAction, toggleScrollToBottomAction, changeModelAction,
-            };
+        logPanelSpecificActions = new Action[] {
+            pauseAction,
+            findNextColorizedEventAction,
+            findPreviousColorizedEventAction,
+            findNextMarkerAction,
+            findPreviousMarkerAction,
+            toggleMarkerAction,
+            clearAllMarkersAction,
+            scrollToTopAction,
+            clearAction,
+            fileMenu.getFileSaveAction(),
+            toggleDetailPaneAction,
+            showPreferencesAction,
+            showColorPanelAction,
+            undockAction,
+            toggleLogTreeAction,
+            toggleScrollToBottomAction,
+            changeModelAction,
+        };
 
-            applicationPreferenceModel.addEventListener(
-            evt -> {
-                if( evt.getPropertyName().equals(ApplicationPreferenceModel.STATUS_BAR_VISIBLE) ){
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    toggleStatusBarCheck.setSelected(value);
-                }
-            });
+        applicationPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(ApplicationPreferenceModel.STATUS_BAR_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                toggleStatusBarCheck.setSelected(value);
+            }
+        });
 
-        applicationPreferenceModel.addEventListener(
-            evt -> {
-                if( evt.getPropertyName().equals(ApplicationPreferenceModel.RECEIVERS_VISIBLE) ){
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    showReceiversButton.setSelected(value);
-                    toggleShowReceiversCheck.setSelected(value);
-                }
-            });
+        applicationPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(ApplicationPreferenceModel.RECEIVERS_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                showReceiversButton.setSelected(value);
+                toggleShowReceiversCheck.setSelected(value);
+            }
+        });
     }
 
     private Action createChangeModelAction() {
-        Action action =
-            new AbstractAction("Use Cyclic", new ImageIcon(ChainsawIcons.REFRESH)) {
-                public void actionPerformed(ActionEvent arg0) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
-                    logPanel.toggleCyclic();
-                    scanState();
-                }
-            };
+        Action action = new AbstractAction("Use Cyclic", new ImageIcon(ChainsawIcons.REFRESH)) {
+            public void actionPerformed(ActionEvent arg0) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
+                logPanel.toggleCyclic();
+                scanState();
+            }
+        };
 
-        action.putValue(
-            Action.SHORT_DESCRIPTION, "Changes between Cyclic and Unlimited mode.");
+        action.putValue(Action.SHORT_DESCRIPTION, "Changes between Cyclic and Unlimited mode.");
 
         return action;
     }
 
     private Action createToggleLogTreeAction() {
-        Action action =
-            new AbstractAction("Toggle the Logger Tree Pane") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().toggleLogTreeVisible();
-                    }
+        Action action = new AbstractAction("Toggle the Logger Tree Pane") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().toggleLogTreeVisible();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Toggles the Logger Tree Pane");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_T);
         action.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
-        action.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
         return action;
     }
 
     private Action createScrollToBottomAction() {
-        Action action =
-            new AbstractAction("Toggle Scroll to Bottom") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().toggleScrollToBottom();
-                    }
+        Action action = new AbstractAction("Toggle Scroll to Bottom") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().toggleScrollToBottom();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Toggles Scroll to Bottom");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_B);
         action.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
-        action.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.SCROLL_TO_BOTTOM));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.SCROLL_TO_BOTTOM));
 
         return action;
     }
 
     private Action createScrollToTopAction() {
-        Action action =
-            new AbstractAction("Scroll to top") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().scrollToTop();
-                    }
+        Action action = new AbstractAction("Scroll to top") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().scrollToTop();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Scroll to top");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_T);
-        action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
 
         return action;
     }
 
     private Action createFindNextMarkerAction() {
-        Action action =
-            new AbstractAction("Find next marker") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().findNextMarker();
-                    }
+        Action action = new AbstractAction("Find next marker") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().findNextMarker();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Find the next marker from the current location");
         action.putValue("enabled", Boolean.TRUE);
@@ -252,14 +253,13 @@
     }
 
     private Action createFindPreviousMarkerAction() {
-        Action action =
-            new AbstractAction("Find previous marker") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().findPreviousMarker();
-                    }
+        Action action = new AbstractAction("Find previous marker") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().findPreviousMarker();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Find the previous marker from the current location");
         action.putValue("enabled", Boolean.TRUE);
@@ -270,39 +270,41 @@
     }
 
     private Action createToggleMarkerAction() {
-        Action action =
-            new AbstractAction("Toggle marker") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().toggleMarker();
-                    }
+        Action action = new AbstractAction("Toggle marker") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().toggleMarker();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Toggle marker for selected row");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_T);
-        action.putValue(Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
 
         return action;
     }
 
     private Action createClearAllMarkersAction() {
-        Action action =
-            new AbstractAction("Clear all markers") {
-                public void actionPerformed(ActionEvent e) {
-                    if (logui.getCurrentLogPanel() != null) {
-                        logui.getCurrentLogPanel().clearAllMarkers();
-                    }
+        Action action = new AbstractAction("Clear all markers") {
+            public void actionPerformed(ActionEvent e) {
+                if (logui.getCurrentLogPanel() != null) {
+                    logui.getCurrentLogPanel().clearAllMarkers();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.SHORT_DESCRIPTION, "Removes all markers");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_R);
-        action.putValue(Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK));
+        action.putValue(
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK));
 
         return action;
     }
@@ -319,28 +321,28 @@
         return menuBar;
     }
 
-    public  JToolBar getToolbar() {
+    public JToolBar getToolbar() {
         return toolbar;
     }
 
     private Action createClearAction() {
-        final Action action =
-            new AbstractAction("Clear") {
-                public void actionPerformed(ActionEvent e) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        final Action action = new AbstractAction("Clear") {
+            public void actionPerformed(ActionEvent e) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel == null) {
-                        return;
-                    }
-
-                    logPanel.clearEvents();
+                if (logPanel == null) {
+                    return;
                 }
-            };
+
+                logPanel.clearEvents();
+            }
+        };
 
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_C);
         action.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_BACK_SPACE, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
         action.putValue(Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
         action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
 
@@ -348,17 +350,16 @@
     }
 
     private Action toggleWelcomeVisibleAction() {
-        final Action action =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    toggleWelcomeVisibleAction.putValue(Action.NAME, "Welcome tab");
-                    if (menuShowWelcome.isSelected()) {
-                        logui.addWelcomePanel();
-                    } else {
-                        logui.removeWelcomePanel();
-                    }
+        final Action action = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                toggleWelcomeVisibleAction.putValue(Action.NAME, "Welcome tab");
+                if (menuShowWelcome.isSelected()) {
+                    logui.addWelcomePanel();
+                } else {
+                    logui.removeWelcomePanel();
                 }
-            };
+            }
+        };
 
         action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F1"));
         action.putValue(Action.SHORT_DESCRIPTION, "Toggles the Welcome tab");
@@ -370,8 +371,7 @@
 
     private void createMenuBar() {
         JMenuItem menuItemUseRightMouse =
-            new JMenuItem(
-                "Other options available via panel's right mouse button popup menu");
+                new JMenuItem("Other options available via panel's right mouse button popup menu");
         menuItemUseRightMouse.setEnabled(false);
 
         viewMenu.setMnemonic('V');
@@ -383,19 +383,20 @@
 
         JCheckBoxMenuItem pause = new JCheckBoxMenuItem(pauseAction);
         JMenuItem menuPrefs = new JMenuItem(showPreferencesAction);
-        menuPrefs.setText(showPreferencesAction.getValue(Action.SHORT_DESCRIPTION).toString());
+        menuPrefs.setText(
+                showPreferencesAction.getValue(Action.SHORT_DESCRIPTION).toString());
 
-        JMenuItem menuCustomExpressionPanel =new JMenuItem(customExpressionPanelAction);
-        menuCustomExpressionPanel.setText(customExpressionPanelAction.getValue(Action.SHORT_DESCRIPTION).toString());
+        JMenuItem menuCustomExpressionPanel = new JMenuItem(customExpressionPanelAction);
+        menuCustomExpressionPanel.setText(
+                customExpressionPanelAction.getValue(Action.SHORT_DESCRIPTION).toString());
 
         JMenuItem menuShowColor = new JMenuItem(showColorPanelAction);
         menuShowColor.setText(
-            showColorPanelAction.getValue(Action.SHORT_DESCRIPTION).toString());
+                showColorPanelAction.getValue(Action.SHORT_DESCRIPTION).toString());
 
         JMenuItem menuUndock = new JMenuItem(undockAction);
 
-        JMenuItem showAppPrefs =
-            new JMenuItem("Show Application-wide Preferences...");
+        JMenuItem showAppPrefs = new JMenuItem("Show Application-wide Preferences...");
 
         showAppPrefs.addActionListener(e -> logui.showApplicationPreferences());
 
@@ -411,13 +412,12 @@
 
         toggleScrollToBottomMenuItem.setAction(toggleScrollToBottomAction);
 
-        final Action toggleStatusBarAction =
-            new AbstractAction("Show Status bar") {
-                public void actionPerformed(ActionEvent arg0) {
-                    boolean isSelected = toggleStatusBarCheck.isSelected();
-                    applicationPreferenceModel.setStatusBarVisible(isSelected);
-                }
-            };
+        final Action toggleStatusBarAction = new AbstractAction("Show Status bar") {
+            public void actionPerformed(ActionEvent arg0) {
+                boolean isSelected = toggleStatusBarCheck.isSelected();
+                applicationPreferenceModel.setStatusBarVisible(isSelected);
+            }
+        };
 
         toggleStatusBarAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_B);
         toggleStatusBarCheck.setAction(toggleStatusBarAction);
@@ -470,15 +470,13 @@
         about.setMnemonic('A');
         about.addActionListener(e -> logui.showAboutBox());
 
-        Action startTutorial =
-            new AbstractAction("Tutorial...", new ImageIcon(ChainsawIcons.HELP)) {
-                public void actionPerformed(ActionEvent e) {
-                    logui.tutorialFrame.setupTutorial();
-                }
-            };
+        Action startTutorial = new AbstractAction("Tutorial...", new ImageIcon(ChainsawIcons.HELP)) {
+            public void actionPerformed(ActionEvent e) {
+                logui.tutorialFrame.setupTutorial();
+            }
+        };
 
-        startTutorial.putValue(
-            Action.SHORT_DESCRIPTION, "Starts the tutorial process");
+        startTutorial.putValue(Action.SHORT_DESCRIPTION, "Starts the tutorial process");
         helpMenu.add(startTutorial);
 
         JMenu receiverHelp = new JMenu("Receiver JavaDoc");
@@ -500,41 +498,37 @@
     }
 
     private Action createPauseAction() {
-        final Action action =
-            new AbstractAction("Pause") {
-                public void actionPerformed(ActionEvent evt) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        final Action action = new AbstractAction("Pause") {
+            public void actionPerformed(ActionEvent evt) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel == null) {
-                        return;
-                    }
-
-                    logPanel.setPaused(!logPanel.isPaused());
-                    scanState();
+                if (logPanel == null) {
+                    return;
                 }
-            };
+
+                logPanel.setPaused(!logPanel.isPaused());
+                scanState();
+            }
+        };
 
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_P);
         action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Causes incoming events for this tab to be discarded");
+        action.putValue(Action.SHORT_DESCRIPTION, "Causes incoming events for this tab to be discarded");
         action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
 
         return action;
     }
 
     private Action createShowPreferencesAction() {
-        Action showPreferences =
-            new AbstractAction("", ChainsawIcons.ICON_PREFERENCES) {
-                public void actionPerformed(ActionEvent arg0) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        Action showPreferences = new AbstractAction("", ChainsawIcons.ICON_PREFERENCES) {
+            public void actionPerformed(ActionEvent arg0) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel != null) {
-                        logPanel.showPreferences();
-                    }
+                if (logPanel != null) {
+                    logPanel.showPreferences();
                 }
-            };
+            }
+        };
 
         showPreferences.putValue(Action.SHORT_DESCRIPTION, "Tab Preferences...");
 
@@ -548,12 +542,11 @@
         dialog.setLocationRelativeTo(null);
         dialog.pack();
 
-        Action createExpressionPanel =
-            new AbstractAction("", ChainsawIcons.ICON_HELP) {
-                public void actionPerformed(ActionEvent arg0) {
-                    LogPanel.centerAndSetVisible(dialog);
-                }
-            };
+        Action createExpressionPanel = new AbstractAction("", ChainsawIcons.ICON_HELP) {
+            public void actionPerformed(ActionEvent arg0) {
+                LogPanel.centerAndSetVisible(dialog);
+            }
+        };
 
         createExpressionPanel.putValue(Action.SHORT_DESCRIPTION, "Create tab from expression...   ");
 
@@ -562,16 +555,15 @@
     }
 
     private Action createShowColorPanelAction() {
-        Action showColorPanel =
-            new AbstractAction("", ChainsawIcons.ICON_PREFERENCES) {
-                public void actionPerformed(ActionEvent arg0) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        Action showColorPanel = new AbstractAction("", ChainsawIcons.ICON_PREFERENCES) {
+            public void actionPerformed(ActionEvent arg0) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel != null) {
-                        logPanel.showColorPreferences();
-                    }
+                if (logPanel != null) {
+                    logPanel.showColorPreferences();
                 }
-            };
+            }
+        };
 
         showColorPanel.putValue(Action.SHORT_DESCRIPTION, "Color settings...");
 
@@ -580,46 +572,42 @@
     }
 
     private Action createShowReceiversAction() {
-        final Action action =
-            new AbstractAction("Show Receivers") {
-                public void actionPerformed(ActionEvent arg0) {
-                    // Since this action can be triggered from either a button
-                    // or a check box, get the current value and invert it.
-                    boolean currentValue = applicationPreferenceModel.isReceiversVisible();
-                    applicationPreferenceModel.setReceiversVisible(!currentValue);
-                }
-            };
+        final Action action = new AbstractAction("Show Receivers") {
+            public void actionPerformed(ActionEvent arg0) {
+                // Since this action can be triggered from either a button
+                // or a check box, get the current value and invert it.
+                boolean currentValue = applicationPreferenceModel.isReceiversVisible();
+                applicationPreferenceModel.setReceiversVisible(!currentValue);
+            }
+        };
 
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_E);
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Shows the currently configured Log4j Receivers");
+        action.putValue(Action.SHORT_DESCRIPTION, "Shows the currently configured Log4j Receivers");
         action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F6"));
-        action.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT));
+        action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT));
         toggleShowReceiversCheck.setAction(action);
 
         return action;
     }
 
     private Action createToggleDetailPaneAction() {
-        Action action =
-            new AbstractAction("Show Detail Pane") {
-                public void actionPerformed(ActionEvent evt) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        Action action = new AbstractAction("Show Detail Pane") {
+            public void actionPerformed(ActionEvent evt) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel == null) {
-                        return;
-                    }
-
-                    logPanel.toggleDetailVisible();
+                if (logPanel == null) {
+                    return;
                 }
-            };
+
+                logPanel.toggleDetailVisible();
+            }
+        };
 
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_D);
         action.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
         action.putValue(Action.SHORT_DESCRIPTION, "Hides/Shows the Detail Pane");
         action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.INFO));
 
@@ -630,13 +618,12 @@
         /**
          * -== Begin of Show/Hide toolbar action
          */
-        final Action action =
-            new AbstractAction("Show Toolbar") {
-                public void actionPerformed(ActionEvent e) {
-                    boolean isSelected = toggleShowToolbarCheck.isSelected();
-                    applicationPreferenceModel.setToolbarVisible(isSelected);
-                }
-            };
+        final Action action = new AbstractAction("Show Toolbar") {
+            public void actionPerformed(ActionEvent e) {
+                boolean isSelected = toggleShowToolbarCheck.isSelected();
+                applicationPreferenceModel.setToolbarVisible(isSelected);
+            }
+        };
 
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_T);
 
@@ -664,34 +651,41 @@
         pauseButton.setAction(pauseAction);
         pauseButton.setText("");
 
-        pauseButton.getActionMap().put(
-            pauseAction.getValue(Action.NAME), pauseAction);
+        pauseButton.getActionMap().put(pauseAction.getValue(Action.NAME), pauseAction);
 
         toggleCyclicButton.setAction(changeModelAction);
         toggleCyclicButton.setText(null);
 
         detailPaneButton.setAction(toggleDetailPaneAction);
         detailPaneButton.setText(null);
-        detailPaneButton.getActionMap().put(
-            toggleDetailPaneAction.getValue(Action.NAME), toggleDetailPaneAction);
-        detailPaneButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-            KeyStroke.getKeyStroke(KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-            toggleDetailPaneAction.getValue(Action.NAME));
+        detailPaneButton.getActionMap().put(toggleDetailPaneAction.getValue(Action.NAME), toggleDetailPaneAction);
+        detailPaneButton
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_D, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        toggleDetailPaneAction.getValue(Action.NAME));
 
         logTreePaneButton.setAction(toggleLogTreeAction);
-        logTreePaneButton.getActionMap().put(
-            toggleLogTreeAction.getValue(Action.NAME), toggleLogTreeAction);
-        logTreePaneButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-            KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-            toggleLogTreeAction.getValue(Action.NAME));
+        logTreePaneButton.getActionMap().put(toggleLogTreeAction.getValue(Action.NAME), toggleLogTreeAction);
+        logTreePaneButton
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        toggleLogTreeAction.getValue(Action.NAME));
         logTreePaneButton.setText(null);
 
         scrollToBottomButton.setAction(toggleScrollToBottomAction);
-        scrollToBottomButton.getActionMap().put(
-            toggleScrollToBottomAction.getValue(Action.NAME), toggleScrollToBottomAction);
-        scrollToBottomButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-            KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-            toggleScrollToBottomAction.getValue(Action.NAME));
+        scrollToBottomButton
+                .getActionMap()
+                .put(toggleScrollToBottomAction.getValue(Action.NAME), toggleScrollToBottomAction);
+        scrollToBottomButton
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        toggleScrollToBottomAction.getValue(Action.NAME));
         scrollToBottomButton.setText(null);
 
         SmallButton prefsButton = new SmallButton(showPreferencesAction);
@@ -723,20 +717,17 @@
     }
 
     private Action createUndockAction() {
-        Action action =
-            new AbstractAction("Undock", ChainsawIcons.ICON_UNDOCK) {
-                public void actionPerformed(ActionEvent arg0) {
-                    LogPanel logPanel = logui.getCurrentLogPanel();
+        Action action = new AbstractAction("Undock", ChainsawIcons.ICON_UNDOCK) {
+            public void actionPerformed(ActionEvent arg0) {
+                LogPanel logPanel = logui.getCurrentLogPanel();
 
-                    if (logPanel != null) {
-                        logPanel.undock();
-                    }
+                if (logPanel != null) {
+                    logPanel.undock();
                 }
-            };
+            }
+        };
 
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Undocks the current Log panel into its own window");
+        action.putValue(Action.SHORT_DESCRIPTION, "Undocks the current Log panel into its own window");
 
         //	TODO think of some mnemonics and HotKeys for this action
         return action;
@@ -746,8 +737,7 @@
         boolean showReceiversByDefault = applicationPreferenceModel.isReceiversVisible();
 
         toggleStatusBarCheck.setSelected(logui.isStatusBarVisible());
-        toggleShowReceiversCheck.setSelected(
-            showReceiversByDefault);
+        toggleShowReceiversCheck.setSelected(showReceiversByDefault);
 
         logTreePaneButton.setSelected(logui.isLogTreePanelVisible());
         LogPanel panel = logui.getCurrentLogPanel();
@@ -758,8 +748,7 @@
             scrollToBottomButton.setSelected(false);
             toggleDetailMenuItem.setSelected(false);
         }
-        showReceiversButton.setSelected(
-            showReceiversByDefault);
+        showReceiversButton.setSelected(showReceiversByDefault);
         menuShowWelcome.setSelected(logui.getTabbedPane().containsWelcomePanel());
 
         /**
@@ -794,52 +783,54 @@
     }
 
     private Action getFindNextColorizedEventAction() {
-        final Action action =
-            new AbstractAction("Find next colorized event") {
-                public void actionPerformed(ActionEvent e) {
-                    LogPanel p = logui.getCurrentLogPanel();
-                    if (p != null) {
-                        p.findNextColorizedEvent();
-                    }
+        final Action action = new AbstractAction("Find next colorized event") {
+            public void actionPerformed(ActionEvent e) {
+                LogPanel p = logui.getCurrentLogPanel();
+                if (p != null) {
+                    p.findNextColorizedEvent();
                 }
-            };
+            }
+        };
         action.putValue(Action.SHORT_DESCRIPTION, "Find the next colorized event from the current location");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_N);
-        action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
 
         return action;
     }
 
     private Action getFindPreviousColorizedEventAction() {
-        final Action action =
-            new AbstractAction("Find previous colorized event") {
-                public void actionPerformed(ActionEvent e) {
-                    LogPanel p = logui.getCurrentLogPanel();
+        final Action action = new AbstractAction("Find previous colorized event") {
+            public void actionPerformed(ActionEvent e) {
+                LogPanel p = logui.getCurrentLogPanel();
 
-                    if (p != null) {
-                        p.findPreviousColorizedEvent();
-                    }
+                if (p != null) {
+                    p.findPreviousColorizedEvent();
                 }
-            };
+            }
+        };
         action.putValue(Action.SHORT_DESCRIPTION, "Find the next colorized event from the current location");
         action.putValue("enabled", Boolean.TRUE);
         action.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_P);
-        action.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        action.putValue(
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
 
         return action;
     }
 
     private JPanel getCustomExpressionPanel() {
         final JPanel panel = new JPanel(new BorderLayout());
-        panel.add(
-            new JLabel("Enter expression for new tab:  "), BorderLayout.NORTH);
+        panel.add(new JLabel("Enter expression for new tab:  "), BorderLayout.NORTH);
 
         final JEditorPane entryField = new JEditorPane();
         entryField.setPreferredSize(new Dimension(350, 75));
         JTextComponentFormatter.applySystemFontAndSize(entryField);
-        entryField.addKeyListener(
-            new ExpressionRuleContext(new FilterModel(), entryField));
+        entryField.addKeyListener(new ExpressionRuleContext(new FilterModel(), entryField));
         panel.add(entryField, BorderLayout.CENTER);
 
         JButton ok = new JButton(" OK ");
@@ -850,22 +841,18 @@
         lowerPanel.add(close);
         panel.add(lowerPanel, BorderLayout.SOUTH);
 
-        ok.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    logui.createCustomExpressionLogPanel(entryField.getText());
-                    SwingUtilities.getAncestorOfClass(JDialog.class, panel).setVisible(
-                        false);
-                }
-            });
+        ok.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                logui.createCustomExpressionLogPanel(entryField.getText());
+                SwingUtilities.getAncestorOfClass(JDialog.class, panel).setVisible(false);
+            }
+        });
 
-        close.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    SwingUtilities.getAncestorOfClass(JDialog.class, panel).setVisible(
-                        false);
-                }
-            });
+        close.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                SwingUtilities.getAncestorOfClass(JDialog.class, panel).setVisible(false);
+            }
+        });
 
         return panel;
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawViewer.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawViewer.java
index a116894..06b4add 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawViewer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawViewer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-
 /**
  * Chainsaw compatible gui viewers must implement this interface
  * in order to be opened and configured by the ChainsawAppender class.
diff --git a/src/main/java/org/apache/log4j/chainsaw/CheckListCellRenderer.java b/src/main/java/org/apache/log4j/chainsaw/CheckListCellRenderer.java
index db4ca8a..1a9b0aa 100644
--- a/src/main/java/org/apache/log4j/chainsaw/CheckListCellRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/CheckListCellRenderer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,11 +16,10 @@
  */
 package org.apache.log4j.chainsaw;
 
+import java.awt.*;
 import javax.swing.*;
 import javax.swing.border.Border;
 import javax.swing.table.TableColumn;
-import java.awt.*;
-
 
 /**
  * A ListCellRenderer that display a check box if the value
@@ -31,10 +30,8 @@
  *
  * @author Paul Smith
  */
-public abstract class CheckListCellRenderer extends JCheckBox
-    implements ListCellRenderer {
-    private final Border noFocusBorder =
-        BorderFactory.createEmptyBorder(1, 1, 1, 1);
+public abstract class CheckListCellRenderer extends JCheckBox implements ListCellRenderer {
+    private final Border noFocusBorder = BorderFactory.createEmptyBorder(1, 1, 1, 1);
 
     /**
      *
@@ -49,17 +46,12 @@
      * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean)
      */
     public Component getListCellRendererComponent(
-        JList list, Object value, int index, boolean isSelected,
-        boolean cellHasFocus) {
+            JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
         setText(((TableColumn) value).getHeaderValue().toString());
-        setBackground(
-            isSelected ? list.getSelectionBackground() : list.getBackground());
-        setForeground(
-            isSelected ? list.getSelectionForeground() : list.getForeground());
+        setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
+        setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());
         setFont(list.getFont());
-        setBorder(
-            cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder")
-                : noFocusBorder);
+        setBorder(cellHasFocus ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder);
 
         setSelected(isSelected(value));
         return this;
diff --git a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
index 018e890..90f432c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.helpers.Constants;
-
 import java.util.Comparator;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.helpers.Constants;
 
 /**
  * @author Claude Duguay
@@ -44,7 +41,7 @@
 
         if (o1 instanceof LoggingEventWrapper && o2 instanceof LoggingEventWrapper) {
 
-//		TODO not everything catered for here yet...
+            //		TODO not everything catered for here yet...
 
             ChainsawLoggingEvent e1 = ((LoggingEventWrapper) o1).getLoggingEvent();
             ChainsawLoggingEvent e2 = ((LoggingEventWrapper) o2).getLoggingEvent();
@@ -61,72 +58,70 @@
                     break;
 
                 case ChainsawColumns.INDEX_MESSAGE_COL_NAME:
-                    sort =
-                        e1.m_message.compareToIgnoreCase(
-                            e2.m_message);
+                    sort = e1.m_message.compareToIgnoreCase(e2.m_message);
 
                     break;
 
-/*                case ChainsawColumns.INDEX_NDC_COL_NAME:
-                    if (e1.m_ndc != null && e2.m_ndc != null) {
-                        sort =
-                            e1.m_ndc.compareToIgnoreCase(
-                                e2.m_ndc);
-                    } else if (e1.m_ndc == null && e2.m_ndc == null) {
-                        sort = 0;
-                    } else if (e1.m_ndc == null) {
-                        sort = -1;
-                    } else if (e2.m_ndc == null) {
-                        sort = 1;
-                    }
+                    /*                case ChainsawColumns.INDEX_NDC_COL_NAME:
+                        if (e1.m_ndc != null && e2.m_ndc != null) {
+                            sort =
+                                e1.m_ndc.compareToIgnoreCase(
+                                    e2.m_ndc);
+                        } else if (e1.m_ndc == null && e2.m_ndc == null) {
+                            sort = 0;
+                        } else if (e1.m_ndc == null) {
+                            sort = -1;
+                        } else if (e2.m_ndc == null) {
+                            sort = 1;
+                        }
 
-                    break;
+                        break;
 
-                case ChainsawColumns.INDEX_METHOD_COL_NAME:
+                    case ChainsawColumns.INDEX_METHOD_COL_NAME:
 
-                    if (
-                        (e1.m_locationInfo != null)
-                            && (e2.m_locationInfo != null)) {
-                        sort =
-                            e1.m_locationInfo.methodName.compareToIgnoreCase(
-                                e2.m_locationInfo.methodName);
-                    }
+                        if (
+                            (e1.m_locationInfo != null)
+                                && (e2.m_locationInfo != null)) {
+                            sort =
+                                e1.m_locationInfo.methodName.compareToIgnoreCase(
+                                    e2.m_locationInfo.methodName);
+                        }
 
-                    break;
+                        break;
 
-                case ChainsawColumns.INDEX_CLASS_COL_NAME:
+                    case ChainsawColumns.INDEX_CLASS_COL_NAME:
 
-                    if (
-                        (e1.m_locationInfo != null)
-                            && (e2.m_locationInfo != null)) {
-                        sort =
-                            e1.m_locationInfo.className.compareToIgnoreCase(
-                                e2.m_locationInfo.className);
-                    }
+                        if (
+                            (e1.m_locationInfo != null)
+                                && (e2.m_locationInfo != null)) {
+                            sort =
+                                e1.m_locationInfo.className.compareToIgnoreCase(
+                                    e2.m_locationInfo.className);
+                        }
 
-                    break;
+                        break;
 
-                case ChainsawColumns.INDEX_FILE_COL_NAME:
+                    case ChainsawColumns.INDEX_FILE_COL_NAME:
 
-                    if (
-                        (e1.m_locationInfo != null)
-                            && (e2.m_locationInfo != null)) {
-                        sort =
-                            e1.m_locationInfo.methodName.compareToIgnoreCase(
-                                e2.m_locationInfo.methodName);
-                    }
+                        if (
+                            (e1.m_locationInfo != null)
+                                && (e2.m_locationInfo != null)) {
+                            sort =
+                                e1.m_locationInfo.methodName.compareToIgnoreCase(
+                                    e2.m_locationInfo.methodName);
+                        }
 
-                    break;*/
+                        break;*/
 
                 case ChainsawColumns.INDEX_TIMESTAMP_COL_NAME:
                     sort = e1.m_timestamp.compareTo(e2.m_timestamp);
                     break;
 
-/*
-                case ChainsawColumns.INDEX_THREAD_COL_NAME:
-                    sort = e1.m_threadName.compareToIgnoreCase(e2.m_threadName);
-                    break;
-*/
+                    /*
+                                    case ChainsawColumns.INDEX_THREAD_COL_NAME:
+                                        sort = e1.m_threadName.compareToIgnoreCase(e2.m_threadName);
+                                        break;
+                    */
 
                 case ChainsawColumns.INDEX_ID_COL_NAME:
                     int id1 = Integer.parseInt(e1.getProperty(Constants.LOG4J_ID_KEY));
@@ -134,32 +129,32 @@
                     sort = Integer.compare(id2, id1);
                     break;
 
-/*
-                case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
-//                    if (e1.getThrowableStrRep() != null && e2.getThrowableStrRep() != null) {
-//                        String[] s1 = e1.getThrowableStrRep();
-//                        String[] s2 = e2.getThrowableStrRep();
-//                        boolean foundDiff = false;
-//                        for (int i = 0; i < s1.length; i++) {
-//                            if (foundDiff || i > s2.length) {
-//                                break;
-//                            }
-//                            sort = s1[i].compareToIgnoreCase(s2[i]);
-//                            foundDiff = sort != 0;
-//                        }
-//                    }
-                    break;
+                    /*
+                                    case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
+                    //                    if (e1.getThrowableStrRep() != null && e2.getThrowableStrRep() != null) {
+                    //                        String[] s1 = e1.getThrowableStrRep();
+                    //                        String[] s2 = e2.getThrowableStrRep();
+                    //                        boolean foundDiff = false;
+                    //                        for (int i = 0; i < s1.length; i++) {
+                    //                            if (foundDiff || i > s2.length) {
+                    //                                break;
+                    //                            }
+                    //                            sort = s1[i].compareToIgnoreCase(s2[i]);
+                    //                            foundDiff = sort != 0;
+                    //                        }
+                    //                    }
+                                        break;
 
-                case ChainsawColumns.INDEX_LINE_COL_NAME:
-                    if (
-                        (e1.m_locationInfo != null)
-                            && (e2.m_locationInfo != null)) {
-                        sort = e1.m_locationInfo.lineNumber - e2.m_locationInfo.lineNumber;
-                    }
-                    break;
-*/
+                                    case ChainsawColumns.INDEX_LINE_COL_NAME:
+                                        if (
+                                            (e1.m_locationInfo != null)
+                                                && (e2.m_locationInfo != null)) {
+                                            sort = e1.m_locationInfo.lineNumber - e2.m_locationInfo.lineNumber;
+                                        }
+                                        break;
+                    */
 
-                //other columns may be Property values - see if there is an Property value matching column name
+                    // other columns may be Property values - see if there is an Property value matching column name
                 default:
                     if (e1.getProperty(columnName) != null && e2.getProperty(columnName) != null) {
                         sort = e1.getProperty(columnName).compareToIgnoreCase(e2.getProperty(columnName));
diff --git a/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java b/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
index 42125ff..836ca73 100644
--- a/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
+++ b/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
@@ -1,20 +1,26 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
- * agreements. See the NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
 package org.apache.log4j.chainsaw;
 
-import javax.swing.*;
 import java.awt.*;
 import java.awt.datatransfer.StringSelection;
 import java.awt.event.ActionEvent;
 import java.util.List;
+import javax.swing.*;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logui.LogUI;
 
@@ -28,19 +34,18 @@
      * Layout pattern uses a simple but concise format that reads well and has a fixed size set of
      * useful columns before the message. Nice format for pasting into issue trackers.
      */
-//    private final Layout layout = new EnhancedPatternLayout(
-//        "[%d{ISO8601} %-5p][%20.20c][%t] %m%n");
+    //    private final Layout layout = new EnhancedPatternLayout(
+    //        "[%d{ISO8601} %-5p][%20.20c][%t] %m%n");
 
     public CopyEventsToClipboardAction(LogUI parent) {
         super("Copy events to clipboard");
         this.logUi = parent;
 
-        putValue(Action.SHORT_DESCRIPTION,
-            "Copies to the clipboard currently visible events to a human-readable, log-like format");
-
+        putValue(
+                Action.SHORT_DESCRIPTION,
+                "Copies to the clipboard currently visible events to a human-readable, log-like format");
     }
 
-
     public void actionPerformed(ActionEvent e) {
         List filteredEvents = logUi.getCurrentLogPanel().getFilteredEvents();
         StringBuilder writer = new StringBuilder(filteredEvents.size() * EVENTSIZE_FUDGE_FACTOR);
@@ -50,8 +55,6 @@
         }
 
         StringSelection stringSelection = new StringSelection(writer.toString());
-        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection,
-            stringSelection);
+        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, stringSelection);
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/CyclicBufferList.java b/src/main/java/org/apache/log4j/chainsaw/CyclicBufferList.java
index 802a568..643aab2 100644
--- a/src/main/java/org/apache/log4j/chainsaw/CyclicBufferList.java
+++ b/src/main/java/org/apache/log4j/chainsaw/CyclicBufferList.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
 import java.util.AbstractList;
@@ -22,7 +21,6 @@
 import java.util.Arrays;
 import java.util.List;
 
-
 /**
  * CyclicBuffer implementation that is Object generic, and implements the List interface.
  * <p>
@@ -46,8 +44,7 @@
      */
     public CyclicBufferList(int maxSize) {
         if (maxSize < 1) {
-            throw new IllegalArgumentException(
-                "The maxSize argument (" + maxSize + ") is not a positive integer.");
+            throw new IllegalArgumentException("The maxSize argument (" + maxSize + ") is not a positive integer.");
         }
         this.maxSize = maxSize;
         clear();
@@ -169,8 +166,7 @@
      */
     public void resize(int newSize) {
         if (newSize < 0) {
-            throw new IllegalArgumentException(
-                "Negative array size [" + newSize + "] not allowed.");
+            throw new IllegalArgumentException("Negative array size [" + newSize + "] not allowed.");
         }
 
         if (newSize == numElems) {
@@ -210,7 +206,5 @@
         first = 0;
         last = 0;
         numElems = 0;
-
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/DockablePanel.java b/src/main/java/org/apache/log4j/chainsaw/DockablePanel.java
index 8053efe..4372955 100644
--- a/src/main/java/org/apache/log4j/chainsaw/DockablePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/DockablePanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import javax.swing.*;
 import java.awt.*;
-
+import javax.swing.*;
 
 /**
  * Extends the functionality of a JPanel by providing a 'docked' state.
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
index e534103..b340848 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,15 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModel;
-import org.apache.log4j.rule.Rule;
-
 import java.beans.PropertyChangeListener;
 import java.util.List;
-
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameModel;
+import org.apache.log4j.rule.Rule;
 
 /**
  * To allow pluggable TableModel implementations for Chainsaw, this interface has been factored out.
@@ -43,8 +40,7 @@
 
     void addPropertyChangeListener(PropertyChangeListener l);
 
-    void addPropertyChangeListener(
-        String propertyName, PropertyChangeListener l);
+    void addPropertyChangeListener(String propertyName, PropertyChangeListener l);
 
     /**
      * Adds a NewKeyListener to be notified when unique Key (Property keys)
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventCountListener.java b/src/main/java/org/apache/log4j/chainsaw/EventCountListener.java
index b28a9ae..f251c50 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventCountListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventCountListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
 import java.util.EventListener;
 
-
 /**
  * Listeners can be notified when the # of events in a particular model
  * changes
diff --git a/src/main/java/org/apache/log4j/chainsaw/ExpressionRuleContext.java b/src/main/java/org/apache/log4j/chainsaw/ExpressionRuleContext.java
index bfabce9..a77cc86 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ExpressionRuleContext.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ExpressionRuleContext.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,14 @@
  */
 package org.apache.log4j.chainsaw;
 
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.text.JTextComponent;
 import org.apache.log4j.chainsaw.filter.FilterModel;
 import org.apache.log4j.rule.RuleFactory;
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
-import javax.swing.*;
-import javax.swing.text.JTextComponent;
-import java.awt.*;
-import java.awt.event.*;
-
 /**
  * A popup menu which assists in building expression rules.  Completes event keywords, operators and
  * context if available.
@@ -42,8 +41,7 @@
     private final DefaultListModel<String> fieldModel = new DefaultListModel<>();
     private final DefaultListModel<String> operatorModel = new DefaultListModel<>();
 
-    public ExpressionRuleContext(
-        final FilterModel filterModel, final JTextComponent textComponent) {
+    public ExpressionRuleContext(final FilterModel filterModel, final JTextComponent textComponent) {
         this.filterModel = filterModel;
         this.textComponent = textComponent;
         fieldModel.addElement("LOGGER");
@@ -72,53 +70,50 @@
         operatorModel.addElement("<=");
         operatorModel.addElement(">=");
 
-        //make long to avoid scrollbar
+        // make long to avoid scrollbar
         list.setVisibleRowCount(13);
 
         PopupListener popupListener = new PopupListener();
         textComponent.addMouseListener(popupListener);
 
-        list.addKeyListener(
-            new KeyAdapter() {
-                @Override
-                public void keyPressed(KeyEvent e) {
-                    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
-                        String value = list.getSelectedValue();
-                        String contextKey = getContextKey();
-                        if (contextKey != null && (!(contextKey.endsWith(".")))) {
-                            value = "'" + value + "'";
-                        }
-
-                        updateField(value);
-                        contextMenu.setVisible(false);
+        list.addKeyListener(new KeyAdapter() {
+            @Override
+            public void keyPressed(KeyEvent e) {
+                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
+                    String value = list.getSelectedValue();
+                    String contextKey = getContextKey();
+                    if (contextKey != null && (!(contextKey.endsWith(".")))) {
+                        value = "'" + value + "'";
                     }
+
+                    updateField(value);
+                    contextMenu.setVisible(false);
                 }
-            });
+            }
+        });
 
-        list.addMouseListener(
-            new MouseAdapter() {
-                @Override
-                public void mouseClicked(MouseEvent e) {
-                    if (e.getClickCount() == 2) {
-                        String value = list.getSelectedValue();
-                        String contextKey = getContextKey();
-                        if (contextKey != null && (!(contextKey.endsWith(".")))) {
-                            value = "'" + value + "'";
-                        }
-
-                        updateField(value);
-                        contextMenu.setVisible(false);
+        list.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseClicked(MouseEvent e) {
+                if (e.getClickCount() == 2) {
+                    String value = list.getSelectedValue();
+                    String contextKey = getContextKey();
+                    if (contextKey != null && (!(contextKey.endsWith(".")))) {
+                        value = "'" + value + "'";
                     }
+
+                    updateField(value);
+                    contextMenu.setVisible(false);
                 }
-            });
+            }
+        });
 
         contextMenu.insert(scrollPane, 0);
     }
 
     private void updateField(String value) {
-        if (textComponent.getSelectedText() == null &&
-            !value.endsWith(".")) {
-                value = value + " ";
+        if (textComponent.getSelectedText() == null && !value.endsWith(".")) {
+            value = value + " ";
         }
 
         textComponent.replaceSelection(value);
@@ -126,8 +121,7 @@
 
     @Override
     public void keyPressed(KeyEvent e) {
-        if (e.getKeyCode() == KeyEvent.VK_SPACE &&
-            e.getModifiersEx() == InputEvent.CTRL_DOWN_MASK) {
+        if (e.getKeyCode() == KeyEvent.VK_SPACE && e.getModifiersEx() == InputEvent.CTRL_DOWN_MASK) {
             displayContext();
         }
     }
@@ -151,8 +145,8 @@
                 Point p = textComponent.getCaret().getMagicCaretPosition();
                 if (p == null) {
                     p = new Point(
-                        textComponent.getLocation().x,
-                        (textComponent.getLocation().y - textComponent.getHeight() + 5));
+                            textComponent.getLocation().x,
+                            (textComponent.getLocation().y - textComponent.getHeight() + 5));
                 }
 
                 contextMenu.doLayout();
@@ -204,7 +198,9 @@
         }
 
         int lastFieldStartPosition = Math.max(0, text.lastIndexOf(" ", lastFieldPosition - 1));
-        String field = text.substring(lastFieldStartPosition, lastFieldPosition).toUpperCase().trim();
+        String field = text.substring(lastFieldStartPosition, lastFieldPosition)
+                .toUpperCase()
+                .trim();
 
         return resolver.isField(field);
     }
@@ -233,20 +229,21 @@
         }
 
         int lastFieldStartPosition = Math.max(0, text.lastIndexOf(" ", lastFieldPosition - 1));
-        String lastSymbol = text.substring(lastFieldPosition + 1, symbolPosition).trim();
+        String lastSymbol =
+                text.substring(lastFieldPosition + 1, symbolPosition).trim();
 
-        String lastField = text.substring(lastFieldStartPosition, lastFieldPosition).trim();
+        String lastField =
+                text.substring(lastFieldStartPosition, lastFieldPosition).trim();
 
-        if (factory.isRule(lastSymbol) &&
-            filterModel.getContainer().modelExists(lastField)) {
+        if (factory.isRule(lastSymbol) && filterModel.getContainer().modelExists(lastField)) {
             return lastField;
         }
 
         return null;
     }
 
-    //subfields allow the key portion of a field to provide context menu support
-    //and are available after the fieldname and a . (for example, PROP.)
+    // subfields allow the key portion of a field to provide context menu support
+    // and are available after the fieldname and a . (for example, PROP.)
     private String getSubField() {
         int currentPosition = textComponent.getSelectionStart();
         String text = textComponent.getText();
diff --git a/src/main/java/org/apache/log4j/chainsaw/JTextComponentFormatter.java b/src/main/java/org/apache/log4j/chainsaw/JTextComponentFormatter.java
index 543c69b..d675063 100644
--- a/src/main/java/org/apache/log4j/chainsaw/JTextComponentFormatter.java
+++ b/src/main/java/org/apache/log4j/chainsaw/JTextComponentFormatter.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,11 +16,11 @@
  */
 package org.apache.log4j.chainsaw;
 
+import java.awt.*;
 import javax.swing.*;
 import javax.swing.text.Document;
 import javax.swing.text.JTextComponent;
 import javax.swing.text.html.HTMLDocument;
-import java.awt.*;
 
 /**
  * Apply system font and size (normal size + 1) rule if the JEditorPane document contains html.
@@ -30,7 +30,8 @@
         Document document = textComponent.getDocument();
         if (document instanceof HTMLDocument) {
             Font font = UIManager.getFont("Label.font");
-            String bodyRule = "body { font-family: " + font.getFamily() + "; font-size: " + (font.getSize() + 1) + "pt; }";
+            String bodyRule =
+                    "body { font-family: " + font.getFamily() + "; font-size: " + (font.getSize() + 1) + "pt; }";
             ((HTMLDocument) document).getStyleSheet().addRule(bodyRule);
         }
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
index a753495..99076cf 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,6 +17,14 @@
 package org.apache.log4j.chainsaw;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.*;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -24,15 +32,6 @@
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.*;
-
 public class LogFilePatternLayoutBuilder {
 
     public static String getTimeStampFormat(String patternLayout) {
@@ -42,7 +41,7 @@
         }
 
         int index = patternLayout.indexOf("%d{");
-        //%d - default
+        // %d - default
         if (index < 0) {
             return "yyyy-MM-dd HH:mm:ss,SSS";
         }
@@ -65,18 +64,19 @@
         try {
             return getXMLFileAppenderConfiguration(file);
         } catch (IOException | SAXException | ParserConfigurationException e) {
-            //ignore
+            // ignore
         }
         try {
             return getPropertiesFileAppenderConfiguration(file);
         } catch (Exception e) {
-            //ignore
+            // ignore
         }
-        //don't return null
+        // don't return null
         return new HashMap<>();
     }
 
-    public static Map<String, Map<String, String>> getPropertiesFileAppenderConfiguration(File propertyFile) throws IOException {
+    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();
@@ -91,7 +91,7 @@
                 if (propertyName.startsWith(appenderPrefix)) {
                     String value = propertyName.substring(appenderPrefix.length() + 1);
                     if (!value.contains(".")) {
-                        //no sub-values - this entry is the appender name & class
+                        // no sub-values - this entry is the appender name & class
                         appenders.put(value, props.getProperty(propertyName).trim());
                     }
                 }
@@ -103,7 +103,8 @@
                 if (appenderClassName.toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
                     String layout = props.getProperty(appenderPrefix + "." + appenderName + ".layout");
                     if (layout != null && layout.trim().equals("org.apache.log4j.PatternLayout")) {
-                        String conversion = props.getProperty(appenderPrefix + "." + appenderName + ".layout.ConversionPattern");
+                        String conversion =
+                                props.getProperty(appenderPrefix + "." + appenderName + ".layout.ConversionPattern");
                         String file = props.getProperty(appenderPrefix + "." + appenderName + ".File");
                         if (conversion != null && file != null) {
                             Map<String, String> entry = new HashMap<>();
@@ -114,27 +115,28 @@
                     }
                 }
             }
-          /*
-          example:
-          log4j.appender.R=org.apache.log4j.RollingFileAppender
-          log4j.appender.R.File=${catalina.base}/logs/tomcat.log
-          log4j.appender.R.MaxFileSize=10MB
-          log4j.appender.R.MaxBackupIndex=10
-          log4j.appender.R.layout=org.apache.log4j.PatternLayout
-          log4j.appender.R.layout.ConversionPattern=%d - %p %t %c - %m%n
-           */
+            /*
+            example:
+            log4j.appender.R=org.apache.log4j.RollingFileAppender
+            log4j.appender.R.File=${catalina.base}/logs/tomcat.log
+            log4j.appender.R.MaxFileSize=10MB
+            log4j.appender.R.MaxBackupIndex=10
+            log4j.appender.R.layout=org.apache.log4j.PatternLayout
+            log4j.appender.R.layout.ConversionPattern=%d - %p %t %c - %m%n
+             */
         } catch (IOException ioe) {
         } finally {
             if (inputStream != null) {
                 inputStream.close();
             }
         }
-        //don't return null
+        // don't return null
         return result;
     }
 
     @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better
-    private static Map<String, Map<String, String>> getXMLFileAppenderConfiguration(File file) throws IOException, ParserConfigurationException, SAXException {
+    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);
@@ -143,45 +145,64 @@
             dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
             DocumentBuilder docBuilder = dbf.newDocumentBuilder();
 
-//            docBuilder.setErrorHandler(new SAXErrorHandler());
-//            docBuilder.setEntityResolver(new Log4jEntityResolver());
+            //            docBuilder.setErrorHandler(new SAXErrorHandler());
+            //            docBuilder.setEntityResolver(new Log4jEntityResolver());
             Document doc = docBuilder.parse(src);
             NodeList appenders = doc.getElementsByTagName("appender");
             for (int i = 0; i < appenders.getLength(); i++) {
                 Node appender = appenders.item(i);
                 NamedNodeMap appenderAttributes = appender.getAttributes();
-//        Class appenderClass = Class.forName(map.getNamedItem("class").getNodeValue());
+                //        Class appenderClass = Class.forName(map.getNamedItem("class").getNodeValue());
                 Node appenderClass = appenderAttributes.getNamedItem("class");
-                if (appenderAttributes.getNamedItem("name") != null && appenderClass != null && appenderClass.getNodeValue() != null) {
-                    //all log4j fileappenders end in fileappender..if a custom fileappender also ends in fileappender and uses the same dom nodes to be loaded,
-                    //try to parse the nodes as well
+                if (appenderAttributes.getNamedItem("name") != null
+                        && appenderClass != null
+                        && appenderClass.getNodeValue() != null) {
+                    // all log4j fileappenders end in fileappender..if a custom fileappender also ends in fileappender
+                    // and uses the same dom nodes to be loaded,
+                    // try to parse the nodes as well
                     if (appenderClass.getNodeValue().toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
-                        String appenderName = appenderAttributes.getNamedItem("name").getNodeValue();
-                        //subclass of FileAppender - add it
+                        String appenderName =
+                                appenderAttributes.getNamedItem("name").getNodeValue();
+                        // subclass of FileAppender - add it
                         Map<String, String> entry = new HashMap<>();
                         NodeList appenderChildren = appender.getChildNodes();
                         for (int j = 0; j < appenderChildren.getLength(); j++) {
                             Node appenderChild = appenderChildren.item(j);
                             if (appenderChild.getNodeName().equals("param") && appenderChild.hasAttributes()) {
-                                Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
-                                if (fileNameNode != null && fileNameNode.getNodeValue().equalsIgnoreCase("file")) {
-                                    Node fileValueNode = appenderChild.getAttributes().getNamedItem("value");
+                                Node fileNameNode =
+                                        appenderChild.getAttributes().getNamedItem("name");
+                                if (fileNameNode != null
+                                        && fileNameNode.getNodeValue().equalsIgnoreCase("file")) {
+                                    Node fileValueNode =
+                                            appenderChild.getAttributes().getNamedItem("value");
                                     if (fileValueNode != null) {
                                         entry.put("file", fileValueNode.getNodeValue());
                                     }
                                 }
                             }
-                            if (appenderChild.getNodeName().equalsIgnoreCase("layout") && appenderChild.hasAttributes()) {
+                            if (appenderChild.getNodeName().equalsIgnoreCase("layout")
+                                    && appenderChild.hasAttributes()) {
                                 NamedNodeMap layoutAttributes = appenderChild.getAttributes();
                                 Node layoutNode = layoutAttributes.getNamedItem("class");
-                                if (layoutNode != null && layoutNode.getNodeValue() != null && layoutNode.getNodeValue().equalsIgnoreCase("org.apache.log4j.PatternLayout")) {
+                                if (layoutNode != null
+                                        && layoutNode.getNodeValue() != null
+                                        && layoutNode
+                                                .getNodeValue()
+                                                .equalsIgnoreCase("org.apache.log4j.PatternLayout")) {
                                     NodeList layoutChildren = appenderChild.getChildNodes();
                                     for (int k = 0; k < layoutChildren.getLength(); k++) {
                                         Node layoutChild = layoutChildren.item(k);
                                         if (layoutChild.getNodeName().equals("param") && layoutChild.hasAttributes()) {
-                                            Node layoutName = layoutChild.getAttributes().getNamedItem("name");
-                                            if (layoutName != null && layoutName.getNodeValue() != null && layoutName.getNodeValue().equalsIgnoreCase("conversionpattern")) {
-                                                Node conversionValue = layoutChild.getAttributes().getNamedItem("value");
+                                            Node layoutName =
+                                                    layoutChild.getAttributes().getNamedItem("name");
+                                            if (layoutName != null
+                                                    && layoutName.getNodeValue() != null
+                                                    && layoutName
+                                                            .getNodeValue()
+                                                            .equalsIgnoreCase("conversionpattern")) {
+                                                Node conversionValue = layoutChild
+                                                        .getAttributes()
+                                                        .getNamedItem("value");
                                                 if (conversionValue != null) {
                                                     entry.put("conversion", conversionValue.getNodeValue());
                                                 }
@@ -196,7 +217,7 @@
                 }
             }
         }
-//        logger.info("getXMLFileAppenderConfiguration for file: " + file + ", result: " + result);
+        //        logger.info("getXMLFileAppenderConfiguration for file: " + file + ", result: " + result);
         return result;
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java b/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
index 8e92bbd..0351d73 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,16 +16,15 @@
  */
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.Rule;
-
 import java.awt.*;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.Rule;
 
 /**
  * Wrap access to a LoggingEvent.  All property updates need to go through this object and not through the wrapped logging event,
@@ -42,11 +41,11 @@
     private int markerHeight = DEFAULT_HEIGHT;
     private int msgHeight = DEFAULT_HEIGHT;
 
-    //set to the log4jid value via setId - assumed to never change
+    // set to the log4jid value via setId - assumed to never change
     private int id;
 
     private boolean searchMatch = false;
-    //a Map of event fields to Sets of string matches (can be used to render matches differently)
+    // a Map of event fields to Sets of string matches (can be used to render matches differently)
     Map eventMatches = new HashMap();
     private LoggingEventWrapper syncWrapper;
     private boolean displayed;
@@ -158,9 +157,8 @@
     }
 
     public void setPreviousDisplayedEventTimestamp(Instant previousDisplayedEventTimeStamp) {
-        long diffMs = ChronoUnit.MILLIS.between( previousDisplayedEventTimeStamp, loggingEvent.m_timestamp );
-        setProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE,
-                String.valueOf(diffMs));
+        long diffMs = ChronoUnit.MILLIS.between(previousDisplayedEventTimeStamp, loggingEvent.m_timestamp);
+        setProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE, String.valueOf(diffMs));
     }
 
     public boolean isDisplayed() {
@@ -185,6 +183,7 @@
     }
 
     public String toString() {
-        return "LoggingEventWrapper - id: " + id + " background: " + getBackground() + ", foreground: " + getForeground() + ", msg: " + loggingEvent.m_message;
+        return "LoggingEventWrapper - id: " + id + " background: " + getBackground() + ", foreground: "
+                + getForeground() + ", msg: " + loggingEvent.m_message;
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ModifiableListModel.java b/src/main/java/org/apache/log4j/chainsaw/ModifiableListModel.java
index 9f5a824..0cae2b2 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ModifiableListModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ModifiableListModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -25,5 +25,4 @@
     public void fireContentsChanged() {
         fireContentsChanged(this, 0, this.size());
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/NewKeyEvent.java b/src/main/java/org/apache/log4j/chainsaw/NewKeyEvent.java
index b83aba2..4a61837 100644
--- a/src/main/java/org/apache/log4j/chainsaw/NewKeyEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/NewKeyEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/NewKeyListener.java b/src/main/java/org/apache/log4j/chainsaw/NewKeyListener.java
index 05120ac..8e16954 100644
--- a/src/main/java/org/apache/log4j/chainsaw/NewKeyListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/NewKeyListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
 import java.util.EventListener;
 
-
 /**
  * Interested parties are notified when a MDC/Property key has arrived
  * that has not been seen before by the source Model
diff --git a/src/main/java/org/apache/log4j/chainsaw/PopupListener.java b/src/main/java/org/apache/log4j/chainsaw/PopupListener.java
index 6350735..494b356 100644
--- a/src/main/java/org/apache/log4j/chainsaw/PopupListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/PopupListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,9 +16,9 @@
  */
 package org.apache.log4j.chainsaw;
 
-import javax.swing.*;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import javax.swing.*;
 
 /**
  * Ensures that a specific popupMenu is displayed when the relevant
diff --git a/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java b/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
index e5c3a5a..e5c41e9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ProgressPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import javax.swing.*;
 import java.awt.*;
 import java.lang.reflect.InvocationTargetException;
+import javax.swing.*;
 
 /**
  * A simple ProgressPanel that can be used, a little more flexible
@@ -44,8 +43,7 @@
     }
 
     public void setMessage(final String string) {
-        SwingUtilities.invokeLater(
-            () -> messageLabel.setText(string));
+        SwingUtilities.invokeLater(() -> messageLabel.setText(string));
     }
 
     public void setProgress(final int progress) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
index 675d419..19441a5 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,16 +17,6 @@
 package org.apache.log4j.chainsaw;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.net.UDPReceiver;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.swing.*;
-import javax.swing.text.SimpleAttributeSet;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyledDocument;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -37,7 +27,15 @@
 import java.net.URL;
 import java.util.List;
 import java.util.Locale;
-
+import javax.swing.*;
+import javax.swing.text.SimpleAttributeSet;
+import javax.swing.text.StyleConstants;
+import javax.swing.text.StyledDocument;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.net.UDPReceiver;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A panel providing receiver configuration options
@@ -49,17 +47,17 @@
 
     private final PanelModel panelModel;
 
-    //network receiver widgets
+    // network receiver widgets
     private JComboBox<String> networkReceiverPortComboBox;
     private JComboBox<String> networkReceiverClassNameComboBox;
     private DefaultComboBoxModel<String> networkReceiverClassNameComboBoxModel;
     private DefaultComboBoxModel<String> networkReceiverPortComboBoxModel;
 
-    //log4j config receiver widgets
+    // log4j config receiver widgets
     private JButton browseLog4jConfigButton;
     private JTextField log4jConfigURLTextField;
 
-    //logfile receiver widgets
+    // logfile receiver widgets
     private JButton browseLogFileButton;
     private JComboBox<String> logFileFormatTypeComboBox;
 
@@ -69,19 +67,19 @@
     private DefaultComboBoxModel<String> logFileFormatComboBoxModel;
     private DefaultComboBoxModel<String> logFileFormatTimestampFormatComboBoxModel;
 
-    //use existing configuration widgets
+    // use existing configuration widgets
     private JButton browseForAnExistingConfigurationButton;
     private DefaultComboBoxModel<String> existingConfigurationComboBoxModel;
     private JComboBox<String> existingConfigurationComboBox;
 
-    //don't warn again widgets
+    // don't warn again widgets
     private JCheckBox dontwarnIfNoReceiver;
 
     private JButton saveButton;
     private JButton okButton;
     private JButton cancelButton;
 
-    //radiobutton widgets
+    // radiobutton widgets
     private JRadioButton log4jConfigReceiverRadioButton;
     private JRadioButton logFileReceiverRadioButton;
     private JRadioButton networkReceiverRadioButton;
@@ -97,9 +95,9 @@
     private final JPanel dontWarnAndOKPanel = buildDontWarnAndOKPanel();
     private final JPanel bottomDescriptionPanel = buildBottomDescriptionPanel();
 
-    //set by LogUI to handle hiding of the dialog
+    // set by LogUI to handle hiding of the dialog
     private ActionListener completionActionListener;
-    //used as frame for file open dialogs
+    // used as frame for file open dialogs
     private Container dialog;
 
     ReceiverConfigurationPanel(SettingsManager settingsManager) {
@@ -110,7 +108,8 @@
         buttonGroup = new ButtonGroup();
 
         lowerPanel = new JPanel(new BorderLayout());
-        lowerPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 5, 5, 5)));
+        lowerPanel.setBorder(BorderFactory.createCompoundBorder(
+                BorderFactory.createEtchedBorder(), BorderFactory.createEmptyBorder(5, 5, 5, 5)));
         lowerPanel.setPreferredSize(new Dimension(600, 200));
         lowerPanel.setMinimumSize(new Dimension(600, 200));
 
@@ -233,14 +232,19 @@
         okButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 panelModel.setCancelled(false);
-                if (logFileFormatComboBox.getSelectedItem() != null && !(logFileFormatComboBox.getSelectedItem().toString().trim().isEmpty())) {
-                    panelModel.setLogFormat(logFileFormatComboBox.getSelectedItem().toString());
+                if (logFileFormatComboBox.getSelectedItem() != null
+                        && !(logFileFormatComboBox
+                                .getSelectedItem()
+                                .toString()
+                                .trim()
+                                .isEmpty())) {
+                    panelModel.setLogFormat(
+                            logFileFormatComboBox.getSelectedItem().toString());
                 }
                 completionActionListener.actionPerformed(new ActionEvent(this, -1, "ok"));
             }
         });
 
-
         saveButton.addActionListener(new ActionListener() {
             @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better
             public void actionPerformed(ActionEvent e) {
@@ -294,7 +298,7 @@
 
         networkReceiverClassNameComboBoxModel = new DefaultComboBoxModel<>();
         networkReceiverClassNameComboBoxModel.addElement(UDPReceiver.class.getName());
-//        networkReceiverClassNameComboBoxModel.addElement(JsonReceiver.class.getName());
+        //        networkReceiverClassNameComboBoxModel.addElement(JsonReceiver.class.getName());
 
         networkReceiverClassNameComboBox = new JComboBox<>(networkReceiverClassNameComboBoxModel);
 
@@ -333,14 +337,13 @@
                         log4jConfigURLTextField.setText(url.toExternalForm());
                     }
                 } catch (Exception ex) {
-                    logger.error(
-                        "Error browsing for log4j config file", ex);
+                    logger.error("Error browsing for log4j config file", ex);
                 }
             }
         });
 
         browseLog4jConfigButton.setToolTipText(
-            "Shows a File Open dialog to allow you to find a log4j configuration file");
+                "Shows a File Open dialog to allow you to find a log4j configuration file");
         JPanel panel = new JPanel(new GridBagLayout());
         GridBagConstraints c = new GridBagConstraints();
         c.gridx = 0;
@@ -363,7 +366,6 @@
         c.fill = GridBagConstraints.HORIZONTAL;
         panel.add(log4jConfigURLTextField, c);
 
-
         return panel;
     }
 
@@ -378,8 +380,7 @@
                         logFileURLTextField.setText(item);
                     }
                 } catch (Exception ex) {
-                    logger.error(
-                        "Error browsing for log file", ex);
+                    logger.error("Error browsing for log file", ex);
                 }
             }
         });
@@ -510,19 +511,17 @@
         existingConfigurationComboBox.setToolTipText("Previously loaded configurations can be chosen here");
         existingConfigurationComboBox.setEditable(true);
 
-        existingConfigurationComboBox.getEditor().getEditorComponent().addFocusListener(
-            new FocusListener() {
-                public void focusGained(FocusEvent e) {
-                    selectAll();
-                }
+        existingConfigurationComboBox.getEditor().getEditorComponent().addFocusListener(new FocusListener() {
+            public void focusGained(FocusEvent e) {
+                selectAll();
+            }
 
-                private void selectAll() {
-                    existingConfigurationComboBox.getEditor().selectAll();
-                }
+            private void selectAll() {
+                existingConfigurationComboBox.getEditor().selectAll();
+            }
 
-                public void focusLost(FocusEvent e) {
-                }
-            });
+            public void focusLost(FocusEvent e) {}
+        });
 
         browseForAnExistingConfigurationButton = new JButton(new AbstractAction(" Open File... ") {
             public void actionPerformed(ActionEvent e) {
@@ -532,18 +531,16 @@
 
                     if (url != null) {
                         existingConfigurationComboBoxModel.addElement(url.toExternalForm());
-                        existingConfigurationComboBox.getModel().setSelectedItem(
-                            url);
+                        existingConfigurationComboBox.getModel().setSelectedItem(url);
                     }
                 } catch (Exception ex) {
-                    logger.error(
-                        "Error browsing for Configuration file", ex);
+                    logger.error("Error browsing for Configuration file", ex);
                 }
             }
         });
 
         browseForAnExistingConfigurationButton.setToolTipText(
-            "Shows a File Open dialog to allow you to find a configuration file");
+                "Shows a File Open dialog to allow you to find a configuration file");
         JPanel panel = new JPanel(new GridBagLayout());
         GridBagConstraints c = new GridBagConstraints();
         c.gridx = 0;
@@ -566,7 +563,6 @@
         c.fill = GridBagConstraints.HORIZONTAL;
         panel.add(existingConfigurationComboBox, c);
 
-
         return panel;
     }
 
@@ -613,7 +609,7 @@
      * or null if they cancelled.
      */
     private URL browseConfig() throws MalformedURLException {
-        //hiding and showing the dialog to avoid focus issues with 2 dialogs
+        // hiding and showing the dialog to avoid focus issues with 2 dialogs
         dialog.setVisible(false);
         File selectedFile = SwingHelper.promptForFile(dialog, null, "Choose a Chainsaw configuration file", true);
         URL result = null;
@@ -635,7 +631,7 @@
      * or null if they cancelled.
      */
     private URL browseFile(String title, boolean loadDialog) throws MalformedURLException {
-        //hiding and showing the dialog to avoid focus issues with 2 dialogs
+        // hiding and showing the dialog to avoid focus issues with 2 dialogs
         dialog.setVisible(false);
         File selectedFile = SwingHelper.promptForFile(dialog, null, title, loadDialog);
         URL result = null;
@@ -671,7 +667,7 @@
     class PanelModel {
 
         private File file;
-        //default to cancelled
+        // default to cancelled
         private boolean cancelled = true;
         private String lastLogFormat;
         private File saveConfigFile;
@@ -687,12 +683,14 @@
 
         int getNetworkReceiverPort() {
 
-            return Integer.parseInt(networkReceiverPortComboBoxModel.getSelectedItem().toString());
+            return Integer.parseInt(
+                    networkReceiverPortComboBoxModel.getSelectedItem().toString());
         }
 
-//        Class<? extends Receiver> getNetworkReceiverClass() throws ClassNotFoundException {
-//            return Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString()).asSubclass(Receiver.class);
-//        }
+        //        Class<? extends Receiver> getNetworkReceiverClass() throws ClassNotFoundException {
+        //            return
+        // Class.forName(networkReceiverClassNameComboBoxModel.getSelectedItem().toString()).asSubclass(Receiver.class);
+        //        }
 
         boolean isLoadConfig() {
 
@@ -710,7 +708,8 @@
         URL getConfigToLoad() {
 
             try {
-                return new URL(existingConfigurationComboBoxModel.getSelectedItem().toString());
+                return new URL(
+                        existingConfigurationComboBoxModel.getSelectedItem().toString());
             } catch (MalformedURLException e) {
                 return null;
             }
diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverEventListener.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverEventListener.java
index 309f72a..602dbab 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ReceiverEventListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverEventListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -23,8 +23,8 @@
  * as receivers being added or removed.
  */
 public interface ReceiverEventListener {
-    
+
     public void receiverAdded(ChainsawReceiver rx);
-    
+
     public void receiverRemoved(ChainsawReceiver rx);
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/RuleMediator.java b/src/main/java/org/apache/log4j/chainsaw/RuleMediator.java
index 5bf19ca..d2d2a17 100644
--- a/src/main/java/org/apache/log4j/chainsaw/RuleMediator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/RuleMediator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.rule.AbstractRule;
-import org.apache.log4j.rule.Rule;
-
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.util.Map;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.rule.AbstractRule;
+import org.apache.log4j.rule.Rule;
 
 /**
  * A mediator class that implements the Rule interface, by combining several
@@ -60,8 +57,8 @@
             }
         }
 
-        return (loggerRule == null || loggerRule.evaluate(e, null)) && (filterRule == null || filterRule.evaluate(e, null));
-
+        return (loggerRule == null || loggerRule.evaluate(e, null))
+                && (filterRule == null || filterRule.evaluate(e, null));
     }
 
     public boolean isFindRuleRequired() {
diff --git a/src/main/java/org/apache/log4j/chainsaw/ShutdownListener.java b/src/main/java/org/apache/log4j/chainsaw/ShutdownListener.java
index 1628052..7a2ef65 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ShutdownListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ShutdownListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,9 +16,8 @@
  */
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.logui.LogUI;
-
 import java.util.EventListener;
+import org.apache.log4j.chainsaw.logui.LogUI;
 
 /**
  * Chainsaw notifies these Listeners when the user has requested
diff --git a/src/main/java/org/apache/log4j/chainsaw/ShutdownManager.java b/src/main/java/org/apache/log4j/chainsaw/ShutdownManager.java
index e5aa005..5619377 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ShutdownManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ShutdownManager.java
@@ -1,17 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.log4j.chainsaw;
 
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.util.List;
+import javax.swing.*;
+import javax.swing.event.EventListenerList;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.log4j.chainsaw.osx.OSXIntegration;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import javax.swing.*;
-import javax.swing.event.EventListenerList;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.util.List;
-
 public class ShutdownManager {
     private static final Logger logger = LogManager.getLogger(ShutdownManager.class);
 
@@ -27,14 +42,18 @@
      */
     private Action shutdownAction = null;
 
-    public ShutdownManager(JFrame logUI, AbstractConfiguration configuration, List<ChainsawReceiver> receivers, EventListenerList shutdownListenerList) {
+    public ShutdownManager(
+            JFrame logUI,
+            AbstractConfiguration configuration,
+            List<ChainsawReceiver> receivers,
+            EventListenerList shutdownListenerList) {
         this.logUI = logUI;
         this.configuration = configuration;
         this.receivers = receivers;
         this.shutdownListenerList = shutdownListenerList;
 
         // TODO unnecessary
-        this.setShutdownAction( new AbstractAction() {
+        this.setShutdownAction(new AbstractAction() {
             public void actionPerformed(ActionEvent e) {
                 System.exit(0);
             }
@@ -47,11 +66,13 @@
     public boolean shutdown() {
         boolean confirmExit = configuration.getBoolean("confirmExit", true);
         if (confirmExit) {
-            if (
-                JOptionPane.showConfirmDialog(
-                    logUI, "Are you sure you want to exit Chainsaw?",
-                    "Confirm Exit", JOptionPane.YES_NO_OPTION,
-                    JOptionPane.INFORMATION_MESSAGE) != JOptionPane.YES_OPTION) {
+            if (JOptionPane.showConfirmDialog(
+                            logUI,
+                            "Are you sure you want to exit Chainsaw?",
+                            "Confirm Exit",
+                            JOptionPane.YES_NO_OPTION,
+                            JOptionPane.INFORMATION_MESSAGE)
+                    != JOptionPane.YES_OPTION) {
                 return false;
             }
         }
@@ -66,33 +87,32 @@
         progressWindow.setLocation(p);
         progressWindow.setVisible(true);
 
-        Runnable runnable =
-            () -> {
-                try {
-                    int progress = 1;
-                    final int delay = 25;
+        Runnable runnable = () -> {
+            try {
+                int progress = 1;
+                final int delay = 25;
 
-                    panel.setProgress(progress++);
+                panel.setProgress(progress++);
 
-                    Thread.sleep(delay);
+                Thread.sleep(delay);
 
-                    for( ChainsawReceiver rx : receivers){
-                        rx.shutdown();
-                    }
-                    panel.setProgress(progress++);
-
-                    Thread.sleep(delay);
-
-                    panel.setProgress(progress++);
-                    Thread.sleep(delay);
-                } catch (Exception e) {
-                    logger.error(e,e);
+                for (ChainsawReceiver rx : receivers) {
+                    rx.shutdown();
                 }
+                panel.setProgress(progress++);
 
-                fireShutdownEvent();
-                performShutdownAction();
-                progressWindow.setVisible(false);
-            };
+                Thread.sleep(delay);
+
+                panel.setProgress(progress++);
+                Thread.sleep(delay);
+            } catch (Exception e) {
+                logger.error(e, e);
+            }
+
+            fireShutdownEvent();
+            performShutdownAction();
+            progressWindow.setVisible(false);
+        };
 
         if (OSXIntegration.IS_OSX) {
             /*
@@ -134,10 +154,8 @@
      * actionPerformed(...) method.
      */
     private void performShutdownAction() {
-        logger.debug(
-            "Calling the shutdown Action. Goodbye!");
+        logger.debug("Calling the shutdown Action. Goodbye!");
 
-        shutdownAction.actionPerformed(
-            new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Shutting Down"));
+        shutdownAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "Shutting Down"));
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/SortTableModel.java b/src/main/java/org/apache/log4j/chainsaw/SortTableModel.java
index 5b55a3e..bd160c0 100644
--- a/src/main/java/org/apache/log4j/chainsaw/SortTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/SortTableModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
 import javax.swing.table.TableModel;
 
-
 /**
  * An extended TableModel interface that allows Column sorting
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
index d189d1a..8f8d673 100644
--- a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,34 +14,29 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw;
 
-import org.apache.log4j.chainsaw.color.RuleColorizer;
-import org.apache.log4j.chainsaw.components.logpanel.LogPanelPreferenceModel;
-import org.apache.log4j.chainsaw.icons.LevelIconFactory;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.Rule;
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
-import javax.swing.*;
-import javax.swing.border.Border;
-import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.TableColumn;
-import javax.swing.text.*;
 import java.awt.*;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
-
+import javax.swing.*;
+import javax.swing.border.Border;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.text.*;
 import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.log4j.chainsaw.color.RuleColorizer;
+import org.apache.log4j.chainsaw.components.logpanel.LogPanelPreferenceModel;
+import org.apache.log4j.chainsaw.icons.LevelIconFactory;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
-
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.Rule;
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A specific TableCellRenderer that colourizes a particular cell based on
@@ -90,9 +85,13 @@
     /**
      * Creates a new TableColorizingRenderer object.
      */
-    public TableColorizingRenderer(SettingsManager settingsManager, RuleColorizer colorizer,
-                                   EventContainer eventContainer, LogPanelPreferenceModel logPanelPreferenceModel,
-                                   ApplicationPreferenceModel applicationPreferenceModel, boolean colorizeSearch) {
+    public TableColorizingRenderer(
+            SettingsManager settingsManager,
+            RuleColorizer colorizer,
+            EventContainer eventContainer,
+            LogPanelPreferenceModel logPanelPreferenceModel,
+            ApplicationPreferenceModel applicationPreferenceModel,
+            boolean colorizeSearch) {
         this.settingsManager = settingsManager;
         this.applicationPreferenceModel = applicationPreferenceModel;
         this.logPanelPreferenceModel = logPanelPreferenceModel;
@@ -107,7 +106,7 @@
         try {
             iconMap.putAll(LevelIconFactory.getInstance().getLevelToIconMap());
         } catch (IllegalStateException ise) {
-            //ignore
+            // ignore
         }
 
         if (UIManager.get("Table.selectionBackground") != null) {
@@ -115,18 +114,18 @@
         } else {
             borderColor = Color.BLUE;
         }
-        //define the 'bold' attributeset
+        // define the 'bold' attributeset
         boldAttributeSet = new SimpleAttributeSet();
         StyleConstants.setBold(boldAttributeSet, true);
 
         insetAttributeSet = new SimpleAttributeSet();
         StyleConstants.setLeftIndent(insetAttributeSet, 6);
-        //throwable col may have a tab..if so, render the tab as col zero
+        // throwable col may have a tab..if so, render the tab as col zero
         int pos = 0;
         int align = TabStop.ALIGN_LEFT;
         int leader = TabStop.LEAD_NONE;
         TabStop tabStop = new TabStop(pos, align, leader);
-        tabs = new TabSet(new TabStop[]{tabStop});
+        tabs = new TabSet(new TabStop[] {tabStop});
 
         levelTextPane.setOpaque(true);
         levelTextPane.setText("");
@@ -153,35 +152,34 @@
     }
 
     public Component getTableCellRendererComponent(
-        final JTable table, Object value, boolean isSelected, boolean hasFocus,
-        int row, int col) {
+            final JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
         EventContainer container = (EventContainer) table.getModel();
         LoggingEventWrapper loggingEventWrapper = container.getRow(row);
         value = formatField(value, loggingEventWrapper);
         TableColumn tableColumn = table.getColumnModel().getColumn(col);
         int width = tableColumn.getWidth();
-        JLabel label = (JLabel) super.getTableCellRendererComponent(table, value,
-            isSelected, hasFocus, row, col);
-        //chainsawcolumns uses one-based indexing
+        JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
+        // chainsawcolumns uses one-based indexing
         int colIndex = tableColumn.getModelIndex() + 1;
 
-        //no event, use default renderer
+        // no event, use default renderer
         if (loggingEventWrapper == null) {
             return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
         }
         long delta = 0;
         if (row > 0) {
             LoggingEventWrapper previous = eventContainer.getRow(row - 1);
-            long millisBetween = ChronoUnit.MILLIS.between( loggingEventWrapper.getLoggingEvent().m_timestamp, previous.getLoggingEvent().m_timestamp );
-            delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, 
-                    Math.max(0, (long) ((millisBetween) * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
+            long millisBetween = ChronoUnit.MILLIS.between(
+                    loggingEventWrapper.getLoggingEvent().m_timestamp, previous.getLoggingEvent().m_timestamp);
+            delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long)
+                    ((millisBetween) * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
         }
 
         Map matches = loggingEventWrapper.getSearchMatches();
 
         JComponent component;
         switch (colIndex) {
-/*            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
+                /*            case ChainsawColumns.INDEX_THROWABLE_COL_NAME:
                 if (value instanceof String[] && ((String[]) value).length > 0) {
                     Style tabStyle = singleLineTextPane.getLogicalStyle();
                     StyleConstants.setTabSet(tabStyle, tabs);
@@ -212,48 +210,52 @@
                     }
                 }
                 singleLineTextPane.setText(logger.substring(startPos + 1));
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LOGGER_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LOGGER_FIELD), (StyledDocument)
+                        singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
                 break;
             case ChainsawColumns.INDEX_ID_COL_NAME:
                 singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.PROP_FIELD + "LOG4JID"), (StyledDocument) singleLineTextPane.getDocument());
+                setHighlightAttributesInternal(
+                        matches.get(LoggingEventFieldResolver.PROP_FIELD + "LOG4JID"),
+                        (StyledDocument) singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
                 break;
-/*            case ChainsawColumns.INDEX_CLASS_COL_NAME:
-                singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.CLASS_FIELD), (StyledDocument) singleLineTextPane.getDocument());
-                layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
-                component = generalPanel;
-                break;
-            case ChainsawColumns.INDEX_FILE_COL_NAME:
-                singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.FILE_FIELD), (StyledDocument) singleLineTextPane.getDocument());
-                layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
-                component = generalPanel;
-                break;
-            case ChainsawColumns.INDEX_LINE_COL_NAME:
-                singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LINE_FIELD), (StyledDocument) singleLineTextPane.getDocument());
-                layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
-                component = generalPanel;
-                break;
-            case ChainsawColumns.INDEX_NDC_COL_NAME:
-                singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.NDC_FIELD), (StyledDocument) singleLineTextPane.getDocument());
-                layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
-                component = generalPanel;
-                break;
-            case ChainsawColumns.INDEX_THREAD_COL_NAME:
-                singleLineTextPane.setText(value.toString());
-                setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.THREAD_FIELD), (StyledDocument) singleLineTextPane.getDocument());
-                layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
-                component = generalPanel;
-                break;*/
+                /*            case ChainsawColumns.INDEX_CLASS_COL_NAME:
+                    singleLineTextPane.setText(value.toString());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.CLASS_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                    layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
+                    component = generalPanel;
+                    break;
+                case ChainsawColumns.INDEX_FILE_COL_NAME:
+                    singleLineTextPane.setText(value.toString());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.FILE_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                    layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
+                    component = generalPanel;
+                    break;
+                case ChainsawColumns.INDEX_LINE_COL_NAME:
+                    singleLineTextPane.setText(value.toString());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LINE_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                    layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
+                    component = generalPanel;
+                    break;
+                case ChainsawColumns.INDEX_NDC_COL_NAME:
+                    singleLineTextPane.setText(value.toString());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.NDC_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                    layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
+                    component = generalPanel;
+                    break;
+                case ChainsawColumns.INDEX_THREAD_COL_NAME:
+                    singleLineTextPane.setText(value.toString());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.THREAD_FIELD), (StyledDocument) singleLineTextPane.getDocument());
+                    layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
+                    component = generalPanel;
+                    break;*/
             case ChainsawColumns.INDEX_TIMESTAMP_COL_NAME:
-                //timestamp matches contain the millis..not the display text..just highlight if we have a match for the timestamp field
+                // timestamp matches contain the millis..not the display text..just highlight if we have a match for the
+                // timestamp field
                 Set timestampMatches = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
                 if (timestampMatches != null && timestampMatches.size() > 0) {
                     singleLineTextPane.setText(value.toString());
@@ -264,7 +266,7 @@
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
                 component = generalPanel;
                 break;
-/*            case ChainsawColumns.INDEX_METHOD_COL_NAME:
+                /*            case ChainsawColumns.INDEX_METHOD_COL_NAME:
                 singleLineTextPane.setText(value.toString());
                 setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.METHOD_FIELD), (StyledDocument) singleLineTextPane.getDocument());
                 layoutRenderingPanel(generalPanel, singleLineTextPane, delta, isSelected, width, col, table);
@@ -278,10 +280,13 @@
                 textPane.setText(thisString);
 
                 if (colIndex == ChainsawColumns.INDEX_LOG4J_MARKER_COL_NAME) {
-                    //property keys are set as all uppercase
-                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME), (StyledDocument) textPane.getDocument());
+                    // property keys are set as all uppercase
+                    setHighlightAttributesInternal(
+                            matches.get(LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME),
+                            (StyledDocument) textPane.getDocument());
                 } else {
-                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.MSG_FIELD), (StyledDocument) textPane.getDocument());
+                    setHighlightAttributesInternal(
+                            matches.get(LoggingEventFieldResolver.MSG_FIELD), (StyledDocument) textPane.getDocument());
                 }
                 textPaneContainer.removeAll();
                 if (delta > 0 && logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
@@ -316,19 +321,18 @@
                 boolean setHeight = false;
 
                 if (wrap) {
-            /*
-            calculating the height -would- be the correct thing to do, but setting the size to screen size works as well and
-            doesn't incur massive overhead, like calculateHeight does
-            Map paramMap = new HashMap();
-            paramMap.put(TextAttribute.FONT, multiLineTextPane.getFont());
+                    /*
+                    calculating the height -would- be the correct thing to do, but setting the size to screen size works as well and
+                    doesn't incur massive overhead, like calculateHeight does
+                    Map paramMap = new HashMap();
+                    paramMap.put(TextAttribute.FONT, multiLineTextPane.getFont());
 
-            int calculatedHeight = calculateHeight(thisString, width, paramMap);
-             */
-                    //instead, set size to max height
+                    int calculatedHeight = calculateHeight(thisString, width, paramMap);
+                     */
+                    // instead, set size to max height
                     textPane.setSize(new Dimension(width, maxHeight));
                     int multiLinePanelPrefHeight = textPaneContainer.getPreferredSize().height;
                     newRowHeight = Math.max(ChainsawConstants.DEFAULT_ROW_HEIGHT, multiLinePanelPrefHeight);
-
                 }
                 if (!wrap && logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
                     textPane.setSize(new Dimension(Integer.MAX_VALUE, ChainsawConstants.DEFAULT_ROW_HEIGHT));
@@ -363,7 +367,8 @@
                     }
                 } else {
                     levelTextPane.setText(value.toString());
-                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LEVEL_FIELD), (StyledDocument) levelTextPane.getDocument());
+                    setHighlightAttributesInternal(matches.get(LoggingEventFieldResolver.LEVEL_FIELD), (StyledDocument)
+                            levelTextPane.getDocument());
                     if (!toolTipsVisible) {
                         levelTextPane.setToolTipText(null);
                     }
@@ -377,12 +382,12 @@
                 component = levelPanel;
                 break;
 
-            //remaining entries are properties
+                // remaining entries are properties
             default:
                 Set propertySet = loggingEventWrapper.getPropertyKeySet();
                 String headerName = tableColumn.getHeaderValue().toString().toLowerCase();
                 String thisProp = null;
-                //find the property in the property set...case-sensitive
+                // find the property in the property set...case-sensitive
                 for (Object aPropertySet : propertySet) {
                     String entry = aPropertySet.toString();
                     if (entry.equalsIgnoreCase(headerName)) {
@@ -393,7 +398,8 @@
                 if (thisProp != null) {
                     String propKey = LoggingEventFieldResolver.PROP_FIELD + thisProp.toUpperCase();
                     Set propKeyMatches = (Set) matches.get(propKey);
-                    singleLineTextPane.setText(loggingEventWrapper.getLoggingEvent().getProperty(thisProp));
+                    singleLineTextPane.setText(
+                            loggingEventWrapper.getLoggingEvent().getProperty(thisProp));
                     setHighlightAttributesInternal(propKeyMatches, (StyledDocument) singleLineTextPane.getDocument());
                 } else {
                     singleLineTextPane.setText("");
@@ -407,14 +413,22 @@
         Color foreground;
         Rule loggerRule = colorizer.getLoggerRule();
         AbstractConfiguration configuration = settingsManager.getGlobalConfiguration();
-        //use logger colors in table instead of event colors if event passes logger rule
+        // use logger colors in table instead of event colors if event passes logger rule
         if (loggerRule != null && loggerRule.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
-            background = configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND);
-            foreground = configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND);
+            background =
+                    configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND);
+            foreground =
+                    configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND);
         } else {
             if (colorizeSearch && !configuration.getBoolean("bypassSearchColors", false)) {
-                background = loggingEventWrapper.isSearchMatch() ? configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND) : loggingEventWrapper.getBackground();
-                foreground = loggingEventWrapper.isSearchMatch() ? configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND) : loggingEventWrapper.getForeground();
+                background = loggingEventWrapper.isSearchMatch()
+                        ? configuration.get(
+                                Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND)
+                        : loggingEventWrapper.getBackground();
+                foreground = loggingEventWrapper.isSearchMatch()
+                        ? configuration.get(
+                                Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND)
+                        : loggingEventWrapper.getForeground();
             } else {
                 background = loggingEventWrapper.getBackground();
                 foreground = loggingEventWrapper.getForeground();
@@ -424,15 +438,19 @@
         /**
          * Colourize background based on row striping if the event still has default foreground and background color
          */
-        if (background.equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) && foreground.equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND) && (row % 2) != 0) {
-            background = configuration.get(Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND);
-            foreground = configuration.get(Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND);
+        if (background.equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                && foreground.equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)
+                && (row % 2) != 0) {
+            background = configuration.get(
+                    Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND);
+            foreground = configuration.get(
+                    Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND);
         }
 
         component.setBackground(background);
         component.setForeground(foreground);
 
-        //update the background & foreground of the jtextpane using styles
+        // update the background & foreground of the jtextpane using styles
         if (multiLineTextPane != null) {
             updateColors(multiLineTextPane, background, foreground);
         }
@@ -442,8 +460,14 @@
         return component;
     }
 
-    private void layoutRenderingPanel(JComponent container, JComponent bottomComponent, long delta, boolean isSelected,
-                                      int width, int col, JTable table) {
+    private void layoutRenderingPanel(
+            JComponent container,
+            JComponent bottomComponent,
+            long delta,
+            boolean isSelected,
+            int width,
+            int col,
+            JTable table) {
         container.removeAll();
         if (delta == 0 || !logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
             if (col == 0) {
@@ -479,7 +503,8 @@
         if (delta == 0 || !wrap || !logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
             return innerBorder;
         } else {
-            Border outerBorder = BorderFactory.createMatteBorder((int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
+            Border outerBorder = BorderFactory.createMatteBorder(
+                    (int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
             return BorderFactory.createCompoundBorder(outerBorder, innerBorder);
         }
     }
@@ -491,7 +516,8 @@
         if (delta == 0 || !wrap || !logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
             return innerBorder;
         } else {
-            Border outerBorder = BorderFactory.createMatteBorder((int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
+            Border outerBorder = BorderFactory.createMatteBorder(
+                    (int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
             return BorderFactory.createCompoundBorder(outerBorder, innerBorder);
         }
     }
@@ -503,7 +529,8 @@
         if (delta == 0 || !wrap || !logPanelPreferenceModel.isShowMillisDeltaAsGap()) {
             return innerBorder;
         } else {
-            Border outerBorder = BorderFactory.createMatteBorder((int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
+            Border outerBorder = BorderFactory.createMatteBorder(
+                    (int) Math.max(borderWidth, delta), 0, 0, 0, applicationPreferenceModel.getDeltaColor());
             return BorderFactory.createCompoundBorder(outerBorder, innerBorder);
         }
     }
@@ -553,7 +580,7 @@
             return (field == null ? "" : field);
         }
 
-        //handle date field
+        // handle date field
         if (useRelativeTimesToFixedTime) {
             ZonedDateTime dt = ((Instant) field).atZone(ZoneOffset.UTC);
             return "" + ChronoUnit.MILLIS.between(dt, relativeTimestampBase);
@@ -562,7 +589,7 @@
             return loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
         }
 
-        return dateFormatInUse.format(Date.from((Instant)field));
+        return dateFormatInUse.format(Date.from((Instant) field));
     }
 
     /**
@@ -600,9 +627,9 @@
     public void setUseRelativeTimes(ZonedDateTime timeStamp) {
         useRelativeTimesToFixedTime = true;
         useRelativeTimesToPrevious = false;
-        if( timeStamp != null ){
+        if (timeStamp != null) {
             relativeTimestampBase = timeStamp;
-        }else{
+        } else {
             relativeTimestampBase = ZonedDateTime.now();
         }
     }
@@ -617,24 +644,24 @@
         useRelativeTimesToPrevious = false;
     }
 
-  /*
-   private int calculateHeight(String string, int width, Map paramMap) {
-     if (string.trim().length() == 0) {
-         return ChainsawConstants.DEFAULT_ROW_HEIGHT;
+    /*
+    private int calculateHeight(String string, int width, Map paramMap) {
+      if (string.trim().length() == 0) {
+          return ChainsawConstants.DEFAULT_ROW_HEIGHT;
+      }
+      AttributedCharacterIterator paragraph = new AttributedString(string, paramMap).getIterator();
+      LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, new FontRenderContext(null, true, true));
+      float height = 0;
+      lineMeasurer.setPosition(paragraph.getBeginIndex());
+      TextLayout layout;
+      while (lineMeasurer.getPosition() < paragraph.getEndIndex()) {
+        layout = lineMeasurer.nextLayout(width);
+          float layoutHeight = layout.getAscent() + layout.getDescent() + layout.getLeading();
+          height += layoutHeight;
+      }
+      return Math.max(ChainsawConstants.DEFAULT_ROW_HEIGHT, (int) height);
      }
-     AttributedCharacterIterator paragraph = new AttributedString(string, paramMap).getIterator();
-     LineBreakMeasurer lineMeasurer = new LineBreakMeasurer(paragraph, new FontRenderContext(null, true, true));
-     float height = 0;
-     lineMeasurer.setPosition(paragraph.getBeginIndex());
-     TextLayout layout;
-     while (lineMeasurer.getPosition() < paragraph.getEndIndex()) {
-       layout = lineMeasurer.nextLayout(width);
-         float layoutHeight = layout.getAscent() + layout.getDescent() + layout.getLeading();
-         height += layoutHeight;
-     }
-     return Math.max(ChainsawConstants.DEFAULT_ROW_HEIGHT, (int) height);
-    }
-    */
+     */
 
     private void setHighlightAttributesInternal(Object matchSet, StyledDocument styledDocument) {
         if (!highlightSearchMatchText) {
@@ -662,7 +689,8 @@
 
     private void bold(String textToBold, StyledDocument styledDocument) {
         try {
-            String lowerInput = styledDocument.getText(0, styledDocument.getLength()).toLowerCase();
+            String lowerInput =
+                    styledDocument.getText(0, styledDocument.getLength()).toLowerCase();
             String lowerTextToBold = textToBold.toLowerCase();
             int textToBoldLength = textToBold.length();
             int firstIndex = 0;
@@ -672,7 +700,7 @@
                 firstIndex = currentIndex + textToBoldLength;
             }
         } catch (BadLocationException e) {
-            //ignore
+            // ignore
         }
     }
 
@@ -714,7 +742,7 @@
             super(elem);
         }
 
-        //this is the main fix - set the flow span to be max val
+        // this is the main fix - set the flow span to be max val
         public int getFlowSpan(int index) {
             return Integer.MAX_VALUE;
         }
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 f3ac3b3..6077b97 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/ColorPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,22 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.color;
 
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.ExpressionRuleContext;
-import org.apache.log4j.chainsaw.filter.FilterModel;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.rule.ColorRule;
-import org.apache.log4j.rule.ExpressionRule;
-import org.apache.log4j.rule.Rule;
-
-import javax.swing.*;
-import javax.swing.border.Border;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableCellRenderer;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -38,16 +24,26 @@
 import java.awt.event.MouseEvent;
 import java.util.*;
 import java.util.List;
+import javax.swing.*;
+import javax.swing.border.Border;
 import javax.swing.table.AbstractTableModel;
+import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellEditor;
-
+import javax.swing.table.TableCellRenderer;
 import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.ExpressionRuleContext;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
+import org.apache.log4j.chainsaw.filter.FilterModel;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.rule.ColorRule;
+import org.apache.log4j.rule.ExpressionRule;
+import org.apache.log4j.rule.Rule;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * Panel which updates a RuleColorizer, allowing the user to build expression-based
  * color rules.
@@ -84,10 +80,12 @@
     private JLabel rulesLabel;
     private SettingsManager settingsManager;
 
-    public ColorPanel(SettingsManager settingsManager, final RuleColorizer globalColorizer,
-                      final FilterModel filterModel,
-                      final Map<String, RuleColorizer> allLogPanelColorizers,
-                      final LogPanel parent) {
+    public ColorPanel(
+            SettingsManager settingsManager,
+            final RuleColorizer globalColorizer,
+            final FilterModel filterModel,
+            final Map<String, RuleColorizer> allLogPanelColorizers,
+            final LogPanel parent) {
         super(new BorderLayout());
         this.settingsManager = settingsManager;
 
@@ -98,15 +96,12 @@
         this.globalColorizer = globalColorizer;
         this.parentLogPanel = parent;
 
-        parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener(
-            "colorrule",
-            evt -> updateColors());
+        parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener("colorrule", evt -> updateColors());
 
         rulesTableModel = new RulesTableModel();
         rulesTable = new JTable(rulesTableModel);
         rulesTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
-        rulesTable.getColumnModel().getColumn(0)
-                .setCellEditor(new RulesTableCellEditor());
+        rulesTable.getColumnModel().getColumn(0).setCellEditor(new RulesTableCellEditor());
 
         searchTableModel = new DefaultTableModel();
         searchTable = new JTable(searchTableModel);
@@ -122,18 +117,22 @@
         searchColumns.add("Background");
         searchColumns.add("Foreground");
 
-        //searchtable contains only a single-entry vector containing a two-item vector (foreground, background)
+        // searchtable contains only a single-entry vector containing a two-item vector (foreground, background)
         Vector<Vector<Color>> searchDataVector = new Vector<>();
         searchDataVectorEntry = new Vector<>();
-        searchDataVectorEntry.add(configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND));
-        searchDataVectorEntry.add(configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND));
+        searchDataVectorEntry.add(
+                configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND));
+        searchDataVectorEntry.add(
+                configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND));
         searchDataVector.add(searchDataVectorEntry);
         searchTableModel.setDataVector(searchDataVector, searchColumns);
 
         Vector<Vector<Color>> alternatingColorDataVector = new Vector<>();
         alternatingColorDataVectorEntry = new Vector<>();
-        alternatingColorDataVectorEntry.add(configuration.get(Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND));
-        alternatingColorDataVectorEntry.add(configuration.get(Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND));
+        alternatingColorDataVectorEntry.add(configuration.get(
+                Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND));
+        alternatingColorDataVectorEntry.add(configuration.get(
+                Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND));
         alternatingColorDataVector.add(alternatingColorDataVectorEntry);
 
         Vector<String> alternatingColorColumns = new Vector<>();
@@ -156,7 +155,7 @@
         searchTable.getColumnModel().getColumn(1).setPreferredWidth(80);
         searchTable.getColumnModel().getColumn(0).setMaxWidth(80);
         searchTable.getColumnModel().getColumn(1).setMaxWidth(80);
-        //building color choosers needs to be done on the EDT
+        // building color choosers needs to be done on the EDT
         SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(searchTable));
 
         alternatingColorTable.sizeColumnsToFit(0);
@@ -164,7 +163,7 @@
         alternatingColorTable.getColumnModel().getColumn(1).setPreferredWidth(80);
         alternatingColorTable.getColumnModel().getColumn(0).setMaxWidth(80);
         alternatingColorTable.getColumnModel().getColumn(1).setMaxWidth(80);
-        //building color choosers needs to be done on the EDT
+        // building color choosers needs to be done on the EDT
         SwingHelper.invokeOnEDT(() -> configureSingleEntryColorTable(alternatingColorTable));
 
         configureTable();
@@ -174,8 +173,7 @@
         JPanel rightPanel = new JPanel(new BorderLayout());
 
         JPanel rightOuterPanel = new JPanel();
-        rightOuterPanel.setLayout(
-            new BoxLayout(rightOuterPanel, BoxLayout.X_AXIS));
+        rightOuterPanel.setLayout(new BoxLayout(rightOuterPanel, BoxLayout.X_AXIS));
         rightOuterPanel.add(Box.createHorizontalStrut(10));
 
         JPanel southPanel = new JPanel();
@@ -233,9 +231,9 @@
                     newColorizer.setRules(sourceColorizer.getRules());
                     parent.setRuleColorizer(newColorizer);
                     updateColors();
-                    parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener(
-                        "colorrule",
-                        evt -> updateColors());
+                    parentLogPanel
+                            .getCurrentRuleColorizer()
+                            .addPropertyChangeListener("colorrule", evt -> updateColors());
                 }
             }
         };
@@ -267,28 +265,38 @@
         }
         RuleColorizer currentLogPanelColorizer = parentLogPanel.getCurrentRuleColorizer();
         for (Map.Entry<String, RuleColorizer> entry : allLogPanelColorizers.entrySet()) {
-            if (!entry.getValue().equals(currentLogPanelColorizer) && (logPanelColorizersModel.getIndexOf(entry.getKey()) == -1)) {
+            if (!entry.getValue().equals(currentLogPanelColorizer)
+                    && (logPanelColorizersModel.getIndexOf(entry.getKey()) == -1)) {
                 logPanelColorizersModel.addElement(entry.getKey());
             }
         }
 
         AbstractConfiguration configuration = settingsManager.getGlobalConfiguration();
-        //update search and alternating colors, since they may have changed from another color panel
-        searchDataVectorEntry.set(0, configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND));
-        searchDataVectorEntry.set(1, configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND));
-        alternatingColorDataVectorEntry.set(0, configuration.get(Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND));
-        alternatingColorDataVectorEntry.set(1, configuration.get(Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND));
+        // update search and alternating colors, since they may have changed from another color panel
+        searchDataVectorEntry.set(
+                0, configuration.get(Color.class, "searchBackgroundColor", ChainsawConstants.FIND_LOGGER_BACKGROUND));
+        searchDataVectorEntry.set(
+                1, configuration.get(Color.class, "searchForegroundColor", ChainsawConstants.FIND_LOGGER_FOREGROUND));
+        alternatingColorDataVectorEntry.set(
+                0,
+                configuration.get(
+                        Color.class, "alternatingColorBackground", ChainsawConstants.COLOR_ODD_ROW_BACKGROUND));
+        alternatingColorDataVectorEntry.set(
+                1,
+                configuration.get(
+                        Color.class, "alternatingColorForeground", ChainsawConstants.COLOR_ODD_ROW_FOREGROUND));
     }
 
-    public void componentChanged(){
-        logger.debug( "Color panel changed. Current colorizer: {} Global colorizer: {}",
+    public void componentChanged() {
+        logger.debug(
+                "Color panel changed. Current colorizer: {} Global colorizer: {}",
                 parentLogPanel.getCurrentRuleColorizer(),
-            globalColorizer);
+                globalColorizer);
 
-        if( globalColorizer == parentLogPanel.getCurrentRuleColorizer() ){
+        if (globalColorizer == parentLogPanel.getCurrentRuleColorizer()) {
             globalRulesCheckbox.setSelected(true);
             rulesLabel.setText("Global rules:");
-        }else{
+        } else {
             globalRulesCheckbox.setSelected(false);
             rulesLabel.setText("Rules:");
         }
@@ -341,27 +349,21 @@
     }
 
     private void configureTable() {
-        prepareTable(rulesTable, 1,2);
+        prepareTable(rulesTable, 1, 2);
 
         JTextField textField = new JTextField();
         textField.addKeyListener(new ExpressionRuleContext(filterModel, textField));
 
-
-        rulesTable.getColumnModel().getColumn(0).setCellRenderer(
-            new ExpressionTableCellRenderer());
-        rulesTable.getColumnModel().getColumn(1).setCellRenderer(
-            new ColorTableCellRenderer());
-        rulesTable.getColumnModel().getColumn(2).setCellRenderer(
-            new ColorTableCellRenderer());
+        rulesTable.getColumnModel().getColumn(0).setCellRenderer(new ExpressionTableCellRenderer());
+        rulesTable.getColumnModel().getColumn(1).setCellRenderer(new ColorTableCellRenderer());
+        rulesTable.getColumnModel().getColumn(2).setCellRenderer(new ColorTableCellRenderer());
     }
 
     private void configureSingleEntryColorTable(JTable thisTable) {
         prepareTable(thisTable, 0, 1);
 
-        thisTable.getColumnModel().getColumn(0).setCellRenderer(
-            new ColorTableCellRenderer());
-        thisTable.getColumnModel().getColumn(1).setCellRenderer(
-            new ColorTableCellRenderer());
+        thisTable.getColumnModel().getColumn(0).setCellRenderer(new ColorTableCellRenderer());
+        thisTable.getColumnModel().getColumn(1).setCellRenderer(new ColorTableCellRenderer());
     }
 
     private JTable prepareTable(JTable table, int backgroundEditorPosition, int foregroundEditorPosition) {
@@ -407,7 +409,7 @@
         rulesTable.getColumnModel().getColumn(0).getCellEditor().stopCellEditing();
 
         ((ExpressionTableCellRenderer) rulesTable.getColumnModel().getColumn(0).getCellRenderer())
-            .setToolTipText(LABEL_DOUBLE_CLICK_TO_EDIT);
+                .setToolTipText(LABEL_DOUBLE_CLICK_TO_EDIT);
         statusBar.setText(DEFAULT_STATUS);
 
         applyingColorizer.setRules(rulesTableModel.rules());
@@ -420,25 +422,23 @@
 
         JButton applyButton = new JButton(" Apply ");
 
-        applyButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    applyRules(parentLogPanel.getCurrentRuleColorizer());
-                    saveSearchColors();
-                }
-            });
+        applyButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                applyRules(parentLogPanel.getCurrentRuleColorizer());
+                saveSearchColors();
+            }
+        });
 
         panel.add(Box.createHorizontalStrut(10));
         panel.add(applyButton);
 
         JButton closeButton = new JButton(" Close ");
 
-        closeButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    hidePanel();
-                }
-            });
+        closeButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                hidePanel();
+            }
+        });
         panel.add(Box.createHorizontalStrut(10));
         panel.add(closeButton);
 
@@ -465,29 +465,28 @@
         upButton.setEnabled(false);
         downButton.setEnabled(false);
 
-        rulesTable.getSelectionModel().addListSelectionListener(
-            e -> {
-                if (!e.getValueIsAdjusting()) {
-                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
+        rulesTable.getSelectionModel().addListSelectionListener(e -> {
+            if (!e.getValueIsAdjusting()) {
+                int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
 
-                    if (index < 0) {
-                        downButton.setEnabled(false);
-                        upButton.setEnabled(false);
-                    } else if ((index == 0) && (rulesTableModel.getRowCount() == 1)) {
-                        downButton.setEnabled(false);
-                        upButton.setEnabled(false);
-                    } else if ((index == 0) && (rulesTableModel.getRowCount() > 1)) {
-                        downButton.setEnabled(true);
-                        upButton.setEnabled(false);
-                    } else if (index == (rulesTableModel.getRowCount() - 1)) {
-                        downButton.setEnabled(false);
-                        upButton.setEnabled(true);
-                    } else {
-                        downButton.setEnabled(true);
-                        upButton.setEnabled(true);
-                    }
+                if (index < 0) {
+                    downButton.setEnabled(false);
+                    upButton.setEnabled(false);
+                } else if ((index == 0) && (rulesTableModel.getRowCount() == 1)) {
+                    downButton.setEnabled(false);
+                    upButton.setEnabled(false);
+                } else if ((index == 0) && (rulesTableModel.getRowCount() > 1)) {
+                    downButton.setEnabled(true);
+                    upButton.setEnabled(false);
+                } else if (index == (rulesTableModel.getRowCount() - 1)) {
+                    downButton.setEnabled(false);
+                    upButton.setEnabled(true);
+                } else {
+                    downButton.setEnabled(true);
+                    upButton.setEnabled(true);
                 }
-            });
+            }
+        });
 
         JPanel upPanel = new JPanel();
 
@@ -502,21 +501,19 @@
         innerPanel.add(downPanel);
         panel.add(innerPanel, BorderLayout.CENTER);
 
-        upButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
-                    rulesTableModel.moveRowAtIndexUp(index);
-                }
-            });
+        upButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
+                rulesTableModel.moveRowAtIndexUp(index);
+            }
+        });
 
-        downButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
-                    rulesTableModel.moveRowAtIndexDown(index);
-                }
-            });
+        downButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
+                rulesTableModel.moveRowAtIndexDown(index);
+            }
+        });
 
         return panel;
     }
@@ -531,26 +528,23 @@
         rulesLabel = new JLabel("Rules:");
         globalRulesCheckbox = new JCheckBox("Use global rules");
 
-        if( globalColorizer == parentLogPanel.getCurrentRuleColorizer() ){
+        if (globalColorizer == parentLogPanel.getCurrentRuleColorizer()) {
             globalRulesCheckbox.setSelected(true);
             rulesLabel.setText("Global rules:");
         }
 
-        globalRulesCheckbox.addActionListener(
-                new AbstractAction() {
-                    @Override
-                    public void actionPerformed(ActionEvent ae) {
-                        if( globalRulesCheckbox.isSelected() ){
-                            parentLogPanel.setRuleColorizer(globalColorizer);
-                        }else{
-                            parentLogPanel.setRuleColorizer(new RuleColorizer());
-                        }
-                        componentChanged();
-                        parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener(
-                            "colorrule",
-                            evt -> updateColors());
-                    }
-                });
+        globalRulesCheckbox.addActionListener(new AbstractAction() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                if (globalRulesCheckbox.isSelected()) {
+                    parentLogPanel.setRuleColorizer(globalColorizer);
+                } else {
+                    parentLogPanel.setRuleColorizer(new RuleColorizer());
+                }
+                componentChanged();
+                parentLogPanel.getCurrentRuleColorizer().addPropertyChangeListener("colorrule", evt -> updateColors());
+            }
+        });
 
         panel.add(globalRulesCheckbox);
         panel.add(rulesLabel);
@@ -560,12 +554,11 @@
 
         JPanel newPanel = new JPanel();
         JButton newButton = new JButton(" New ");
-        newButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    rulesTableModel.addNewRule();
-                }
-            });
+        newButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                rulesTableModel.addNewRule();
+            }
+        });
 
         newPanel.add(newButton);
 
@@ -573,21 +566,19 @@
         final JButton deleteButton = new JButton(" Delete ");
         deleteButton.setEnabled(false);
 
-        deleteButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent evt) {
-                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
-                    rulesTableModel.deleteRuleAtIndex(index);
-                }
-            });
+        deleteButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent evt) {
+                int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
+                rulesTableModel.deleteRuleAtIndex(index);
+            }
+        });
 
-        rulesTable.getSelectionModel().addListSelectionListener(
-            e -> {
-                if (!e.getValueIsAdjusting()) {
-                    int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
-                    deleteButton.setEnabled(index >= 0);
-                }
-            });
+        rulesTable.getSelectionModel().addListSelectionListener(e -> {
+            if (!e.getValueIsAdjusting()) {
+                int index = rulesTable.getSelectionModel().getMaxSelectionIndex();
+                deleteButton.setEnabled(index >= 0);
+            }
+        });
 
         deletePanel.add(deleteButton);
 
@@ -612,8 +603,7 @@
         }
 
         public Component getListCellRendererComponent(
-            JList list, Object value, int index, boolean isSelected,
-            boolean cellHasFocus) {
+                JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
             setText(" ");
 
             if (isSelected && (index > -1)) {
@@ -645,15 +635,16 @@
         ColorItemListener(final JComboBox box) {
             this.box = box;
             colorChooser = new JColorChooser();
-            dialog =
-                JColorChooser.createDialog(
-                    box, "Pick a Color", true, //modal
+            dialog = JColorChooser.createDialog(
+                    box,
+                    "Pick a Color",
+                    true, // modal
                     colorChooser,
                     e -> {
                         box.insertItemAt(colorChooser.getColor(), 0);
                         box.setSelectedIndex(0);
-                    }, //OK button handler
-                    e -> box.setSelectedItem(lastColor)); //CANCEL button handler
+                    }, // OK button handler
+                    e -> box.setSelectedItem(lastColor)); // CANCEL button handler
             dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
         }
 
@@ -690,8 +681,7 @@
         }
 
         public Component getTableCellRendererComponent(
-            JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row,
-            int column) {
+                JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if (value instanceof Color) {
                 panel.setBackground((Color) value);
             }
@@ -725,8 +715,7 @@
         }
 
         public Component getTableCellRendererComponent(
-            JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row,
-            int column) {
+                JTable thisTable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
             if (value == null) {
                 return panel;
             }
@@ -795,58 +784,57 @@
         }
     }
 
-    private class RulesTableModel extends AbstractTableModel{
-        
+    private class RulesTableModel extends AbstractTableModel {
+
         private final List<ColorRule> colorRules;
 
-        RulesTableModel(){
+        RulesTableModel() {
             colorRules = new ArrayList<>();
             addColorRules();
         }
 
-        List<ColorRule> rules(){
+        List<ColorRule> rules() {
             return colorRules;
         }
 
-        void clear(){
+        void clear() {
             colorRules.clear();
             fireTableDataChanged();
         }
 
-        void addNewRule(){
+        void addNewRule() {
             Rule expressionRule = ExpressionRule.getRule("msg=='sample'");
-            ColorRule newRule =
-                    new ColorRule("msg=='sample'", expressionRule, Color.WHITE, Color.BLACK);
+            ColorRule newRule = new ColorRule("msg=='sample'", expressionRule, Color.WHITE, Color.BLACK);
             colorRules.add(newRule);
             fireTableRowsInserted(colorRules.size() - 1, colorRules.size() - 1);
         }
-        
-        void deleteRuleAtIndex(int i){
+
+        void deleteRuleAtIndex(int i) {
             colorRules.remove(i);
             fireTableRowsDeleted(i, i);
         }
 
-        void moveRowAtIndexDown(int row){
-            if( row <= colorRules.size() - 2 && row >= 0){
+        void moveRowAtIndexDown(int row) {
+            if (row <= colorRules.size() - 2 && row >= 0) {
                 Collections.swap(colorRules, row, row + 1);
                 fireTableRowsUpdated(row, row + 1);
             }
         }
 
-        void moveRowAtIndexUp(int row){
-            if( row <= colorRules.size() && row > 0 ){
+        void moveRowAtIndexUp(int row) {
+            if (row <= colorRules.size() && row > 0) {
                 Collections.swap(colorRules, row, row - 1);
-                fireTableRowsUpdated(row - 1, row );
+                fireTableRowsUpdated(row - 1, row);
             }
         }
 
-        void addColorRules(){
-            colorRules.addAll( parentLogPanel.getCurrentRuleColorizer().getRules() );
+        void addColorRules() {
+            colorRules.addAll(parentLogPanel.getCurrentRuleColorizer().getRules());
         }
 
         @Override
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-            if( rowIndex >= colorRules.size() ){
+            if (rowIndex >= colorRules.size()) {
                 return;
             }
             String expression = colorRules.get(rowIndex).getExpression();
@@ -854,20 +842,20 @@
             Color backgroundColor = colorRules.get(rowIndex).getBackgroundColor();
             Color foregroundColor = colorRules.get(rowIndex).getForegroundColor();
 
-            switch( columnIndex ){
+            switch (columnIndex) {
                 case 0:
                     expression = aValue.toString();
                     rule = ExpressionRule.getRule(expression);
                     break;
                 case 1:
-                    backgroundColor = (Color)aValue;
+                    backgroundColor = (Color) aValue;
                     break;
                 case 2:
-                    foregroundColor = (Color)aValue;
+                    foregroundColor = (Color) aValue;
                     break;
             }
 
-            colorRules.set(rowIndex, new ColorRule(expression, rule, backgroundColor, foregroundColor) );
+            colorRules.set(rowIndex, new ColorRule(expression, rule, backgroundColor, foregroundColor));
             // Since the value has been set, resize all of the rows(if required)
             rulesTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
             fireTableRowsUpdated(rowIndex, rowIndex);
@@ -886,7 +874,7 @@
         @Override
         public Object getValueAt(int row, int col) {
             ColorRule rule = colorRules.get(row);
-            switch (col){
+            switch (col) {
                 case 0:
                     return rule.getExpression();
                 case 1:
@@ -900,7 +888,7 @@
 
         @Override
         public String getColumnName(int col) {
-            switch (col){
+            switch (col) {
                 case 0:
                     return "Expression";
                 case 1:
@@ -913,13 +901,12 @@
         }
 
         @Override
-        public boolean isCellEditable(int row, int col){
+        public boolean isCellEditable(int row, int col) {
             return true;
         }
     }
 
-    private class RulesTableCellEditor extends AbstractCellEditor
-        implements TableCellEditor{
+    private class RulesTableCellEditor extends AbstractCellEditor implements TableCellEditor {
 
         private final DefaultCellEditor defaultEditor = new DefaultCellEditor(new JTextField());
 
@@ -929,16 +916,15 @@
         }
 
         @Override
-        public Component getTableCellEditorComponent(JTable table, Object value,
-                                                     boolean isSelected, int row, int column) {
-            Component component = defaultEditor.getTableCellEditorComponent(table, value,
-                isSelected, row, column);
-            table.setRowHeight( row, component.getPreferredSize().height );
+        public Component getTableCellEditorComponent(
+                JTable table, Object value, boolean isSelected, int row, int column) {
+            Component component = defaultEditor.getTableCellEditorComponent(table, value, isSelected, row, column);
+            table.setRowHeight(row, component.getPreferredSize().height);
             return component;
         }
 
         @Override
-        public boolean isCellEditable(EventObject event){
+        public boolean isCellEditable(EventObject event) {
             if (event instanceof MouseEvent) {
                 MouseEvent mouseEvent = (MouseEvent) event;
                 return mouseEvent.getClickCount() >= 2;
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java b/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java
index ea95b70..d31056b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/Colorizer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.color;
 
 import java.awt.Color;
diff --git a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
index fdf7867..af8f74d 100644
--- a/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/color/RuleColorizer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,26 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.color;
 
-import org.apache.commons.configuration2.AbstractConfiguration;
-import org.apache.commons.configuration2.DataConfiguration;
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.rule.ColorRule;
-import org.apache.log4j.rule.ExpressionRule;
-import org.apache.log4j.rule.Rule;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.awt.*;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
 import java.util.List;
-
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.rule.ColorRule;
+import org.apache.log4j.rule.ExpressionRule;
+import org.apache.log4j.rule.Rule;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A colorizer supporting an ordered collection of ColorRules, including support for notification of
@@ -46,8 +40,7 @@
     public static final String PROPERTY_CHANGED_COLORRULE = "colorrule";
 
     private final List<ColorRule> rules;
-    private final PropertyChangeSupport colorChangeSupport =
-        new PropertyChangeSupport(this);
+    private final PropertyChangeSupport colorChangeSupport = new PropertyChangeSupport(this);
 
     private Rule findRule;
     private Rule loggerRule;
@@ -57,28 +50,21 @@
     private static final Color MARKER_DEFAULT_COLOR = new Color(153, 255, 153);
 
     private static final String DEFAULT_WARN_EXPRESSION = "level == WARN";
-    private static final String DEFAULT_FATAL_ERROR_EXCEPTION_EXPRESSION = "level == FATAL || level == ERROR || exception exists";
+    private static final String DEFAULT_FATAL_ERROR_EXCEPTION_EXPRESSION =
+            "level == FATAL || level == ERROR || exception exists";
     private static final String DEFAULT_MARKER_EXPRESSION = "prop.marker exists";
 
-    public static List<ColorRule> defaultRules(){
+    public static List<ColorRule> defaultRules() {
         List<ColorRule> rulesList = new ArrayList<>();
 
         String expression = DEFAULT_FATAL_ERROR_EXCEPTION_EXPRESSION;
-        rulesList.add(
-            new ColorRule(
-                expression, ExpressionRule.getRule(expression), FATAL_OR_ERROR_DEFAULT_COLOR,
-                Color.black));
+        rulesList.add(new ColorRule(
+                expression, ExpressionRule.getRule(expression), FATAL_OR_ERROR_DEFAULT_COLOR, Color.black));
         expression = DEFAULT_WARN_EXPRESSION;
-        rulesList.add(
-            new ColorRule(
-                expression, ExpressionRule.getRule(expression), WARN_DEFAULT_COLOR,
-                Color.black));
+        rulesList.add(new ColorRule(expression, ExpressionRule.getRule(expression), WARN_DEFAULT_COLOR, Color.black));
 
         expression = DEFAULT_MARKER_EXPRESSION;
-        rulesList.add(
-            new ColorRule(
-                expression, ExpressionRule.getRule(expression), MARKER_DEFAULT_COLOR,
-                Color.black));
+        rulesList.add(new ColorRule(expression, ExpressionRule.getRule(expression), MARKER_DEFAULT_COLOR, Color.black));
 
         return rulesList;
     }
@@ -159,16 +145,12 @@
      * @param propertyName
      * @param listener
      */
-    public void addPropertyChangeListener(
-        String propertyName, PropertyChangeListener listener) {
+    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
         colorChangeSupport.addPropertyChangeListener(propertyName, listener);
     }
 
-    public static String colorToRGBString( Color c ){
-        return String.format( "#%02x%02x%02x",
-                c.getRed(),
-                c.getGreen(),
-                c.getBlue());
+    public static String colorToRGBString(Color c) {
+        return String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue());
     }
 
     public static List<Color> getDefaultColors() {
@@ -176,7 +158,7 @@
 
         vec.add(Color.white);
         vec.add(Color.black);
-        //add default alternating color & search backgrounds (both foreground are black)
+        // add default alternating color & search backgrounds (both foreground are black)
         vec.add(ChainsawConstants.COLOR_ODD_ROW_BACKGROUND);
         vec.add(ChainsawConstants.FIND_LOGGER_BACKGROUND);
 
@@ -205,17 +187,16 @@
     }
 
     @Override
-    public String toString(){
+    public String toString() {
         StringBuilder sb = new StringBuilder();
-        sb.append( String.format( "RuleColorizer - %d rules", rules.size() ) );
-        for( ColorRule rule : rules ){
-            sb.append( System.lineSeparator() );
-            sb.append( "  " );
-            sb.append( rule.getRule().toString() );
+        sb.append(String.format("RuleColorizer - %d rules", rules.size()));
+        for (ColorRule rule : rules) {
+            sb.append(System.lineSeparator());
+            sb.append("  ");
+            sb.append(rule.getRule().toString());
         }
-        sb.append( System.lineSeparator() );
+        sb.append(System.lineSeparator());
 
         return sb.toString();
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/about/ChainsawAbout.java b/src/main/java/org/apache/log4j/chainsaw/components/about/ChainsawAbout.java
index 50ae52e..f3d68f8 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/about/ChainsawAbout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/about/ChainsawAbout.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,12 @@
  */
 package org.apache.log4j.chainsaw.components.about;
 
-import org.apache.log4j.chainsaw.JTextComponentFormatter;
-import org.apache.log4j.chainsaw.help.HelpManager;
-
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
 import java.awt.*;
 import java.io.IOException;
 import java.net.URL;
-
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import org.apache.log4j.chainsaw.help.HelpManager;
 import org.apache.log4j.chainsaw.logui.LogUI;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -58,20 +55,19 @@
         }
 
         JScrollPane scrollPane = new JScrollPane(
-            editPane,
-            ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
-            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+                editPane,
+                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
+                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 
         getContentPane().add(scrollPane, BorderLayout.CENTER);
         getContentPane().add(closeButton, BorderLayout.SOUTH);
 
         editPane.setEditable(false);
-        editPane.addHyperlinkListener(
-            e -> {
-                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-                    HelpManager.getInstance().setHelpURL(e.getURL());
-                }
-            });
+        editPane.addHyperlinkListener(e -> {
+            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+                HelpManager.getInstance().setHelpURL(e.getURL());
+            }
+        });
 
         calculateDimentions();
         scrollPane.getViewport().setViewPosition(new Point(0, 0));
@@ -93,7 +89,6 @@
         if (width > 400) {
             width = width - (width * 0.10);
         }
-        setSize((int)width, (int)height);
-
+        setSize((int) width, (int) height);
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallButton.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallButton.java
index 96c5901..38ec030 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallButton.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallButton.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,16 +16,16 @@
  */
 package org.apache.log4j.chainsaw.components.elements;
 
-import javax.swing.*;
-import javax.swing.border.BevelBorder;
-import javax.swing.border.Border;
-import javax.swing.border.EmptyBorder;
-import javax.swing.border.SoftBevelBorder;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.net.URL;
+import javax.swing.*;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.Border;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.SoftBevelBorder;
 
 /**
  * A better button class that has nice roll over effects.
@@ -69,7 +69,7 @@
     }
 
     public KeyStroke getActionAcceleratorKey() {
-        return (KeyStroke)getAction().getValue(Action.ACCELERATOR_KEY);
+        return (KeyStroke) getAction().getValue(Action.ACCELERATOR_KEY);
     }
 
     /**
@@ -105,8 +105,7 @@
      * is called with an action.
      */
     @Override
-    public void mouseClicked(MouseEvent e) {
-    }
+    public void mouseClicked(MouseEvent e) {}
 
     /**
      * {@inheritDoc}
@@ -148,7 +147,7 @@
         setBorder(inactiveBorder);
     }
 
-    static public class Builder {
+    public static class Builder {
         Runnable action;
         String name = "";
 
@@ -168,6 +167,7 @@
             this.action = action;
             return this;
         }
+
         public Builder name(String name) {
             this.name = name;
             return this;
@@ -182,22 +182,27 @@
             this.enabled = true;
             return this;
         }
+
         public Builder disabled() {
             this.enabled = false;
             return this;
         }
+
         public Builder icon(Icon icon) {
             this.icon = icon;
             return this;
         }
+
         public Builder iconUrl(URL iconUrl) {
             this.iconUrl = iconUrl;
             return this;
         }
+
         public Builder smallIconUrl(URL smallIconUrl) {
             this.smallIconUrl = smallIconUrl;
             return this;
         }
+
         public Builder shortDescription(String shortDescription) {
             this.shortDescription = shortDescription;
             return this;
@@ -230,7 +235,7 @@
             }
             if (icon != null) {
                 button.setIcon(icon);
-            } else  if (iconUrl != null) {
+            } else if (iconUrl != null) {
                 button.setIcon(new ImageIcon(iconUrl));
             }
             if (name != null) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallToggleButton.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallToggleButton.java
index 34ec925..d290c4b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallToggleButton.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/SmallToggleButton.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,16 +16,15 @@
  */
 package org.apache.log4j.chainsaw.components.elements;
 
-import javax.swing.*;
-import javax.swing.border.BevelBorder;
-import javax.swing.border.Border;
-import javax.swing.border.SoftBevelBorder;
 import java.awt.*;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
-
+import javax.swing.*;
+import javax.swing.border.BevelBorder;
+import javax.swing.border.Border;
+import javax.swing.border.SoftBevelBorder;
 
 /**
  * A better button class that has nice roll over effects.
@@ -38,8 +37,7 @@
  * @author Pavel Vorobeiv
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
-public class SmallToggleButton extends JToggleButton implements ItemListener,
-    MouseListener {
+public class SmallToggleButton extends JToggleButton implements ItemListener, MouseListener {
     protected Border m_highlighted = new SoftBevelBorder(BevelBorder.RAISED);
     protected Border m_raised = BorderFactory.createEmptyBorder(3, 3, 3, 3);
     protected Border m_inactive = m_raised;
@@ -104,8 +102,7 @@
      *
      * @param e DOCUMENT ME!
      */
-    public void mouseClicked(MouseEvent e) {
-    }
+    public void mouseClicked(MouseEvent e) {}
 
     /**
      * DOCUMENT ME!
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/TabIconHandler.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/TabIconHandler.java
index 0662f91..014a6db 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/TabIconHandler.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/TabIconHandler.java
@@ -1,17 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.log4j.chainsaw.components.elements;
 
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 import org.apache.log4j.chainsaw.EventCountListener;
 import org.apache.log4j.chainsaw.components.tabbedpane.ChainsawTabbedPane;
 import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 import org.apache.log4j.chainsaw.icons.LineIconFactory;
 
-import javax.swing.*;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-public  class TabIconHandler implements EventCountListener, ChangeListener {
-    //the tabIconHandler is associated with a new tab, and a new tab always
-    //shows the 'new events' icon
+public class TabIconHandler implements EventCountListener, ChangeListener {
+    // the tabIconHandler is associated with a new tab, and a new tab always
+    // shows the 'new events' icon
     private boolean newEvents = true;
     private boolean seenEvents = false;
     private final String ident;
@@ -24,36 +39,32 @@
         ident = identifier;
         this.tabbedPane = tabbedPane;
 
-        new Thread(
-            () -> {
-                while (true) {
-                    //if this tab is active, remove the icon
-                    //don't process undocked tabs
-                    if (tabbedPane.indexOfTab(ident) > -1 &&
-                        tabbedPane.getSelectedIndex() == tabbedPane
-                            .indexOfTab(ident)) {
-                        tabbedPane.setIconAt(
-                            tabbedPane.indexOfTab(ident), SELECTED);
-                        newEvents = false;
-                        seenEvents = true;
-                    } else if (tabbedPane.indexOfTab(ident) > -1) {
-                        if (newEvents) {
-                            tabbedPane.setIconAt(
-                                tabbedPane.indexOfTab(ident), NEW_EVENTS);
+        new Thread(() -> {
+                    while (true) {
+                        // if this tab is active, remove the icon
+                        // don't process undocked tabs
+                        if (tabbedPane.indexOfTab(ident) > -1
+                                && tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(ident)) {
+                            tabbedPane.setIconAt(tabbedPane.indexOfTab(ident), SELECTED);
                             newEvents = false;
-                            seenEvents = false;
-                        } else if (!seenEvents) {
-                            tabbedPane.setIconAt(
-                                tabbedPane.indexOfTab(ident), HAS_EVENTS);
+                            seenEvents = true;
+                        } else if (tabbedPane.indexOfTab(ident) > -1) {
+                            if (newEvents) {
+                                tabbedPane.setIconAt(tabbedPane.indexOfTab(ident), NEW_EVENTS);
+                                newEvents = false;
+                                seenEvents = false;
+                            } else if (!seenEvents) {
+                                tabbedPane.setIconAt(tabbedPane.indexOfTab(ident), HAS_EVENTS);
+                            }
+                        }
+
+                        try {
+                            Thread.sleep(1000);
+                        } catch (InterruptedException ie) {
                         }
                     }
-
-                    try {
-                        Thread.sleep(1000);
-                    } catch (InterruptedException ie) {
-                    }
-                }
-            }).start();
+                })
+                .start();
     }
 
     @Override
@@ -63,8 +74,7 @@
 
     @Override
     public void stateChanged(ChangeEvent event) {
-        if (
-            tabbedPane.indexOfTab(ident) > -1 && tabbedPane.indexOfTab(ident) == tabbedPane.getSelectedIndex()) {
+        if (tabbedPane.indexOfTab(ident) > -1 && tabbedPane.indexOfTab(ident) == tabbedPane.getSelectedIndex()) {
             tabbedPane.setIconAt(tabbedPane.indexOfTab(ident), SELECTED);
         }
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/JSortTable.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/JSortTable.java
index fc0b760..15f2f83 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/JSortTable.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/JSortTable.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,21 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.elements.sorttable;
 
-import org.apache.log4j.chainsaw.ChainsawColumns;
-import org.apache.log4j.chainsaw.SortTableModel;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-
-import javax.swing.JTable;
-import javax.swing.table.JTableHeader;
-import javax.swing.table.TableColumnModel;
 import java.awt.Color;
 import java.awt.event.InputEvent;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
-
+import javax.swing.JTable;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableColumnModel;
+import org.apache.log4j.chainsaw.ChainsawColumns;
+import org.apache.log4j.chainsaw.SortTableModel;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
 
 /**
  * A Sortable JTable implementation that allows a user to click on a
@@ -49,9 +46,9 @@
     }
 
     public void changeSelection(int rowIndex, int columnIndex, boolean toggle, boolean extend) {
-        //selection of the msg field causes rendering to flash...skip over it
+        // selection of the msg field causes rendering to flash...skip over it
         int colToSelect = columnIndex;
-        //CHAINSAW columns are 1-based indexes
+        // CHAINSAW columns are 1-based indexes
         if (columnIndex + 1 == ChainsawColumns.INDEX_MESSAGE_COL_NAME) {
             colToSelect = lastSelectedColumn < columnIndex ? columnIndex + 1 : columnIndex - 1;
             super.changeSelection(rowIndex, colToSelect, toggle, extend);
@@ -77,7 +74,7 @@
             try {
                 sortedColumnIndex = columnModel.getColumnIndex(sortedColumn);
                 getTableHeader().resizeAndRepaint();
-            } catch (IllegalArgumentException ie) {//nothing...column is not in the model
+            } catch (IllegalArgumentException ie) { // nothing...column is not in the model
                 setSortedColumnIndex(-1);
             }
         }
@@ -92,14 +89,15 @@
         getTableHeader().resizeAndRepaint();
     }
 
-    //Allow synchronous updates if already on the EDT
+    // Allow synchronous updates if already on the EDT
     private void scrollTo(final int row, final int col) {
         SwingHelper.invokeOnEDT(() -> {
             final int currentRow = getSelectedRow();
             if ((row > -1) && (row < getRowCount())) {
                 try {
-                    //get the requested row off of the bottom and top of the screen by making the 5 rows around the requested row visible
-                    //if new past current row, scroll to display the 20th row past new selected row
+                    // get the requested row off of the bottom and top of the screen by making the 5 rows around the
+                    // requested row visible
+                    // if new past current row, scroll to display the 20th row past new selected row
                     scrollRectToVisible(getCellRect(row, col, true));
                     if (row > currentRow) {
                         scrollRectToVisible(getCellRect(row + 5, col, true));
@@ -110,7 +108,7 @@
                     scrollRectToVisible(getCellRect(row, col, true));
                     setRowSelectionInterval(row, row);
                 } catch (IllegalArgumentException iae) {
-                    //ignore..out of bounds
+                    // ignore..out of bounds
                 }
             }
         });
@@ -150,15 +148,11 @@
         }
     }
 
-    public void mousePressed(MouseEvent event) {
-    }
+    public void mousePressed(MouseEvent event) {}
 
-    public void mouseReleased(MouseEvent event) {
-    }
+    public void mouseReleased(MouseEvent event) {}
 
-    public void mouseEntered(MouseEvent event) {
-    }
+    public void mouseEntered(MouseEvent event) {}
 
-    public void mouseExited(MouseEvent event) {
-    }
+    public void mouseExited(MouseEvent event) {}
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortArrowIcon.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortArrowIcon.java
index 2642ecc..9861f17 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortArrowIcon.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortArrowIcon.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.elements.sorttable;
 
-import javax.swing.*;
 import java.awt.*;
-
+import javax.swing.*;
 
 /**
  * An Icon that is a Nice arrow to be used for displaying which
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortHeaderRenderer.java b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortHeaderRenderer.java
index c5bc87a..7dc0729 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortHeaderRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/elements/sorttable/SortHeaderRenderer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.elements.sorttable;
 
+import java.awt.*;
 import javax.swing.*;
 import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.JTableHeader;
-import java.awt.*;
-
 
 /**
  * A Table Column header renederer that displays a nice Up/Down arrow
@@ -42,7 +40,7 @@
 
     @Override
     public Component getTableCellRendererComponent(
-        JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
+            JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
         int index = -1;
         boolean ascending = true;
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameListener.java b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameListener.java
index 97bd7a6..3a040fd 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.loggernamepanel;
 
 import java.util.EventListener;
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModel.java b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModel.java
index bca69da..fcbc257 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,9 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.chainsaw.components.loggernamepanel;
 
 import java.util.Collection;
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModelSupport.java b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModelSupport.java
index f628771..e3090e0 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModelSupport.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameModelSupport.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.chainsaw.components.loggernamepanel;
 
-import javax.swing.event.EventListenerList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import javax.swing.event.EventListenerList;
 
 /**
  * An implementation of LoggerNameModel which can be used as a delegate
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameTreePanel.java b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameTreePanel.java
index 7ff2c91..8f89cbb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameTreePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/loggernamepanel/LoggerNameTreePanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,39 +14,35 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- */
 package org.apache.log4j.chainsaw.components.loggernamepanel;
 
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+import java.util.List;
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.tree.*;
 import org.apache.log4j.chainsaw.ChainsawConstants;
 import org.apache.log4j.chainsaw.ExpressionRuleContext;
 import org.apache.log4j.chainsaw.JTextComponentFormatter;
 import org.apache.log4j.chainsaw.PopupListener;
+import org.apache.log4j.chainsaw.color.RuleColorizer;
 import org.apache.log4j.chainsaw.components.elements.SmallButton;
 import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanel;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanelLoggerTreeModel;
 import org.apache.log4j.chainsaw.components.logpanel.LogPanelPreferenceModel;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.log4j.chainsaw.color.RuleColorizer;
 import org.apache.log4j.chainsaw.filter.FilterModel;
 import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 import org.apache.log4j.chainsaw.icons.LineIconFactory;
+import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.rule.AbstractRule;
 import org.apache.log4j.rule.ColorRule;
 import org.apache.log4j.rule.ExpressionRule;
 import org.apache.log4j.rule.Rule;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.tree.*;
-import java.awt.*;
-import java.awt.event.*;
-import java.util.*;
-import java.util.List;
-
-import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A panel that encapsulates the Logger Name tree, with associated actions
@@ -101,7 +97,6 @@
     private final EventListenerList listenerList = new EventListenerList();
     private final JTree logTree;
 
-
     //  private final EventListenerList focusOnActionListeners =
     //    new EventListenerList();
     private final LogPanelLoggerTreeModel logTreeModel;
@@ -123,7 +118,8 @@
      *
      * @param logTreeModel
      */
-    public LoggerNameTreePanel(LogPanelLoggerTreeModel logTreeModel,
+    public LoggerNameTreePanel(
+            LogPanelLoggerTreeModel logTreeModel,
             LogPanelPreferenceModel logPanelPreferenceModel,
             LogPanel logPanel,
             RuleColorizer colorizer,
@@ -145,40 +141,41 @@
         JTextComponentFormatter.applySystemFontAndSize(alwaysDisplayExpressionEntryField);
 
         visibilityRuleDelegate = new VisibilityRuleDelegate();
-        colorRuleDelegate =
-            new AbstractRule() {
-                @Override
-                public boolean evaluate(ChainsawLoggingEvent e, Map matches) {
-                    boolean hiddenLogger = e.m_logger != null && isHiddenLogger(e.m_logger);
-                    boolean hiddenExpression = (ignoreExpressionRule != null && ignoreExpressionRule.evaluate(e, null));
-                    boolean alwaysDisplayExpression = (alwaysDisplayExpressionRule != null && alwaysDisplayExpressionRule.evaluate(e, null));
-                    boolean hidden = (!alwaysDisplayExpression) && (hiddenLogger || hiddenExpression);
+        colorRuleDelegate = new AbstractRule() {
+            @Override
+            public boolean evaluate(ChainsawLoggingEvent e, Map matches) {
+                boolean hiddenLogger = e.m_logger != null && isHiddenLogger(e.m_logger);
+                boolean hiddenExpression = (ignoreExpressionRule != null && ignoreExpressionRule.evaluate(e, null));
+                boolean alwaysDisplayExpression =
+                        (alwaysDisplayExpressionRule != null && alwaysDisplayExpressionRule.evaluate(e, null));
+                boolean hidden = (!alwaysDisplayExpression) && (hiddenLogger || hiddenExpression);
 
-                    String selectedLoggerName = getCurrentlySelectedLoggerName();
-                    return !isFocusOnSelected() && !hidden && selectedLoggerName != null &&
-                           !"".equals(selectedLoggerName) &&
-                           (e.m_logger.startsWith(selectedLoggerName + ".") ||
-                           e.m_logger.endsWith(selectedLoggerName));
-                }
-            };
+                String selectedLoggerName = getCurrentlySelectedLoggerName();
+                return !isFocusOnSelected()
+                        && !hidden
+                        && selectedLoggerName != null
+                        && !"".equals(selectedLoggerName)
+                        && (e.m_logger.startsWith(selectedLoggerName + ".") || e.m_logger.endsWith(selectedLoggerName));
+            }
+        };
 
         logTree = new JTree(logTreeModel) {
-                @Override
-                public String getToolTipText(MouseEvent ev) {
-                    if (ev == null) {
-                        return null;
-                    }
-
-                    TreePath path = logTree.getPathForLocation(ev.getX(), ev.getY());
-                    String loggerName = getLoggerName(path);
-
-                    if (hiddenSet.contains(loggerName)) {
-                        loggerName += " (you are ignoring this logger)";
-                    }
-
-                    return loggerName;
+            @Override
+            public String getToolTipText(MouseEvent ev) {
+                if (ev == null) {
+                    return null;
                 }
-            };
+
+                TreePath path = logTree.getPathForLocation(ev.getX(), ev.getY());
+                String loggerName = getLoggerName(path);
+
+                if (hiddenSet.contains(loggerName)) {
+                    loggerName += " (you are ignoring this logger)";
+                }
+
+                return loggerName;
+            }
+        };
 
         ToolTipManager.sharedInstance().registerComponent(logTree);
         logTree.setCellRenderer(cellRenderer);
@@ -186,8 +183,7 @@
         //	============================================
         logTreeModel.addTreeModelListener(new TreeModelListener() {
             @Override
-            public void treeNodesChanged(TreeModelEvent e) {
-            }
+            public void treeNodesChanged(TreeModelEvent e) {}
 
             @Override
             public void treeNodesInserted(TreeModelEvent e) {
@@ -198,12 +194,10 @@
             }
 
             @Override
-            public void treeNodesRemoved(TreeModelEvent e) {
-            }
+            public void treeNodesRemoved(TreeModelEvent e) {}
 
             @Override
-            public void treeStructureChanged(TreeModelEvent e) {
-            }
+            public void treeStructureChanged(TreeModelEvent e) {}
         });
 
         logTree.setEditable(false);
@@ -258,9 +252,10 @@
         ignoreSummaryPanel.add(ignoreSummary);
 
         JButton btnShowIgnoreDialog = new SmallButton.Builder()
-            .name("...")
-            .shortDescription("Click to view and manage your hidden/ignored loggers")
-            .action(() -> LogPanel.centerAndSetVisible(ignoreDialog)).build();
+                .name("...")
+                .shortDescription("Click to view and manage your hidden/ignored loggers")
+                .action(() -> LogPanel.centerAndSetVisible(ignoreDialog))
+                .build();
 
         ignoreSummaryPanel.add(btnShowIgnoreDialog);
         ignorePanel.add(ignoreSummaryPanel);
@@ -270,9 +265,10 @@
         ignoreExpressionPanel.add(ignoreExpressionSummary);
 
         JButton btnShowIgnoreExpressionDialog = new SmallButton.Builder()
-            .name("...")
-            .shortDescription("Click to view and manage your hidden/ignored expression")
-            .action(() ->  LogPanel.centerAndSetVisible(ignoreExpressionDialog)).build();
+                .name("...")
+                .shortDescription("Click to view and manage your hidden/ignored expression")
+                .action(() -> LogPanel.centerAndSetVisible(ignoreExpressionDialog))
+                .build();
         ignoreExpressionPanel.add(btnShowIgnoreExpressionDialog);
 
         ignorePanel.add(ignoreExpressionPanel);
@@ -281,11 +277,11 @@
         alwaysDisplayExpressionPanel.setLayout(new BoxLayout(alwaysDisplayExpressionPanel, BoxLayout.X_AXIS));
         alwaysDisplayExpressionPanel.add(alwaysDisplayExpressionSummary);
 
-        JButton btnShowAlwaysDisplayExpressionDialog =
-            new SmallButton.Builder()
-            .name("...")
-            .shortDescription("Click to view and manage your always-displayed expression")
-            .action(() -> LogPanel.centerAndSetVisible(alwaysDisplayExpressionDialog)).build();
+        JButton btnShowAlwaysDisplayExpressionDialog = new SmallButton.Builder()
+                .name("...")
+                .shortDescription("Click to view and manage your always-displayed expression")
+                .action(() -> LogPanel.centerAndSetVisible(alwaysDisplayExpressionDialog))
+                .build();
 
         alwaysDisplayExpressionPanel.add(btnShowAlwaysDisplayExpressionDialog);
 
@@ -301,7 +297,8 @@
                     int index = ignoreList.locationToIndex(e.getPoint());
 
                     if (index >= 0) {
-                        String string = ignoreList.getModel().getElementAt(index).toString();
+                        String string =
+                                ignoreList.getModel().getElementAt(index).toString();
                         toggleHiddenLogger(string);
                         fireChangeEvent();
 
@@ -309,7 +306,7 @@
                          * TODO this needs to get the node that has this logger and fire a visual update
                          */
                         LoggerNameTreePanel.this.logTreeModel.nodeStructureChanged(
-                            (TreeNode) LoggerNameTreePanel.this.logTreeModel.getRoot());
+                                (TreeNode) LoggerNameTreePanel.this.logTreeModel.getRoot());
                     }
                 }
             }
@@ -317,7 +314,8 @@
 
         JPanel ignoreListPanel = new JPanel(new BorderLayout());
         JScrollPane ignoreListScroll = new JScrollPane(ignoreList);
-        ignoreListScroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Double click an entry to unhide it"));
+        ignoreListScroll.setBorder(BorderFactory.createTitledBorder(
+                BorderFactory.createEtchedBorder(), "Double click an entry to unhide it"));
         ignoreListPanel.add(ignoreListScroll, BorderLayout.CENTER);
 
         JPanel ignoreExpressionDialogPanel = new JPanel(new BorderLayout());
@@ -334,9 +332,9 @@
             }
         });
 
-
         JPanel alwaysDisplayExpressionDialogPanel = new JPanel(new BorderLayout());
-        alwaysDisplayExpressionEntryField.addKeyListener(new ExpressionRuleContext(filterModel, alwaysDisplayExpressionEntryField));
+        alwaysDisplayExpressionEntryField.addKeyListener(
+                new ExpressionRuleContext(filterModel, alwaysDisplayExpressionEntryField));
 
         alwaysDisplayExpressionDialogPanel.add(new JScrollPane(alwaysDisplayExpressionEntryField), BorderLayout.CENTER);
         JButton alwaysDisplayExpressionCloseButton = new JButton(new AbstractAction(ACTION_NAME_CLOSE) {
@@ -363,7 +361,6 @@
 
             public void actionPerformed(final ActionEvent e) {
                 SwingUtilities.invokeLater(() -> clearIgnoreListAction.actionPerformed(e));
-
             }
         });
         ignoreListButtonPanel.add(unhideAll);
@@ -373,7 +370,6 @@
 
             public void actionPerformed(ActionEvent e) {
                 ignoreDialog.setVisible(false);
-
             }
         });
         ignoreListButtonPanel.add(ignoreCloseButton);
@@ -644,8 +640,8 @@
         };
 
         action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Removes all entries from the Ignore list so you can see their events in the view");
+                Action.SHORT_DESCRIPTION,
+                "Removes all entries from the Ignore list so you can see their events in the view");
 
         return action;
     }
@@ -680,9 +676,7 @@
 
         action.putValue(Action.SMALL_ICON, LineIconFactory.createCollapseIcon());
         action.putValue(Action.NAME, "Collapse Branch");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Collapses all the children of the currently selected node");
+        action.putValue(Action.SHORT_DESCRIPTION, "Collapses all the children of the currently selected node");
         action.setEnabled(false);
 
         return action;
@@ -700,9 +694,7 @@
         action.putValue("enabled", Boolean.FALSE);
 
         action.putValue(Action.NAME, "Edit filters/colors");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Allows you to specify filters and coloring for this Logger");
+        action.putValue(Action.SHORT_DESCRIPTION, "Allows you to specify filters and coloring for this Logger");
         action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_EDIT_RECEIVER));
         action.setEnabled(false);
 
@@ -726,8 +718,7 @@
         action.putValue(Action.SMALL_ICON, LineIconFactory.createExpandIcon());
         action.putValue(Action.NAME, "Expand branch");
         action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Expands all the child nodes of the currently selected node, recursively");
+                Action.SHORT_DESCRIPTION, "Expands all the child nodes of the currently selected node, recursively");
         action.setEnabled(false);
 
         return action;
@@ -748,9 +739,7 @@
         };
 
         action.putValue(Action.NAME, "Find next");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Find using the selected node");
+        action.putValue(Action.SHORT_DESCRIPTION, "Find using the selected node");
         action.setEnabled(false);
 
         return action;
@@ -765,9 +754,7 @@
         };
 
         action.putValue(Action.NAME, "Set 'refine focus' to selected logger");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Refine focus on the selected node");
+        action.putValue(Action.SHORT_DESCRIPTION, "Refine focus on the selected node");
         action.setEnabled(false);
 
         return action;
@@ -781,9 +768,7 @@
         };
 
         action.putValue(Action.NAME, "Update 'refine focus' to include selected logger");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Add selected node to 'refine focus' field");
+        action.putValue(Action.SHORT_DESCRIPTION, "Add selected node to 'refine focus' field");
         action.setEnabled(false);
 
         return action;
@@ -797,9 +782,7 @@
         };
 
         action.putValue(Action.NAME, "Update 'find' to include selected logger");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Add selected node to 'find' field");
+        action.putValue(Action.SHORT_DESCRIPTION, "Add selected node to 'find' field");
         action.setEnabled(false);
 
         return action;
@@ -850,16 +833,17 @@
                 Color c = JColorChooser.showDialog(getRootPane(), "Choose a color", Color.red);
                 if (c != null) {
                     String expression = "logger like '^" + selectedLogger + ".*'";
-                    colorizer.addRule(new ColorRule(expression,
-                        ExpressionRule.getRule(expression), c, ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
+                    colorizer.addRule(new ColorRule(
+                            expression,
+                            ExpressionRule.getRule(expression),
+                            c,
+                            ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
                 }
             }
         };
 
         action.putValue(Action.NAME, "Define color rule for selected logger");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Define color rule for logger");
+        action.putValue(Action.SHORT_DESCRIPTION, "Define color rule for logger");
         action.setEnabled(false);
         return action;
     }
@@ -879,9 +863,7 @@
         };
 
         action.putValue(Action.NAME, "Clear find field");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Clear the find field");
+        action.putValue(Action.SHORT_DESCRIPTION, "Clear the find field");
         action.setEnabled(false);
 
         return action;
@@ -896,9 +878,7 @@
         };
 
         action.putValue(Action.NAME, "Clear 'refine focus' field");
-        action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Clear the refine focus field");
+        action.putValue(Action.SHORT_DESCRIPTION, "Clear the refine focus field");
         action.setEnabled(false);
 
         return action;
@@ -914,10 +894,9 @@
 
         action.putValue(Action.NAME, "Focus");
         action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Allows you to Focus on the selected logger by setting a filter that discards all but this Logger");
-        action.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
+                Action.SHORT_DESCRIPTION,
+                "Allows you to Focus on the selected logger by setting a filter that discards all but this Logger");
+        action.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
         action.setEnabled(false);
 
@@ -925,80 +904,79 @@
     }
 
     private Action createIgnoreAllAction() {
-        Action action =
-            new AbstractAction("Ignore loggers below selection") {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    //add all top level loggers as hidden loggers
-                    TreePath[] paths = logTree.getSelectionPaths();
+        Action action = new AbstractAction("Ignore loggers below selection") {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                // add all top level loggers as hidden loggers
+                TreePath[] paths = logTree.getSelectionPaths();
 
-                    StringBuilder parentPathString = new StringBuilder();
-                    DefaultMutableTreeNode root;
+                StringBuilder parentPathString = new StringBuilder();
+                DefaultMutableTreeNode root;
 
-                    if ((paths == null) || (paths.length == 0)) {
-                        root = (DefaultMutableTreeNode) logTreeModel.getRoot();
-                    } else {
-                        root = (DefaultMutableTreeNode) logTree.getSelectionPath().getLastPathComponent();
-                        TreeNode[] path = root.getPath();
-                        //don't add 'root logger' to path string
-                        for (int i = 1; i < path.length; i++) {
-                            if (i > 1) {
-                                parentPathString.append(".");
-                            }
-                            parentPathString.append(path[i].toString());
-                        }
-                        if (!(parentPathString.toString().isEmpty())) {
+                if ((paths == null) || (paths.length == 0)) {
+                    root = (DefaultMutableTreeNode) logTreeModel.getRoot();
+                } else {
+                    root = (DefaultMutableTreeNode) logTree.getSelectionPath().getLastPathComponent();
+                    TreeNode[] path = root.getPath();
+                    // don't add 'root logger' to path string
+                    for (int i = 1; i < path.length; i++) {
+                        if (i > 1) {
                             parentPathString.append(".");
                         }
+                        parentPathString.append(path[i].toString());
                     }
-                    Enumeration<TreeNode> topLevelLoggersEnumeration = root.children();
-                    Set<String> topLevelLoggersSet = new HashSet<>();
-                    while (topLevelLoggersEnumeration.hasMoreElements()) {
-                        String thisLogger = topLevelLoggersEnumeration.nextElement().toString();
-                        topLevelLoggersSet.add(parentPathString + thisLogger);
+                    if (!(parentPathString.toString().isEmpty())) {
+                        parentPathString.append(".");
                     }
-
-                    if (!topLevelLoggersSet.isEmpty()) {
-                        ignore(topLevelLoggersSet);
-                    }
-
-                    logTreeModel.nodeChanged(root);
-                    ignoreLoggerButton.setSelected(false);
-                    focusOnAction.setEnabled(false);
-                    popupMenu.hideCheck.setSelected(false);
-                    fireChangeEvent();
                 }
-            };
+                Enumeration<TreeNode> topLevelLoggersEnumeration = root.children();
+                Set<String> topLevelLoggersSet = new HashSet<>();
+                while (topLevelLoggersEnumeration.hasMoreElements()) {
+                    String thisLogger = topLevelLoggersEnumeration.nextElement().toString();
+                    topLevelLoggersSet.add(parentPathString + thisLogger);
+                }
+
+                if (!topLevelLoggersSet.isEmpty()) {
+                    ignore(topLevelLoggersSet);
+                }
+
+                logTreeModel.nodeChanged(root);
+                ignoreLoggerButton.setSelected(false);
+                focusOnAction.setEnabled(false);
+                popupMenu.hideCheck.setSelected(false);
+                fireChangeEvent();
+            }
+        };
 
         action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Adds all loggers to your Ignore list (unhide loggers you want to see in the view)");
+                Action.SHORT_DESCRIPTION,
+                "Adds all loggers to your Ignore list (unhide loggers you want to see in the view)");
 
         return action;
     }
 
     private Action createIgnoreAction() {
-        Action action =
-            new AbstractAction("Ignore this Logger", new ImageIcon(ChainsawIcons.ICON_COLLAPSE)) {
-                @Override
-                public void actionPerformed(ActionEvent e) {
-                    String selectedLoggerName = getCurrentlySelectedLoggerName();
+        Action action = new AbstractAction("Ignore this Logger", new ImageIcon(ChainsawIcons.ICON_COLLAPSE)) {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                String selectedLoggerName = getCurrentlySelectedLoggerName();
 
-                    if (selectedLoggerName != null) {
-                        toggleHiddenLogger(selectedLoggerName);
-                        logTreeModel.nodeChanged((TreeNode)logTree.getSelectionPath().getLastPathComponent());
-                        ignoreLoggerButton.setSelected(hiddenSet.contains(selectedLoggerName));
-                        focusOnAction.setEnabled(!hiddenSet.contains(selectedLoggerName));
-                        popupMenu.hideCheck.setSelected(hiddenSet.contains(selectedLoggerName));
-                    }
-
-                    fireChangeEvent();
+                if (selectedLoggerName != null) {
+                    toggleHiddenLogger(selectedLoggerName);
+                    logTreeModel.nodeChanged(
+                            (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+                    ignoreLoggerButton.setSelected(hiddenSet.contains(selectedLoggerName));
+                    focusOnAction.setEnabled(!hiddenSet.contains(selectedLoggerName));
+                    popupMenu.hideCheck.setSelected(hiddenSet.contains(selectedLoggerName));
                 }
-            };
+
+                fireChangeEvent();
+            }
+        };
 
         action.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Adds the selected Logger to your Ignore list, filtering those events from view");
+                Action.SHORT_DESCRIPTION,
+                "Adds the selected Logger to your Ignore list, filtering those events from view");
 
         return action;
     }
@@ -1156,11 +1134,11 @@
             boolean focusOnSelected = isFocusOnSelected();
             //          editLoggerAction.setEnabled(path != null);
             currentlySelectedLoggerName = getCurrentlySelectedLoggerName();
-            focusOnAction.setEnabled(
-                (path != null) && (node != null) && (node.getParent() != null)
+            focusOnAction.setEnabled((path != null)
+                    && (node != null)
+                    && (node.getParent() != null)
                     && !hiddenSet.contains(currentlySelectedLoggerName));
-            hideAction.setEnabled(
-                (path != null) && (node != null) && (node.getParent() != null));
+            hideAction.setEnabled((path != null) && (node != null) && (node.getParent() != null));
             if (!focusOnAction.isEnabled()) {
                 setFocusOnSelected(false);
             }
@@ -1186,11 +1164,11 @@
             if (isFocusOnSelected()) {
                 fireChangeEvent();
             }
-            //fire change event if we toggled focus off
+            // fire change event if we toggled focus off
             if (focusOnSelected && !isFocusOnSelected()) {
                 fireChangeEvent();
             }
-            //trigger a table repaint
+            // trigger a table repaint
             logPanel.repaint();
         });
 
@@ -1206,15 +1184,13 @@
             focusOnLoggerButton.setSelected(isFocusOnSelected());
 
             if (logTree.getSelectionPath() != null) {
-                logTreeModel.nodeChanged(
-                    (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+                logTreeModel.nodeChanged((TreeNode) logTree.getSelectionPath().getLastPathComponent());
             }
         });
 
         hideAction.addPropertyChangeListener(evt -> {
             if (logTree.getSelectionPath() != null) {
-                logTreeModel.nodeChanged(
-                    (TreeNode) logTree.getSelectionPath().getLastPathComponent());
+                logTreeModel.nodeChanged((TreeNode) logTree.getSelectionPath().getLastPathComponent());
             }
         });
 
@@ -1283,7 +1259,8 @@
     }
 
     private void updateAlwaysDisplayExpressionSummary() {
-        alwaysDisplayExpressionSummary.setText(alwaysDisplayExpressionRule != null ? "Always displayed (set)" : "Always displayed (unset)");
+        alwaysDisplayExpressionSummary.setText(
+                alwaysDisplayExpressionRule != null ? "Always displayed (set)" : "Always displayed (unset)");
     }
 
     private void toggleFocusOnState() {
@@ -1322,18 +1299,18 @@
     }
 
     public void loggerNameAdded(String loggerName) {
-        //no-op
+        // no-op
     }
 
     public void reset() {
         expandRootLatch = false;
-        //keep track if focuson was active when we were reset
+        // keep track if focuson was active when we were reset
         final boolean focusOnSelected = isFocusOnSelected();
         if (currentlySelectedLoggerName == null || !focusOnSelected) {
             return;
         }
 
-        //loggernameAdded runs on EDT
+        // loggernameAdded runs on EDT
         logTreeModel.loggerNameAdded(currentlySelectedLoggerName);
         EventQueue.invokeLater(() -> setFocusOn(currentlySelectedLoggerName));
     }
@@ -1354,10 +1331,14 @@
          */
         @Override
         public Component getTreeCellRendererComponent(
-            JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean focus) {
-            JLabel component = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, focus);
+                JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean focus) {
+            JLabel component =
+                    (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, focus);
 
-            Font originalFont = new Font(component.getFont().getName(), component.getFont().getStyle(), component.getFont().getSize());
+            Font originalFont = new Font(
+                    component.getFont().getName(),
+                    component.getFont().getStyle(),
+                    component.getFont().getSize());
 
             int style = Font.PLAIN;
 
@@ -1378,7 +1359,6 @@
                 //        component.setEnabled(true);
             }
 
-
             Font font2 = originalFont.deriveFont(style);
             if (font2 != null) {
                 component.setFont(font2);
@@ -1442,14 +1422,13 @@
          */
         @Override
         public void mouseClicked(MouseEvent e) {
-            if (e.getClickCount() > 1 &&
-                ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0) &&
-                ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) > 0)) {
+            if (e.getClickCount() > 1
+                    && ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0)
+                    && ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) > 0)) {
                 ignoreLoggerAtPoint(e.getPoint());
                 e.consume();
                 fireChangeEvent();
-            } else if (e.getClickCount() > 1 &&
-                ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0)) {
+            } else if (e.getClickCount() > 1 && ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0)) {
                 focusAnLoggerAtPoint(e.getPoint());
                 e.consume();
                 fireChangeEvent();
@@ -1483,19 +1462,18 @@
     }
 
     private final class MouseKeyIconListener extends MouseMotionAdapter implements MouseMotionListener {
-        Cursor focusOnCursor =
-            Toolkit.getDefaultToolkit().createCustomCursor(
-                ChainsawIcons.FOCUS_ON_ICON.getImage(), new Point(10, 10), "");
-        Cursor ignoreCursor =
-            Toolkit.getDefaultToolkit().createCustomCursor(
-                ChainsawIcons.IGNORE_ICON.getImage(), new Point(10, 10), "");
+        Cursor focusOnCursor = Toolkit.getDefaultToolkit()
+                .createCustomCursor(ChainsawIcons.FOCUS_ON_ICON.getImage(), new Point(10, 10), "");
+        Cursor ignoreCursor = Toolkit.getDefaultToolkit()
+                .createCustomCursor(ChainsawIcons.IGNORE_ICON.getImage(), new Point(10, 10), "");
 
         /* (non-Javadoc)
          * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
          */
         @Override
         public void mouseMoved(MouseEvent e) {
-            if (((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0) && ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) > 0)) {
+            if (((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0)
+                    && ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) > 0)) {
                 logTree.setCursor(ignoreCursor);
             } else if ((e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) > 0) {
                 logTree.setCursor(focusOnCursor);
@@ -1511,17 +1489,20 @@
             String selectedLoggerName = getCurrentlySelectedLoggerName();
             boolean hiddenLogger = event.m_logger != null && isHiddenLogger(event.m_logger);
             boolean hiddenExpression = (ignoreExpressionRule != null && ignoreExpressionRule.evaluate(event, null));
-            boolean alwaysDisplayExpression = (alwaysDisplayExpressionRule != null && alwaysDisplayExpressionRule.evaluate(event, null));
+            boolean alwaysDisplayExpression =
+                    (alwaysDisplayExpressionRule != null && alwaysDisplayExpressionRule.evaluate(event, null));
             boolean hidden = (!alwaysDisplayExpression) && (hiddenLogger || hiddenExpression);
             if (selectedLoggerName == null) {
-                //if there is no selected logger, pass if not hidden
+                // if there is no selected logger, pass if not hidden
                 return !hidden;
             }
 
             boolean result = (event.m_logger != null) && !hidden;
 
             if (result && isFocusOnSelected()) {
-                result = (event.m_logger != null && (event.m_logger.startsWith(selectedLoggerName + ".") || event.m_logger.endsWith(selectedLoggerName)));
+                result = (event.m_logger != null
+                        && (event.m_logger.startsWith(selectedLoggerName + ".")
+                                || event.m_logger.endsWith(selectedLoggerName)));
             }
 
             return result;
@@ -1532,5 +1513,4 @@
             super.firePropertyChange(propertyName, oldVal, newVal);
         }
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/AutoFilterComboBox.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/AutoFilterComboBox.java
index 5e5d5b6..185c997 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/AutoFilterComboBox.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/AutoFilterComboBox.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,18 +16,17 @@
  */
 package org.apache.log4j.chainsaw.components.logpanel;
 
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.PopupMenuEvent;
-import javax.swing.event.PopupMenuListener;
 import java.awt.*;
 import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Vector;
-
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 
 public class AutoFilterComboBox extends JComboBox {
     private boolean bypassFiltering;
@@ -35,7 +34,7 @@
     private List displayedEntries = new ArrayList();
 
     AutoFilterComboBoxModel model = new AutoFilterComboBoxModel();
-    //editor component
+    // editor component
     private final JTextField textField = new JTextField();
     private String lastTextToMatch;
 
@@ -43,13 +42,15 @@
         textField.setPreferredSize(getPreferredSize());
         setModel(model);
         setEditor(new AutoFilterEditor());
-        ((JTextField) getEditor().getEditorComponent()).getDocument().addDocumentListener(new AutoFilterDocumentListener());
+        ((JTextField) getEditor().getEditorComponent())
+                .getDocument()
+                .addDocumentListener(new AutoFilterDocumentListener());
         setEditable(true);
         addPopupMenuListener(new PopupMenuListenerImpl());
     }
 
     public Vector getModelData() {
-        //reverse the model order, because it will be un-reversed when we reload it from saved settings
+        // reverse the model order, because it will be un-reversed when we reload it from saved settings
         Vector vector = new Vector();
         for (Object allEntry : allEntries) {
             vector.insertElementAt(allEntry, 0);
@@ -58,7 +59,7 @@
     }
 
     void refilter() {
-        //only refilter if we're not bypassing filtering AND the text has changed since the last call to refilter
+        // only refilter if we're not bypassing filtering AND the text has changed since the last call to refilter
         String textToMatch = getEditor().getItem().toString();
         if (bypassFiltering || (lastTextToMatch != null && lastTextToMatch.equals(textToMatch))) {
             return;
@@ -74,18 +75,19 @@
             }
         }
         bypassFiltering = false;
-        //TODO: on no-match, don't filter at all (show the popup?)
+        // TODO: on no-match, don't filter at all (show the popup?)
         if (displayedEntries.size() > 0 && !textToMatch.isEmpty()) {
             showPopup();
         } else {
             hidePopup();
         }
     }
+
     class AutoFilterComboBoxModel extends AbstractListModel implements MutableComboBoxModel {
         private Object selectedItem;
 
         public void addElement(Object obj) {
-            //assuming add is to displayed list...add to full list (only if not a dup)
+            // assuming add is to displayed list...add to full list (only if not a dup)
             bypassFiltering = true;
 
             boolean entryExists = !allEntries.contains(obj);
@@ -107,7 +109,7 @@
         }
 
         public void insertElementAt(Object obj, int index) {
-            //assuming add is to displayed list...add to full list (only if not a dup)
+            // assuming add is to displayed list...add to full list (only if not a dup)
             if (allEntries.contains(obj)) {
                 return;
             }
@@ -121,7 +123,7 @@
 
         public void removeElementAt(int index) {
             bypassFiltering = true;
-            //assuming removal is from displayed list..remove from full list
+            // assuming removal is from displayed list..remove from full list
             Object obj = displayedEntries.get(index);
             allEntries.remove(obj);
             displayedEntries.remove(obj);
@@ -157,14 +159,15 @@
             int displayedEntrySize = displayedEntries.size();
             if (displayedEntrySize > 0) {
                 displayedEntries.clear();
-                //if firecontentschaned is used, the combobox resizes..use fireintervalremoved instead, which doesn't do that..
+                // if firecontentschaned is used, the combobox resizes..use fireintervalremoved instead, which doesn't
+                // do that..
                 fireIntervalRemoved(this, 0, displayedEntrySize - 1);
             }
             bypassFiltering = false;
         }
 
         public void showAllElements() {
-            //first remove whatever is there and fire necessary events then add events
+            // first remove whatever is there and fire necessary events then add events
             removeAllElements();
             bypassFiltering = true;
             displayedEntries.addAll(allEntries);
@@ -224,7 +227,6 @@
         }
     }
 
-
     private class PopupMenuListenerImpl implements PopupMenuListener {
         private boolean willBecomeVisible = false;
 
@@ -233,13 +235,13 @@
             ((JComboBox) e.getSource()).setSelectedIndex(-1);
             bypassFiltering = false;
             if (!willBecomeVisible) {
-                //we already have a match but we're showing the popup - unfilter
+                // we already have a match but we're showing the popup - unfilter
                 if (displayedEntries.contains(textField.getText())) {
                     model.showAllElements();
                 }
 
-                //workaround for bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4743225
-                //the height of the popup after updating entries in this listener was not updated..
+                // workaround for bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4743225
+                // the height of the popup after updating entries in this listener was not updated..
                 JComboBox list = (JComboBox) e.getSource();
                 willBecomeVisible = true; // the flag is needed to prevent a loop
                 try {
@@ -251,11 +253,11 @@
         }
 
         public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
-            //no-op
+            // no-op
         }
 
         public void popupMenuCanceled(PopupMenuEvent e) {
-            //no-op
+            // no-op
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ColumnNameKeywordMapper.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ColumnNameKeywordMapper.java
index 1db8364..41257e4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ColumnNameKeywordMapper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ColumnNameKeywordMapper.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,13 +16,12 @@
  */
 package org.apache.log4j.chainsaw.components.logpanel;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.log4j.chainsaw.ChainsawConstants;
 import org.apache.log4j.helpers.Constants;
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
-import java.util.HashMap;
-import java.util.Map;
-
 public class ColumnNameKeywordMapper {
 
     final Map<String, String> columnNameKeywordMap = new HashMap<>();
@@ -38,9 +37,15 @@
         columnNameKeywordMap.put(ChainsawConstants.THREAD_COL_NAME, LoggingEventFieldResolver.THREAD_FIELD);
         columnNameKeywordMap.put(ChainsawConstants.THROWABLE_COL_NAME, LoggingEventFieldResolver.EXCEPTION_FIELD);
         columnNameKeywordMap.put(ChainsawConstants.TIMESTAMP_COL_NAME, LoggingEventFieldResolver.TIMESTAMP_FIELD);
-        columnNameKeywordMap.put(ChainsawConstants.ID_COL_NAME.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + Constants.LOG4J_ID_KEY);
-        columnNameKeywordMap.put(ChainsawConstants.LOG4J_MARKER_COL_NAME, LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME);
-        columnNameKeywordMap.put(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE.toUpperCase(), LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+        columnNameKeywordMap.put(
+                ChainsawConstants.ID_COL_NAME.toUpperCase(),
+                LoggingEventFieldResolver.PROP_FIELD + Constants.LOG4J_ID_KEY);
+        columnNameKeywordMap.put(
+                ChainsawConstants.LOG4J_MARKER_COL_NAME,
+                LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.LOG4J_MARKER_COL_NAME);
+        columnNameKeywordMap.put(
+                ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE.toUpperCase(),
+                LoggingEventFieldResolver.PROP_FIELD + ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
     }
 
     public boolean contains(String key) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ElementFactory.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ElementFactory.java
index 9c19e5a..19c3876 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ElementFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/ElementFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,43 +16,42 @@
  */
 package org.apache.log4j.chainsaw.components.logpanel;
 
-import org.apache.log4j.chainsaw.components.elements.SmallButton;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
-import javax.swing.*;
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
+import javax.swing.*;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 
 public class ElementFactory {
     public static SmallButton createFindNextButton(Runnable action) {
         SmallButton button = new SmallButton.Builder()
-            .action(action)
-            .name("Find next")
-            .text("")
-            .smallIconUrl(ChainsawIcons.DOWN)
-            .shortDescription("Find the next occurrence of the rule from the current row")
-            .keyStroke(KeyStroke.getKeyStroke("F3"))
-            .build();
+                .action(action)
+                .name("Find next")
+                .text("")
+                .smallIconUrl(ChainsawIcons.DOWN)
+                .shortDescription("Find the next occurrence of the rule from the current row")
+                .keyStroke(KeyStroke.getKeyStroke("F3"))
+                .build();
 
         button.getActionMap().put(button.getActionName(), button.getAction());
         button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-            .put(button.getActionAcceleratorKey(), button.getActionName());
+                .put(button.getActionAcceleratorKey(), button.getActionName());
         return button;
     }
 
     public static SmallButton createFindPreviousButton(Runnable action) {
         SmallButton button = new SmallButton.Builder()
-            .action(action)
-            .name("Find previous")
-            .text("")
-            .smallIconUrl(ChainsawIcons.UP)
-            .shortDescription("Find the previous occurrence of the rule from the current row")
-            .keyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.SHIFT_MASK))
-            .build();
+                .action(action)
+                .name("Find previous")
+                .text("")
+                .smallIconUrl(ChainsawIcons.UP)
+                .shortDescription("Find the previous occurrence of the rule from the current row")
+                .keyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.SHIFT_MASK))
+                .build();
 
         button.getActionMap().put(button.getActionName(), button.getAction());
         button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
-            .put(button.getActionAcceleratorKey(), button.getActionName());
+                .put(button.getActionAcceleratorKey(), button.getActionName());
         return button;
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
index f8a646e..9925edf 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,37 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.logpanel;
 
-import org.apache.log4j.chainsaw.*;
-import org.apache.log4j.chainsaw.color.ColorPanel;
-import org.apache.log4j.chainsaw.color.RuleColorizer;
-import org.apache.log4j.chainsaw.components.elements.sorttable.JSortTable;
-import org.apache.log4j.chainsaw.components.elements.SmallButton;
-import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameTreePanel;
-import org.apache.log4j.chainsaw.filter.FilterModel;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.icons.LineIconFactory;
-import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
-import org.apache.log4j.chainsaw.layout.EventDetailLayout;
-import org.apache.log4j.chainsaw.layout.LayoutEditorPane;
-import org.apache.log4j.chainsaw.prefs.Profileable;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.ColorRule;
-import org.apache.log4j.rule.ExpressionRule;
-import org.apache.log4j.rule.Rule;
-
-import javax.swing.*;
-import javax.swing.event.*;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-import javax.swing.text.Document;
 import java.awt.*;
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
@@ -59,13 +30,38 @@
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
-
+import javax.swing.*;
+import javax.swing.event.*;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import javax.swing.text.Document;
+import org.apache.log4j.chainsaw.*;
+import org.apache.log4j.chainsaw.color.ColorPanel;
+import org.apache.log4j.chainsaw.color.RuleColorizer;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
+import org.apache.log4j.chainsaw.components.elements.sorttable.JSortTable;
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameTreePanel;
+import org.apache.log4j.chainsaw.filter.FilterModel;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.icons.LineIconFactory;
+import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
+import org.apache.log4j.chainsaw.layout.EventDetailLayout;
+import org.apache.log4j.chainsaw.layout.LayoutEditorPane;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
+import org.apache.log4j.chainsaw.prefs.Profileable;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.ColorRule;
+import org.apache.log4j.rule.ExpressionRule;
+import org.apache.log4j.rule.Rule;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * A LogPanel provides a view to a collection of LoggingEvents.<br>
  * <br>
@@ -164,7 +160,7 @@
     private ToggleToolTips searchToggleToolTips;
     private JScrollPane detailPane;
     private JScrollPane searchPane;
-    //only one tableCellEditor, shared by both tables
+    // only one tableCellEditor, shared by both tables
     private TableCellEditor markerCellEditor;
     private JToolBar detailToolbar;
     private boolean searchResultsDisplayed;
@@ -181,12 +177,13 @@
      * @param statusBar       shared status bar, provided by main application
      * @param identifier      used to load and save settings
      */
-    public LogPanel(SettingsManager settingsManager,
-                    ApplicationPreferenceModel applicationPreferenceModel,
-                    final ChainsawStatusBar statusBar,
-                    final String identifier,
-                    Map<String, RuleColorizer> allColorizers,
-                    RuleColorizer globalRuleColorizer) {
+    public LogPanel(
+            SettingsManager settingsManager,
+            ApplicationPreferenceModel applicationPreferenceModel,
+            final ChainsawStatusBar statusBar,
+            final String identifier,
+            Map<String, RuleColorizer> allColorizers,
+            RuleColorizer globalRuleColorizer) {
 
         this.identifier = identifier;
         this.applicationPreferenceModel = applicationPreferenceModel;
@@ -215,14 +212,12 @@
         ColumnNameKeywordMapper columnNameKeywordMapper = new ColumnNameKeywordMapper();
 
         logPanelPreferencesFrame.setTitle("'" + identifier + "' Log Panel Preferences");
-        logPanelPreferencesFrame.setIconImage(
-            ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+        logPanelPreferencesFrame.setIconImage(((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
         logPanelPreferencesFrame.getContentPane().add(new JScrollPane(logPanelPreferencePanel));
 
         logPanelPreferencesFrame.setSize(740, 520);
 
-        logPanelPreferencePanel.setOkCancelActionListener(
-            e -> logPanelPreferencesFrame.setVisible(false));
+        logPanelPreferencePanel.setOkCancelActionListener(e -> logPanelPreferencesFrame.setVisible(false));
 
         KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
         Action closeLogPanelPreferencesFrameAction = new AbstractAction() {
@@ -230,34 +225,30 @@
                 logPanelPreferencesFrame.setVisible(false);
             }
         };
-        logPanelPreferencesFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
-        logPanelPreferencesFrame.getRootPane().
-            getActionMap().put("ESCAPE", closeLogPanelPreferencesFrameAction);
+        logPanelPreferencesFrame
+                .getRootPane()
+                .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+                .put(escape, "ESCAPE");
+        logPanelPreferencesFrame.getRootPane().getActionMap().put("ESCAPE", closeLogPanelPreferencesFrameAction);
 
-
-        setDetailPaneConversionPattern(
-            DefaultLayoutFactory.getDefaultPatternLayout());
-        detailLayout.setConversionPattern(
-            DefaultLayoutFactory.getDefaultPatternLayout());
+        setDetailPaneConversionPattern(DefaultLayoutFactory.getDefaultPatternLayout());
+        detailLayout.setConversionPattern(DefaultLayoutFactory.getDefaultPatternLayout());
 
         undockedFrame = new JFrame(identifier);
-        undockedFrame.setDefaultCloseOperation(
-            WindowConstants.DO_NOTHING_ON_CLOSE);
+        undockedFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
 
         if (ChainsawIcons.UNDOCKED_ICON != null) {
-            undockedFrame.setIconImage(
-                new ImageIcon(ChainsawIcons.UNDOCKED_ICON).getImage());
+            undockedFrame.setIconImage(new ImageIcon(ChainsawIcons.UNDOCKED_ICON).getImage());
         }
 
         externalPanel = new DockablePanel();
         externalPanel.setLayout(new BorderLayout());
 
-        undockedFrame.addWindowListener(
-            new WindowAdapter() {
-                public void windowClosing(WindowEvent e) {
-                    dock();
-                }
-            });
+        undockedFrame.addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent e) {
+                dock();
+            }
+        });
 
         undockedToolbar = createDockwindowToolbar();
         externalPanel.add(undockedToolbar, BorderLayout.NORTH);
@@ -265,15 +256,14 @@
         undockedFrame.setSize(new Dimension(1024, 768));
         undockedFrame.pack();
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(LogPanelPreferenceModel.SCROLL_TO_BOTTOM)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    if (value) {
-                        scrollToBottom();
-                    }
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.SCROLL_TO_BOTTOM)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                if (value) {
+                    scrollToBottom();
                 }
-            });
+            }
+        });
         /*
          * Menus on which the preferencemodels rely
          */
@@ -283,20 +273,16 @@
          * format changes
          */
         final JPopupMenu dateFormatChangePopup = new JPopupMenu();
-        final JRadioButtonMenuItem isoButton =
-            new JRadioButtonMenuItem(
-                new AbstractAction("Use ISO8601Format") {
-                    public void actionPerformed(ActionEvent e) {
-                        logPanelPreferenceModel.setDateFormatPattern("ISO8601");
-                    }
-                });
-        final JRadioButtonMenuItem simpleTimeButton =
-            new JRadioButtonMenuItem(
-                new AbstractAction("Use simple time") {
-                    public void actionPerformed(ActionEvent e) {
-                        logPanelPreferenceModel.setDateFormatPattern("HH:mm:ss");
-                    }
-                });
+        final JRadioButtonMenuItem isoButton = new JRadioButtonMenuItem(new AbstractAction("Use ISO8601Format") {
+            public void actionPerformed(ActionEvent e) {
+                logPanelPreferenceModel.setDateFormatPattern("ISO8601");
+            }
+        });
+        final JRadioButtonMenuItem simpleTimeButton = new JRadioButtonMenuItem(new AbstractAction("Use simple time") {
+            public void actionPerformed(ActionEvent e) {
+                logPanelPreferenceModel.setDateFormatPattern("HH:mm:ss");
+            }
+        });
 
         ButtonGroup dfBG = new ButtonGroup();
         dfBG.add(isoButton);
@@ -305,99 +291,91 @@
         dateFormatChangePopup.add(isoButton);
         dateFormatChangePopup.add(simpleTimeButton);
 
-        final JCheckBoxMenuItem menuItemLoggerTree =
-            new JCheckBoxMenuItem("Show Logger Tree");
+        final JCheckBoxMenuItem menuItemLoggerTree = new JCheckBoxMenuItem("Show Logger Tree");
         menuItemLoggerTree.addActionListener(
-            e -> logPanelPreferenceModel.setLogTreePanelVisible(menuItemLoggerTree.isSelected()));
+                e -> logPanelPreferenceModel.setLogTreePanelVisible(menuItemLoggerTree.isSelected()));
         menuItemLoggerTree.setIcon(new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
-        final JCheckBoxMenuItem menuItemToggleDetails =
-            new JCheckBoxMenuItem("Show Detail Pane");
+        final JCheckBoxMenuItem menuItemToggleDetails = new JCheckBoxMenuItem("Show Detail Pane");
         menuItemToggleDetails.addActionListener(
-            e -> logPanelPreferenceModel.setDetailPaneVisible(menuItemToggleDetails.isSelected()));
+                e -> logPanelPreferenceModel.setDetailPaneVisible(menuItemToggleDetails.isSelected()));
 
         menuItemToggleDetails.setIcon(new ImageIcon(ChainsawIcons.INFO));
 
         /*
          * add preferencemodel listeners
          */
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.WRAP_MSG)) {
-                        boolean wrap = (Boolean) evt.getPropertyValue();
-                        renderer.setWrapMessage(wrap);
-                        table.tableChanged(new TableModelEvent(tableModel));
-                        searchRenderer.setWrapMessage(wrap);
-                        searchTable.tableChanged(new TableModelEvent(searchModel));
-                    }
-                });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.WRAP_MSG)) {
+                boolean wrap = (Boolean) evt.getPropertyValue();
+                renderer.setWrapMessage(wrap);
+                table.tableChanged(new TableModelEvent(tableModel));
+                searchRenderer.setWrapMessage(wrap);
+                searchTable.tableChanged(new TableModelEvent(searchModel));
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.SEARCH_RESULTS_VISIBLE)) {
-                        boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getPropertyValue();
-                        if (displaySearchResultsInDetailsIfAvailable) {
-                            showSearchResults();
-                        } else {
-                            hideSearchResults();
-                        }
-                    }
-                });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.SEARCH_RESULTS_VISIBLE)) {
+                boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getPropertyValue();
+                if (displaySearchResultsInDetailsIfAvailable) {
+                    showSearchResults();
+                } else {
+                    hideSearchResults();
+                }
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.HIGHLIGHT_SEARCH_MATCH_TEXT)) {
-                        boolean highlightText = (Boolean) evt.getPropertyValue();
-                        renderer.setHighlightSearchMatchText(highlightText);
-                        table.tableChanged(new TableModelEvent(tableModel));
-                        searchRenderer.setHighlightSearchMatchText(highlightText);
-                        searchTable.tableChanged(new TableModelEvent(searchModel));
-                    }
-                });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.HIGHLIGHT_SEARCH_MATCH_TEXT)) {
+                boolean highlightText = (Boolean) evt.getPropertyValue();
+                renderer.setHighlightSearchMatchText(highlightText);
+                table.tableChanged(new TableModelEvent(tableModel));
+                searchRenderer.setHighlightSearchMatchText(highlightText);
+                searchTable.tableChanged(new TableModelEvent(searchModel));
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) {
-                        boolean detailPaneVisible = (Boolean) evt.getPropertyValue();
-                        if (detailPaneVisible) {
-                            showDetailPane();
-                        } else {
-                            //don't hide the detail pane if search results are being displayed
-                            if (!searchResultsDisplayed) {
-                                hideDetailPane();
-                            }
-                        }
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) {
+                boolean detailPaneVisible = (Boolean) evt.getPropertyValue();
+                if (detailPaneVisible) {
+                    showDetailPane();
+                } else {
+                    // don't hide the detail pane if search results are being displayed
+                    if (!searchResultsDisplayed) {
+                        hideDetailPane();
                     }
-                });
+                }
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) {
-                        boolean newValue = (Boolean) evt.getPropertyValue();
-                        if (newValue) {
-                            showLogTreePanel();
-                        } else {
-                            hideLogTreePanel();
-                        }
-                    }
-                });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) {
+                boolean newValue = (Boolean) evt.getPropertyValue();
+                if (newValue) {
+                    showLogTreePanel();
+                } else {
+                    hideLogTreePanel();
+                }
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-                evt -> {
-                    if (evt.getPropertyName().equals(LogPanelPreferenceModel.TOOL_TIPS_VISIBLE)) {
-                        boolean toolTips = (Boolean) evt.getPropertyValue();
-                        renderer.setToolTipsVisible(toolTips);
-                        searchRenderer.setToolTipsVisible(toolTips);
-                        searchToggleToolTips.setSelected(toolTips);
-                        mainToggleToolTips.setSelected(toolTips);
-                    }
-                });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.TOOL_TIPS_VISIBLE)) {
+                boolean toolTips = (Boolean) evt.getPropertyValue();
+                renderer.setToolTipsVisible(toolTips);
+                searchRenderer.setToolTipsVisible(toolTips);
+                searchToggleToolTips.setSelected(toolTips);
+                mainToggleToolTips.setSelected(toolTips);
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
+        logPanelPreferenceModel.addEventListener(evt -> {
             if (evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
                 isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
-                simpleTimeButton.setSelected(!logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
+                simpleTimeButton.setSelected(
+                        !logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
 
                 if (logPanelPreferenceModel.getDateFormatTimeZone() != null) {
                     renderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
@@ -415,7 +393,8 @@
                         renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
                     }
                     try {
-                        searchRenderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
+                        searchRenderer.setDateFormatter(
+                                new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
                     } catch (IllegalArgumentException iae) {
                         logPanelPreferenceModel.setDefaultDatePatternFormat();
                         searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
@@ -427,102 +406,103 @@
             }
         });
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(LogPanelPreferenceModel.CLEAR_TABLE_EXPRESSION)) {
-                    String expression = evt.getPropertyValue().toString();
-                    try {
-                        clearTableExpressionRule = ExpressionRule.getRule(expression);
-                        logger.info("clearTableExpressionRule set to: " + expression);
-                    } catch (Exception e) {
-                        logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
-                        clearTableExpressionRule = null;
-                    }
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.CLEAR_TABLE_EXPRESSION)) {
+                String expression = evt.getPropertyValue().toString();
+                try {
+                    clearTableExpressionRule = ExpressionRule.getRule(expression);
+                    logger.info("clearTableExpressionRule set to: " + expression);
+                } catch (Exception e) {
+                    logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
+                    clearTableExpressionRule = null;
                 }
-            });
+            }
+        });
 
         logPanelPreferenceModel.addEventListener(evt -> {
-                if (!evt.isBeforeUpdate() && evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_PATTERN) ||
-                    evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
+            if (!evt.isBeforeUpdate() && evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_PATTERN)
+                    || evt.getPropertyName().equals(LogPanelPreferenceModel.DATE_FORMAT_TIME_ZONE)) {
 
-            isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
-            simpleTimeButton.setSelected(!logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
+                isoButton.setSelected(logPanelPreferenceModel.isUseISO8601Format());
+                simpleTimeButton.setSelected(
+                        !logPanelPreferenceModel.isUseISO8601Format() && !logPanelPreferenceModel.isCustomDateFormat());
 
-            if (logPanelPreferenceModel.getDateFormatTimeZone() != null && !logPanelPreferenceModel.getDateFormatTimeZone().isEmpty()) {
-                renderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
-                searchRenderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
-            }
+                if (logPanelPreferenceModel.getDateFormatTimeZone() != null
+                        && !logPanelPreferenceModel.getDateFormatTimeZone().isEmpty()) {
+                    renderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
+                    searchRenderer.setTimeZone(logPanelPreferenceModel.getDateFormatTimeZone());
+                }
 
-            if (logPanelPreferenceModel.isUseISO8601Format()) {
-                renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
-                searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
-            } else {
-                try {
-                    renderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
-                } catch (IllegalArgumentException iae) {
-                    logPanelPreferenceModel.setDefaultDatePatternFormat();
+                if (logPanelPreferenceModel.isUseISO8601Format()) {
                     renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
-                }
-                try {
-                    searchRenderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
-                } catch (IllegalArgumentException iae) {
-                    logPanelPreferenceModel.setDefaultDatePatternFormat();
                     searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                } else {
+                    try {
+                        renderer.setDateFormatter(new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
+                    } catch (IllegalArgumentException iae) {
+                        logPanelPreferenceModel.setDefaultDatePatternFormat();
+                        renderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                    }
+                    try {
+                        searchRenderer.setDateFormatter(
+                                new SimpleDateFormat(logPanelPreferenceModel.getDateFormatPattern()));
+                    } catch (IllegalArgumentException iae) {
+                        logPanelPreferenceModel.setDefaultDatePatternFormat();
+                        searchRenderer.setDateFormatter(new SimpleDateFormat(Constants.ISO8601_PATTERN));
+                    }
                 }
+
+                table.tableChanged(new TableModelEvent(tableModel));
+                searchTable.tableChanged(new TableModelEvent(searchModel));
             }
+        });
 
-            table.tableChanged(new TableModelEvent(tableModel));
-            searchTable.tableChanged(new TableModelEvent(searchModel));
-        }});
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOGGER_PRECISION)) {
+                renderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
+                table.tableChanged(new TableModelEvent(tableModel));
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOGGER_PRECISION)) {
-                    renderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
-                    table.tableChanged(new TableModelEvent(tableModel));
+                searchRenderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
+                searchTable.tableChanged(new TableModelEvent(searchModel));
+            }
+        });
 
-                    searchRenderer.setLoggerPrecision(logPanelPreferenceModel.getLoggerPrecision());
-                    searchTable.tableChanged(new TableModelEvent(searchModel));
-                }
-            });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                menuItemLoggerTree.setSelected(value);
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    menuItemLoggerTree.setSelected(value);
-                }
-            });
+        logPanelPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                menuItemToggleDetails.setSelected(value);
+            }
+        });
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    menuItemToggleDetails.setSelected(value);
-                }
-            });
-
-//        applicationPreferenceModel.addPropertyChangeListener("searchColor", new PropertyChangeListener() {
-//            public void propertyChange(PropertyChangeEvent evt) {
-//                if (table != null) {
-//                    table.repaint();
-//                }
-//                if (searchTable != null) {
-//                    searchTable.repaint();
-//                }
-//            }
-//        });
-//
-//        applicationPreferenceModel.addPropertyChangeListener("alternatingColor", new PropertyChangeListener() {
-//            public void propertyChange(PropertyChangeEvent evt) {
-//                if (table != null) {
-//                    table.repaint();
-//                }
-//                if (searchTable != null) {
-//                    searchTable.repaint();
-//                }
-//            }
-//        });
+        //        applicationPreferenceModel.addPropertyChangeListener("searchColor", new PropertyChangeListener() {
+        //            public void propertyChange(PropertyChangeEvent evt) {
+        //                if (table != null) {
+        //                    table.repaint();
+        //                }
+        //                if (searchTable != null) {
+        //                    searchTable.repaint();
+        //                }
+        //            }
+        //        });
+        //
+        //        applicationPreferenceModel.addPropertyChangeListener("alternatingColor", new PropertyChangeListener()
+        // {
+        //            public void propertyChange(PropertyChangeEvent evt) {
+        //                if (table != null) {
+        //                    table.repaint();
+        //                }
+        //                if (searchTable != null) {
+        //                    searchTable.repaint();
+        //                }
+        //            }
+        //        });
 
         /*
          *End of preferenceModel listeners
@@ -544,24 +524,58 @@
         searchTable.setColumnSelectionAllowed(false);
         searchTable.setRowSelectionAllowed(true);
 
-        //we've mapped f2, shift f2 and ctrl-f2 to marker-related actions, unmap them from the table
+        // we've mapped f2, shift f2 and ctrl-f2 to marker-related actions, unmap them from the table
         table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
-        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
-        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
-        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
+        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
+        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        "none");
+        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_F2,
+                                Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK),
+                        "none");
 
-        //we're also mapping ctrl-a to scroll-to-top, unmap from the table
-        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
+        // we're also mapping ctrl-a to scroll-to-top, unmap from the table
+        table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        "none");
 
-        searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F2"), "none");
-        searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
-        searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
-        searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK), "none");
+        searchTable
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(KeyStroke.getKeyStroke("F2"), "none");
+        searchTable
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.SHIFT_MASK), "none");
+        searchTable
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_F2, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        "none");
+        searchTable
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_F2,
+                                Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | InputEvent.SHIFT_MASK),
+                        "none");
 
-        //we're also mapping ctrl-a to scroll-to-top, unmap from the table
-        searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
+        // we're also mapping ctrl-a to scroll-to-top, unmap from the table
+        searchTable
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        "none");
 
-        //add a listener to update the 'refine focus'
+        // add a listener to update the 'refine focus'
         tableModel.addNewKeyListener(e -> columnNameKeywordMapper.put(e.getKey().toString(), "PROP." + e.getKey()));
 
         /*
@@ -571,50 +585,44 @@
         tableModel.setRuleMediator(tableRuleMediator);
         searchModel.setRuleMediator(searchRuleMediator);
 
-        tableModel.addEventCountListener(
-            (currentCount, totalCount) -> {
-                if (LogPanel.this.isVisible()) {
-                    statusBar.setSelectedLine(
-                        table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
-                }
-            });
+        tableModel.addEventCountListener((currentCount, totalCount) -> {
+            if (LogPanel.this.isVisible()) {
+                statusBar.setSelectedLine(table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
+            }
+        });
 
-        tableModel.addEventCountListener(
-            new EventCountListener() {
-                final NumberFormat formatter = NumberFormat.getPercentInstance();
-                boolean warning75 = false;
-                boolean warning100 = false;
+        tableModel.addEventCountListener(new EventCountListener() {
+            final NumberFormat formatter = NumberFormat.getPercentInstance();
+            boolean warning75 = false;
+            boolean warning100 = false;
 
-                public void eventCountChanged(int currentCount, int totalCount) {
-                    if (logPanelPreferenceModel.isCyclic()) {
-                        double percent =
-                            ((double) totalCount) / tableModel.getMaxSize();
-                        String msg;
-                        boolean wasWarning = warning75 || warning100;
-                        if ((percent > 0.75) && (percent < 1.0) && !warning75) {
-                            msg =
-                                "Warning :: " + formatter.format(percent) + " of the '"
-                                    + getIdentifier() + "' buffer has been used";
-                            warning75 = true;
-                        } else if ((percent >= 1.0) && !warning100) {
-                            msg =
-                                "Warning :: " + formatter.format(percent) + " of the '"
-                                    + getIdentifier()
-                                    + "' buffer has been used.  Older events are being discarded.";
-                            warning100 = true;
-                        } else {
-                            //clear msg
-                            msg = "";
-                            warning75 = false;
-                            warning100 = false;
-                        }
+            public void eventCountChanged(int currentCount, int totalCount) {
+                if (logPanelPreferenceModel.isCyclic()) {
+                    double percent = ((double) totalCount) / tableModel.getMaxSize();
+                    String msg;
+                    boolean wasWarning = warning75 || warning100;
+                    if ((percent > 0.75) && (percent < 1.0) && !warning75) {
+                        msg = "Warning :: " + formatter.format(percent) + " of the '" + getIdentifier()
+                                + "' buffer has been used";
+                        warning75 = true;
+                    } else if ((percent >= 1.0) && !warning100) {
+                        msg = "Warning :: " + formatter.format(percent) + " of the '"
+                                + getIdentifier()
+                                + "' buffer has been used.  Older events are being discarded.";
+                        warning100 = true;
+                    } else {
+                        // clear msg
+                        msg = "";
+                        warning75 = false;
+                        warning100 = false;
+                    }
 
-                        if (msg != null && wasWarning) {
-                            statusBar.setMessage(msg);
-                        }
+                    if (msg != null && wasWarning) {
+                        statusBar.setMessage(msg);
                     }
                 }
-            });
+            }
+        });
 
         /*
          * Logger tree panel
@@ -637,8 +645,7 @@
          * Color rule frame and panel
          */
         colorFrame.setTitle("'" + identifier + "' color settings");
-        colorFrame.setIconImage(
-            ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+        colorFrame.setIconImage(((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
 
         allColorizers.put(identifier, currentColorizer);
         colorPanel = new ColorPanel(settingsManager, globalColorizer, filterModel, allColorizers, this);
@@ -651,35 +658,35 @@
             }
         };
         colorFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
-        colorFrame.getRootPane().
-            getActionMap().put("ESCAPE", closeColorPanelAction);
+        colorFrame.getRootPane().getActionMap().put("ESCAPE", closeColorPanelAction);
 
-        colorPanel.setCloseActionListener(
-            e -> colorFrame.setVisible(false));
+        colorPanel.setCloseActionListener(e -> colorFrame.setVisible(false));
 
-        currentColorizer.addPropertyChangeListener(
-            "colorrule",
-            new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent evt) {
-                    for (Object o : tableModel.getAllEvents()) {
-                        LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) o;
-                        loggingEventWrapper.updateColorRuleColors(currentColorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), currentColorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
-                    }
-//          no need to update searchmodel events since tablemodel and searchmodel share all events, and color rules aren't different between the two
-//          if that changes, un-do the color syncing in loggingeventwrapper & re-enable this code
-//
-//          for (Iterator iter = searchModel.getAllEvents().iterator();iter.hasNext();) {
-//             LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
-//             loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
-//           }
-                    colorizedEventAndSearchMatchThumbnail.configureColors();
-                    lowerPanel.revalidate();
-                    lowerPanel.repaint();
-
-                    searchTable.revalidate();
-                    searchTable.repaint();
+        currentColorizer.addPropertyChangeListener("colorrule", new PropertyChangeListener() {
+            public void propertyChange(PropertyChangeEvent evt) {
+                for (Object o : tableModel.getAllEvents()) {
+                    LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) o;
+                    loggingEventWrapper.updateColorRuleColors(
+                            currentColorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()),
+                            currentColorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
                 }
-            });
+                //          no need to update searchmodel events since tablemodel and searchmodel share all events, and
+                // color rules aren't different between the two
+                //          if that changes, un-do the color syncing in loggingeventwrapper & re-enable this code
+                //
+                //          for (Iterator iter = searchModel.getAllEvents().iterator();iter.hasNext();) {
+                //             LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
+                //
+                // loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+                //           }
+                colorizedEventAndSearchMatchThumbnail.configureColors();
+                lowerPanel.revalidate();
+                lowerPanel.repaint();
+
+                searchTable.revalidate();
+                searchTable.repaint();
+            }
+        });
 
         /*
          * Table definition.  Actual construction is above (next to tablemodel)
@@ -704,105 +711,117 @@
         searchTable.addMouseListener(new TableMarkerListener(searchTable, searchModel, tableModel));
         searchTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 
+        // set valueisadjusting if holding down a key - don't process setdetail events
+        table.addKeyListener(new KeyListener() {
+            public void keyTyped(KeyEvent e) {}
 
-        //set valueisadjusting if holding down a key - don't process setdetail events
-        table.addKeyListener(
-            new KeyListener() {
-                public void keyTyped(KeyEvent e) {
+            public void keyPressed(KeyEvent e) {
+                synchronized (detail) {
+                    table.getSelectionModel().setValueIsAdjusting(true);
+                    detail.notify();
                 }
+            }
 
-                public void keyPressed(KeyEvent e) {
-                    synchronized (detail) {
-                        table.getSelectionModel().setValueIsAdjusting(true);
-                        detail.notify();
-                    }
+            public void keyReleased(KeyEvent e) {
+                synchronized (detail) {
+                    table.getSelectionModel().setValueIsAdjusting(false);
+                    detail.notify();
                 }
-
-                public void keyReleased(KeyEvent e) {
-                    synchronized (detail) {
-                        table.getSelectionModel().setValueIsAdjusting(false);
-                        detail.notify();
-                    }
-                }
-            });
+            }
+        });
 
         table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
         searchTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
         table.getSelectionModel().addListSelectionListener(evt -> {
+            if (((evt.getFirstIndex() == evt.getLastIndex()) && (evt.getFirstIndex() > 0) && previousLastIndex != -1)
+                    || (evt.getValueIsAdjusting())) {
+                return;
+            }
+            boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
+            boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
+
+            /*
+             * when scroll-to-bottom is active, here is what events look like:
+             * rowcount-1: 227, last: 227, previous last: 191..first: 191
+             *
+             * when the user has unselected the bottom row, here is what the events look like:
+             * rowcount-1: 227, last: 227, previous last: 227..first: 222
+             *
+             * note: previouslast is set after it is evaluated in the bypass scroll check
+             */
+            // System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +",
+            // previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " +
+            // evt.getValueIsAdjusting());
+
+            boolean disableScrollToBottom =
+                    (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
+            if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
+                logPanelPreferenceModel.setScrollToBottom(false);
+            }
+            previousLastIndex = evt.getLastIndex();
+        });
+
+        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+            public void valueChanged(ListSelectionEvent evt) {
                 if (((evt.getFirstIndex() == evt.getLastIndex())
-                    && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
+                                && (evt.getFirstIndex() > 0)
+                                && previousLastIndex != -1)
+                        || (evt.getValueIsAdjusting())) {
                     return;
                 }
-                boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
-                boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
 
-                /*
-                 * when scroll-to-bottom is active, here is what events look like:
-                 * rowcount-1: 227, last: 227, previous last: 191..first: 191
-                 *
-                 * when the user has unselected the bottom row, here is what the events look like:
-                 * rowcount-1: 227, last: 227, previous last: 227..first: 222
-                 *
-                 * note: previouslast is set after it is evaluated in the bypass scroll check
-                 */
-                //System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +", previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " + evt.getValueIsAdjusting());
+                final ListSelectionModel lsm = (ListSelectionModel) evt.getSource();
 
-                boolean disableScrollToBottom = (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
-                if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
-                    logPanelPreferenceModel.setScrollToBottom(false);
-                }
-                previousLastIndex = evt.getLastIndex();
-            }
-        );
-
-        table.getSelectionModel().addListSelectionListener(
-            new ListSelectionListener() {
-                public void valueChanged(ListSelectionEvent evt) {
-                    if (((evt.getFirstIndex() == evt.getLastIndex())
-                        && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
-                        return;
+                if (lsm.isSelectionEmpty()) {
+                    if (isVisible()) {
+                        statusBar.setNothingSelected();
                     }
 
-                    final ListSelectionModel lsm = (ListSelectionModel) evt.getSource();
+                    if (detail.getDocument().getDefaultRootElement() != null) {
+                        detailPaneUpdater.setSelectedRow(-1);
+                    }
+                } else {
+                    if (table.getSelectedRow() > -1) {
+                        int selectedRow = table.getSelectedRow();
 
-                    if (lsm.isSelectionEmpty()) {
                         if (isVisible()) {
-                            statusBar.setNothingSelected();
+                            updateStatusBar();
                         }
 
-                        if (detail.getDocument().getDefaultRootElement() != null) {
-                            detailPaneUpdater.setSelectedRow(-1);
-                        }
-                    } else {
-                        if (table.getSelectedRow() > -1) {
-                            int selectedRow = table.getSelectedRow();
-
-                            if (isVisible()) {
-                                updateStatusBar();
-                            }
-
-                            try {
-                                if (tableModel.getRowCount() >= selectedRow) {
-                                    detailPaneUpdater.setSelectedRow(table.getSelectedRow());
-                                } else {
-                                    detailPaneUpdater.setSelectedRow(-1);
-                                }
-                            } catch (Exception e) {
-                                e.printStackTrace();
+                        try {
+                            if (tableModel.getRowCount() >= selectedRow) {
+                                detailPaneUpdater.setSelectedRow(table.getSelectedRow());
+                            } else {
                                 detailPaneUpdater.setSelectedRow(-1);
                             }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            detailPaneUpdater.setSelectedRow(-1);
                         }
                     }
                 }
-            });
+            }
+        });
 
-        renderer = new TableColorizingRenderer(settingsManager, currentColorizer, tableModel, logPanelPreferenceModel, applicationPreferenceModel, true);
+        renderer = new TableColorizingRenderer(
+                settingsManager,
+                currentColorizer,
+                tableModel,
+                logPanelPreferenceModel,
+                applicationPreferenceModel,
+                true);
         renderer.setToolTipsVisible(logPanelPreferenceModel.isToolTipsVisible());
 
         table.setDefaultRenderer(Object.class, renderer);
 
-        searchRenderer = new TableColorizingRenderer(settingsManager, currentColorizer, searchModel, logPanelPreferenceModel, applicationPreferenceModel, false);
+        searchRenderer = new TableColorizingRenderer(
+                settingsManager,
+                currentColorizer,
+                searchModel,
+                logPanelPreferenceModel,
+                applicationPreferenceModel,
+                false);
         searchRenderer.setToolTipsVisible(logPanelPreferenceModel.isToolTipsVisible());
 
         searchTable.setDefaultRenderer(Object.class, searchRenderer);
@@ -813,13 +832,14 @@
         table.addMouseListener(new ThrowableDisplayMouseAdapter(table, tableModel));
         searchTable.addMouseListener(new ThrowableDisplayMouseAdapter(searchTable, searchModel));
 
-        //select a row in the main table when a row in the search table is selected
+        // select a row in the main table when a row in the search table is selected
         searchTable.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
                 LoggingEventWrapper loggingEventWrapper = searchModel.getRow(searchTable.getSelectedRow());
                 if (loggingEventWrapper != null) {
-                    int id = Integer.parseInt(loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
-                    //preserve the table's viewble column
+                    int id = Integer.parseInt(
+                            loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
+                    // preserve the table's viewble column
                     setSelectedEvent(id);
                 }
             }
@@ -829,41 +849,41 @@
          * We listen for new Key's coming in so we can get them automatically
          * added as columns
          */
-        tableModel.addNewKeyListener(
-            e -> SwingHelper.invokeOnEDT(() -> {
-// don't add the column if we already know about it, this could be if we've seen it before and saved the column preferences
-//this may throw an illegalargexception - ignore it because we need to add only if not already added
-                //if the column is already added, don't add again
+        tableModel.addNewKeyListener(e -> SwingHelper.invokeOnEDT(() -> {
+            // don't add the column if we already know about it, this could be if we've seen it before and saved the
+            // column preferences
+            // this may throw an illegalargexception - ignore it because we need to add only if not already added
+            // if the column is already added, don't add again
 
-                try {
-                    if (table.getColumn(e.getKey()) != null) {
-                        return;
-                    }
-//no need to check search table - we use the same columns
-                } catch (IllegalArgumentException iae) {
+            try {
+                if (table.getColumn(e.getKey()) != null) {
+                    return;
                 }
-                TableColumn col = new TableColumn(e.getNewModelIndex());
-                col.setHeaderValue(e.getKey());
+                // no need to check search table - we use the same columns
+            } catch (IllegalArgumentException iae) {
+            }
+            TableColumn col = new TableColumn(e.getNewModelIndex());
+            col.setHeaderValue(e.getKey());
 
-                if (logPanelPreferenceModel.addColumn(col)) {
-                    if (logPanelPreferenceModel.isColumnVisible(col)) {
-                        table.addColumn(col);
-                        searchTable.addColumn(col);
-                        logPanelPreferenceModel.setColumnVisible(e.getKey().toString(), true);
-                    }
+            if (logPanelPreferenceModel.addColumn(col)) {
+                if (logPanelPreferenceModel.isColumnVisible(col)) {
+                    table.addColumn(col);
+                    searchTable.addColumn(col);
+                    logPanelPreferenceModel.setColumnVisible(e.getKey().toString(), true);
                 }
-            }));
+            }
+        }));
 
-        //if the table is refiltered, try to reselect the last selected row
-        //refilter with a newValue of TRUE means refiltering is about to begin
-        //refilter with a newValue of FALSE means refiltering is complete
-        //assuming notification is called on the EDT so we can in the current EDT call update the scroll & selection
+        // if the table is refiltered, try to reselect the last selected row
+        // refilter with a newValue of TRUE means refiltering is about to begin
+        // refilter with a newValue of FALSE means refiltering is complete
+        // assuming notification is called on the EDT so we can in the current EDT call update the scroll & selection
         tableModel.addPropertyChangeListener("refilter", new PropertyChangeListener() {
             private LoggingEventWrapper currentEvent;
 
             public void propertyChange(PropertyChangeEvent evt) {
-                //if new value is true, filtering is about to begin
-                //if new value is false, filtering is complete
+                // if new value is true, filtering is about to begin
+                // if new value is false, filtering is complete
                 if (evt.getNewValue().equals(Boolean.TRUE)) {
                     int currentRow = table.getSelectedRow();
                     if (currentRow > -1) {
@@ -877,32 +897,31 @@
             }
         });
 
-        table.getTableHeader().addMouseListener(
-            new MouseAdapter() {
-                public void mouseClicked(MouseEvent e) {
-                    checkEvent(e);
-                }
+        table.getTableHeader().addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                checkEvent(e);
+            }
 
-                public void mousePressed(MouseEvent e) {
-                    checkEvent(e);
-                }
+            public void mousePressed(MouseEvent e) {
+                checkEvent(e);
+            }
 
-                public void mouseReleased(MouseEvent e) {
-                    checkEvent(e);
-                }
+            public void mouseReleased(MouseEvent e) {
+                checkEvent(e);
+            }
 
-                private void checkEvent(MouseEvent e) {
-                    if (e.isPopupTrigger()) {
-                        TableColumnModel colModel = table.getColumnModel();
-                        int index = colModel.getColumnIndexAtX(e.getX());
-                        int modelIndex = colModel.getColumn(index).getModelIndex();
+            private void checkEvent(MouseEvent e) {
+                if (e.isPopupTrigger()) {
+                    TableColumnModel colModel = table.getColumnModel();
+                    int index = colModel.getColumnIndexAtX(e.getX());
+                    int modelIndex = colModel.getColumn(index).getModelIndex();
 
-                        if ((modelIndex + 1) == ChainsawColumns.INDEX_TIMESTAMP_COL_NAME) {
-                            dateFormatChangePopup.show(e.getComponent(), e.getX(), e.getY());
-                        }
+                    if ((modelIndex + 1) == ChainsawColumns.INDEX_TIMESTAMP_COL_NAME) {
+                        dateFormatChangePopup.show(e.getComponent(), e.getX(), e.getY());
                     }
                 }
-            });
+            }
+        });
 
         final JTextField filterText = (JTextField) filterCombo.getEditor().getEditorComponent();
         final JTextField findText = (JTextField) findCombo.getEditor().getEditorComponent();
@@ -917,23 +936,21 @@
 
         detailPaneUpdater = new DetailPaneUpdater();
 
-        //if the panel gets focus, update the detail pane
+        // if the panel gets focus, update the detail pane
         addFocusListener(new FocusListener() {
 
             public void focusGained(FocusEvent e) {
                 detailPaneUpdater.updateDetailPane();
             }
 
-            public void focusLost(FocusEvent e) {
-
-            }
+            public void focusLost(FocusEvent e) {}
         });
         findMarkerRule = ExpressionRule.getRule("prop." + ChainsawConstants.LOG4J_MARKER_COL_NAME + " exists");
 
         tableModel.addTableModelListener(e -> {
             int currentRow = table.getSelectedRow();
             if (e.getFirstRow() <= currentRow && e.getLastRow() >= currentRow) {
-//current row has changed - update
+                // current row has changed - update
                 detailPaneUpdater.setAndUpdateSelectedRow(table.getSelectedRow());
             }
         });
@@ -944,7 +961,8 @@
         searchPane.getVerticalScrollBar().setUnitIncrement(ChainsawConstants.DEFAULT_ROW_HEIGHT * 2);
         searchPane.setPreferredSize(new Dimension(900, 50));
 
-        //default detail panel to contain detail panel - if searchResultsVisible is true, when a search if triggered, update detail pane to contain search results
+        // default detail panel to contain detail panel - if searchResultsVisible is true, when a search if triggered,
+        // update detail pane to contain search results
         detailPane = new JScrollPane(detail);
         detailPane.setPreferredSize(new Dimension(900, 50));
 
@@ -970,7 +988,7 @@
         rightThumbNailPanel.add(colorizedEventAndSearchMatchThumbnail);
         rightThumbNailPanel.add(Box.createVerticalStrut(height));
         rightPanel.add(rightThumbNailPanel);
-        //set thumbnail width to be a bit narrower than scrollbar width
+        // set thumbnail width to be a bit narrower than scrollbar width
         rightThumbNailPanel.setPreferredSize(new Dimension(scrollBarWidth - 4, -1));
         eventsAndStatusPanel.add(rightPanel, BorderLayout.EAST);
 
@@ -985,7 +1003,7 @@
         leftThumbNailPanel.add(Box.createVerticalStrut(height));
         leftPanel.add(leftThumbNailPanel);
 
-        //set thumbnail width to be a bit narrower than scrollbar width
+        // set thumbnail width to be a bit narrower than scrollbar width
         leftThumbNailPanel.setPreferredSize(new Dimension(scrollBarWidth - 4, -1));
         eventsAndStatusPanel.add(leftPanel, BorderLayout.WEST);
 
@@ -1002,27 +1020,23 @@
         detailToolbar.setFloatable(false);
 
         final LayoutEditorPane layoutEditorPane = new LayoutEditorPane();
-        final JDialog layoutEditorDialog =
-            new JDialog((JFrame) null, "Pattern Editor");
+        final JDialog layoutEditorDialog = new JDialog((JFrame) null, "Pattern Editor");
         layoutEditorDialog.getContentPane().add(layoutEditorPane);
         layoutEditorDialog.setSize(640, 480);
 
-        layoutEditorPane.addCancelActionListener(
-            e -> layoutEditorDialog.setVisible(false));
+        layoutEditorPane.addCancelActionListener(e -> layoutEditorDialog.setVisible(false));
 
-        layoutEditorPane.addOkActionListener(
-            e -> {
-                setDetailPaneConversionPattern(
-                    layoutEditorPane.getConversionPattern());
-                setDetailPaneDatetimeFormat(layoutEditorPane.getDatetimeFormatter());
-                layoutEditorDialog.setVisible(false);
-            });
+        layoutEditorPane.addOkActionListener(e -> {
+            setDetailPaneConversionPattern(layoutEditorPane.getConversionPattern());
+            setDetailPaneDatetimeFormat(layoutEditorPane.getDatetimeFormatter());
+            layoutEditorDialog.setVisible(false);
+        });
 
         Action copyToRefineFocusAction = new AbstractAction("Set 'refine focus' field") {
             public void actionPerformed(ActionEvent e) {
                 String selectedText = detail.getSelectedText();
                 if (selectedText == null || selectedText.isEmpty()) {
-                    //no-op empty searches
+                    // no-op empty searches
                     return;
                 }
                 filterText.setText("msg ~= '" + selectedText + "'");
@@ -1033,7 +1047,7 @@
             public void actionPerformed(ActionEvent e) {
                 String selectedText = detail.getSelectedText();
                 if (selectedText == null || selectedText.isEmpty()) {
-                    //no-op empty searches
+                    // no-op empty searches
                     return;
                 }
                 findCombo.setSelectedItem("msg ~= '" + selectedText + "'");
@@ -1041,30 +1055,24 @@
             }
         };
 
-        Action editDetailAction =
-            new AbstractAction(
-                "Edit...", new ImageIcon(ChainsawIcons.ICON_EDIT_RECEIVER)) {
-                public void actionPerformed(ActionEvent e) {
-                    layoutEditorPane.setConversionPattern(
-                        getDetailPaneConversionPattern());
-                    layoutEditorPane.setDatetimeFormatter(getDetailPaneDatetimeFormat());
+        Action editDetailAction = new AbstractAction("Edit...", new ImageIcon(ChainsawIcons.ICON_EDIT_RECEIVER)) {
+            public void actionPerformed(ActionEvent e) {
+                layoutEditorPane.setConversionPattern(getDetailPaneConversionPattern());
+                layoutEditorPane.setDatetimeFormatter(getDetailPaneDatetimeFormat());
 
-                    Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
-                    Point p =
-                        new Point(
-                            ((int) ((size.getWidth() / 2)
+                Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
+                Point p = new Point(
+                        ((int) ((size.getWidth() / 2)
                                 - (layoutEditorDialog.getSize().getWidth() / 2))),
-                            ((int) ((size.getHeight() / 2)
+                        ((int) ((size.getHeight() / 2)
                                 - (layoutEditorDialog.getSize().getHeight() / 2))));
-                    layoutEditorDialog.setLocation(p);
+                layoutEditorDialog.setLocation(p);
 
-                    layoutEditorDialog.setVisible(true);
-                }
-            };
+                layoutEditorDialog.setVisible(true);
+            }
+        };
 
-        editDetailAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "opens a Dialog window to Edit the Pattern Layout text");
+        editDetailAction.putValue(Action.SHORT_DESCRIPTION, "opens a Dialog window to Edit the Pattern Layout text");
 
         final SmallButton editDetailButton = new SmallButton(editDetailAction);
         editDetailButton.setText(null);
@@ -1073,15 +1081,13 @@
         detailToolbar.addSeparator();
         detailToolbar.add(Box.createHorizontalStrut(5));
 
-        Action closeDetailAction =
-            new AbstractAction(null, LineIconFactory.createCloseIcon()) {
-                public void actionPerformed(ActionEvent arg0) {
-                    hideDetailPane();
-                }
-            };
+        Action closeDetailAction = new AbstractAction(null, LineIconFactory.createCloseIcon()) {
+            public void actionPerformed(ActionEvent arg0) {
+                hideDetailPane();
+            }
+        };
 
-        closeDetailAction.putValue(
-            Action.SHORT_DESCRIPTION, "Hides the Detail Panel");
+        closeDetailAction.putValue(Action.SHORT_DESCRIPTION, "Hides the Detail Panel");
 
         SmallButton closeDetailButton = new SmallButton(closeDetailAction);
         detailToolbar.add(closeDetailButton);
@@ -1108,23 +1114,17 @@
 
         final ButtonGroup layoutGroup = new ButtonGroup();
 
-        JRadioButtonMenuItem defaultLayoutRadio =
-            new JRadioButtonMenuItem(
-                new AbstractAction("Set to Default Layout") {
-                    public void actionPerformed(ActionEvent e) {
-                        setDetailPaneConversionPattern(
-                            DefaultLayoutFactory.getDefaultPatternLayout());
-                    }
-                });
+        JRadioButtonMenuItem defaultLayoutRadio = new JRadioButtonMenuItem(new AbstractAction("Set to Default Layout") {
+            public void actionPerformed(ActionEvent e) {
+                setDetailPaneConversionPattern(DefaultLayoutFactory.getDefaultPatternLayout());
+            }
+        });
 
-        JRadioButtonMenuItem fullLayoutRadio =
-            new JRadioButtonMenuItem(
-                new AbstractAction("Set to Full Layout") {
-                    public void actionPerformed(ActionEvent e) {
-                        setDetailPaneConversionPattern(
-                            DefaultLayoutFactory.getFullPatternLayout());
-                    }
-                });
+        JRadioButtonMenuItem fullLayoutRadio = new JRadioButtonMenuItem(new AbstractAction("Set to Full Layout") {
+            public void actionPerformed(ActionEvent e) {
+                setDetailPaneConversionPattern(DefaultLayoutFactory.getFullPatternLayout());
+            }
+        });
 
         editDetailPopupMenu.add(defaultLayoutRadio);
         editDetailPopupMenu.add(fullLayoutRadio);
@@ -1133,19 +1133,16 @@
         layoutGroup.add(fullLayoutRadio);
         defaultLayoutRadio.setSelected(true);
 
-        JRadioButtonMenuItem tccLayoutRadio =
-            new JRadioButtonMenuItem(
-                new AbstractAction("Set to TCCLayout") {
-                    public void actionPerformed(ActionEvent e) {
-//                        setDetailPaneConversionPattern(
-//                            PatternLayout.TTCC_CONVERSION_PATTERN);
-                    }
-                });
+        JRadioButtonMenuItem tccLayoutRadio = new JRadioButtonMenuItem(new AbstractAction("Set to TCCLayout") {
+            public void actionPerformed(ActionEvent e) {
+                //                        setDetailPaneConversionPattern(
+                //                            PatternLayout.TTCC_CONVERSION_PATTERN);
+            }
+        });
         editDetailPopupMenu.add(tccLayoutRadio);
         layoutGroup.add(tccLayoutRadio);
 
-        PopupListener editDetailPopupListener =
-            new PopupListener(editDetailPopupMenu);
+        PopupListener editDetailPopupListener = new PopupListener(editDetailPopupMenu);
         detail.addMouseListener(editDetailPopupListener);
 
         /*
@@ -1169,15 +1166,13 @@
         class BestFit extends JMenuItem {
             public BestFit() {
                 super("Best fit column");
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int maxWidth = getMaxColumnWidth(column);
-                            currentTable.getColumnModel().getColumn(column).setPreferredWidth(
-                                maxWidth);
-                        }
-                    });
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int maxWidth = getMaxColumnWidth(column);
+                        currentTable.getColumnModel().getColumn(column).setPreferredWidth(maxWidth);
+                    }
+                });
             }
         }
 
@@ -1185,8 +1180,7 @@
             public ColorPanel() {
                 super("Color settings...");
                 setIcon(ChainsawIcons.ICON_PREFERENCES);
-                addActionListener(
-                    evt -> showColorPreferences());
+                addActionListener(evt -> showColorPreferences());
             }
         }
 
@@ -1194,103 +1188,98 @@
             public LogPanelPreferences() {
                 super("Tab Preferences...");
                 setIcon(ChainsawIcons.ICON_PREFERENCES);
-                addActionListener(
-                    evt -> showPreferences());
+                addActionListener(evt -> showPreferences());
             }
         }
 
         class FocusOn extends JMenuItem {
             public FocusOn() {
                 super("Set 'refine focus' field to value under pointer");
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            String operator = "==";
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            String colName = currentTable.getColumnName(column).toUpperCase();
-                            String value = getValueOf(row, column);
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        String operator = "==";
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        String colName = currentTable.getColumnName(column).toUpperCase();
+                        String value = getValueOf(row, column);
 
-                            if (columnNameKeywordMapper.contains(colName)) {
-                                filterText.setText(
-                                    columnNameKeywordMapper.get(colName) + " " + operator
-                                        + " '" + value + "'");
-                            }
+                        if (columnNameKeywordMapper.contains(colName)) {
+                            filterText.setText(
+                                    columnNameKeywordMapper.get(colName) + " " + operator + " '" + value + "'");
                         }
-                    });
+                    }
+                });
             }
         }
 
         class DefineAddCustomFilter extends JMenuItem {
             public DefineAddCustomFilter() {
                 super("Add value under pointer to 'refine focus' field");
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            String operator = "==";
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            String value = getValueOf(row, column);
-                            String colName = currentTable.getColumnName(column).toUpperCase();
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        String operator = "==";
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        String value = getValueOf(row, column);
+                        String colName = currentTable.getColumnName(column).toUpperCase();
 
-                            if (columnNameKeywordMapper.contains(colName)) {
-                                filterText.setText(
-                                    filterText.getText() + " && "
-                                        + columnNameKeywordMapper.get(colName) + " "
-                                        + operator + " '" + value + "'");
-                            }
-
+                        if (columnNameKeywordMapper.contains(colName)) {
+                            filterText.setText(filterText.getText() + " && "
+                                    + columnNameKeywordMapper.get(colName) + " "
+                                    + operator + " '" + value + "'");
                         }
-                    });
+                    }
+                });
             }
         }
 
         class DefineAddCustomFind extends JMenuItem {
             public DefineAddCustomFind() {
                 super("Add value under pointer to 'find' field");
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            String operator = "==";
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            String value = getValueOf(row, column);
-                            String colName = currentTable.getColumnName(column).toUpperCase();
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        String operator = "==";
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        String value = getValueOf(row, column);
+                        String colName = currentTable.getColumnName(column).toUpperCase();
 
-                            if (columnNameKeywordMapper.contains(colName)) {
-                                findCombo.setSelectedItem(
-                                    findText.getText() + " && "
-                                        + columnNameKeywordMapper.get(colName) + " "
-                                        + operator + " '" + value + "'");
-                                findNext();
-                            }
+                        if (columnNameKeywordMapper.contains(colName)) {
+                            findCombo.setSelectedItem(findText.getText() + " && "
+                                    + columnNameKeywordMapper.get(colName) + " "
+                                    + operator + " '" + value + "'");
+                            findNext();
                         }
-                    });
+                    }
+                });
             }
         }
 
         class BuildColorRule extends JMenuItem {
             public BuildColorRule() {
                 super("Define color rule for value under pointer");
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            String operator = "==";
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            String colName = currentTable.getColumnName(column).toUpperCase();
-                            String value = getValueOf(row, column);
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        String operator = "==";
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        String colName = currentTable.getColumnName(column).toUpperCase();
+                        String value = getValueOf(row, column);
 
-                            if (columnNameKeywordMapper.contains(colName)) {
-                                Color c = JColorChooser.showDialog(getRootPane(), "Choose a color", Color.red);
-                                if (c != null) {
-                                    String expression = columnNameKeywordMapper.get(colName) + " " + operator + " '" + value + "'";
-                                    currentColorizer.addRule(new ColorRule(expression,
-                                        ExpressionRule.getRule(expression), c, ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
-                                }
+                        if (columnNameKeywordMapper.contains(colName)) {
+                            Color c = JColorChooser.showDialog(getRootPane(), "Choose a color", Color.red);
+                            if (c != null) {
+                                String expression =
+                                        columnNameKeywordMapper.get(colName) + " " + operator + " '" + value + "'";
+                                currentColorizer.addRule(new ColorRule(
+                                        expression,
+                                        ExpressionRule.getRule(expression),
+                                        c,
+                                        ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
                             }
                         }
-                    });
+                    }
+                });
             }
         }
 
@@ -1354,18 +1343,16 @@
         }
         final JMenuItem menuItemToggleDock = new JMenuItem("Undock/dock");
 
-        dockingAction =
-            new AbstractAction("Undock") {
-                public void actionPerformed(ActionEvent evt) {
-                    if (isDocked()) {
-                        undock();
-                    } else {
-                        dock();
-                    }
+        dockingAction = new AbstractAction("Undock") {
+            public void actionPerformed(ActionEvent evt) {
+                if (isDocked()) {
+                    undock();
+                } else {
+                    dock();
                 }
-            };
-        dockingAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.UNDOCK));
+            }
+        };
+        dockingAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.UNDOCK));
         menuItemToggleDock.setAction(dockingAction);
 
         /*
@@ -1385,22 +1372,20 @@
             public Search() {
                 super("Find value under pointer");
 
-                addActionListener(
-                    evt -> {
-                        if (currentPoint != null) {
-                            String operator = "==";
-                            int column = currentTable.columnAtPoint(currentPoint);
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            String colName = currentTable.getColumnName(column).toUpperCase();
-                            String value = getValueOf(row, column);
-                            if (columnNameKeywordMapper.contains(colName)) {
-                                findCombo.setSelectedItem(
-                                    columnNameKeywordMapper.get(colName) + " " + operator
-                                        + " '" + value + "'");
-                                findNext();
-                            }
+                addActionListener(evt -> {
+                    if (currentPoint != null) {
+                        String operator = "==";
+                        int column = currentTable.columnAtPoint(currentPoint);
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        String colName = currentTable.getColumnName(column).toUpperCase();
+                        String value = getValueOf(row, column);
+                        if (columnNameKeywordMapper.contains(colName)) {
+                            findCombo.setSelectedItem(
+                                    columnNameKeywordMapper.get(colName) + " " + operator + " '" + value + "'");
+                            findNext();
                         }
-                    });
+                    }
+                });
             }
         }
 
@@ -1428,47 +1413,50 @@
         class DisplayNormalTimes extends JMenuItem {
             public DisplayNormalTimes() {
                 super("Hide relative times");
-                addActionListener(
-                    e -> {
-                        if (currentPoint != null) {
-                            ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class)).setUseNormalTimes();
-                            ((ChainsawCyclicBufferTableModel) currentTable.getModel()).reFilter();
-                            setEnabled(true);
-                        }
-                    });
+                addActionListener(e -> {
+                    if (currentPoint != null) {
+                        ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class)).setUseNormalTimes();
+                        ((ChainsawCyclicBufferTableModel) currentTable.getModel()).reFilter();
+                        setEnabled(true);
+                    }
+                });
             }
         }
 
         class DisplayRelativeTimesToRowUnderCursor extends JMenuItem {
             public DisplayRelativeTimesToRowUnderCursor() {
                 super("Show times relative to this event");
-                addActionListener(
-                    e -> {
-                        if (currentPoint != null) {
-                            int row = currentTable.rowAtPoint(currentPoint);
-                            ChainsawCyclicBufferTableModel cyclicBufferTableModel = (ChainsawCyclicBufferTableModel) currentTable.getModel();
-                            LoggingEventWrapper loggingEventWrapper = cyclicBufferTableModel.getRow(row);
-                            if (loggingEventWrapper != null) {
-                                ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimes(loggingEventWrapper.getLoggingEvent().m_timestamp.atZone(ZoneId.systemDefault()));
-                                cyclicBufferTableModel.reFilter();
-                            }
-                            setEnabled(true);
+                addActionListener(e -> {
+                    if (currentPoint != null) {
+                        int row = currentTable.rowAtPoint(currentPoint);
+                        ChainsawCyclicBufferTableModel cyclicBufferTableModel =
+                                (ChainsawCyclicBufferTableModel) currentTable.getModel();
+                        LoggingEventWrapper loggingEventWrapper = cyclicBufferTableModel.getRow(row);
+                        if (loggingEventWrapper != null) {
+                            ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class))
+                                    .setUseRelativeTimes(loggingEventWrapper
+                                            .getLoggingEvent()
+                                            .m_timestamp
+                                            .atZone(ZoneId.systemDefault()));
+                            cyclicBufferTableModel.reFilter();
                         }
-                    });
+                        setEnabled(true);
+                    }
+                });
             }
         }
 
         class DisplayRelativeTimesToPreviousRow extends JMenuItem {
             public DisplayRelativeTimesToPreviousRow() {
                 super("Show times relative to previous rows");
-                addActionListener(
-                    e -> {
-                        if (currentPoint != null) {
-                            ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimesToPreviousRow();
-                            ((ChainsawCyclicBufferTableModel) currentTable.getModel()).reFilter();
-                            setEnabled(true);
-                        }
-                    });
+                addActionListener(e -> {
+                    if (currentPoint != null) {
+                        ((TableColorizingRenderer) currentTable.getDefaultRenderer(Object.class))
+                                .setUseRelativeTimesToPreviousRow();
+                        ((ChainsawCyclicBufferTableModel) currentTable.getModel()).reFilter();
+                        setEnabled(true);
+                    }
+                });
             }
         }
 
@@ -1547,7 +1535,6 @@
             }
         });
 
-
         searchTable.addMouseListener(new MouseListener() {
             public void mouseClicked(MouseEvent mouseEvent) {
                 checkMultiSelect(mouseEvent);
@@ -1578,7 +1565,6 @@
             }
         });
 
-
         final PopupListener searchTablePopupListener = new PopupListener(searchPopup);
         searchPane.addMouseListener(searchTablePopupListener);
         searchTable.addMouseListener(searchTablePopupListener);
@@ -1601,7 +1587,8 @@
     private LoggerNameTreePanel createLoggerNameTreePanel() {
         final LoggerNameTreePanel logTreePanel;
         LogPanelLoggerTreeModel logTreeModel = new LogPanelLoggerTreeModel();
-        logTreePanel = new LoggerNameTreePanel(logTreeModel, logPanelPreferenceModel, this, currentColorizer, filterModel);
+        logTreePanel =
+                new LoggerNameTreePanel(logTreeModel, logPanelPreferenceModel, this, currentColorizer, filterModel);
         logTreePanel.getLoggerVisibilityRule().addPropertyChangeListener(evt -> {
             if (evt.getPropertyName().equals("searchExpression")) {
                 findCombo.setSelectedItem(evt.getNewValue().toString());
@@ -1630,30 +1617,31 @@
         upperPanel.add(filterCombo);
         upperPanel.add(Box.createHorizontalStrut(3));
 
-        //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
+        // Adding a button to clear filter expressions which are currently remembered by Chainsaw...
         final JButton removeFilterButton = new JButton(" Remove ");
 
         removeFilterButton.setToolTipText("Click here to remove the selected expression from the list");
-        removeFilterButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    Object selectedItem = filterCombo.getSelectedItem();
-                    if (e.getSource() == removeFilterButton && selectedItem != null && !selectedItem.toString().trim().isEmpty()) {
-                        //don't just remove the entry from the store, clear the field
-                        int index = filterCombo.getSelectedIndex();
-                        filterText.setText(null);
-                        filterCombo.setSelectedIndex(-1);
-                        filterCombo.removeItemAt(index);
-                        if (!(findCombo.getSelectedItem() != null && findCombo.getSelectedItem().equals(selectedItem))) {
-                            //now remove the entry from the other model
-                            ((AutoFilterComboBox.AutoFilterComboBoxModel) findCombo.getModel()).removeElement(selectedItem);
-                        }
+        removeFilterButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                Object selectedItem = filterCombo.getSelectedItem();
+                if (e.getSource() == removeFilterButton
+                        && selectedItem != null
+                        && !selectedItem.toString().trim().isEmpty()) {
+                    // don't just remove the entry from the store, clear the field
+                    int index = filterCombo.getSelectedIndex();
+                    filterText.setText(null);
+                    filterCombo.setSelectedIndex(-1);
+                    filterCombo.removeItemAt(index);
+                    if (!(findCombo.getSelectedItem() != null
+                            && findCombo.getSelectedItem().equals(selectedItem))) {
+                        // now remove the entry from the other model
+                        ((AutoFilterComboBox.AutoFilterComboBoxModel) findCombo.getModel()).removeElement(selectedItem);
                     }
                 }
             }
-        );
+        });
         upperPanel.add(removeFilterButton);
-        //add some space between refine focus and search sections of the panel
+        // add some space between refine focus and search sections of the panel
         upperPanel.add(Box.createHorizontalStrut(25));
 
         final JLabel findLabel = new JLabel("Find: ");
@@ -1665,36 +1653,38 @@
         upperPanel.add(findCombo);
         upperPanel.add(Box.createHorizontalStrut(3));
 
-        //add up & down search
+        // add up & down search
         upperPanel.add(ElementFactory.createFindNextButton(this::findNext));
         upperPanel.add(ElementFactory.createFindPreviousButton(this::findPrevious));
 
         upperPanel.add(Box.createHorizontalStrut(3));
 
-        //Adding a button to clear filter expressions which are currently remembered by Chainsaw...
+        // Adding a button to clear filter expressions which are currently remembered by Chainsaw...
         final JButton removeFindButton = new JButton(" Remove ");
         removeFindButton.setToolTipText("Click here to remove the selected expression from the list");
-        removeFindButton.addActionListener(
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    Object selectedItem = findCombo.getSelectedItem();
-                    if (e.getSource() == removeFindButton && selectedItem != null && !selectedItem.toString().trim().isEmpty()) {
-                        //don't just remove the entry from the store, clear the field
-                        int index = findCombo.getSelectedIndex();
-                        findText.setText(null);
-                        findCombo.setSelectedIndex(-1);
-                        findCombo.removeItemAt(index);
-                        if (!(filterCombo.getSelectedItem() != null && filterCombo.getSelectedItem().equals(selectedItem))) {
-                            //now remove the entry from the other model if it wasn't selected
-                            ((AutoFilterComboBox.AutoFilterComboBoxModel) filterCombo.getModel()).removeElement(selectedItem);
-                        }
+        removeFindButton.addActionListener(new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                Object selectedItem = findCombo.getSelectedItem();
+                if (e.getSource() == removeFindButton
+                        && selectedItem != null
+                        && !selectedItem.toString().trim().isEmpty()) {
+                    // don't just remove the entry from the store, clear the field
+                    int index = findCombo.getSelectedIndex();
+                    findText.setText(null);
+                    findCombo.setSelectedIndex(-1);
+                    findCombo.removeItemAt(index);
+                    if (!(filterCombo.getSelectedItem() != null
+                            && filterCombo.getSelectedItem().equals(selectedItem))) {
+                        // now remove the entry from the other model if it wasn't selected
+                        ((AutoFilterComboBox.AutoFilterComboBoxModel) filterCombo.getModel())
+                                .removeElement(selectedItem);
                     }
                 }
             }
-        );
+        });
         upperPanel.add(removeFindButton);
 
-        //define search and refine focus selection and clear actions
+        // define search and refine focus selection and clear actions
         Action findFocusAction = new AbstractAction() {
             public void actionPerformed(ActionEvent actionEvent) {
                 findCombo.requestFocus();
@@ -1721,15 +1711,17 @@
             }
         };
 
-        //now add them to the action and input maps for the logpanel
-        KeyStroke ksFindFocus =
-            KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        KeyStroke ksFilterFocus =
-            KeyStroke.getKeyStroke(KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        KeyStroke ksFindClear =
-            KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.SHIFT_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        KeyStroke ksFilterClear =
-            KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.SHIFT_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        // now add them to the action and input maps for the logpanel
+        KeyStroke ksFindFocus = KeyStroke.getKeyStroke(
+                KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        KeyStroke ksFilterFocus = KeyStroke.getKeyStroke(
+                KeyEvent.VK_R, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        KeyStroke ksFindClear = KeyStroke.getKeyStroke(
+                KeyEvent.VK_F,
+                InputEvent.SHIFT_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        KeyStroke ksFilterClear = KeyStroke.getKeyStroke(
+                KeyEvent.VK_R,
+                InputEvent.SHIFT_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
 
         getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksFindFocus, "FindFocus");
         getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksFilterFocus, "FilterFocus");
@@ -1744,7 +1736,6 @@
         return upperPanel;
     }
 
-
     private String getValueOf(int row, int column) {
         if (currentTable == null) {
             return "";
@@ -1768,10 +1759,11 @@
 
         if (o instanceof String[]) {
             StringBuilder value = new StringBuilder();
-            //exception - build message + throwable
+            // exception - build message + throwable
             String[] ti = (String[]) o;
             if (ti.length > 0 && (!(ti.length == 1 && ti[0].isEmpty()))) {
-                LoggingEventWrapper loggingEventWrapper = ((ChainsawCyclicBufferTableModel) (currentTable.getModel())).getRow(row);
+                LoggingEventWrapper loggingEventWrapper =
+                        ((ChainsawCyclicBufferTableModel) (currentTable.getModel())).getRow(row);
                 value = new StringBuilder(loggingEventWrapper.getLoggingEvent().m_message);
                 for (int i = 0; i < ((String[]) o).length; i++) {
                     value.append('\n').append(((String[]) o)[i]);
@@ -1782,8 +1774,11 @@
         return "";
     }
 
-    private void buildCombo(final AutoFilterComboBox combo, boolean isFiltering, final AutoFilterComboBox.AutoFilterComboBoxModel otherModel) {
-        //add (hopefully useful) default filters
+    private void buildCombo(
+            final AutoFilterComboBox combo,
+            boolean isFiltering,
+            final AutoFilterComboBox.AutoFilterComboBoxModel otherModel) {
+        // add (hopefully useful) default filters
         combo.addItem("LEVEL == TRACE");
         combo.addItem("LEVEL >= DEBUG");
         combo.addItem("LEVEL >= INFO");
@@ -1795,34 +1790,34 @@
         if (isFiltering) {
             filterText.getDocument().addDocumentListener(new DelayedTextDocumentListener(filterText));
         }
-        filterText.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+        filterText.setToolTipText(
+                "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
         filterText.addKeyListener(new ExpressionRuleContext(filterModel, filterText));
 
         if (combo.getEditor().getEditorComponent() instanceof JTextField) {
-            combo.addActionListener(
-                new AbstractAction() {
-                    public void actionPerformed(ActionEvent e) {
-                        if (e.getActionCommand().equals("comboBoxEdited")) {
-                            try {
-                                //verify the expression is valid
-                                Object item = combo.getSelectedItem();
-                                if (item != null && !item.toString().trim().isEmpty()) {
-                                    ExpressionRule.getRule(item.toString());
-                                    //add entry as first row of the combo box
-                                    combo.insertItemAt(item, 0);
-                                    otherModel.insertElementAt(item, 0);
-                                }
-                                //valid expression, reset background color in case we were previously an invalid expression
-                                filterText.setBackground(UIManager.getColor("TextField.background"));
-                            } catch (IllegalArgumentException iae) {
-                                //don't add expressions that aren't valid
-                                //invalid expression, change background of the field
-                                filterText.setToolTipText(iae.getMessage());
-                                filterText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
+            combo.addActionListener(new AbstractAction() {
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getActionCommand().equals("comboBoxEdited")) {
+                        try {
+                            // verify the expression is valid
+                            Object item = combo.getSelectedItem();
+                            if (item != null && !item.toString().trim().isEmpty()) {
+                                ExpressionRule.getRule(item.toString());
+                                // add entry as first row of the combo box
+                                combo.insertItemAt(item, 0);
+                                otherModel.insertElementAt(item, 0);
                             }
+                            // valid expression, reset background color in case we were previously an invalid expression
+                            filterText.setBackground(UIManager.getColor("TextField.background"));
+                        } catch (IllegalArgumentException iae) {
+                            // don't add expressions that aren't valid
+                            // invalid expression, change background of the field
+                            filterText.setToolTipText(iae.getMessage());
+                            filterText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
                         }
                     }
-                });
+                }
+            });
         }
     }
 
@@ -1853,7 +1848,7 @@
     }
 
     private void scrollToBottom() {
-        //run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
+        // run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
         EventQueue.invokeLater(() -> {
             int scrollRow = tableModel.getRowCount() - 1;
             table.scrollToRow(scrollRow);
@@ -1893,7 +1888,7 @@
     private void loadSettings() {
         logger.info("Loading settings for panel with identifier {}", identifier);
 
-        //TODO: Add column support
+        // TODO: Add column support
         boolean isCyclic = logPanelPreferenceModel.isCyclic();
         tableModel.setCyclic(isCyclic);
         searchModel.setCyclic(isCyclic);
@@ -1917,116 +1912,117 @@
 
         setRuleColorizer(new RuleColorizer());
 
-//        if (xmlFile.exists()) {
-//            XStream stream = buildXStreamForLogPanelPreference();
-//            ObjectInputStream in = null;
-//            try {
-//                logger.info("configuration for panel exists: " + xmlFile + " - " + identifier + ", loading");
-//                FileReader r = new FileReader(xmlFile);
-//                in = stream.createObjectInputStream(r);
-//                LogPanelPreferenceModel storedPrefs = (LogPanelPreferenceModel) in.readObject();
-//                lowerPanelDividerLocation = in.readInt();
-//                int treeDividerLocation = in.readInt();
-//                String conversionPattern = in.readObject().toString();
-//                //this version number is checked to identify whether there is a Vector comming next
-//                int versionNumber = 0;
-//                try {
-//                    versionNumber = in.readInt();
-//                } catch (EOFException eof) {
-//                }
-//
-//                Vector savedVector;
-//                //read the vector only if the version number is greater than 0. higher version numbers can be
-//                //used in the future to save more data structures
-//                if (versionNumber > 0) {
-//                    savedVector = (Vector) in.readObject();
-//                    for (Object item : savedVector) {
-//                        //insert each row at index zero (so last row in vector will be row zero)
-//                        filterCombo.insertItemAt(item, 0);
-//                        findCombo.insertItemAt(item, 0);
-//                    }
-//                    if (versionNumber > 1) {
-//                        //update prefModel columns to include defaults
-//                        int index = 0;
-//                        String columnOrder = event.getSetting(TABLE_COLUMN_ORDER);
-//                        StringTokenizer tok = new StringTokenizer(columnOrder, ",");
-//                        while (tok.hasMoreElements()) {
-//                            String element = tok.nextElement().toString().trim().toUpperCase();
-//                            TableColumn column = new TableColumn(index++);
-//                            column.setHeaderValue(element);
-//                            preferenceModel.addColumn(column);
-//                        }
-//
-//                        TableColumnModel columnModel = table.getColumnModel();
-//                        //remove previous columns
-//                        while (columnModel.getColumnCount() > 0) {
-//                            columnModel.removeColumn(columnModel.getColumn(0));
-//                        }
-//                        //add visible column order columns
-//                        for (Object o1 : preferenceModel.getVisibleColumnOrder()) {
-//                            TableColumn col = (TableColumn) o1;
-//                            columnModel.addColumn(col);
-//                        }
-//
-//                        TableColumnModel searchColumnModel = searchTable.getColumnModel();
-//                        //remove previous columns
-//                        while (searchColumnModel.getColumnCount() > 0) {
-//                            searchColumnModel.removeColumn(searchColumnModel.getColumn(0));
-//                        }
-//                        //add visible column order columns
-//                        for (Object o : preferenceModel.getVisibleColumnOrder()) {
-//                            TableColumn col = (TableColumn) o;
-//                            searchColumnModel.addColumn(col);
-//                        }
-//
-//                        preferenceModel.apply(storedPrefs);
-//                    } else {
-//                        loadDefaultColumnSettings(event);
-//                    }
-//                    //ensure tablemodel cyclic flag is updated
-//                    //may be panel configs that don't have these values
-//                    tableModel.setCyclic(preferenceModel.isCyclic());
-//                    searchModel.setCyclic(preferenceModel.isCyclic());
-//                    lowerPanel.setDividerLocation(lowerPanelDividerLocation);
-//                    nameTreeAndMainPanelSplit.setDividerLocation(treeDividerLocation);
-//                    detailLayout.setConversionPattern(conversionPattern);
-//                    undockedFrame.setLocation(0, 0);
-//                    undockedFrame.setSize(new Dimension(1024, 768));
-//                } else {
-//                    loadDefaultColumnSettings(event);
-//                }
-//            } catch (Exception e) {
-//                logger.info("unable to load configuration for panel: " + xmlFile + " - " + identifier + " - using default settings", e);
-//                loadDefaultColumnSettings(event);
-//                // TODO need to log this..
-//            } finally {
-//                if (in != null) {
-//                    try {
-//                        in.close();
-//                    } catch (IOException ioe) {
-//                    }
-//                }
-//            }
-//        } else {
-//            //not setting lower panel divider location here - will do that after the UI is visible
-//            loadDefaultColumnSettings(event);
-//        }
-//        //ensure tablemodel cyclic flag is updated
-//        tableModel.setCyclic(preferenceModel.isCyclic());
-//        searchModel.setCyclic(preferenceModel.isCyclic());
-//        logTreePanel.ignore(preferenceModel.getHiddenLoggers());
-//        logTreePanel.setHiddenExpression(preferenceModel.getHiddenExpression());
-//        logTreePanel.setAlwaysDisplayExpression(preferenceModel.getAlwaysDisplayExpression());
-//        if (preferenceModel.getClearTableExpression() != null) {
-//            try {
-//                clearTableExpressionRule = ExpressionRule.getRule(preferenceModel.getClearTableExpression());
-//            } catch (Exception e) {
-//                clearTableExpressionRule = null;
-//            }
-//        }
-//
-//        //attempt to load color settings - no need to URL encode the identifier
-//        colorizer.loadColorSettings(identifier);
+        //        if (xmlFile.exists()) {
+        //            XStream stream = buildXStreamForLogPanelPreference();
+        //            ObjectInputStream in = null;
+        //            try {
+        //                logger.info("configuration for panel exists: " + xmlFile + " - " + identifier + ", loading");
+        //                FileReader r = new FileReader(xmlFile);
+        //                in = stream.createObjectInputStream(r);
+        //                LogPanelPreferenceModel storedPrefs = (LogPanelPreferenceModel) in.readObject();
+        //                lowerPanelDividerLocation = in.readInt();
+        //                int treeDividerLocation = in.readInt();
+        //                String conversionPattern = in.readObject().toString();
+        //                //this version number is checked to identify whether there is a Vector comming next
+        //                int versionNumber = 0;
+        //                try {
+        //                    versionNumber = in.readInt();
+        //                } catch (EOFException eof) {
+        //                }
+        //
+        //                Vector savedVector;
+        //                //read the vector only if the version number is greater than 0. higher version numbers can be
+        //                //used in the future to save more data structures
+        //                if (versionNumber > 0) {
+        //                    savedVector = (Vector) in.readObject();
+        //                    for (Object item : savedVector) {
+        //                        //insert each row at index zero (so last row in vector will be row zero)
+        //                        filterCombo.insertItemAt(item, 0);
+        //                        findCombo.insertItemAt(item, 0);
+        //                    }
+        //                    if (versionNumber > 1) {
+        //                        //update prefModel columns to include defaults
+        //                        int index = 0;
+        //                        String columnOrder = event.getSetting(TABLE_COLUMN_ORDER);
+        //                        StringTokenizer tok = new StringTokenizer(columnOrder, ",");
+        //                        while (tok.hasMoreElements()) {
+        //                            String element = tok.nextElement().toString().trim().toUpperCase();
+        //                            TableColumn column = new TableColumn(index++);
+        //                            column.setHeaderValue(element);
+        //                            preferenceModel.addColumn(column);
+        //                        }
+        //
+        //                        TableColumnModel columnModel = table.getColumnModel();
+        //                        //remove previous columns
+        //                        while (columnModel.getColumnCount() > 0) {
+        //                            columnModel.removeColumn(columnModel.getColumn(0));
+        //                        }
+        //                        //add visible column order columns
+        //                        for (Object o1 : preferenceModel.getVisibleColumnOrder()) {
+        //                            TableColumn col = (TableColumn) o1;
+        //                            columnModel.addColumn(col);
+        //                        }
+        //
+        //                        TableColumnModel searchColumnModel = searchTable.getColumnModel();
+        //                        //remove previous columns
+        //                        while (searchColumnModel.getColumnCount() > 0) {
+        //                            searchColumnModel.removeColumn(searchColumnModel.getColumn(0));
+        //                        }
+        //                        //add visible column order columns
+        //                        for (Object o : preferenceModel.getVisibleColumnOrder()) {
+        //                            TableColumn col = (TableColumn) o;
+        //                            searchColumnModel.addColumn(col);
+        //                        }
+        //
+        //                        preferenceModel.apply(storedPrefs);
+        //                    } else {
+        //                        loadDefaultColumnSettings(event);
+        //                    }
+        //                    //ensure tablemodel cyclic flag is updated
+        //                    //may be panel configs that don't have these values
+        //                    tableModel.setCyclic(preferenceModel.isCyclic());
+        //                    searchModel.setCyclic(preferenceModel.isCyclic());
+        //                    lowerPanel.setDividerLocation(lowerPanelDividerLocation);
+        //                    nameTreeAndMainPanelSplit.setDividerLocation(treeDividerLocation);
+        //                    detailLayout.setConversionPattern(conversionPattern);
+        //                    undockedFrame.setLocation(0, 0);
+        //                    undockedFrame.setSize(new Dimension(1024, 768));
+        //                } else {
+        //                    loadDefaultColumnSettings(event);
+        //                }
+        //            } catch (Exception e) {
+        //                logger.info("unable to load configuration for panel: " + xmlFile + " - " + identifier + " -
+        // using default settings", e);
+        //                loadDefaultColumnSettings(event);
+        //                // TODO need to log this..
+        //            } finally {
+        //                if (in != null) {
+        //                    try {
+        //                        in.close();
+        //                    } catch (IOException ioe) {
+        //                    }
+        //                }
+        //            }
+        //        } else {
+        //            //not setting lower panel divider location here - will do that after the UI is visible
+        //            loadDefaultColumnSettings(event);
+        //        }
+        //        //ensure tablemodel cyclic flag is updated
+        //        tableModel.setCyclic(preferenceModel.isCyclic());
+        //        searchModel.setCyclic(preferenceModel.isCyclic());
+        //        logTreePanel.ignore(preferenceModel.getHiddenLoggers());
+        //        logTreePanel.setHiddenExpression(preferenceModel.getHiddenExpression());
+        //        logTreePanel.setAlwaysDisplayExpression(preferenceModel.getAlwaysDisplayExpression());
+        //        if (preferenceModel.getClearTableExpression() != null) {
+        //            try {
+        //                clearTableExpressionRule = ExpressionRule.getRule(preferenceModel.getClearTableExpression());
+        //            } catch (Exception e) {
+        //                clearTableExpressionRule = null;
+        //            }
+        //        }
+        //
+        //        //attempt to load color settings - no need to URL encode the identifier
+        //        colorizer.loadColorSettings(identifier);
     }
 
     public void setRuleColorizer(RuleColorizer newRuleColorizer) {
@@ -2046,14 +2042,15 @@
      * Display the panel preferences frame
      */
     public void showPreferences() {
-        //don't pack this frame
+        // don't pack this frame
         centerAndSetVisible(logPanelPreferencesFrame);
     }
 
     public static void centerAndSetVisible(Window window) {
         Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
-        window.setLocation(new Point((screenDimension.width / 2) - (window.getSize().width / 2),
-            (screenDimension.height / 2) - (window.getSize().height / 2)));
+        window.setLocation(new Point(
+                (screenDimension.width / 2) - (window.getSize().width / 2),
+                (screenDimension.height / 2) - (window.getSize().height / 2)));
         window.setVisible(true);
     }
 
@@ -2235,36 +2232,36 @@
             currentColorizer.setFindRule(null);
             tableRuleMediator.setFindRule(null);
             searchRuleMediator.setFindRule(null);
-            //reset background color in case we were previously an invalid expression
+            // reset background color in case we were previously an invalid expression
             findCombo.setBackground(UIManager.getColor("TextField.background"));
             findCombo.setToolTipText(
-                "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+                    "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
             currentSearchMatchCount = 0;
             currentFindRuleText = null;
             statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
-            //if the preference to show search results is enabled, the find rule is now null - hide search results
+            // if the preference to show search results is enabled, the find rule is now null - hide search results
             if (isSearchResultsVisible()) {
                 hideSearchResults();
             }
         } else {
-            //only turn off scrolltobottom when finding something (find not empty)
+            // only turn off scrolltobottom when finding something (find not empty)
             logPanelPreferenceModel.setScrollToBottom(false);
             if (ruleText.equals(currentFindRuleText)) {
-                //don't update events if rule hasn't changed (we're finding next/previous)
+                // don't update events if rule hasn't changed (we're finding next/previous)
                 return;
             }
             currentFindRuleText = ruleText;
             try {
                 final JTextField findText = (JTextField) findCombo.getEditor().getEditorComponent();
                 findText.setToolTipText(
-                    "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+                        "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
                 findRule = ExpressionRule.getRule(ruleText);
                 currentSearchMatchCount = tableModel.updateEventsWithFindRule(findRule);
                 searchModel.updateEventsWithFindRule(findRule);
                 currentColorizer.setFindRule(findRule);
                 tableRuleMediator.setFindRule(findRule);
                 searchRuleMediator.setFindRule(findRule);
-                //valid expression, reset background color in case we were previously an invalid expression
+                // valid expression, reset background color in case we were previously an invalid expression
                 findText.setBackground(UIManager.getColor("TextField.background"));
                 statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
                 if (isSearchResultsVisible()) {
@@ -2282,7 +2279,7 @@
                 searchModel.updateEventsWithFindRule(null);
                 currentSearchMatchCount = 0;
                 statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
-                //if the preference to show search results is enabled, the find rule is now null - hide search results
+                // if the preference to show search results is enabled, the find rule is now null - hide search results
                 if (isSearchResultsVisible()) {
                     hideSearchResults();
                 }
@@ -2308,9 +2305,9 @@
 
             detailPanel.revalidate();
             detailPanel.repaint();
-            //if the detail visible pref is not enabled, hide the detail pane
+            // if the detail visible pref is not enabled, hide the detail pane
             searchResultsDisplayed = false;
-            //hide if pref is not enabled
+            // hide if pref is not enabled
             if (!isDetailVisible()) {
                 hideDetailPane();
             }
@@ -2319,7 +2316,7 @@
 
     private void showSearchResults() {
         if (isSearchResultsVisible() && !searchResultsDisplayed && findRule != null) {
-            //if pref is set, always update detail panel to contain search results
+            // if pref is set, always update detail panel to contain search results
             detailPanel.removeAll();
             detailPanel.add(searchPane, BorderLayout.CENTER);
             Integer scrollBarWidth = (Integer) UIManager.get("ScrollBar.width");
@@ -2331,9 +2328,9 @@
             detailPanel.add(rightSpacePanel, BorderLayout.EAST);
             detailPanel.revalidate();
             detailPanel.repaint();
-            //if the detail visible pref is not enabled, show the detail pane
+            // if the detail visible pref is not enabled, show the detail pane
             searchResultsDisplayed = true;
-            //show if pref is not enabled
+            // show if pref is not enabled
             if (!isDetailVisible()) {
                 showDetailPane();
             }
@@ -2356,7 +2353,8 @@
      * Hide the detail pane, holding the current divider location for later use
      */
     private void hideDetailPane() {
-        //may be called not currently visible on initial setup to ensure panel is not visible..only update divider location if hiding when currently visible
+        // may be called not currently visible on initial setup to ensure panel is not visible..only update divider
+        // location if hiding when currently visible
         lowerPanel.setDividerSize(0);
         detailPanel.setVisible(false);
         detailPanel.repaint();
@@ -2392,39 +2390,32 @@
         final JToolBar toolbar = new JToolBar();
         toolbar.setFloatable(false);
 
-        final Action dockPauseAction =
-            new AbstractAction("Pause") {
-                public void actionPerformed(ActionEvent evt) {
-                    setPaused(!isPaused());
-                }
-            };
+        final Action dockPauseAction = new AbstractAction("Pause") {
+            public void actionPerformed(ActionEvent evt) {
+                setPaused(!isPaused());
+            }
+        };
 
         dockPauseAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_P);
+        dockPauseAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
         dockPauseAction.putValue(
-            Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("F12"));
-        dockPauseAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Halts the display, while still allowing events to stream in the background");
-        dockPauseAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
+                Action.SHORT_DESCRIPTION, "Halts the display, while still allowing events to stream in the background");
+        dockPauseAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
 
-        final SmallToggleButton dockPauseButton =
-            new SmallToggleButton(dockPauseAction);
+        final SmallToggleButton dockPauseButton = new SmallToggleButton(dockPauseAction);
         dockPauseButton.setText("");
 
         dockPauseButton.getModel().setSelected(isPaused());
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
+        logPanelPreferenceModel.addEventListener(evt -> {
             if (evt.getPropertyName().equals(LogPanelPreferenceModel.PAUSED)) {
-                dockPauseButton.getModel().setSelected((boolean)evt.getPropertyValue());
+                dockPauseButton.getModel().setSelected((boolean) evt.getPropertyValue());
             }
         });
 
         toolbar.add(dockPauseButton);
 
-        SmallButton showDockButton =
-            new SmallButton.Builder()
+        SmallButton showDockButton = new SmallButton.Builder()
                 .action(this::showPreferences)
                 .shortDescription("Define preferences...")
                 .smallIconUrl(ChainsawIcons.PREFERENCES)
@@ -2432,28 +2423,25 @@
 
         toolbar.add(showDockButton);
 
-        Action dockToggleLogTreeAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    toggleLogTreeVisible();
-                }
-            };
+        Action dockToggleLogTreeAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                toggleLogTreeVisible();
+            }
+        };
 
         dockToggleLogTreeAction.putValue(Action.SHORT_DESCRIPTION, "Toggles the Logger Tree Pane");
         dockToggleLogTreeAction.putValue("enabled", Boolean.TRUE);
         dockToggleLogTreeAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_T);
         dockToggleLogTreeAction.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
-        dockToggleLogTreeAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        dockToggleLogTreeAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
-        final SmallToggleButton toggleLogTreeButton =
-            new SmallToggleButton(dockToggleLogTreeAction);
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
+        final SmallToggleButton toggleLogTreeButton = new SmallToggleButton(dockToggleLogTreeAction);
+        logPanelPreferenceModel.addEventListener(evt -> {
             if (evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) {
-                toggleLogTreeButton.setSelected((Boolean)evt.getPropertyValue());
+                toggleLogTreeButton.setSelected((Boolean) evt.getPropertyValue());
             }
         });
 
@@ -2461,56 +2449,56 @@
         toolbar.add(toggleLogTreeButton);
         toolbar.addSeparator();
 
-        final Action undockedClearAction =
-            new AbstractAction("Clear") {
-                public void actionPerformed(ActionEvent arg0) {
-                    clearModel();
-                }
-            };
+        final Action undockedClearAction = new AbstractAction("Clear") {
+            public void actionPerformed(ActionEvent arg0) {
+                clearModel();
+            }
+        };
 
-        undockedClearAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
-        undockedClearAction.putValue(
-            Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
+        undockedClearAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.DELETE));
+        undockedClearAction.putValue(Action.SHORT_DESCRIPTION, "Removes all the events from the current view");
 
         final SmallButton dockClearButton = new SmallButton(undockedClearAction);
-        dockClearButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-            KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-            undockedClearAction.getValue(Action.NAME));
-        dockClearButton.getActionMap().put(
-            undockedClearAction.getValue(Action.NAME), undockedClearAction);
+        dockClearButton
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_BACK_SPACE,
+                                Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        undockedClearAction.getValue(Action.NAME));
+        dockClearButton.getActionMap().put(undockedClearAction.getValue(Action.NAME), undockedClearAction);
 
         dockClearButton.setText("");
         toolbar.add(dockClearButton);
         toolbar.addSeparator();
 
-        Action dockToggleScrollToBottomAction =
-            new AbstractAction("Toggles Scroll to Bottom") {
-                public void actionPerformed(ActionEvent e) {
-                    toggleScrollToBottom();
-                }
-            };
+        Action dockToggleScrollToBottomAction = new AbstractAction("Toggles Scroll to Bottom") {
+            public void actionPerformed(ActionEvent e) {
+                toggleScrollToBottom();
+            }
+        };
 
         dockToggleScrollToBottomAction.putValue(Action.SHORT_DESCRIPTION, "Toggles Scroll to Bottom");
         dockToggleScrollToBottomAction.putValue("enabled", Boolean.TRUE);
-        dockToggleScrollToBottomAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.SCROLL_TO_BOTTOM));
+        dockToggleScrollToBottomAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.SCROLL_TO_BOTTOM));
 
-        final SmallToggleButton toggleScrollToBottomButton =
-            new SmallToggleButton(dockToggleScrollToBottomAction);
+        final SmallToggleButton toggleScrollToBottomButton = new SmallToggleButton(dockToggleScrollToBottomAction);
 
-        logPanelPreferenceModel.addEventListener(
-            evt -> {
+        logPanelPreferenceModel.addEventListener(evt -> {
             if (evt.getPropertyName().equals(LogPanelPreferenceModel.SCROLL_TO_BOTTOM)) {
-                toggleScrollToBottomButton.setSelected((Boolean)evt.getPropertyValue());
+                toggleScrollToBottomButton.setSelected((Boolean) evt.getPropertyValue());
             }
         });
 
-        toggleScrollToBottomButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
-            KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-            dockToggleScrollToBottomAction.getValue(Action.NAME));
-        toggleScrollToBottomButton.getActionMap().put(
-            dockToggleScrollToBottomAction.getValue(Action.NAME), dockToggleScrollToBottomAction);
+        toggleScrollToBottomButton
+                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
+                .put(
+                        KeyStroke.getKeyStroke(
+                                KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
+                        dockToggleScrollToBottomAction.getValue(Action.NAME));
+        toggleScrollToBottomButton
+                .getActionMap()
+                .put(dockToggleScrollToBottomAction.getValue(Action.NAME), dockToggleScrollToBottomAction);
 
         toggleScrollToBottomButton.setSelected(isScrollToBottom());
         toggleScrollToBottomButton.setText("");
@@ -2518,21 +2506,19 @@
         toolbar.addSeparator();
 
         findCombo.addActionListener(e -> {
-            //comboboxchanged event received when text is modified in the field..when enter is pressed, it's comboboxedited
+            // comboboxchanged event received when text is modified in the field..when enter is pressed, it's
+            // comboboxedited
             if (e.getActionCommand().equalsIgnoreCase("comboBoxEdited")) {
                 findNext();
             }
         });
-        Action redockAction =
-            new AbstractAction("", ChainsawIcons.ICON_DOCK) {
-                public void actionPerformed(ActionEvent arg0) {
-                    dock();
-                }
-            };
+        Action redockAction = new AbstractAction("", ChainsawIcons.ICON_DOCK) {
+            public void actionPerformed(ActionEvent arg0) {
+                dock();
+            }
+        };
 
-        redockAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Docks this window back with the main Chainsaw window");
+        redockAction.putValue(Action.SHORT_DESCRIPTION, "Docks this window back with the main Chainsaw window");
 
         SmallButton redockButton = new SmallButton(redockAction);
         toolbar.add(redockButton);
@@ -2544,13 +2530,11 @@
      * Update the status bar with current selected row and row count
      */
     public void updateStatusBar() {
-        SwingHelper.invokeOnEDT(
-            () -> {
-                statusBar.setSelectedLine(
-                    table.getSelectedRow() + 1, tableModel.getRowCount(),
-                    tableModel.size(), getIdentifier());
-                statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
-            });
+        SwingHelper.invokeOnEDT(() -> {
+            statusBar.setSelectedLine(
+                    table.getSelectedRow() + 1, tableModel.getRowCount(), tableModel.size(), getIdentifier());
+            statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
+        });
     }
 
     /**
@@ -2561,9 +2545,7 @@
     private void setDetailPaneConversionPattern(String conversionPattern) {
         String oldPattern = getDetailPaneConversionPattern();
         (detailLayout).setConversionPattern(conversionPattern);
-        firePropertyChange(
-            "detailPaneConversionPattern", oldPattern,
-            getDetailPaneConversionPattern());
+        firePropertyChange("detailPaneConversionPattern", oldPattern, getDetailPaneConversionPattern());
     }
 
     /**
@@ -2578,9 +2560,7 @@
     private void setDetailPaneDatetimeFormat(DateTimeFormatter datetimeFormat) {
         DateTimeFormatter oldFormat = getDetailPaneDatetimeFormat();
         detailLayout.setDateformat(datetimeFormat);
-        firePropertyChange(
-            "detailPaneDatetimeFormat", oldFormat,
-            getDetailPaneDatetimeFormat());
+        firePropertyChange("detailPaneDatetimeFormat", oldFormat, getDetailPaneDatetimeFormat());
     }
 
     private DateTimeFormatter getDetailPaneDatetimeFormat() {
@@ -2638,12 +2618,13 @@
                     if (startRow > filteredEventsSize - 1) {
                         startRow = 0;
                     }
-                    //no selected row would return -1, so we'd start at row zero
+                    // no selected row would return -1, so we'd start at row zero
                     final int nextRow = tableModel.locate(findRule, startRow, true);
 
                     if (nextRow > -1) {
                         table.scrollToRow(nextRow);
-                        findText.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+                        findText.setToolTipText(
+                                "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
                     }
                     findText.setBackground(UIManager.getColor("TextField.background"));
                 } catch (IllegalArgumentException iae) {
@@ -2678,7 +2659,8 @@
 
                     if (previousRow > -1) {
                         table.scrollToRow(previousRow);
-                        findCombo.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+                        findCombo.setToolTipText(
+                                "Enter an expression - right click or ctrl-space for menu - press enter to add to list");
                     }
                     findText.setBackground(UIManager.getColor("TextField.background"));
                 } catch (IllegalArgumentException iae) {
@@ -2762,18 +2744,15 @@
      */
     private int getMaxColumnWidth(int index) {
         FontMetrics metrics = getGraphics().getFontMetrics();
-        int longestWidth =
-            metrics.stringWidth("  " + table.getColumnName(index) + "  ")
+        int longestWidth = metrics.stringWidth("  " + table.getColumnName(index) + "  ")
                 + (2 * table.getColumnModel().getColumnMargin());
 
         for (int i = 0, j = tableModel.getRowCount(); i < j; i++) {
             Component c =
-                renderer.getTableCellRendererComponent(
-                    table, table.getValueAt(i, index), false, false, i, index);
+                    renderer.getTableCellRendererComponent(table, table.getValueAt(i, index), false, false, i, index);
 
             if (c instanceof JLabel) {
-                longestWidth =
-                    Math.max(longestWidth, metrics.stringWidth(((JLabel) c).getText()));
+                longestWidth = Math.max(longestWidth, metrics.stringWidth(((JLabel) c).getText()));
             }
         }
 
@@ -2831,7 +2810,7 @@
     }
 
     public void clearAllMarkers() {
-        //this will get the properties to be removed from both tables..but
+        // this will get the properties to be removed from both tables..but
         tableModel.removePropertyFromEvents(ChainsawConstants.LOG4J_MARKER_COL_NAME);
     }
 
@@ -2840,13 +2819,14 @@
         if (row != -1) {
             LoggingEventWrapper loggingEventWrapper = tableModel.getRow(row);
             if (loggingEventWrapper != null) {
-                Object marker = loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
+                Object marker =
+                        loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
                 if (marker == null) {
                     loggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME, "set");
                 } else {
                     loggingEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
                 }
-                //if marker -was- null, it no longer is (may need to add the column)
+                // if marker -was- null, it no longer is (may need to add the column)
                 tableModel.fireRowUpdated(row, (marker == null));
             }
         }
@@ -2877,7 +2857,7 @@
         receiver = rx;
         receiver.addPropertyChangeListener(((pce) -> {
             if (pce.getPropertyName().equals("name")) {
-//                this.identifier = pce.getNewValue();
+                //                this.identifier = pce.getNewValue();
             }
         }));
         receiver.addChainsawEventBatchListener(this);
@@ -2909,11 +2889,13 @@
             int searchAddedRowCount = 0;
 
             for (ChainsawLoggingEvent event1 : events) {
-                //create two separate loggingEventWrappers (main table and search table), as they have different info on display state
+                // create two separate loggingEventWrappers (main table and search table), as they have different info
+                // on display state
                 LoggingEventWrapper loggingEventWrapper1 = new LoggingEventWrapper(event1);
-                //if the clearTableExpressionRule is not null, evaluate & clear the table if it matches
+                // if the clearTableExpressionRule is not null, evaluate & clear the table if it matches
                 if (clearTableExpressionRule != null && clearTableExpressionRule.evaluate(event1, null)) {
-                    logger.info("clear table expression matched - clearing table - matching event msg - " + event1.m_message);
+                    logger.info("clear table expression matched - clearing table - matching event msg - "
+                            + event1.m_message);
                     clearEvents();
                 }
 
@@ -2924,7 +2906,7 @@
                 }
                 rowAdded = rowAdded || isCurrentRowAdded;
 
-                //create a new loggingEventWrapper via copy constructor to ensure same IDs
+                // create a new loggingEventWrapper via copy constructor to ensure same IDs
                 LoggingEventWrapper loggingEventWrapper2 = new LoggingEventWrapper(loggingEventWrapper1);
                 boolean isSearchCurrentRowAdded = searchModel.isAddRow(loggingEventWrapper2);
                 if (isSearchCurrentRowAdded) {
@@ -2932,15 +2914,16 @@
                 }
                 searchRowAdded = searchRowAdded || isSearchCurrentRowAdded;
             }
-            //fire after adding all events
+            // fire after adding all events
             if (rowAdded) {
                 tableModel.fireTableEvent(startingRow, startingRow + addedRowCount, addedRowCount);
             }
             if (searchRowAdded) {
-                searchModel.fireTableEvent(startingSearchRow, startingSearchRow + searchAddedRowCount, searchAddedRowCount);
+                searchModel.fireTableEvent(
+                        startingSearchRow, startingSearchRow + searchAddedRowCount, searchAddedRowCount);
             }
 
-            //tell the model to notify the count listeners
+            // tell the model to notify the count listeners
             tableModel.notifyCountListeners();
 
             if (rowAdded) {
@@ -2948,7 +2931,7 @@
                     tableModel.sort();
                 }
 
-                //always update detail pane (since we may be using a cyclic buffer which is full)
+                // always update detail pane (since we may be using a cyclic buffer which is full)
                 detailPaneUpdater.setSelectedRow(table.getSelectedRow());
             }
 
@@ -2976,8 +2959,7 @@
      *
      * @author Paul Smith psmith
      */
-    private final class DelayedTextDocumentListener
-        implements DocumentListener {
+    private final class DelayedTextDocumentListener implements DocumentListener {
         private static final long CHECK_PERIOD = 1000;
         private final JTextField textField;
         private long lastTimeStamp = System.currentTimeMillis();
@@ -2990,36 +2972,32 @@
             this.textField = textFeld;
             this.defaultToolTip = textFeld.getToolTipText();
 
-            this.delayThread =
-                new Thread(
-                    () -> {
-                        while (true) {
-                            try {
-                                Thread.sleep(CHECK_PERIOD);
-                            } catch (InterruptedException e) {
-                            }
+            this.delayThread = new Thread(() -> {
+                while (true) {
+                    try {
+                        Thread.sleep(CHECK_PERIOD);
+                    } catch (InterruptedException e) {
+                    }
 
-                            if (
-                                (System.currentTimeMillis() - lastTimeStamp) < CHECK_PERIOD) {
-                                // They typed something since the last check. we ignor
-                                // this for a sample period
-                                //                logger.debug("Typed something since the last check");
-                            } else if (
-                                (System.currentTimeMillis() - lastTimeStamp) < (2 * CHECK_PERIOD)) {
-                                // they stopped typing recently, but have stopped for at least
-                                // 1 sample period. lets apply the filter
-                                //                logger.debug("Typed something recently applying filter");
-                                if (!(textFeld.getText().trim().equals(lastText.trim()))) {
-                                    lastText = textFeld.getText();
-                                    EventQueue.invokeLater(DelayedTextDocumentListener.this::setFilter);
-                                }
-                            } else {
-                                // they stopped typing a while ago, let's forget about it
-                                //                logger.debug(
-                                //                  "They stoppped typing a while ago, assuming filter has been applied");
-                            }
+                    if ((System.currentTimeMillis() - lastTimeStamp) < CHECK_PERIOD) {
+                        // They typed something since the last check. we ignor
+                        // this for a sample period
+                        //                logger.debug("Typed something since the last check");
+                    } else if ((System.currentTimeMillis() - lastTimeStamp) < (2 * CHECK_PERIOD)) {
+                        // they stopped typing recently, but have stopped for at least
+                        // 1 sample period. lets apply the filter
+                        //                logger.debug("Typed something recently applying filter");
+                        if (!(textFeld.getText().trim().equals(lastText.trim()))) {
+                            lastText = textFeld.getText();
+                            EventQueue.invokeLater(DelayedTextDocumentListener.this::setFilter);
                         }
-                    });
+                    } else {
+                        // they stopped typing a while ago, let's forget about it
+                        //                logger.debug(
+                        //                  "They stoppped typing a while ago, assuming filter has been applied");
+                    }
+                }
+            });
 
             delayThread.setPriority(Thread.MIN_PRIORITY);
             delayThread.start();
@@ -3064,7 +3042,7 @@
          */
         private void setFilter() {
             if (textField.getText().trim().isEmpty()) {
-                //reset background color in case we were previously an invalid expression
+                // reset background color in case we were previously an invalid expression
                 textField.setBackground(UIManager.getColor("TextField.background"));
                 tableRuleMediator.setFilterRule(null);
                 searchRuleMediator.setFilterRule(null);
@@ -3082,10 +3060,10 @@
                         currentSearchMatchCount = tableModel.getSearchMatchCount();
                         statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
                     }
-                    //valid expression, reset background color in case we were previously an invalid expression
+                    // valid expression, reset background color in case we were previously an invalid expression
                     textField.setBackground(UIManager.getColor("TextField.background"));
                 } catch (IllegalArgumentException iae) {
-                    //invalid expression, change background of the field
+                    // invalid expression, change background of the field
                     textField.setToolTipText(iae.getMessage());
                     textField.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
                     if (findRule != null) {
@@ -3102,7 +3080,8 @@
         private EventContainer markerEventContainer;
         private EventContainer otherMarkerEventContainer;
 
-        private TableMarkerListener(JTable markerTable, EventContainer markerEventContainer, EventContainer otherMarkerEventContainer) {
+        private TableMarkerListener(
+                JTable markerTable, EventContainer markerEventContainer, EventContainer otherMarkerEventContainer) {
             this.markerTable = markerTable;
             this.markerEventContainer = markerEventContainer;
             this.otherMarkerEventContainer = otherMarkerEventContainer;
@@ -3114,15 +3093,18 @@
                 if (row != -1) {
                     LoggingEventWrapper loggingEventWrapper = markerEventContainer.getRow(row);
                     if (loggingEventWrapper != null) {
-                        Object marker = loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
+                        Object marker = loggingEventWrapper
+                                .getLoggingEvent()
+                                .getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
                         if (marker == null) {
                             loggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME, "set");
                         } else {
                             loggingEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME);
                         }
-                        //if marker -was- null, it no longer is (may need to add the column)
+                        // if marker -was- null, it no longer is (may need to add the column)
                         markerEventContainer.fireRowUpdated(row, (marker == null));
-                        otherMarkerEventContainer.fireRowUpdated(otherMarkerEventContainer.getRowIndex(loggingEventWrapper), (marker == null));
+                        otherMarkerEventContainer.fireRowUpdated(
+                                otherMarkerEventContainer.getRowIndex(loggingEventWrapper), (marker == null));
                     }
                 }
             }
@@ -3172,8 +3154,8 @@
         }
     }
 
-    //if columnmoved or columnremoved callback received, re-apply table's sort index based
-    //sort column name
+    // if columnmoved or columnremoved callback received, re-apply table's sort index based
+    // sort column name
     private class ChainsawTableColumnModelListener implements TableColumnModelListener {
         private JSortTable modelListenerTable;
 
@@ -3182,7 +3164,7 @@
         }
 
         public void columnAdded(TableColumnModelEvent e) {
-            //no-op
+            // no-op
         }
 
         /**
@@ -3208,16 +3190,14 @@
          *
          * @param e
          */
-        public void columnMarginChanged(ChangeEvent e) {
-        }
+        public void columnMarginChanged(ChangeEvent e) {}
 
         /**
          * Ignore selection changed
          *
          * @param e
          */
-        public void columnSelectionChanged(ListSelectionEvent e) {
-        }
+        public void columnSelectionChanged(ListSelectionEvent e) {}
     }
 
     /**
@@ -3228,8 +3208,7 @@
         private int selectedRow = -1;
         int lastRow = -1;
 
-        private DetailPaneUpdater() {
-        }
+        private DetailPaneUpdater() {}
 
         /**
          * Update detail pane to display information about the LoggingEvent at index row
@@ -3308,8 +3287,7 @@
          * @param arg0
          */
         public void propertyChange(PropertyChangeEvent arg0) {
-            SwingUtilities.invokeLater(
-                () -> updateDetailPane(true));
+            SwingUtilities.invokeLater(() -> updateDetailPane(true));
         }
     }
 
@@ -3337,29 +3315,30 @@
         }
 
         public void mouseClicked(MouseEvent e) {
-/*
-            TableColumn column = throwableTable.getColumnModel().getColumn(throwableTable.columnAtPoint(e.getPoint()));
-            if (!column.getHeaderValue().toString().toUpperCase().equals(ChainsawColumns.getColumnName(ChainsawColumns.INDEX_THROWABLE_COL_NAME))) {
-                return;
-            }
+            /*
+                        TableColumn column = throwableTable.getColumnModel().getColumn(throwableTable.columnAtPoint(e.getPoint()));
+                        if (!column.getHeaderValue().toString().toUpperCase().equals(ChainsawColumns.getColumnName(ChainsawColumns.INDEX_THROWABLE_COL_NAME))) {
+                            return;
+                        }
 
-            LoggingEventWrapper loggingEventWrapper = throwableEventContainer.getRow(throwableTable.getSelectedRow());
-*/
+                        LoggingEventWrapper loggingEventWrapper = throwableEventContainer.getRow(throwableTable.getSelectedRow());
+            */
 
-            //throwable string representation may be a length-one empty array
-//            String[] ti = loggingEventWrapper.getLoggingEvent().getThrowableStrRep();
-//            if (ti != null && ti.length > 0 && (!(ti.length == 1 && ti[0].isEmpty()))) {
-//                detailDialog.setTitle(throwableTable.getColumnName(throwableTable.getSelectedColumn()) + " detail...");
-//                StringBuilder buf = new StringBuilder();
-//                buf.append(loggingEventWrapper.getLoggingEvent().getMessage());
-//                buf.append("\n");
-//                for (String aTi : ti) {
-//                    buf.append(aTi).append("\n    ");
-//                }
-//
-//                detailArea.setText(buf.toString());
-//                SwingHelper.invokeOnEDT(() -> centerAndSetVisible(detailDialog));
-//            }
+            // throwable string representation may be a length-one empty array
+            //            String[] ti = loggingEventWrapper.getLoggingEvent().getThrowableStrRep();
+            //            if (ti != null && ti.length > 0 && (!(ti.length == 1 && ti[0].isEmpty()))) {
+            //                detailDialog.setTitle(throwableTable.getColumnName(throwableTable.getSelectedColumn()) + "
+            // detail...");
+            //                StringBuilder buf = new StringBuilder();
+            //                buf.append(loggingEventWrapper.getLoggingEvent().getMessage());
+            //                buf.append("\n");
+            //                for (String aTi : ti) {
+            //                    buf.append(aTi).append("\n    ");
+            //                }
+            //
+            //                detailArea.setText(buf.toString());
+            //                SwingHelper.invokeOnEDT(() -> centerAndSetVisible(detailDialog));
+            //            }
         }
     }
 
@@ -3390,7 +3369,7 @@
             } else {
                 currentLoggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME, textField.getText());
             }
-            //row should always exist in the main table if it is being edited
+            // row should always exist in the main table if it is being edited
             tableModel.fireRowUpdated(tableModel.getRowIndex(currentLoggingEventWrapper), true);
             int index = searchModel.getRowIndex(currentLoggingEventWrapper);
             if (index > -1) {
@@ -3440,11 +3419,14 @@
             }
         }
 
-        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+        public Component getTableCellEditorComponent(
+                JTable table, Object value, boolean isSelected, int row, int column) {
             currentTableMarkerCell = table;
             currentLoggingEventWrapper = ((EventContainer) table.getModel()).getRow(row);
             if (currentLoggingEventWrapper != null) {
-                textField.setText(currentLoggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME));
+                textField.setText(currentLoggingEventWrapper
+                        .getLoggingEvent()
+                        .getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME));
                 textField.selectAll();
             } else {
                 textField.setText("");
@@ -3462,17 +3444,19 @@
         }
 
         boolean primaryMatches(ThumbnailLoggingEventWrapper wrapper) {
-            String millisDelta = wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+            String millisDelta = wrapper.loggingEventWrapper
+                    .getLoggingEvent()
+                    .getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
             if (millisDelta != null && !millisDelta.trim().isEmpty()) {
                 long millisDeltaLong = Long.parseLong(millisDelta);
-                //arbitrary
+                // arbitrary
                 return millisDeltaLong >= 1000;
             }
             return false;
         }
 
         boolean secondaryMatches(ThumbnailLoggingEventWrapper wrapper) {
-            //secondary is not used
+            // secondary is not used
             return false;
         }
 
@@ -3485,7 +3469,7 @@
                 LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) o;
                 ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, loggingEventWrapper);
                 i++;
-                //only add if there is a color defined
+                // only add if there is a color defined
                 if (primaryMatches(wrapper)) {
                     primaryList.add(wrapper);
                 }
@@ -3501,7 +3485,7 @@
             if (rowCount == 0) {
                 return;
             }
-            //use event pane height as reference height - max component height will be extended by event height if
+            // use event pane height as reference height - max component height will be extended by event height if
             // last row is rendered, so subtract here
             int height = eventsPane.getHeight();
             int maxHeight = Math.min(maxEventHeight, (height / rowCount));
@@ -3509,32 +3493,40 @@
             int componentHeight = height - minHeight;
             int eventHeight = minHeight;
 
-            //draw all events
+            // draw all events
             for (Object aPrimaryList : primaryList) {
                 ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper) aPrimaryList;
                 if (primaryMatches(wrapper)) {
                     float ratio = (wrapper.rowNum / (float) rowCount);
-                    //                System.out.println("error - ratio: " + ratio + ", component height: " + componentHeight);
+                    //                System.out.println("error - ratio: " + ratio + ", component height: " +
+                    // componentHeight);
                     int verticalLocation = (int) (componentHeight * ratio);
 
                     int startX = 1;
                     int width = getWidth() - (startX * 2);
-                    //max out at 50, min 2...
-                    String millisDelta = wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+                    // max out at 50, min 2...
+                    String millisDelta = wrapper.loggingEventWrapper
+                            .getLoggingEvent()
+                            .getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
                     long millisDeltaLong = Long.parseLong(millisDelta);
-                    long delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long) (millisDeltaLong * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
-                    float widthMaxMillisDeltaRenderRatio = ((float) width / ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX);
+                    long delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long)
+                            (millisDeltaLong * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
+                    float widthMaxMillisDeltaRenderRatio =
+                            ((float) width / ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX);
                     int widthToUse = Math.max(2, (int) (delta * widthMaxMillisDeltaRenderRatio));
                     eventHeight = Math.min(maxEventHeight, eventHeight + 3);
-//                            eventHeight = maxEventHeight;
-//                    drawEvent(applicationPreferenceModel.getDeltaColor(), (verticalLocation - eventHeight + 1), eventHeight, g, startX, widthToUse);
-                    //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
+                    //                            eventHeight = maxEventHeight;
+                    //                    drawEvent(applicationPreferenceModel.getDeltaColor(), (verticalLocation -
+                    // eventHeight + 1), eventHeight, g, startX, widthToUse);
+                    //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " +
+                    // verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row
+                    // count: " + rowCount);
                 }
             }
         }
     }
 
-    //a listener receiving color updates needs to call configureColors on this class
+    // a listener receiving color updates needs to call configureColors on this class
     private class ColorizedEventAndSearchMatchThumbnail extends AbstractEventMatchThumbnail {
         public ColorizedEventAndSearchMatchThumbnail() {
             super();
@@ -3542,7 +3534,9 @@
         }
 
         boolean primaryMatches(ThumbnailLoggingEventWrapper wrapper) {
-            return !wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND);
+            return !wrapper.loggingEventWrapper
+                    .getColorRuleBackground()
+                    .equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND);
         }
 
         boolean secondaryMatches(ThumbnailLoggingEventWrapper wrapper) {
@@ -3561,7 +3555,7 @@
                     secondaryList.add(wrapper);
                 }
                 i++;
-                //only add if there is a color defined
+                // only add if there is a color defined
                 if (primaryMatches(wrapper)) {
                     primaryList.add(wrapper);
                 }
@@ -3577,7 +3571,7 @@
             if (rowCount == 0) {
                 return;
             }
-            //use event pane height as reference height - max component height will be extended by event height if
+            // use event pane height as reference height - max component height will be extended by event height if
             // last row is rendered, so subtract here
             int height = eventsPane.getHeight();
             int maxHeight = Math.min(maxEventHeight, (height / rowCount));
@@ -3585,43 +3579,73 @@
             int componentHeight = height - minHeight;
             int eventHeight = minHeight;
 
-            //draw all non error/warning/marker events
+            // draw all non error/warning/marker events
             for (Object aPrimaryList1 : primaryList) {
                 ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper) aPrimaryList1;
-                if (!wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
-                    if (wrapper.loggingEventWrapper.getLoggingEvent().m_level.ordinal() < Level.WARN.ordinal() && wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME) == null) {
+                if (!wrapper.loggingEventWrapper
+                        .getColorRuleBackground()
+                        .equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
+                    if (wrapper.loggingEventWrapper.getLoggingEvent().m_level.ordinal() < Level.WARN.ordinal()
+                            && wrapper.loggingEventWrapper
+                                            .getLoggingEvent()
+                                            .getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME)
+                                    == null) {
                         float ratio = (wrapper.rowNum / (float) rowCount);
-                        //                System.out.println("error - ratio: " + ratio + ", component height: " + componentHeight);
+                        //                System.out.println("error - ratio: " + ratio + ", component height: " +
+                        // componentHeight);
                         int verticalLocation = (int) (componentHeight * ratio);
 
                         int startX = 1;
                         int width = getWidth() - (startX * 2);
 
-                        drawEvent(wrapper.loggingEventWrapper.getColorRuleBackground(), verticalLocation, eventHeight, g, startX, width);
-                        //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
+                        drawEvent(
+                                wrapper.loggingEventWrapper.getColorRuleBackground(),
+                                verticalLocation,
+                                eventHeight,
+                                g,
+                                startX,
+                                width);
+                        //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location:
+                        // " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight
+                        // + ", row count: " + rowCount);
                     }
                 }
             }
 
-            //draw warnings, error, fatal & markers last (full width)
+            // draw warnings, error, fatal & markers last (full width)
             for (Object aPrimaryList : primaryList) {
                 ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper) aPrimaryList;
-                if (!wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
-                    if (wrapper.loggingEventWrapper.getLoggingEvent().m_level.ordinal() >= Level.WARN.ordinal() || wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME) != null) {
+                if (!wrapper.loggingEventWrapper
+                        .getColorRuleBackground()
+                        .equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
+                    if (wrapper.loggingEventWrapper.getLoggingEvent().m_level.ordinal() >= Level.WARN.ordinal()
+                            || wrapper.loggingEventWrapper
+                                            .getLoggingEvent()
+                                            .getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME)
+                                    != null) {
                         float ratio = (wrapper.rowNum / (float) rowCount);
-                        //                System.out.println("error - ratio: " + ratio + ", component height: " + componentHeight);
+                        //                System.out.println("error - ratio: " + ratio + ", component height: " +
+                        // componentHeight);
                         int verticalLocation = (int) (componentHeight * ratio);
 
                         int startX = 1;
                         int width = getWidth() - (startX * 2);
-                        //narrow the color a bit if level is less than warn
-                        //make warnings, errors a little taller
+                        // narrow the color a bit if level is less than warn
+                        // make warnings, errors a little taller
 
                         eventHeight = Math.min(maxEventHeight, eventHeight + 3);
-//                            eventHeight = maxEventHeight;
+                        //                            eventHeight = maxEventHeight;
 
-                        drawEvent(wrapper.loggingEventWrapper.getColorRuleBackground(), (verticalLocation - eventHeight + 1), eventHeight, g, startX, width);
-                        //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
+                        drawEvent(
+                                wrapper.loggingEventWrapper.getColorRuleBackground(),
+                                (verticalLocation - eventHeight + 1),
+                                eventHeight,
+                                g,
+                                startX,
+                                width);
+                        //                System.out.println("painting error - rownum: " + wrapper.rowNum + ", location:
+                        // " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight
+                        // + ", row count: " + rowCount);
                     }
                 }
             }
@@ -3629,16 +3653,19 @@
             for (Object aSecondaryList : secondaryList) {
                 ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper) aSecondaryList;
                 float ratio = (wrapper.rowNum / (float) rowCount);
-//                System.out.println("warning - ratio: " + ratio + ", component height: " + componentHeight);
+                //                System.out.println("warning - ratio: " + ratio + ", component height: " +
+                // componentHeight);
                 int verticalLocation = (int) (componentHeight * ratio);
 
                 int startX = 1;
                 int width = getWidth() - (startX * 2);
                 width = (width / 2);
 
-                //use black for search indicator in the 'gutter'
+                // use black for search indicator in the 'gutter'
                 drawEvent(Color.BLACK, verticalLocation, eventHeight, g, startX, width);
-//                System.out.println("painting warning - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
+                //                System.out.println("painting warning - rownum: " + wrapper.rowNum + ", location: " +
+                // verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row
+                // count: " + rowCount);
             }
         }
     }
@@ -3668,9 +3695,11 @@
                 public void mouseClicked(MouseEvent e) {
                     int yPosition = e.getPoint().y;
                     ThumbnailLoggingEventWrapper event = getEventWrapperAtPosition(yPosition);
-//                    System.out.println("rowToSelect: " + rowToSelect + ", closestRow: " + event.loggingEvent.getProperty("log4jid"));
+                    //                    System.out.println("rowToSelect: " + rowToSelect + ", closestRow: " +
+                    // event.loggingEvent.getProperty("log4jid"));
                     if (event != null) {
-                        int id = Integer.parseInt(event.loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
+                        int id = Integer.parseInt(
+                                event.loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
                         setSelectedEvent(id);
                     }
                 }
@@ -3678,99 +3707,116 @@
 
             tableModel.addTableModelListener(e -> {
                 int firstRow = e.getFirstRow();
-                //lastRow may be Integer.MAX_VALUE..if so, set lastRow to rowcount - 1 (so rowcount may be negative here, which will bypass for loops below)
+                // lastRow may be Integer.MAX_VALUE..if so, set lastRow to rowcount - 1 (so rowcount may be negative
+                // here, which will bypass for loops below)
                 int lastRow = Math.min(e.getLastRow(), table.getRowCount() - 1);
-                //clear everything if we got an event w/-1 for first or last row
+                // clear everything if we got an event w/-1 for first or last row
                 if (firstRow < 0 || lastRow < 0) {
                     primaryList.clear();
                     secondaryList.clear();
                 }
 
-//                    System.out.println("lastRow: " + lastRow + ", first row: " + firstRow + ", original last row: " + e.getLastRow() + ", type: " + e.getType());
+                //                    System.out.println("lastRow: " + lastRow + ", first row: " + firstRow + ",
+                // original last row: " + e.getLastRow() + ", type: " + e.getType());
 
                 List displayedEvents = tableModel.getFilteredEvents();
                 if (e.getType() == TableModelEvent.INSERT) {
-//                        System.out.println("insert - current warnings: " + warnings.size() + ", errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow);
+                    //                        System.out.println("insert - current warnings: " + warnings.size() + ",
+                    // errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow);
                     for (int i = firstRow; i < lastRow; i++) {
                         LoggingEventWrapper event = (LoggingEventWrapper) displayedEvents.get(i);
                         ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
                         if (secondaryMatches(wrapper)) {
                             secondaryList.add(wrapper);
-//                                System.out.println("added warning: " + i + " - " + event.getLevel());
+                            //                                System.out.println("added warning: " + i + " - " +
+                            // event.getLevel());
                         }
                         if (primaryMatches(wrapper)) {
-                            //add to this one
+                            // add to this one
                             primaryList.add(wrapper);
                         }
-//                                System.out.println("added error: " + i + " - " + event.getLevel());
+                        //                                System.out.println("added error: " + i + " - " +
+                        // event.getLevel());
                     }
-//                        System.out.println("insert- new warnings: " + warnings + ", errors: " + errors);
+                    //                        System.out.println("insert- new warnings: " + warnings + ", errors: " +
+                    // errors);
 
-                    //run evaluation on rows & add to list
+                    // run evaluation on rows & add to list
                 } 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() );
+                    // 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<ThumbnailLoggingEventWrapper> iter = secondaryList.iterator(); iter.hasNext(); ) {
                         ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
-//                                System.out.println("deleting find: " + wrapper);
+                            //                                System.out.println("deleting find: " + wrapper);
                             iter.remove();
                         }
                     }
                     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);
+                            //                                System.out.println("deleting error: " + wrapper);
                             iter.remove();
                         }
                     }
-//                        System.out.println("delete- new warnings: " + warnings.size() + ", errors: " + errors.size());
+                    //                        System.out.println("delete- new warnings: " + warnings.size() + ", errors:
+                    // " + errors.size());
 
-                    //remove any matching rows
+                    // remove any matching rows
                 } 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...
+                    //                        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<ThumbnailLoggingEventWrapper> iter = secondaryList.iterator(); iter.hasNext(); ) {
                         ThumbnailLoggingEventWrapper wrapper = iter.next();
                         if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
-//                                System.out.println("update - deleting warning: " + wrapper);
+                            //                                System.out.println("update - deleting warning: " +
+                            // wrapper);
                             iter.remove();
                         }
                     }
                     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);
+                            //                                System.out.println("update - deleting error: " + wrapper);
                             iter.remove();
                         }
                     }
-//                        System.out.println("update - after deleting old warnings in range: " + firstRow + " to " + lastRow + ", new warnings: " + warnings.size() + ", errors: " + errors.size());
-                    //NOTE: for update, we need to do i<= lastRow
+                    //                        System.out.println("update - after deleting old warnings in range: " +
+                    // firstRow + " to " + lastRow + ", new warnings: " + warnings.size() + ", errors: " +
+                    // errors.size());
+                    // NOTE: for update, we need to do i<= lastRow
                     for (int i = firstRow; i <= lastRow; i++) {
                         LoggingEventWrapper event = (LoggingEventWrapper) displayedEvents.get(i);
                         ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
-//                                System.out.println("update - adding error: " + i + ", event: " + event.getMessage());
-                        //only add event to thumbnail if there is a color
+                        //                                System.out.println("update - adding error: " + i + ", event: "
+                        // + event.getMessage());
+                        // only add event to thumbnail if there is a color
                         if (primaryMatches(wrapper)) {
-                            //!wrapper.loggingEvent.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                            // !wrapper.loggingEvent.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
                             primaryList.add(wrapper);
                         } else {
                             primaryList.remove(wrapper);
                         }
 
                         if (secondaryMatches(wrapper)) {
-                            //event.isSearchMatch())
-//                                System.out.println("update - adding marker: " + i + ", event: " + event.getMessage());
+                            // event.isSearchMatch())
+                            //                                System.out.println("update - adding marker: " + i + ",
+                            // event: " + event.getMessage());
                             secondaryList.add(wrapper);
                         } else {
                             secondaryList.remove(wrapper);
                         }
                     }
-//                        System.out.println("update - new warnings: " + warnings.size() + ", errors: " + errors.size());
+                    //                        System.out.println("update - new warnings: " + warnings.size() + ",
+                    // errors: " + errors.size());
                 }
                 revalidate();
                 repaint();
-                //run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
+                // run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
                 EventQueue.invokeLater(() -> {
                     if (isScrollToBottom()) {
                         scrollToBottom();
@@ -3792,20 +3838,22 @@
         protected ThumbnailLoggingEventWrapper getEventWrapperAtPosition(int yPosition) {
             int rowCount = table.getRowCount();
 
-            //'effective' height of this component is scrollpane height
+            // 'effective' height of this component is scrollpane height
             int height = eventsPane.getHeight();
 
             yPosition = Math.max(yPosition, 0);
 
-            //don't let clicklocation exceed height
+            // don't let clicklocation exceed height
             if (yPosition >= height) {
                 yPosition = height;
             }
 
-            //                    System.out.println("clicked y pos: " + e.getPoint().y + ", relative: " + clickLocation);
+            //                    System.out.println("clicked y pos: " + e.getPoint().y + ", relative: " +
+            // clickLocation);
             float ratio = (float) yPosition / height;
             int rowToSelect = Math.round(rowCount * ratio);
-            //                    System.out.println("rowCount: " + rowCount + ", height: " + height + ", clickLocation: " + clickLocation + ", ratio: " + ratio + ", rowToSelect: " + rowToSelect);
+            //                    System.out.println("rowCount: " + rowCount + ", height: " + height + ", clickLocation:
+            // " + clickLocation + ", ratio: " + ratio + ", rowToSelect: " + rowToSelect);
             ThumbnailLoggingEventWrapper event = getClosestRow(rowToSelect);
             return event;
         }
@@ -3833,13 +3881,14 @@
         }
 
         public Point getToolTipLocation(MouseEvent event) {
-            //shift tooltip down so the the pointer doesn't cover up events below the current mouse location
+            // shift tooltip down so the the pointer doesn't cover up events below the current mouse location
             return new Point(event.getX(), event.getY() + 30);
         }
 
         protected void drawEvent(Color newColor, int verticalLocation, int eventHeight, Graphics g, int x, int width) {
-            //            System.out.println("painting: - color: " + newColor + ", verticalLocation: " + verticalLocation + ", eventHeight: " + eventHeight);
-            //center drawing at vertical location
+            //            System.out.println("painting: - color: " + newColor + ", verticalLocation: " +
+            // verticalLocation + ", eventHeight: " + eventHeight);
+            // center drawing at vertical location
             int y = verticalLocation + (eventHeight / 2);
             Color oldColor = g.getColor();
             g.setColor(newColor);
@@ -3875,7 +3924,9 @@
 
             ThumbnailLoggingEventWrapper that = (ThumbnailLoggingEventWrapper) o;
 
-            return loggingEventWrapper != null ? loggingEventWrapper.equals(that.loggingEventWrapper) : that.loggingEventWrapper == null;
+            return loggingEventWrapper != null
+                    ? loggingEventWrapper.equals(that.loggingEventWrapper)
+                    : that.loggingEventWrapper == null;
         }
 
         public int hashCode() {
@@ -3883,12 +3934,10 @@
         }
     }
 
-
     class ToggleToolTips extends JCheckBoxMenuItem {
         public ToggleToolTips() {
             super("Show ToolTips", new ImageIcon(ChainsawIcons.TOOL_TIP));
-            addActionListener(
-                evt -> logPanelPreferenceModel.setToolTipsVisible(isSelected()));
+            addActionListener(evt -> logPanelPreferenceModel.setToolTipsVisible(isSelected()));
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelLoggerTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelLoggerTreeModel.java
index 6be15a7..18785a6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelLoggerTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelLoggerTreeModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,29 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.chainsaw.components.logpanel;
 
-import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameListener;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
+import java.util.*;
 import javax.swing.*;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.MutableTreeNode;
-import java.util.*;
-
+import org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameListener;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A TreeModel that represents the Loggers for a given LogPanel
  *
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
-public class LogPanelLoggerTreeModel extends DefaultTreeModel
-    implements LoggerNameListener {
+public class LogPanelLoggerTreeModel extends DefaultTreeModel implements LoggerNameListener {
     private final Map<String, LogPanelTreeNode> fullPackageMap = new HashMap<>();
     private final Logger logger = LogManager.getLogger(LogPanelLoggerTreeModel.class);
 
@@ -48,9 +42,8 @@
      * @see org.apache.log4j.chainsaw.components.loggernamepanel.LoggerNameListener#loggerNameAdded(java.lang.String)
      */
     public void loggerNameAdded(final String loggerName) {
-        //invoke later, not on current EDT
-        SwingUtilities.invokeLater(
-            () -> addLoggerNameInDispatchThread(loggerName));
+        // invoke later, not on current EDT
+        SwingUtilities.invokeLater(() -> addLoggerNameInDispatchThread(loggerName));
     }
 
     public void reset() {
@@ -81,8 +74,7 @@
             Enumeration enumeration = current.children();
 
             while (enumeration.hasMoreElements()) {
-                DefaultMutableTreeNode child =
-                    (DefaultMutableTreeNode) enumeration.nextElement();
+                DefaultMutableTreeNode child = (DefaultMutableTreeNode) enumeration.nextElement();
                 String childName = child.getUserObject().toString();
 
                 if (childName.equals(packageName)) {
@@ -129,8 +121,7 @@
                 changedIndices[j] = j;
             }
 
-            nodesWereInserted(
-                changedNode, new int[]{changedNode.getIndex(newChild)});
+            nodesWereInserted(changedNode, new int[] {changedNode.getIndex(newChild)});
             nodesChanged(changedNode, changedIndices);
             current = newChild;
         }
@@ -170,8 +161,7 @@
     }
 
     private static class LogPanelTreeNode extends DefaultMutableTreeNode {
-        protected static Comparator nodeComparator =
-            (o1, o2) -> o1.toString().compareToIgnoreCase(o2.toString());
+        protected static Comparator nodeComparator = (o1, o2) -> o1.toString().compareToIgnoreCase(o2.toString());
 
         private LogPanelTreeNode(String logName) {
             super(logName);
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferenceModel.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferenceModel.java
index 1be5b7d..ce3e01a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferenceModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,11 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.chainsaw.components.logpanel;
 
+import java.util.*;
+import javax.swing.table.TableColumn;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.commons.configuration2.event.EventListener;
@@ -26,9 +25,6 @@
 import org.apache.log4j.chainsaw.layout.DefaultLayoutFactory;
 import org.apache.log4j.helpers.Constants;
 
-import javax.swing.table.TableColumn;
-import java.util.*;
-
 /**
  * Used to encapsulate all the preferences for a given LogPanel
  *
@@ -81,14 +77,27 @@
 
     private static final String conversionPatternDefault = DefaultLayoutFactory.getDefaultPatternLayout();
 
-    private static final List<String> defaultOrderedColumnNames = List.of(ChainsawConstants.ID_COL_NAME,
-        ChainsawConstants.TIMESTAMP_COL_NAME, ChainsawConstants.LOG4J_MARKER_COL_NAME,
-        ChainsawConstants.LEVEL_COL_NAME, ChainsawConstants.LOGGER_COL_NAME, ChainsawConstants.MESSAGE_COL_NAME);
+    private static final List<String> defaultOrderedColumnNames = List.of(
+            ChainsawConstants.ID_COL_NAME,
+            ChainsawConstants.TIMESTAMP_COL_NAME,
+            ChainsawConstants.LOG4J_MARKER_COL_NAME,
+            ChainsawConstants.LEVEL_COL_NAME,
+            ChainsawConstants.LOGGER_COL_NAME,
+            ChainsawConstants.MESSAGE_COL_NAME);
 
-    private static final Map<String, Integer> defaultOrderedColumnNamesAndWidths =
-        Map.of(ChainsawConstants.ID_COL_NAME, 75, ChainsawConstants.TIMESTAMP_COL_NAME, 100,
-            ChainsawConstants.LOG4J_MARKER_COL_NAME, 120, ChainsawConstants.LEVEL_COL_NAME, 75,
-            ChainsawConstants.LOGGER_COL_NAME, 125, ChainsawConstants.MESSAGE_COL_NAME, 650);
+    private static final Map<String, Integer> defaultOrderedColumnNamesAndWidths = Map.of(
+            ChainsawConstants.ID_COL_NAME,
+            75,
+            ChainsawConstants.TIMESTAMP_COL_NAME,
+            100,
+            ChainsawConstants.LOG4J_MARKER_COL_NAME,
+            120,
+            ChainsawConstants.LEVEL_COL_NAME,
+            75,
+            ChainsawConstants.LOGGER_COL_NAME,
+            125,
+            ChainsawConstants.MESSAGE_COL_NAME,
+            650);
 
     public LogPanelPreferenceModel(AbstractConfiguration tabConfig) {
         this.tabConfig = tabConfig;
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
index e2f4f03..5b881cd 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/logpanel/LogPanelPreferencePanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,6 +16,15 @@
  */
 package org.apache.log4j.chainsaw.components.logpanel;
 
+import java.awt.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.*;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeModel;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.event.ConfigurationEvent;
 import org.apache.log4j.chainsaw.AbstractPreferencePanel;
@@ -25,33 +34,23 @@
 import org.apache.log4j.chainsaw.ModifiableListModel;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 
-import javax.swing.*;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeModel;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.List;
-
-
 /**
  * GUI panel used to manipulate the PreferenceModel for a Log Panel
  *
  * @author Paul Smith
  */
 public class LogPanelPreferencePanel extends AbstractPreferencePanel {
-    //~ Instance fields =========================================================
+    // ~ Instance fields =========================================================
 
     private final ModifiableListModel columnListModel = new ModifiableListModel();
     private final LogPanelPreferenceModel logPanelPreferenceModel;
     private SettingsManager settingsManager;
     private final String tabIdentifier;
 
-    //~ Constructors ============================================================
+    // ~ Constructors ============================================================
 
-    public LogPanelPreferencePanel(SettingsManager settingsManager, String panelIdent, LogPanelPreferenceModel logPanelPreferenceModel) {
+    public LogPanelPreferencePanel(
+            SettingsManager settingsManager, String panelIdent, LogPanelPreferenceModel logPanelPreferenceModel) {
         this.settingsManager = settingsManager;
         tabIdentifier = panelIdent;
         this.logPanelPreferenceModel = logPanelPreferenceModel;
@@ -62,19 +61,15 @@
         getCancelButton().addActionListener(e -> hidePanel());
     }
 
-    //~ Methods =================================================================
+    // ~ Methods =================================================================
 
     protected TreeModel createTreeModel() {
-        final DefaultMutableTreeNode rootNode =
-            new DefaultMutableTreeNode("Preferences");
+        final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Preferences");
         DefaultTreeModel model = new DefaultTreeModel(rootNode);
 
-        DefaultMutableTreeNode visuals =
-            new DefaultMutableTreeNode(new VisualsPrefPanel());
-        DefaultMutableTreeNode formatting =
-            new DefaultMutableTreeNode(new FormattingPanel());
-        DefaultMutableTreeNode columns =
-            new DefaultMutableTreeNode(new ColumnSelectorPanel());
+        DefaultMutableTreeNode visuals = new DefaultMutableTreeNode(new VisualsPrefPanel());
+        DefaultMutableTreeNode formatting = new DefaultMutableTreeNode(new FormattingPanel());
+        DefaultMutableTreeNode columns = new DefaultMutableTreeNode(new ColumnSelectorPanel());
 
         rootNode.add(visuals);
         rootNode.add(formatting);
@@ -83,7 +78,7 @@
         return model;
     }
 
-    //~ Inner Classes ===========================================================
+    // ~ Inner Classes ===========================================================
 
     /**
      * Allows the user to choose which columns to display.
@@ -91,50 +86,53 @@
      * @author Paul Smith
      */
     public class ColumnSelectorPanel extends BasicPrefPanel {
-        //~ Constructors ==========================================================
+        // ~ Constructors ==========================================================
 
         ColumnSelectorPanel() {
             super("Columns");
             initComponents();
         }
 
-        //~ Methods ===============================================================
+        // ~ Methods ===============================================================
 
         private void initComponents() {
             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 
             Box columnBox = new Box(BoxLayout.Y_AXIS);
 
-            //		columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Displayed Columns"));
+            //		columnBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Displayed
+            // Columns"));
             final JList columnList = new JList();
             columnList.setVisibleRowCount(17);
 
-            AbstractConfiguration readOnlyCombinedConfig = settingsManager.getCombinedSettingsForRecevierTab(tabIdentifier);
+            AbstractConfiguration readOnlyCombinedConfig =
+                    settingsManager.getCombinedSettingsForRecevierTab(tabIdentifier);
 
-//            String[] columnsOrder = readOnlyCombinedConfig.getStringArray( "table.columns.order" );
-//
-//            for (Object o : preferenceModel.getColumns()) {
-//                TableColumn col = (TableColumn) o;
-//                Enumeration enumeration = columnListModel.elements();
-//                boolean found = false;
-//                while (enumeration.hasMoreElements()) {
-//                    TableColumn thisCol = (TableColumn) enumeration.nextElement();
-//                    if (thisCol.getHeaderValue().equals(col.getHeaderValue())) {
-//                        found = true;
-//                    }
-//                }
-//                if (!found) {
-//                    columnListModel.addElement(col);
-//                }
-//            }
+            //            String[] columnsOrder = readOnlyCombinedConfig.getStringArray( "table.columns.order" );
+            //
+            //            for (Object o : preferenceModel.getColumns()) {
+            //                TableColumn col = (TableColumn) o;
+            //                Enumeration enumeration = columnListModel.elements();
+            //                boolean found = false;
+            //                while (enumeration.hasMoreElements()) {
+            //                    TableColumn thisCol = (TableColumn) enumeration.nextElement();
+            //                    if (thisCol.getHeaderValue().equals(col.getHeaderValue())) {
+            //                        found = true;
+            //                    }
+            //                }
+            //                if (!found) {
+            //                    columnListModel.addElement(col);
+            //                }
+            //            }
 
             columnList.setModel(columnListModel);
 
             CheckListCellRenderer cellRenderer = new CheckListCellRenderer() {
                 protected boolean isSelected(Object value) {
                     return true;
-//                    return LogPanelPreferencePanel.this.preferenceModel.isColumnVisible((TableColumn)
-//                        value);
+                    //                    return
+                    // LogPanelPreferencePanel.this.preferenceModel.isColumnVisible((TableColumn)
+                    //                        value);
                 }
             };
 
@@ -144,7 +142,7 @@
 
                     if (i >= 0) {
                         Object column = columnListModel.get(i);
-//                        preferenceModel.toggleColumn(((TableColumn) column));
+                        //                        preferenceModel.toggleColumn(((TableColumn) column));
                     }
                 }
             });
@@ -152,11 +150,12 @@
             setAsDefaultsButton.addActionListener(actionEvent -> {
                 List selectedColumns = new ArrayList();
                 for (int i = 0; i < columnListModel.getSize(); i++) {
-//                    if (preferenceModel.isColumnVisible((TableColumn) columnListModel.get(i))) {
-//                        selectedColumns.add(((TableColumn) columnListModel.get(i)).getHeaderValue());
-//                    }
+                    //                    if (preferenceModel.isColumnVisible((TableColumn) columnListModel.get(i))) {
+                    //                        selectedColumns.add(((TableColumn)
+                    // columnListModel.get(i)).getHeaderValue());
+                    //                    }
                 }
-//                appPreferenceModel.setDefaultColumnNames(selectedColumns);
+                //                appPreferenceModel.setDefaultColumnNames(selectedColumns);
             });
             columnList.setCellRenderer(cellRenderer);
             columnBox.add(new JScrollPane(columnList));
@@ -172,19 +171,18 @@
      * available for the columns etc.
      */
     private class FormattingPanel extends BasicPrefPanel {
-        //~ Instance fields =======================================================
+        // ~ Instance fields =======================================================
 
         private JTextField customFormatText = new JTextField("", 10);
         private JTextField loggerPrecision = new JTextField(10);
         private JRadioButton rdCustom = new JRadioButton("Custom Format ");
         private final JRadioButton rdISO =
-            new JRadioButton(
-                "<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss) </html>");
+                new JRadioButton("<html><b>Fast</b> ISO 8601 format (yyyy-MM-dd HH:mm:ss) </html>");
         private final JTextField timeZone = new JTextField(10);
         private final JRadioButton rdLevelIcons = new JRadioButton("Icons ");
         private final JRadioButton rdLevelText = new JRadioButton("Text ");
 
-        //~ Constructors ==========================================================
+        // ~ Constructors ==========================================================
 
         private FormattingPanel() {
             super("Formatting");
@@ -192,19 +190,17 @@
             setupListeners();
         }
 
-        //~ Methods ===============================================================
+        // ~ Methods ===============================================================
 
         private void initComponents() {
             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 
             AbstractConfiguration config = settingsManager.getCombinedSettingsForRecevierTab(tabIdentifier);
 
-
             JPanel dateFormatPanel = new JPanel();
             dateFormatPanel.setLayout(new BoxLayout(dateFormatPanel, BoxLayout.Y_AXIS));
             dateFormatPanel.setBorder(
-                BorderFactory.createTitledBorder(
-                    BorderFactory.createEtchedBorder(), "Timestamp"));
+                    BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Timestamp"));
 
             ButtonGroup bgDateFormat = new ButtonGroup();
 
@@ -220,19 +216,19 @@
                 rdFormat.setHorizontalTextPosition(SwingConstants.RIGHT);
                 rdFormat.setAlignmentX(Component.LEFT_ALIGNMENT);
 
-//                rdFormat.addActionListener(e -> {
-//                    preferenceModel.setDateFormatPattern(format);
-//                    customFormatText.setEnabled(rdCustom.isSelected());
-//                    rdLast = rdFormat;
-//                });
-                //update based on external changes to dateformatpattern (column context
-                //menu)
-//                preferenceModel.addPropertyChangeListener(
-//                    "dateFormatPattern", evt -> {
-//                        rdFormat.setSelected(
-//                            preferenceModel.getDateFormatPattern().equals(format));
-//                        rdLast = rdFormat;
-//                    });
+                //                rdFormat.addActionListener(e -> {
+                //                    preferenceModel.setDateFormatPattern(format);
+                //                    customFormatText.setEnabled(rdCustom.isSelected());
+                //                    rdLast = rdFormat;
+                //                });
+                // update based on external changes to dateformatpattern (column context
+                // menu)
+                //                preferenceModel.addPropertyChangeListener(
+                //                    "dateFormatPattern", evt -> {
+                //                        rdFormat.setSelected(
+                //                            preferenceModel.getDateFormatPattern().equals(format));
+                //                        rdLast = rdFormat;
+                //                    });
 
                 dateFormatPanel.add(rdFormat);
                 bgDateFormat.add(rdFormat);
@@ -244,13 +240,13 @@
             customFormatText.setEnabled(false);
 
             bgDateFormat.add(rdCustom);
-//            rdCustom.setSelected(preferenceModel.isCustomDateFormat());
-//
-//            // add a custom date format
-//            if (preferenceModel.isCustomDateFormat()) {
-//                customFormatText.setText(preferenceModel.getDateFormatPattern());
-//                customFormatText.setEnabled(true);
-//            }
+            //            rdCustom.setSelected(preferenceModel.isCustomDateFormat());
+            //
+            //            // add a custom date format
+            //            if (preferenceModel.isCustomDateFormat()) {
+            //                customFormatText.setText(preferenceModel.getDateFormatPattern());
+            //                customFormatText.setEnabled(true);
+            //            }
 
             JPanel customPanel = new JPanel();
             customPanel.setLayout(new BoxLayout(customPanel, BoxLayout.X_AXIS));
@@ -271,11 +267,8 @@
             add(dateFormatPanel);
 
             JPanel levelFormatPanel = new JPanel();
-            levelFormatPanel.setLayout(
-                new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
-            levelFormatPanel.setBorder(
-                BorderFactory.createTitledBorder(
-                    BorderFactory.createEtchedBorder(), "Level"));
+            levelFormatPanel.setLayout(new BoxLayout(levelFormatPanel, BoxLayout.Y_AXIS));
+            levelFormatPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Level"));
             levelFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
 
             ButtonGroup bgLevel = new ButtonGroup();
@@ -290,17 +283,14 @@
             add(levelFormatPanel);
 
             JPanel loggerFormatPanel = new JPanel();
-            loggerFormatPanel.setLayout(
-                new BoxLayout(loggerFormatPanel, BoxLayout.Y_AXIS));
-            loggerFormatPanel.setBorder(
-                BorderFactory.createTitledBorder(
-                    BorderFactory.createEtchedBorder(), "Logger"));
+            loggerFormatPanel.setLayout(new BoxLayout(loggerFormatPanel, BoxLayout.Y_AXIS));
+            loggerFormatPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Logger"));
             loggerFormatPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
 
             loggerFormatPanel.add(Box.createVerticalStrut(3));
 
             final JLabel precisionLabel =
-                new JLabel("Number of package levels to hide (or blank to display full logger)");
+                    new JLabel("Number of package levels to hide (or blank to display full logger)");
 
             loggerFormatPanel.add(precisionLabel);
             loggerFormatPanel.add(Box.createVerticalStrut(5));
@@ -316,87 +306,88 @@
          */
         private void reset() {
 
-//            if (preferenceModel.isCustomDateFormat()) {
-//                customFormatText.setText(preferenceModel.getDateFormatPattern());
-//            } else {
-//                if (rdLast != null) {
-//                    rdLast.setSelected(true);
-//                }
-//                customFormatText.setEnabled(false);
-//            }
-//
-//            loggerPrecision.setText(preferenceModel.getLoggerPrecision());
-//            timeZone.setText(preferenceModel.getTimeZone());
+            //            if (preferenceModel.isCustomDateFormat()) {
+            //                customFormatText.setText(preferenceModel.getDateFormatPattern());
+            //            } else {
+            //                if (rdLast != null) {
+            //                    rdLast.setSelected(true);
+            //                }
+            //                customFormatText.setEnabled(false);
+            //            }
+            //
+            //            loggerPrecision.setText(preferenceModel.getLoggerPrecision());
+            //            timeZone.setText(preferenceModel.getTimeZone());
         }
 
         /*
          * Commit text fields to model
          */
         private void commit() {
-//            if (rdCustom.isSelected()) {
-//                preferenceModel.setDateFormatPattern(customFormatText.getText());
-//            }
-//            preferenceModel.setLoggerPrecision(loggerPrecision.getText());
-//            preferenceModel.setTimeZone(timeZone.getText());
+            //            if (rdCustom.isSelected()) {
+            //                preferenceModel.setDateFormatPattern(customFormatText.getText());
+            //            }
+            //            preferenceModel.setLoggerPrecision(loggerPrecision.getText());
+            //            preferenceModel.setTimeZone(timeZone.getText());
         }
 
         /**
          * DOCUMENT ME!
          */
         private void setupListeners() {
-//            getOkButton().addActionListener(evt -> commit());
-//
-//            getCancelButton().addActionListener(evt -> reset());
-//
-//            rdCustom.addActionListener(e -> {
-//                customFormatText.setEnabled(rdCustom.isSelected());
-//                customFormatText.grabFocus();
-//            });
-//
-//            //a second?? listener for dateformatpattern
-//            preferenceModel.addPropertyChangeListener(
-//                "dateFormatPattern", evt -> {
-//                    /**
-//                     * we need to make sure we are not reacting to the user typing, so only do this
-//                     * if the text box is not the same as the model
-//                     */
-//                    if (
-//                        preferenceModel.isCustomDateFormat()
-//                            && !customFormatText.getText().equals(
-//                            evt.getNewValue().toString())) {
-//                        customFormatText.setText(preferenceModel.getDateFormatPattern());
-//                        rdCustom.setSelected(true);
-//                        customFormatText.setEnabled(true);
-//                    } else {
-//                        rdCustom.setSelected(false);
-//                    }
-//                });
-//
-//            rdISO.addActionListener(e -> {
-//                preferenceModel.setDateFormatPattern("ISO8601");
-//                customFormatText.setEnabled(rdCustom.isSelected());
-//                rdLast = rdISO;
-//            });
-//            preferenceModel.addPropertyChangeListener(
-//                "dateFormatPattern", evt -> {
-//                    rdISO.setSelected(preferenceModel.isUseISO8601Format());
-//                    rdLast = rdISO;
-//                });
-//            preferenceModel.addPropertyChangeListener(
-//                "dateFormatTimeZone", evt -> timeZone.setText(preferenceModel.getTimeZone())
-//            );
-//
-//            ActionListener levelIconListener = e -> preferenceModel.setLevelIcons(rdLevelIcons.isSelected());
-//
-//            rdLevelIcons.addActionListener(levelIconListener);
-//            rdLevelText.addActionListener(levelIconListener);
-//
-//            preferenceModel.addPropertyChangeListener(
-//                "levelIcons", evt -> {
-//                    boolean value = (Boolean) evt.getNewValue();
-//                    rdLevelIcons.setSelected(value);
-//                    rdLevelText.setSelected(!value);
-//                });
+            //            getOkButton().addActionListener(evt -> commit());
+            //
+            //            getCancelButton().addActionListener(evt -> reset());
+            //
+            //            rdCustom.addActionListener(e -> {
+            //                customFormatText.setEnabled(rdCustom.isSelected());
+            //                customFormatText.grabFocus();
+            //            });
+            //
+            //            //a second?? listener for dateformatpattern
+            //            preferenceModel.addPropertyChangeListener(
+            //                "dateFormatPattern", evt -> {
+            //                    /**
+            //                     * we need to make sure we are not reacting to the user typing, so only do this
+            //                     * if the text box is not the same as the model
+            //                     */
+            //                    if (
+            //                        preferenceModel.isCustomDateFormat()
+            //                            && !customFormatText.getText().equals(
+            //                            evt.getNewValue().toString())) {
+            //                        customFormatText.setText(preferenceModel.getDateFormatPattern());
+            //                        rdCustom.setSelected(true);
+            //                        customFormatText.setEnabled(true);
+            //                    } else {
+            //                        rdCustom.setSelected(false);
+            //                    }
+            //                });
+            //
+            //            rdISO.addActionListener(e -> {
+            //                preferenceModel.setDateFormatPattern("ISO8601");
+            //                customFormatText.setEnabled(rdCustom.isSelected());
+            //                rdLast = rdISO;
+            //            });
+            //            preferenceModel.addPropertyChangeListener(
+            //                "dateFormatPattern", evt -> {
+            //                    rdISO.setSelected(preferenceModel.isUseISO8601Format());
+            //                    rdLast = rdISO;
+            //                });
+            //            preferenceModel.addPropertyChangeListener(
+            //                "dateFormatTimeZone", evt -> timeZone.setText(preferenceModel.getTimeZone())
+            //            );
+            //
+            //            ActionListener levelIconListener = e ->
+            // preferenceModel.setLevelIcons(rdLevelIcons.isSelected());
+            //
+            //            rdLevelIcons.addActionListener(levelIconListener);
+            //            rdLevelText.addActionListener(levelIconListener);
+            //
+            //            preferenceModel.addPropertyChangeListener(
+            //                "levelIcons", evt -> {
+            //                    boolean value = (Boolean) evt.getNewValue();
+            //                    rdLevelIcons.setSelected(value);
+            //                    rdLevelText.setSelected(!value);
+            //                });
         }
     }
 
@@ -408,27 +399,22 @@
      * @version $Revision$, $Date$
      */
     private class VisualsPrefPanel extends BasicPrefPanel {
-        //~ Instance fields =======================================================
+        // ~ Instance fields =======================================================
 
-        private final JCheckBox detailPanelVisible =
-            new JCheckBox("Show Event Detail panel");
+        private final JCheckBox detailPanelVisible = new JCheckBox("Show Event Detail panel");
 
-        private final JCheckBox loggerTreePanel =
-            new JCheckBox("Show Logger Tree");
+        private final JCheckBox loggerTreePanel = new JCheckBox("Show Logger Tree");
         private final JCheckBox wrapMessage = new JCheckBox("Wrap message field (display multi-line rows) ");
         private final JCheckBox searchResultsVisible = new JCheckBox("Display find results in details panel ");
         private final JCheckBox highlightSearchMatchText = new JCheckBox("Highlight find match text ");
-        private final JCheckBox scrollToBottom =
-            new JCheckBox("Scroll to bottom (view tracks with new events)");
+        private final JCheckBox scrollToBottom = new JCheckBox("Scroll to bottom (view tracks with new events)");
         private final JCheckBox showMillisDeltaAsGap =
-            new JCheckBox("Display timestamp delta between events as row gap");
-        private final JCheckBox toolTips =
-            new JCheckBox("Show Event Detail Tooltips");
-        private final JCheckBox thumbnailBarToolTips =
-            new JCheckBox("Show Thumbnail Bar Tooltips");
+                new JCheckBox("Display timestamp delta between events as row gap");
+        private final JCheckBox toolTips = new JCheckBox("Show Event Detail Tooltips");
+        private final JCheckBox thumbnailBarToolTips = new JCheckBox("Show Thumbnail Bar Tooltips");
         private final JEditorPane clearTableExpression = new JEditorPane();
 
-        //~ Constructors ==========================================================
+        // ~ Constructors ==========================================================
 
         /**
          * Creates a new VisualsPrefPanel object.
@@ -439,7 +425,7 @@
             setupListeners();
         }
 
-        //~ Methods ===============================================================
+        // ~ Methods ===============================================================
 
         /**
          * DOCUMENT ME!
@@ -489,16 +475,17 @@
 
             wrapMessage.addActionListener(e -> logPanelPreferenceModel.setWrapMessage(wrapMessage.isSelected()));
 
-            searchResultsVisible.addActionListener(e -> logPanelPreferenceModel.setSearchResultsVisible(searchResultsVisible.isSelected()));
+            searchResultsVisible.addActionListener(
+                    e -> logPanelPreferenceModel.setSearchResultsVisible(searchResultsVisible.isSelected()));
 
-            highlightSearchMatchText.addActionListener(e -> logPanelPreferenceModel.setHighlightSearchMatchText(highlightSearchMatchText.isSelected()));
+            highlightSearchMatchText.addActionListener(
+                    e -> logPanelPreferenceModel.setHighlightSearchMatchText(highlightSearchMatchText.isSelected()));
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.WRAP_MSG)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    wrapMessage.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.WRAP_MSG)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                wrapMessage.setSelected(value);
+            });
 
             tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
                 if (!evt.getPropertyName().equals(LogPanelPreferenceModel.SEARCH_RESULTS_VISIBLE)) return;
@@ -506,95 +493,94 @@
                 searchResultsVisible.setSelected(value);
             });
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.HIGHLIGHT_SEARCH_MATCH_TEXT)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    highlightSearchMatchText.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.HIGHLIGHT_SEARCH_MATCH_TEXT)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                highlightSearchMatchText.setSelected(value);
+            });
 
             toolTips.addActionListener(e -> logPanelPreferenceModel.setToolTipsVisible(toolTips.isSelected()));
 
-            thumbnailBarToolTips.addActionListener(e -> logPanelPreferenceModel.setThumbnailBarToolTipsVisible(thumbnailBarToolTips.isSelected()));
+            thumbnailBarToolTips.addActionListener(
+                    e -> logPanelPreferenceModel.setThumbnailBarToolTipsVisible(thumbnailBarToolTips.isSelected()));
 
-            getOkButton().addActionListener(e -> logPanelPreferenceModel.setClearTableExpression(clearTableExpression.getText().trim()));
+            getOkButton()
+                    .addActionListener(e -> logPanelPreferenceModel.setClearTableExpression(
+                            clearTableExpression.getText().trim()));
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.TOOL_TIPS_VISIBLE)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    toolTips.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.TOOL_TIPS_VISIBLE)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                toolTips.setSelected(value);
+            });
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.THUMBNAIL_BAR_TOOL_TIPS_VISIBLE)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    thumbnailBarToolTips.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.THUMBNAIL_BAR_TOOL_TIPS_VISIBLE)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                thumbnailBarToolTips.setSelected(value);
+            });
 
-            detailPanelVisible.addActionListener(e -> logPanelPreferenceModel.setDetailPaneVisible(detailPanelVisible.isSelected()));
+            detailPanelVisible.addActionListener(
+                    e -> logPanelPreferenceModel.setDetailPaneVisible(detailPanelVisible.isSelected()));
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    detailPanelVisible.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.DETAIL_PANE_VISIBLE)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                detailPanelVisible.setSelected(value);
+            });
 
-            scrollToBottom.addActionListener(e -> logPanelPreferenceModel.setScrollToBottom(scrollToBottom.isSelected()));
+            scrollToBottom.addActionListener(
+                    e -> logPanelPreferenceModel.setScrollToBottom(scrollToBottom.isSelected()));
 
-            showMillisDeltaAsGap.addActionListener(e -> logPanelPreferenceModel.setShowMillisDeltaAsGap(showMillisDeltaAsGap.isSelected()));
+            showMillisDeltaAsGap.addActionListener(
+                    e -> logPanelPreferenceModel.setShowMillisDeltaAsGap(showMillisDeltaAsGap.isSelected()));
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                if(!evt.getPropertyName().equals(LogPanelPreferenceModel.SHOW_MILLIS_DELTA_AS_GAP)) return;
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.SHOW_MILLIS_DELTA_AS_GAP)) return;
                 boolean value = (Boolean) evt.getPropertyValue();
                 showMillisDeltaAsGap.setSelected(value);
             });
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.SCROLL_TO_BOTTOM)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    scrollToBottom.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.SCROLL_TO_BOTTOM)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                scrollToBottom.setSelected(value);
+            });
 
-            loggerTreePanel.addActionListener(e -> logPanelPreferenceModel.setLogTreePanelVisible(loggerTreePanel.isSelected()));
+            loggerTreePanel.addActionListener(
+                    e -> logPanelPreferenceModel.setLogTreePanelVisible(loggerTreePanel.isSelected()));
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) return;
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    loggerTreePanel.setSelected(value);
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.LOG_TREE_PANEL_VISIBLE)) return;
+                boolean value = (Boolean) evt.getPropertyValue();
+                loggerTreePanel.setSelected(value);
+            });
 
-//            preferenceModel.addPropertyChangeListener("columns", evt -> {
-//                List cols = (List) evt.getNewValue();
-//                for (Object col1 : cols) {
-//                    TableColumn col = (TableColumn) col1;
-//                    Enumeration enumeration = columnListModel.elements();
-//                    boolean found = false;
-//                    while (enumeration.hasMoreElements()) {
-//                        TableColumn thisCol = (TableColumn) enumeration.nextElement();
-//                        if (thisCol.getHeaderValue().equals(col.getHeaderValue())) {
-//                            found = true;
-//                        }
-//                    }
-//                    if (!found) {
-//                        columnListModel.addElement(col);
-//                        columnListModel.fireContentsChanged();
-//                    }
-//                }
-//            });
-//
-//            preferenceModel.addPropertyChangeListener(
-//                "visibleColumns", evt -> columnListModel.fireContentsChanged());
+            //            preferenceModel.addPropertyChangeListener("columns", evt -> {
+            //                List cols = (List) evt.getNewValue();
+            //                for (Object col1 : cols) {
+            //                    TableColumn col = (TableColumn) col1;
+            //                    Enumeration enumeration = columnListModel.elements();
+            //                    boolean found = false;
+            //                    while (enumeration.hasMoreElements()) {
+            //                        TableColumn thisCol = (TableColumn) enumeration.nextElement();
+            //                        if (thisCol.getHeaderValue().equals(col.getHeaderValue())) {
+            //                            found = true;
+            //                        }
+            //                    }
+            //                    if (!found) {
+            //                        columnListModel.addElement(col);
+            //                        columnListModel.fireContentsChanged();
+            //                    }
+            //                }
+            //            });
+            //
+            //            preferenceModel.addPropertyChangeListener(
+            //                "visibleColumns", evt -> columnListModel.fireContentsChanged());
 
-            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY,
-                evt -> {
-                    if(!evt.getPropertyName().equals(LogPanelPreferenceModel.CLEAR_TABLE_EXPRESSION)) return;
-                    clearTableExpression.setText(evt.getPropertyValue().toString());
-                });
+            tabConfig.addEventListener(ConfigurationEvent.SET_PROPERTY, evt -> {
+                if (!evt.getPropertyName().equals(LogPanelPreferenceModel.CLEAR_TABLE_EXPRESSION)) return;
+                clearTableExpression.setText(evt.getPropertyValue().toString());
+            });
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/splash/ChainsawSplash.java b/src/main/java/org/apache/log4j/chainsaw/components/splash/ChainsawSplash.java
index f3541e0..875e1b3 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/splash/ChainsawSplash.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/splash/ChainsawSplash.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,22 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- * @author Paul Smith &lt;psmith@apache.org&gt;
- *
- */
 package org.apache.log4j.chainsaw.components.splash;
 
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.swing.*;
 import java.awt.*;
 import java.util.HashSet;
 import java.util.Set;
-
+import javax.swing.*;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A simple splash screen to be used at startup, while everything get's initialized.
@@ -49,11 +42,10 @@
 
         JLabel text = new JLabel("Chainsaw v2", SwingConstants.CENTER);
         Font textFont = null;
-        String[] preferredFontNames = new String[]{"Arial", "Helvetica", "SansSerif"};
+        String[] preferredFontNames = new String[] {"Arial", "Helvetica", "SansSerif"};
 
         Set<String> availableFontNames = new HashSet<>();
-        Font[] allFonts =
-            GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+        Font[] allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
 
         for (Font allFont : allFonts) {
             availableFontNames.add(allFont.getName());
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/splash/SplashViewer.java b/src/main/java/org/apache/log4j/chainsaw/components/splash/SplashViewer.java
index 36fd4f4..2cb8216 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/splash/SplashViewer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/splash/SplashViewer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,9 +16,8 @@
  */
 package org.apache.log4j.chainsaw.components.splash;
 
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-
 import java.awt.*;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
 
 public class SplashViewer {
     private ChainsawSplash splash;
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/ChainsawTabbedPane.java b/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/ChainsawTabbedPane.java
index de9bfb6..8dcd711 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/ChainsawTabbedPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/ChainsawTabbedPane.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- * @author Paul Smith &lt;psmith@apache.org&gt;
- *
- */
 package org.apache.log4j.chainsaw.components.tabbedpane;
 
 import com.owlike.genson.Genson;
+import java.awt.*;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import javax.swing.*;
 import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
 import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
 import org.apache.log4j.chainsaw.prefs.SettingsListener;
@@ -29,14 +30,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import javax.swing.*;
-import java.awt.*;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.nio.file.Files;
-
-
 /**
  * The only reason this class is needed is because
  * of a stupid 'issue' with the JTabbedPane.
@@ -55,7 +48,6 @@
  * @author Paul Smith &lt;psmith@apache.org&gt;
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
-
 public class ChainsawTabbedPane extends JTabbedPane implements SettingsListener {
     private static Logger logger = LogManager.getLogger(ChainsawTabbedPane.class);
     public SavableTabSetting tabSetting;
@@ -104,8 +96,7 @@
         super.fireStateChanged();
     }
 
-    public void addANewTab(
-        String name, JComponent component, Icon icon, String tooltip) {
+    public void addANewTab(String name, JComponent component, Icon icon, String tooltip) {
         super.insertTab(name, icon, component, tooltip, getTabCount());
         super.fireStateChanged();
     }
@@ -163,7 +154,6 @@
      * If the file doesn't exist, all three panels should be
      * shown as the default setting....
      */
-
     public void loadSettings(LoadSettingsEvent event) {
         File file = new File(SettingsManager.getSettingsDirectory(), "tab-settings.json");
         Genson genson = new Genson();
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/SavableTabSetting.java b/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/SavableTabSetting.java
index 496cdfe..28f0e6c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/SavableTabSetting.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tabbedpane/SavableTabSetting.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -20,12 +20,11 @@
  * This class is used to in saving and loading the tab settings
  * of Chainsaw....
  */
-
 public class SavableTabSetting {
     private boolean welcome = false;
     private boolean chainsawLog = false;
     private boolean zeroConf = false;
-    //not used currently, but leaving it here to prevent xstream exception for older clients
+    // not used currently, but leaving it here to prevent xstream exception for older clients
     private boolean dragdrop = false;
 
     public void setWelcome(boolean welcome) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/Generator.java b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/Generator.java
index 64ea0de..f85670e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/Generator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/Generator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,19 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.tutorial;
 
 import java.time.Instant;
-import java.util.Random;
-
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
 import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 
-
 /**
  * Class designed to stress, and/or test the Chainsaw GUI by sending it
  * lots of Logging Events.
@@ -34,7 +30,7 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public class Generator extends ChainsawReceiverSkeleton implements Runnable {
-    private static final String logger1 ="com.mycompany.mycomponentA";
+    private static final String logger1 = "com.mycompany.mycomponentA";
     private static final String logger2 = "com.mycompany.mycomponentB";
     private static final String logger3 = "com.someothercompany.corecomponent";
     private final String baseString;
@@ -50,8 +46,7 @@
         randomWordGenerator = new RandomWordGenerator();
     }
 
-    private ChainsawLoggingEvent createEvent(
-        Level level, String logger, String msg, Throwable t) {
+    private ChainsawLoggingEvent createEvent(Level level, String logger, String msg, Throwable t) {
         builder.clear();
         builder.setLogger(logger)
                 .setTimestamp(Instant.now())
@@ -67,30 +62,20 @@
 
         while (!shutdown) {
             append(createEvent(Level.TRACE, logger1, "tracemsg" + i++, null));
-            append(
-                createEvent(
-                    Level.DEBUG, logger1, "debugmsg " + i++ + randomWordGenerator.generateSentence(), null));
+            append(createEvent(Level.DEBUG, logger1, "debugmsg " + i++ + randomWordGenerator.generateSentence(), null));
 
             append(createEvent(Level.INFO, logger1, "infomsg " + i++, null));
             append(createEvent(Level.WARN, logger1, "warnmsg " + i++, null));
             append(createEvent(Level.ERROR, logger1, "errormsg " + i++, null));
             append(createEvent(Level.FATAL, logger1, "fatalmsg " + i++, new Exception("someexception-" + baseString)));
             append(createEvent(Level.TRACE, logger2, "tracemsg" + i++, null));
-            append(
-                createEvent(
-                    Level.DEBUG, logger2,
-                    "debugmsg " + i++ + randomWordGenerator.generateSentence(),
-                    null));
+            append(createEvent(Level.DEBUG, logger2, "debugmsg " + i++ + randomWordGenerator.generateSentence(), null));
             append(createEvent(Level.INFO, logger2, "infomsg " + i++, null));
             append(createEvent(Level.WARN, logger2, "warnmsg " + i++, null));
             append(createEvent(Level.ERROR, logger2, "errormsg " + i++, null));
             append(createEvent(Level.FATAL, logger2, "fatalmsg " + i++, new Exception("someexception-" + baseString)));
             append(createEvent(Level.TRACE, logger3, "tracemsg" + i++, null));
-            append(
-                createEvent(
-                    Level.DEBUG, logger3,
-                    "debugmsg " + i++ + randomWordGenerator.generateSentence(),
-                    null));
+            append(createEvent(Level.DEBUG, logger3, "debugmsg " + i++ + randomWordGenerator.generateSentence(), null));
             append(createEvent(Level.INFO, logger3, "infomsg " + i++, null));
             append(createEvent(Level.WARN, logger3, "warnmsg " + i++, null));
             append(createEvent(Level.ERROR, logger3, "errormsg " + i++, null));
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/GeneratorBeanInfo.java b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/GeneratorBeanInfo.java
index 2ee1cba..ed00b24 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/GeneratorBeanInfo.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/GeneratorBeanInfo.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -19,7 +19,6 @@
 import java.beans.PropertyDescriptor;
 import java.beans.SimpleBeanInfo;
 
-
 /**
  * A BeanInfo class to be used as meta-data about the
  * Generator plugin
@@ -32,7 +31,7 @@
      */
     public PropertyDescriptor[] getPropertyDescriptors() {
         try {
-            return new PropertyDescriptor[]{
+            return new PropertyDescriptor[] {
                 new PropertyDescriptor("name", Generator.class),
             };
         } catch (Exception e) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/RandomWordGenerator.java b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/RandomWordGenerator.java
index 7c02c82..214be32 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/RandomWordGenerator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/RandomWordGenerator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,7 +17,6 @@
 package org.apache.log4j.chainsaw.components.tutorial;
 
 import java.security.SecureRandom;
-import java.util.Random;
 
 public class RandomWordGenerator {
     SecureRandom random = new SecureRandom();
@@ -30,7 +29,7 @@
         "ra", "re", "ri", "ro", "ru",
         "da", "de", "di", "do", "du",
         "fa", "fe", "fi", "fo", "fu",
-        "sa", "se", "fi", "so",  "su"
+        "sa", "se", "fi", "so", "su"
     };
 
     public String generateWord(int length) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
index b9d6c86..497271c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/tutorial/TutorialFrame.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,25 +16,24 @@
  */
 package org.apache.log4j.chainsaw.components.tutorial;
 
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.ChainsawStatusBar;
-import org.apache.log4j.chainsaw.JTextComponentFormatter;
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.log4j.chainsaw.ReceiverEventListener;
-import org.apache.log4j.chainsaw.components.elements.SmallButton;
-import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.beans.PropertyChangeListener;
 import java.io.IOException;
 import java.util.List;
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.ChainsawStatusBar;
+import org.apache.log4j.chainsaw.JTextComponentFormatter;
+import org.apache.log4j.chainsaw.ReceiverEventListener;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.components.elements.SmallToggleButton;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.logui.LogUI;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class TutorialFrame extends JFrame {
     public static final String LABEL_TUTORIAL_STARTED = "TutorialStarted";
@@ -45,7 +44,11 @@
     private final List<ReceiverEventListener> receiverEventListeners;
     private final LogUI logUI;
 
-    public TutorialFrame(List<ChainsawReceiver> receivers, List<ReceiverEventListener> receiverEventListeners, LogUI logUI, ChainsawStatusBar statusBar) {
+    public TutorialFrame(
+            List<ChainsawReceiver> receivers,
+            List<ReceiverEventListener> receiverEventListeners,
+            LogUI logUI,
+            ChainsawStatusBar statusBar) {
         super("Chainsaw Tutorial");
         this.receivers = receivers;
         this.receiverEventListeners = receiverEventListeners;
@@ -55,24 +58,24 @@
     }
 
     public void setupTutorial() {
-        SwingUtilities.invokeLater(
-            () -> {
-                Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
-                setLocation(0, getLocation().y);
+        SwingUtilities.invokeLater(() -> {
+            Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
+            setLocation(0, getLocation().y);
 
-                double chainsawwidth = 0.7;
-                double tutorialwidth = 1 - chainsawwidth;
-                setSize((int) (screen.width * chainsawwidth), getSize().height);
-                invalidate();
-                validate();
+            double chainsawwidth = 0.7;
+            double tutorialwidth = 1 - chainsawwidth;
+            setSize((int) (screen.width * chainsawwidth), getSize().height);
+            invalidate();
+            validate();
 
-                Dimension size = getSize();
-                Point loc = getLocation();
-                setSize((int) (screen.width * tutorialwidth), size.height);
-                setLocation(loc.x + size.width, loc.y);
-                setVisible(true);
-            });
+            Dimension size = getSize();
+            Point loc = getLocation();
+            setSize((int) (screen.width * tutorialwidth), size.height);
+            setLocation(loc.x + size.width, loc.y);
+            setVisible(true);
+        });
     }
+
     public void createTutorialFrame(ChainsawStatusBar statusBar) {
         Container container = getContentPane();
         container.setLayout(new BorderLayout());
@@ -98,52 +101,51 @@
         final JToolBar tutorialToolbar = createTutorialToolbar(startTutorial, stopTutorial);
 
         container.add(tutorialToolbar, BorderLayout.NORTH);
-        tutorialArea.addHyperlinkListener(
-            e -> {
-                if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-                    if (e.getDescription().equals("StartTutorial")) {
-                        startTutorial.actionPerformed(null);
-                    } else if (e.getDescription().equals("StopTutorial")) {
-                        stopTutorial.actionPerformed(null);
-                    } else {
-                        try {
-                            tutorialArea.setPage(e.getURL());
-                        } catch (IOException e1) {
-                            statusBar.setMessage("Failed to change URL for tutorial");
-                            logger.error("Failed to change the URL for the Tutorial", e1);
-                        }
+        tutorialArea.addHyperlinkListener(e -> {
+            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+                if (e.getDescription().equals("StartTutorial")) {
+                    startTutorial.actionPerformed(null);
+                } else if (e.getDescription().equals("StopTutorial")) {
+                    stopTutorial.actionPerformed(null);
+                } else {
+                    try {
+                        tutorialArea.setPage(e.getURL());
+                    } catch (IOException e1) {
+                        statusBar.setMessage("Failed to change URL for tutorial");
+                        logger.error("Failed to change the URL for the Tutorial", e1);
                     }
                 }
-            });
+            }
+        });
     }
 
     private Action createStopTutorialAction(Action startTutorial) {
         final Action stopTutorial =
-            new AbstractAction(
-                "Stop Tutorial", new ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER)) {
-                public void actionPerformed(ActionEvent e) {
-                    if (
-                        JOptionPane.showConfirmDialog(
-                            null,
-                            "This will stop all of the \"Generator\" receivers used in the Tutorial, but leave any other Receiver untouched.  Is that ok?",
-                            "Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
-                        new Thread(
-                            () -> {
-                                for( ChainsawReceiver rx : receivers){
-                                    if( rx instanceof Generator){
-                                        rx.shutdown();
-                                    }
-                                }
-                            }).start();
-                        setEnabled(false);
-                        startTutorial.putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
+                new AbstractAction("Stop Tutorial", new ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER)) {
+                    public void actionPerformed(ActionEvent e) {
+                        if (JOptionPane.showConfirmDialog(
+                                        null,
+                                        "This will stop all of the \"Generator\" receivers used in the Tutorial, but leave any other Receiver untouched.  Is that ok?",
+                                        "Confirm",
+                                        JOptionPane.YES_NO_OPTION)
+                                == JOptionPane.YES_OPTION) {
+                            new Thread(() -> {
+                                        for (ChainsawReceiver rx : receivers) {
+                                            if (rx instanceof Generator) {
+                                                rx.shutdown();
+                                            }
+                                        }
+                                    })
+                                    .start();
+                            setEnabled(false);
+                            startTutorial.putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
+                        }
                     }
-                }
-            };
+                };
 
         stopTutorial.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Removes all of the Tutorials Generator Receivers, leaving all other Receivers untouched");
+                Action.SHORT_DESCRIPTION,
+                "Removes all of the Tutorials Generator Receivers, leaving all other Receivers untouched");
 
         stopTutorial.setEnabled(false);
         return stopTutorial;
@@ -151,46 +153,45 @@
 
     private Action createStartTutorialAction() {
         final Action startTutorial =
-            new AbstractAction(
-                "Start Tutorial", new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER)) {
-                public void actionPerformed(ActionEvent e) {
-                    if (
-                        JOptionPane.showConfirmDialog(
-                            null,
-                            "This will start 3 \"Generator\" receivers for use in the Tutorial.  Is that ok?",
-                            "Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
-                        // Create and start generators
-                        Generator[] generators = {
-                            new Generator("Generator 1"),
-                            new Generator("Generator 2"),
-                            new Generator("Generator 3"),
-                        };
+                new AbstractAction("Start Tutorial", new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER)) {
+                    public void actionPerformed(ActionEvent e) {
+                        if (JOptionPane.showConfirmDialog(
+                                        null,
+                                        "This will start 3 \"Generator\" receivers for use in the Tutorial.  Is that ok?",
+                                        "Confirm",
+                                        JOptionPane.YES_NO_OPTION)
+                                == JOptionPane.YES_OPTION) {
+                            // Create and start generators
+                            Generator[] generators = {
+                                new Generator("Generator 1"),
+                                new Generator("Generator 2"),
+                                new Generator("Generator 3"),
+                            };
 
-                        for( Generator gen : generators ){
-                            logUI.addReceiver(gen);
-                            gen.start();
+                            for (Generator gen : generators) {
+                                logUI.addReceiver(gen);
+                                gen.start();
+                            }
+
+                            putValue(LABEL_TUTORIAL_STARTED, Boolean.TRUE);
+                        } else {
+                            putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
                         }
-
-                        putValue(LABEL_TUTORIAL_STARTED, Boolean.TRUE);
-                    } else {
-                        putValue(LABEL_TUTORIAL_STARTED, Boolean.FALSE);
                     }
-                }
-            };
+                };
         startTutorial.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Begins the Tutorial, starting up some Generator Receivers so you can see Chainsaw in action");
+                Action.SHORT_DESCRIPTION,
+                "Begins the Tutorial, starting up some Generator Receivers so you can see Chainsaw in action");
         return startTutorial;
     }
 
     private JToolBar createTutorialToolbar(Action startTutorial, Action stopTutorial) {
         final SmallToggleButton startButton = new SmallToggleButton(startTutorial);
-        PropertyChangeListener pcl =
-            evt -> {
-                stopTutorial.setEnabled(
+        PropertyChangeListener pcl = evt -> {
+            stopTutorial.setEnabled(
                     startTutorial.getValue(LABEL_TUTORIAL_STARTED).equals(Boolean.TRUE));
-                startButton.setSelected(stopTutorial.isEnabled());
-            };
+            startButton.setSelected(stopTutorial.isEnabled());
+        };
 
         startTutorial.addPropertyChangeListener(pcl);
         stopTutorial.addPropertyChangeListener(pcl);
@@ -202,8 +203,8 @@
             @Override
             public void receiverRemoved(ChainsawReceiver rx1) {
                 int count = 0;
-                for( ChainsawReceiver rx : receivers){
-                    if( rx instanceof Generator ){
+                for (ChainsawReceiver rx : receivers) {
+                    if (rx instanceof Generator) {
                         count++;
                     }
                 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/components/welcome/WelcomePanel.java b/src/main/java/org/apache/log4j/chainsaw/components/welcome/WelcomePanel.java
index dc98625..105c8b6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/components/welcome/WelcomePanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/components/welcome/WelcomePanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,9 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.components.welcome;
 
+import java.awt.*;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Stack;
+import javax.swing.*;
+import javax.swing.event.HyperlinkEvent;
 import org.apache.log4j.chainsaw.ChainsawConstants;
 import org.apache.log4j.chainsaw.JTextComponentFormatter;
 import org.apache.log4j.chainsaw.components.elements.SmallButton;
@@ -24,14 +29,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import javax.swing.*;
-import javax.swing.event.HyperlinkEvent;
-import java.awt.*;
-import java.io.IOException;
-import java.net.URL;
-import java.util.Stack;
-
-
 /**
  * An initial Welcome Panel that is used when Chainsaw starts up, can displays
  * a HTML pages based on URLs.
@@ -65,38 +62,37 @@
                 textInfo.setPreferredSize(new Dimension(320, 240));
                 textInfo.setPage(helpURL);
                 JTextComponentFormatter.applySystemFontAndSize(textInfo);
-                textInfo.addHyperlinkListener(
-                    e -> {
-                        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
-                            urlStack.add(textInfo.getPage());
+                textInfo.addHyperlinkListener(e -> {
+                    if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
+                        urlStack.add(textInfo.getPage());
 
-                            try {
-                                textInfo.setPage(e.getURL());
-                                urlToolbar.updateToolbar();
-                            } catch (IOException e1) {
-                                e1.printStackTrace();
-                            }
+                        try {
+                            textInfo.setPage(e.getURL());
+                            urlToolbar.updateToolbar();
+                        } catch (IOException e1) {
+                            e1.printStackTrace();
                         }
-                    });
+                    }
+                });
             } catch (Exception e) {
-                logger.error(e,e);
+                logger.error(e, e);
             }
         }
     }
 
     public void setURL(final URL url) {
-        SwingUtilities.invokeLater(
-            () -> {
-                try {
-                    urlStack.push(textInfo.getPage());
-                    textInfo.setPage(url);
-                    //not all pages displayed in the Welcome Panel are html-based (example receiver config is an xml file)..
-                    JTextComponentFormatter.applySystemFontAndSize(textInfo);
-                    urlToolbar.updateToolbar();
-                } catch (IOException e) {
-                    logger.error(e,e);
-                }
-            });
+        SwingUtilities.invokeLater(() -> {
+            try {
+                urlStack.push(textInfo.getPage());
+                textInfo.setPage(url);
+                // not all pages displayed in the Welcome Panel are html-based (example receiver config is an xml
+                // file)..
+                JTextComponentFormatter.applySystemFontAndSize(textInfo);
+                urlToolbar.updateToolbar();
+            } catch (IOException e) {
+                logger.error(e, e);
+            }
+        });
     }
 
     private class URLToolbar extends JToolBar {
@@ -106,28 +102,30 @@
             setFloatable(false);
 
             JButton home = new SmallButton.Builder()
-                .iconUrl(ChainsawIcons.ICON_HOME)
-                .action(() -> {
-                    setURL(ChainsawConstants.WELCOME_URL);
-                    urlStack.clear();
-                })
-                .shortDescription("Home").build();
+                    .iconUrl(ChainsawIcons.ICON_HOME)
+                    .action(() -> {
+                        setURL(ChainsawConstants.WELCOME_URL);
+                        urlStack.clear();
+                    })
+                    .shortDescription("Home")
+                    .build();
 
             add(home);
 
             addSeparator();
 
             previousButton = new SmallButton.Builder()
-                .iconUrl(ChainsawIcons.ICON_BACK)
-                .shortDescription("Back")
-                .disabled()
-                .action(() -> {
-                    if (urlStack.isEmpty()) {
-                        return;
-                    }
+                    .iconUrl(ChainsawIcons.ICON_BACK)
+                    .shortDescription("Back")
+                    .disabled()
+                    .action(() -> {
+                        if (urlStack.isEmpty()) {
+                            return;
+                        }
 
-                    setURL(urlStack.pop());
-                }).build();
+                        setURL(urlStack.pop());
+                    })
+                    .build();
 
             add(previousButton);
 
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 28c0e1e..5a0935a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
+++ b/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,8 +16,6 @@
  */
 package org.apache.log4j.chainsaw.dnd;
 
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
@@ -27,6 +25,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.swing.*;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -53,7 +52,6 @@
     private JComponent guiTarget;
     private Map<JComponent, DropTarget> dropTargets = new HashMap<>();
 
-
     private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
 
     /**
@@ -78,8 +76,7 @@
      * @param propertyName
      * @param listener
      */
-    public void addPropertyChangeListener(String propertyName,
-                                          PropertyChangeListener listener) {
+    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
         propertySupport.addPropertyChangeListener(propertyName, listener);
     }
 
@@ -87,13 +84,12 @@
      *
      */
     private void decorateComponent() {
-//        TODO work out a better way of decorating a component
+        //        TODO work out a better way of decorating a component
         guiTarget.setBorder(BorderFactory.createLineBorder(Color.black));
     }
 
-
     public void dragEnter(DropTargetDragEvent e) {
-        //LOG.debug(dtde);
+        // LOG.debug(dtde);
         if (isDragOk(e) == false) {
             e.rejectDrag();
             return;
@@ -103,14 +99,12 @@
         e.acceptDrag(acceptableActions);
     }
 
-
     public void dragExit(DropTargetEvent dte) {
         removeComponentDecoration();
     }
 
-
     public void dragOver(DropTargetDragEvent e) {
-        //LOG.debug(dtde);
+        // LOG.debug(dtde);
 
         if (isDragOk(e) == false) {
             e.rejectDrag();
@@ -133,11 +127,10 @@
         } catch (Exception e) {
             LOG.error("Error with DnD", e);
         }
-
     }
 
     public void dropActionChanged(DropTargetDragEvent dtde) {
-        //LOG.debug(dtde);
+        // LOG.debug(dtde);
     }
 
     /**
@@ -148,7 +141,7 @@
     }
 
     private boolean isDragOk(DropTargetDragEvent e) {
-        DataFlavor[] flavors = new DataFlavor[]{DataFlavor.javaFileListFlavor};
+        DataFlavor[] flavors = new DataFlavor[] {DataFlavor.javaFileListFlavor};
         DataFlavor chosen = null;
         for (DataFlavor flavor : flavors) {
             if (e.isDataFlavorSupported(flavor)) {
@@ -188,8 +181,7 @@
      * @param propertyName
      * @param listener
      */
-    public void removePropertyChangeListener(String propertyName,
-                                             PropertyChangeListener listener) {
+    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
         propertySupport.removePropertyChangeListener(propertyName, listener);
     }
 
diff --git a/src/main/java/org/apache/log4j/chainsaw/file/FileMenu.java b/src/main/java/org/apache/log4j/chainsaw/file/FileMenu.java
index 7cb926c..5bdcfa0 100644
--- a/src/main/java/org/apache/log4j/chainsaw/file/FileMenu.java
+++ b/src/main/java/org/apache/log4j/chainsaw/file/FileMenu.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,23 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- * @author Paul Smith &lt;psmith@apache.org&gt;
- *
- */
 package org.apache.log4j.chainsaw.file;
 
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.log4j.chainsaw.osx.OSXIntegration;
-import org.apache.log4j.chainsaw.prefs.MRUFileList;
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.net.URL;
-
+import javax.swing.*;
+import org.apache.log4j.chainsaw.logui.LogUI;
+import org.apache.log4j.chainsaw.osx.OSXIntegration;
+import org.apache.log4j.chainsaw.prefs.MRUFileList;
 
 /**
  * The complete File Menu for the main GUI, containing
@@ -59,29 +52,30 @@
         };
 
         loadLog4JAction = null;
-//            new FileLoadAction(
-//                logUI, new XMLDecoder(logUI), "Open log4j XML-formatted file (.xml or .zip)...", false);
+        //            new FileLoadAction(
+        //                logUI, new XMLDecoder(logUI), "Open log4j XML-formatted file (.xml or .zip)...", false);
 
-//        loadLog4JAction.putValue(
-//            Action.ACCELERATOR_KEY,
-//            KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
-//        loadLog4JAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_L);
-//        loadLog4JAction.putValue(Action.SHORT_DESCRIPTION, "Loads events from a local XMLLayout-formatted file ");
-//        loadLog4JAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_OPEN));
+        //        loadLog4JAction.putValue(
+        //            Action.ACCELERATOR_KEY,
+        //            KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+        //        loadLog4JAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_L);
+        //        loadLog4JAction.putValue(Action.SHORT_DESCRIPTION, "Loads events from a local XMLLayout-formatted file
+        // ");
+        //        loadLog4JAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_OPEN));
 
         loadUtilLoggingAction = null;
-//            new FileLoadAction(
-//                logUI, new UtilLoggingXMLDecoder(logUI),
-//                "Open util.logging XML-formatted file (.xml or .zip)...", false);
+        //            new FileLoadAction(
+        //                logUI, new UtilLoggingXMLDecoder(logUI),
+        //                "Open util.logging XML-formatted file (.xml or .zip)...", false);
 
         remoteLog4JAction = null;
-//            new FileLoadAction(
-//                logUI, new XMLDecoder(logUI), "Open remote log4j XML-formatted file (.xml or .zip)...",
-//                true);
+        //            new FileLoadAction(
+        //                logUI, new XMLDecoder(logUI), "Open remote log4j XML-formatted file (.xml or .zip)...",
+        //                true);
         remoteUtilLoggingAction = null;
-//            new FileLoadAction(
-//                logUI, new UtilLoggingXMLDecoder(logUI),
-//                "Open remote util.logging XML-formatted file (.xml or .zip)...", true);
+        //            new FileLoadAction(
+        //                logUI, new UtilLoggingXMLDecoder(logUI),
+        //                "Open remote util.logging XML-formatted file (.xml or .zip)...", true);
 
         saveAction = new FileSaveAction(logUI);
 
@@ -92,16 +86,16 @@
         JMenuItem remoteUtilLoggingFile = new JMenuItem(remoteUtilLoggingAction);
         JMenuItem saveFile = new JMenuItem(saveAction);
 
-        exitAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    logUI.exit();
-                }
-            };
+        exitAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                logUI.exit();
+            }
+        };
 
         exitAction.putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
         exitAction.putValue(Action.SHORT_DESCRIPTION, "Exits the Application");
         exitAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_X);
         exitAction.putValue(Action.NAME, "Exit");
@@ -109,18 +103,17 @@
         JMenuItem menuItemExit = new JMenuItem(exitAction);
 
         add(loadReceiver);
-//        add(loadLog4JFile);
-//        add(loadUtilLoggingFile);
-//        addSeparator();
-//        add(remoteLog4JFile);
-//        add(remoteUtilLoggingFile);
-//        addSeparator();
-//        add(saveFile);
-//        addSeparator();
+        //        add(loadLog4JFile);
+        //        add(loadUtilLoggingFile);
+        //        addSeparator();
+        //        add(remoteLog4JFile);
+        //        add(remoteUtilLoggingFile);
+        //        addSeparator();
+        //        add(saveFile);
+        //        addSeparator();
 
         final JMenu mrulog4j = new JMenu("MRU...");
 
-
         MRUFileList.addChangeListener(e -> buildMRUMenu(mrulog4j, logUI));
         buildMRUMenu(mrulog4j, logUI);
 
@@ -129,8 +122,6 @@
             addSeparator();
             add(menuItemExit);
         }
-
-
     }
 
     private void buildMRUMenu(final JMenu mrulog4j, final LogUI logui) {
@@ -140,13 +131,15 @@
             for (Object o : MRUFileList.log4jMRU().getMRUList()) {
                 final URL url = (URL) o;
                 // TODO work out the 'name', for local files it can't just be the full path
-                final String name = url.getProtocol().startsWith("file") ? url.getPath().substring(url.getPath().lastIndexOf('/') + 1) : url.getPath();
+                final String name = url.getProtocol().startsWith("file")
+                        ? url.getPath().substring(url.getPath().lastIndexOf('/') + 1)
+                        : url.getPath();
                 String title = (counter++) + " - " + url.toExternalForm();
                 JMenuItem menuItem = new JMenuItem(new AbstractAction(title) {
 
                     public void actionPerformed(ActionEvent e) {
-//                        FileLoadAction.importURL(logui.handler,
-//                            new XMLDecoder(), name, url);
+                        //                        FileLoadAction.importURL(logui.handler,
+                        //                            new XMLDecoder(), name, url);
                     }
                 });
                 mrulog4j.add(menuItem);
diff --git a/src/main/java/org/apache/log4j/chainsaw/file/FileSaveAction.java b/src/main/java/org/apache/log4j/chainsaw/file/FileSaveAction.java
index 079f335..57557eb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/file/FileSaveAction.java
+++ b/src/main/java/org/apache/log4j/chainsaw/file/FileSaveAction.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.file;
 
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.log4j.chainsaw.LoggingEventWrapper;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -30,10 +24,13 @@
 import java.util.Locale;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
+import javax.swing.*;
+import org.apache.log4j.chainsaw.LoggingEventWrapper;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.logui.LogUI;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * Allows the user to specify a particular file to which the current tab's
  * displayed events will be saved.
@@ -56,11 +53,11 @@
         super("Save displayed events as...");
 
         putValue(
-            Action.ACCELERATOR_KEY,
-            KeyStroke.getKeyStroke(KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
+                Action.ACCELERATOR_KEY,
+                KeyStroke.getKeyStroke(
+                        KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
         putValue(Action.MNEMONIC_KEY, KeyEvent.VK_S);
-        putValue(
-            Action.SHORT_DESCRIPTION, "Saves displayed events for the current tab");
+        putValue(Action.SHORT_DESCRIPTION, "Saves displayed events for the current tab");
         putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_SAVE_AS));
         this.parent = parent;
     }
@@ -88,18 +85,23 @@
             List v = parent.getCurrentLogPanel().getFilteredEvents();
 
             if (((v != null) && (v.size() == 0)) || (v == null)) {
-                //no events to save
+                // no events to save
                 return;
             }
 
-//            XMLLayout layout = new XMLLayout();
-//            layout.setProperties(true);
-            boolean saveAsZip = selectedFile.getName().toLowerCase(Locale.ENGLISH).endsWith(".zip");
+            //            XMLLayout layout = new XMLLayout();
+            //            layout.setProperties(true);
+            boolean saveAsZip =
+                    selectedFile.getName().toLowerCase(Locale.ENGLISH).endsWith(".zip");
             Writer writer = null;
             try {
                 if (saveAsZip) {
-                    ZipOutputStream zipOutput = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(selectedFile)));
-                    ZipEntry entry = new ZipEntry(selectedFile.getName().substring(0, selectedFile.getName().length() - ".zip".length()) + ".xml");
+                    ZipOutputStream zipOutput =
+                            new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(selectedFile)));
+                    ZipEntry entry = new ZipEntry(
+                            selectedFile
+                                            .getName()
+                                            .substring(0, selectedFile.getName().length() - ".zip".length()) + ".xml");
                     zipOutput.putNextEntry(entry);
                     writer = new OutputStreamWriter(zipOutput);
                 } else {
@@ -107,8 +109,9 @@
                 }
                 for (Object aV : v) {
                     LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) aV;
-//                    layout.setLocationInfo(loggingEventWrapper.getLoggingEvent().getThrowableInformation() != null);
-//                    writer.write(layout.format(loggingEventWrapper.getLoggingEvent()));
+                    //
+                    // layout.setLocationInfo(loggingEventWrapper.getLoggingEvent().getThrowableInformation() != null);
+                    //                    writer.write(layout.format(loggingEventWrapper.getLoggingEvent()));
                 }
             } catch (IOException ioe) {
                 logger.warn("Unable to save file", ioe);
@@ -118,7 +121,7 @@
                         writer.flush();
                         writer.close();
                     } catch (IOException e1) {
-                        //ignore
+                        // ignore
                     }
                 }
             }
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 536ebd1..edb2b9c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/filter/EventTypeEntryContainer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.chainsaw.filter;
 
-import javax.swing.*;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import javax.swing.*;
 
 /**
  * A Container class used to hold unique LoggingEvent values
diff --git a/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java b/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
index 234fbdd..0960e67 100644
--- a/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.filter;
 
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
 
-
 /**
  * This class is used as a Model for Filtering, and retains the unique entries that
  * come through over a set of LoggingEvents
@@ -29,8 +27,7 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public class FilterModel {
-    private EventTypeEntryContainer eventContainer =
-        new EventTypeEntryContainer();
+    private EventTypeEntryContainer eventContainer = new EventTypeEntryContainer();
 
     public void processNewLoggingEvent(ChainsawLoggingEvent event) {
 
@@ -51,5 +48,4 @@
     public EventTypeEntryContainer getContainer() {
         return eventContainer;
     }
-
 }
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 1edee10..3b959fd 100644
--- a/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,14 @@
  */
 package org.apache.log4j.chainsaw.help;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A helper class that assists the HelpManager by serving as a collection of
@@ -96,7 +95,7 @@
 
             try {
                 URL resourceURL = new URL(root, name);
-                URL[] urlArray = new URL[]{root, resourceURL};
+                URL[] urlArray = new URL[] {root, resourceURL};
                 logger.debug("Looking for Help resource at: {}", resourceURL.toExternalForm());
                 logger.debug("urlArray={}", Arrays.asList(urlArray));
                 return new URLClassLoader(urlArray).findResource(name);
diff --git a/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java b/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
index d2175d1..7b91912 100644
--- a/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,14 @@
  */
 package org.apache.log4j.chainsaw.help;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.log4j.chainsaw.ChainsawConstants;
-
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.io.File;
 import java.net.URL;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Singleton help manager where objects can register to display
@@ -42,21 +41,20 @@
     private final HelpLocator helpLocator = new HelpLocator();
 
     private HelpManager() {
-//    TODO setup all the base URLs in the default.properties and configure in ApplicationPreferenceModel
+        //    TODO setup all the base URLs in the default.properties and configure in ApplicationPreferenceModel
 
         try {
             if (System.getProperty("log4j.chainsaw.localDocs") != null) {
-                logger.info("Adding HelpLocator for localDocs property={}",
-                    System.getProperty("log4j.chainsaw.localDocs"));
+                logger.info(
+                        "Adding HelpLocator for localDocs property={}", System.getProperty("log4j.chainsaw.localDocs"));
                 helpLocator.installLocator(new URL(System.getProperty("log4j.chainsaw.localDocs")));
             } else if (new File("docs/api").exists()) {
                 File dir = new File("docs/api");
                 logger.info("Detected Local JavaDocs at {}", dir);
                 helpLocator.installLocator(dir.toURI().toURL());
             } else {
-                logger.warn(
-                    "Could not find any local JavaDocs, you might want to consider running 'ant javadoc'. " +
-                        "The release version will be able to access Javadocs from the Apache website.");
+                logger.warn("Could not find any local JavaDocs, you might want to consider running 'ant javadoc'. "
+                        + "The release version will be able to access Javadocs from the Apache website.");
             }
         } catch (Exception e) {
             logger.error(e);
diff --git a/src/main/java/org/apache/log4j/chainsaw/helper/OkCancelPanel.java b/src/main/java/org/apache/log4j/chainsaw/helper/OkCancelPanel.java
index 40a6e8c..10bc90c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/OkCancelPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/OkCancelPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,9 +16,8 @@
  */
 package org.apache.log4j.chainsaw.helper;
 
-import javax.swing.*;
 import java.awt.*;
-
+import javax.swing.*;
 
 public class OkCancelPanel extends JPanel {
     private final JButton cancelButton = new JButton(" Cancel ");
@@ -43,7 +42,7 @@
 
         add(okButton, c);
         add(cancelButton, c);
-//    add(Box.createHorizontalStrut(6));
+        //    add(Box.createHorizontalStrut(6));
     }
 
     /**
@@ -59,5 +58,4 @@
     public final JButton getOkButton() {
         return okButton;
     }
-
 }
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 cad537b..1dfba4f 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,12 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.helper;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -27,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import javax.swing.*;
 
 /**
  * A collection of standard utility methods for use within Swing.
@@ -42,8 +40,8 @@
     public static void centerOnScreen(Component component) {
         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
         component.setLocation(
-            (screenSize.width / 2) - (component.getWidth() / 2),
-            (screenSize.height / 2) - (component.getHeight() / 2));
+                (screenSize.width / 2) - (component.getWidth() / 2),
+                (screenSize.height / 2) - (component.getHeight() / 2));
     }
 
     /**
@@ -69,7 +67,6 @@
         };
         cancelButton.setAction(closeAction);
         dialog.getRootPane().getActionMap().put(CANCEL_ACTION_KEY, closeAction);
-
     }
 
     public static void invokeOnEDT(Runnable runnable) {
@@ -99,7 +96,7 @@
     @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better
     public static File promptForFile(Container parent, String defaultPath, String title, boolean loadDialog) {
         if (SwingHelper.isMacOSX()) {
-            //use filedialog on mac
+            // use filedialog on mac
             Component root = SwingUtilities.getRoot(parent);
             Frame frame = null;
             if (root instanceof Frame) {
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 4659a3a..0b09f92 100644
--- a/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/helper/TableCellEditorFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,17 +16,15 @@
  */
 package org.apache.log4j.chainsaw.helper;
 
-import org.apache.log4j.chainsaw.logevents.Level;
-
 import javax.swing.*;
 import javax.swing.table.TableCellEditor;
+import org.apache.log4j.chainsaw.logevents.Level;
 
 /**
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
 public class TableCellEditorFactory {
 
-
     /**
      * Creates a TableCellEditor to be used for editing boolean values
      *
@@ -34,23 +32,22 @@
      */
     public static final TableCellEditor createBooleanTableCellEditor() {
 
-        JComboBox<Boolean> comboBox = new JComboBox<>(new Boolean[]{Boolean.TRUE, Boolean.FALSE});
+        JComboBox<Boolean> comboBox = new JComboBox<>(new Boolean[] {Boolean.TRUE, Boolean.FALSE});
         return new DefaultCellEditor(comboBox);
-
     }
 
     /**
      *
      */
-    private TableCellEditorFactory() {
-    }
+    private TableCellEditorFactory() {}
 
     /**
      * @return table cell editor
      */
     public static Object createLevelTableCellEditor() {
-        JComboBox<Level> 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/ChainsawIcons.java b/src/main/java/org/apache/log4j/chainsaw/icons/ChainsawIcons.java
index 41d6b9d..e323f7b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/icons/ChainsawIcons.java
+++ b/src/main/java/org/apache/log4j/chainsaw/icons/ChainsawIcons.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,146 +14,88 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- * @author Paul Smith &lt;psmith@apache.org&gt;
- *
- */
 package org.apache.log4j.chainsaw.icons;
 
-import javax.swing.*;
 import java.net.URL;
-
+import javax.swing.*;
 
 /**
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
 public class ChainsawIcons {
-    private static final String BASE_ICON_PATH =
-        "org/apache/log4j/chainsaw/icons/";
-    public static final URL FILE_OPEN =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Open16.gif");
-    public static final URL UP =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Up16.gif");
-    public static final URL DOWN =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Down16.gif");
+    private static final String BASE_ICON_PATH = "org/apache/log4j/chainsaw/icons/";
+    public static final URL FILE_OPEN = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Open16.gif");
+    public static final URL UP = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Up16.gif");
+    public static final URL DOWN = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Down16.gif");
     public static final URL FILE_SAVE_AS =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "SaveAs16.gif");
-    public static final URL PAUSE =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Pause16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "SaveAs16.gif");
+    public static final URL PAUSE = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Pause16.gif");
     public static final URL REFRESH =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Refresh16.gif");
-    public static final URL DELETE =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Delete16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Refresh16.gif");
+    public static final URL DELETE = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Delete16.gif");
     public static final URL INFO =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Information16.gif");
-    public static final URL FIND =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Find16.gif");
-    public static final URL ABOUT =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "About16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Information16.gif");
+    public static final URL FIND = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Find16.gif");
+    public static final URL ABOUT = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "About16.gif");
     public static final URL SCROLL_TO_BOTTOM =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "RowInsertAfter16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "RowInsertAfter16.gif");
     public static final URL TOOL_TIP =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "TipOfTheDay16.gif");
-    public static final URL UNDOCK =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Export16.gif");
-    public static final URL DOCK =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Import16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "TipOfTheDay16.gif");
+    public static final URL UNDOCK = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Export16.gif");
+    public static final URL DOCK = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Import16.gif");
     public static final URL PREFERENCES =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Preferences16.gif");
-    public static final URL DEBUG =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Bean16.gif");
-    public static final URL HELP =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Help16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Preferences16.gif");
+    public static final URL DEBUG = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Bean16.gif");
+    public static final URL HELP = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Help16.gif");
     public static final Icon ICON_UP = new ImageIcon(UP);
     public static final Icon ICON_DOWN = new ImageIcon(DOWN);
     public static final Icon ICON_HELP = new ImageIcon(HELP);
     public static final Icon ICON_PREFERENCES = new ImageIcon(PREFERENCES);
     public static final Icon ICON_DOCK = new ImageIcon(DOCK);
-    public static final URL COPY =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Copy16.gif");
-    public static final URL CUT =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Cut16.gif");
+    public static final URL COPY = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Copy16.gif");
+    public static final URL CUT = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Cut16.gif");
     public static final Icon ICON_COPY = new ImageIcon(COPY);
     public static final Icon ICON_CUT = new ImageIcon(CUT);
     public static final Icon ICON_UNDOCK = new ImageIcon(UNDOCK);
     public static final Icon ICON_DEBUG = new ImageIcon(DEBUG);
     public static final URL WINDOW_ICON =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Zoom16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Zoom16.gif");
     public static final URL UNDOCKED_ICON =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "ZoomIn16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "ZoomIn16.gif");
     public static final ImageIcon ICON_LOG4J =
-        new ImageIcon(ChainsawIcons.class.getClassLoader().getResource("org/apache/log4j/chainsaw/logo.png"));
+            new ImageIcon(ChainsawIcons.class.getClassLoader().getResource("org/apache/log4j/chainsaw/logo.png"));
 
     public static final URL ANIM_NET_CONNECT =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "channelexplorer_satellite.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "channelexplorer_satellite.gif");
     public static final URL ANIM_RADIO_TOWER = ANIM_NET_CONNECT;
     public static final URL ICON_ACTIVE_RECEIVER =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Play16.gif");
-    public static final URL ICON_HOME =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Home16.gif");
-    public static final URL ICON_BACK =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Back16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Play16.gif");
+    public static final URL ICON_HOME = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Home16.gif");
+    public static final URL ICON_BACK = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Back16.gif");
     public static final URL ICON_RESTART =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Redo16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Redo16.gif");
     public static final URL ICON_RESTART_ALL =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Refresh16.gif");
-
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Refresh16.gif");
 
     public static final URL ICON_STOP_RECEIVER =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Stop16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Stop16.gif");
     public static final URL ICON_NEW_RECEIVER =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "New16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "New16.gif");
     public static final URL ICON_EDIT_RECEIVER =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Edit16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Edit16.gif");
     public static final URL ICON_RESUME_RECEIVER = ICON_ACTIVE_RECEIVER;
     public static final URL ICON_INACTIVE_RECEIVER = PAUSE;
     public static final URL ICON_COLLAPSE =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "ZoomOut16.gif");
+            ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "ZoomOut16.gif");
 
-    public static final ImageIcon FOCUS_ON_ICON = new ImageIcon(ChainsawIcons.class.getClassLoader().getResource(
-        BASE_ICON_PATH + "ZoomIn24.gif"));
-    public static final ImageIcon IGNORE_ICON = new ImageIcon(ChainsawIcons.class.getClassLoader().getResource(
-        BASE_ICON_PATH + "ZoomOut24.gif"));
+    public static final ImageIcon FOCUS_ON_ICON =
+            new ImageIcon(ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "ZoomIn24.gif"));
+    public static final ImageIcon IGNORE_ICON =
+            new ImageIcon(ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "ZoomOut24.gif"));
 
-
-    public static final URL SERVER =
-        ChainsawIcons.class.getClassLoader().getResource(
-            BASE_ICON_PATH + "Server16.gif");
+    public static final URL SERVER = ChainsawIcons.class.getClassLoader().getResource(BASE_ICON_PATH + "Server16.gif");
 
     public static final ImageIcon ICON_SERVER = new ImageIcon(SERVER);
 
-    private ChainsawIcons() {
-    }
+    private ChainsawIcons() {}
 }
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 3d7b76b..951bd0a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/icons/LevelIconFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.icons;
 
-import javax.swing.*;
-import javax.swing.plaf.metal.MetalLookAndFeel;
 import java.awt.*;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
+import javax.swing.*;
+import javax.swing.plaf.metal.MetalLookAndFeel;
 
 /**
  */
@@ -31,35 +30,29 @@
     private final Map<String, javax.swing.Icon> iconMap = new HashMap<>();
 
     private LevelIconFactory() {
-        //reuse ERROR icon for FATAL level
-        String[] iconFileNames =
-            new String[]{"Warn.gif", "Inform.gif", "Error.gif", "Error.gif"};
-        String[] iconLabels = new String[]{"WARN", "INFO", "ERROR", "FATAL"};
+        // reuse ERROR icon for FATAL level
+        String[] iconFileNames = new String[] {"Warn.gif", "Inform.gif", "Error.gif", "Error.gif"};
+        String[] iconLabels = new String[] {"WARN", "INFO", "ERROR", "FATAL"};
 
         for (int i = 0; i < iconLabels.length; i++) {
-            URL resourceURL = UIManager.getLookAndFeel().getClass().getResource(
-                "icons/" + iconFileNames[i]);
+            URL resourceURL = UIManager.getLookAndFeel().getClass().getResource("icons/" + iconFileNames[i]);
             if (resourceURL == null) {
-                resourceURL = MetalLookAndFeel.class.getResource(
-                    "icons/" + iconFileNames[i]);
+                resourceURL = MetalLookAndFeel.class.getResource("icons/" + iconFileNames[i]);
             }
             if (resourceURL == null) {
                 iconMap.put(iconLabels[i], ChainsawIcons.ICON_DEBUG);
             } else {
 
-                final ImageIcon icon =
-                    new ImageIcon(resourceURL);
+                final ImageIcon icon = new ImageIcon(resourceURL);
                 double scalex = .5;
                 double scaley = .5;
                 final int newWidth = (int) (scalex * icon.getIconWidth());
                 final int newHeight = (int) (scaley * icon.getIconHeight());
-                Image iconImage =
-                    icon.getImage().getScaledInstance(
-                        newWidth, newHeight, Image.SCALE_SMOOTH);
+                Image iconImage = icon.getImage().getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
                 iconMap.put(iconLabels[i], new ImageIcon(iconImage));
             }
         }
-        //reuse DEBUG icon for TRACE level
+        // reuse DEBUG icon for TRACE level
         iconMap.put("TRACE", ChainsawIcons.ICON_DEBUG);
         iconMap.put("DEBUG", ChainsawIcons.ICON_DEBUG);
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java b/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
index 1c4aa08..d643faa 100644
--- a/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.icons;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.image.BufferedImage;
-
+import javax.swing.*;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A simple factory/facade for creating some of the standard Icons that are based
@@ -38,33 +35,24 @@
     /**
      *
      */
-    private LineIconFactory() {
-    }
+    private LineIconFactory() {}
 
     public static Icon createExpandIcon() {
         int size = 8;
         int xOffSet = 0;
         int yOffSet = 0;
         try {
-            GraphicsEnvironment environment =
-                GraphicsEnvironment.getLocalGraphicsEnvironment();
+            GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
             BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
-            Graphics2D g2D =
-                environment.createGraphics(
-                    image);
+            Graphics2D g2D = environment.createGraphics(image);
             g2D.setBackground(new Color(0, 0, 0, 0));
             g2D.clearRect(0, 0, size, size);
             g2D.setStroke(new BasicStroke(1.5f));
-            g2D.setRenderingHint(
-                RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
+            g2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
             g2D.setColor(Color.black);
-            g2D.drawLine(
-                xOffSet, (size / 2) + yOffSet, size - xOffSet,
-                (size / 2) + yOffSet);
+            g2D.drawLine(xOffSet, (size / 2) + yOffSet, size - xOffSet, (size / 2) + yOffSet);
 
-            g2D.drawLine(
-                xOffSet + (size / 2), yOffSet, xOffSet + (size / 2),
-                (size) + yOffSet);
+            g2D.drawLine(xOffSet + (size / 2), yOffSet, xOffSet + (size / 2), (size) + yOffSet);
 
             return new ImageIcon(image);
         } catch (Exception e) {
@@ -79,21 +67,15 @@
         int xOffSet = 0;
         int yOffSet = 0;
         try {
-            GraphicsEnvironment environment =
-                GraphicsEnvironment.getLocalGraphicsEnvironment();
+            GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
             BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_ARGB);
-            Graphics2D g2D =
-                environment.createGraphics(
-                    image);
+            Graphics2D g2D = environment.createGraphics(image);
             g2D.setBackground(new Color(0, 0, 0, 0));
             g2D.clearRect(0, 0, size, size);
             g2D.setStroke(new BasicStroke(1.5f));
-            g2D.setRenderingHint(
-                RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
+            g2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
             g2D.setColor(Color.black);
-            g2D.drawLine(
-                xOffSet, (size / 2) + yOffSet, size - xOffSet,
-                (size / 2) + yOffSet);
+            g2D.drawLine(xOffSet, (size / 2) + yOffSet, size - xOffSet, (size / 2) + yOffSet);
 
             return new ImageIcon(image);
         } catch (Exception e) {
@@ -131,8 +113,7 @@
             return size;
         }
 
-        public void paintIcon(Component c, Graphics g, int x, int y) {
-        }
+        public void paintIcon(Component c, Graphics g, int x, int y) {}
     }
 
     /**
@@ -162,13 +143,10 @@
         public void paintIcon(Component c, Graphics g, int x, int y) {
             Graphics2D g2D = (Graphics2D) g;
             g2D.setStroke(new BasicStroke(1.5f));
-            g2D.setRenderingHint(
-                RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
+            g2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
             g2D.setColor(Color.black);
-            g2D.drawLine(
-                x + xOffSet, y + yOffSet, x + size + xOffSet, y + size + yOffSet);
-            g2D.drawLine(
-                x + xOffSet, y + size + yOffSet, x + size + xOffSet, y + yOffSet);
+            g2D.drawLine(x + xOffSet, y + yOffSet, x + size + xOffSet, y + size + yOffSet);
+            g2D.drawLine(x + xOffSet, y + size + yOffSet, x + size + xOffSet, y + yOffSet);
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/DefaultLayoutFactory.java b/src/main/java/org/apache/log4j/chainsaw/layout/DefaultLayoutFactory.java
index 73ea1dc..e1e8223 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/DefaultLayoutFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/DefaultLayoutFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.layout;
 
 import java.io.BufferedReader;
@@ -23,18 +22,16 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * Factory class to load and cache Layout information from resources.
  *
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
 public class DefaultLayoutFactory {
-    private volatile static String defaultPatternLayout = null;
+    private static volatile String defaultPatternLayout = null;
     private static final Logger logger = LogManager.getLogger();
 
-    private DefaultLayoutFactory() {
-    }
+    private DefaultLayoutFactory() {}
 
     public static String getDefaultPatternLayout() {
         return getPatternLayout("org/apache/log4j/chainsaw/layout/DefaultDetailLayout.html");
@@ -46,20 +43,16 @@
 
     private static String getPatternLayout(String fileNamePath) {
         StringBuffer content = new StringBuffer();
-        URL defaultLayoutURL =
-            DefaultLayoutFactory.class.getClassLoader().getResource(fileNamePath);
+        URL defaultLayoutURL = DefaultLayoutFactory.class.getClassLoader().getResource(fileNamePath);
 
         if (defaultLayoutURL == null) {
-            logger.warn(
-                "Could not locate the default Layout for Event Details and Tooltips");
+            logger.warn("Could not locate the default Layout for Event Details and Tooltips");
         } else {
             try {
                 BufferedReader reader = null;
 
                 try {
-                    reader =
-                        new BufferedReader(
-                            new InputStreamReader(defaultLayoutURL.openStream()));
+                    reader = new BufferedReader(new InputStreamReader(defaultLayoutURL.openStream()));
 
                     String line;
 
@@ -75,13 +68,15 @@
                 content = new StringBuffer("%m");
             }
             String trimmedContent = content.toString().trim();
-            //the default docs contain the apache license header, strip that out before displaying
+            // the default docs contain the apache license header, strip that out before displaying
             String startComment = "<!--";
             String endComment = "-->";
             if (trimmedContent.startsWith(startComment)) {
                 int endIndex = trimmedContent.indexOf(endComment);
                 if (endIndex > -1) {
-                    trimmedContent = trimmedContent.substring(endIndex + endComment.length()).trim();
+                    trimmedContent = trimmedContent
+                            .substring(endIndex + endComment.length())
+                            .trim();
                 }
             }
             defaultPatternLayout = trimmedContent;
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 2d0cf33..39f85f7 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.layout;
 
 import java.time.ZoneId;
@@ -25,10 +24,8 @@
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
-import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.lookup.StrSubstitutor;
 
-
 /**
  * This layout is used for formatting HTML text for use inside
  * the Chainsaw Event Detail Panel, and the tooltip used
@@ -56,11 +53,11 @@
         return m_conversionPattern;
     }
 
-    public void setDateformat(DateTimeFormatter dateFormat){
+    public void setDateformat(DateTimeFormatter dateFormat) {
         m_dateFormat = dateFormat;
     }
 
-    public DateTimeFormatter getDateformat(){
+    public DateTimeFormatter getDateformat() {
         return m_dateFormat;
     }
 
@@ -181,12 +178,8 @@
 
         build.setMessage(escape(event.m_message));
         LocationInfo li = event.m_locationInfo;
-        if( li != null ){
-            li = new LocationInfo(escape(li.fileName),
-                    escape(li.className),
-                    escape(li.methodName),
-                    li.lineNumber
-            );
+        if (li != null) {
+            li = new LocationInfo(escape(li.fileName), escape(li.className), escape(li.methodName), li.lineNumber);
             build.setLocationInfo(li);
         }
 
@@ -197,17 +190,17 @@
      * @param event
      * @return
      */
-//    private static Hashtable<String, String> formatProperties(LoggingEvent event) {
-//        Set keySet = event.getPropertyKeySet();
-//        Hashtable<String, String> hashTable = new Hashtable<>();
-//
-//        for (Object key : keySet) {
-//            Object value = event.getProperty(key.toString());
-//            hashTable.put(escape(key.toString()), escape(value.toString()));
-//        }
-//
-//        return hashTable;
-//    }
+    //    private static Hashtable<String, String> formatProperties(LoggingEvent event) {
+    //        Set keySet = event.getPropertyKeySet();
+    //        Hashtable<String, String> hashTable = new Hashtable<>();
+    //
+    //        for (Object key : keySet) {
+    //            Object value = event.getProperty(key.toString());
+    //            hashTable.put(escape(key.toString()), escape(value.toString()));
+    //        }
+    //
+    //        return hashTable;
+    //    }
 
     /* (non-Javadoc)
      * @see org.apache.log4j.Layout#ignoresThrowable()
@@ -219,8 +212,7 @@
     /* (non-Javadoc)
      * @see org.apache.log4j.spi.OptionHandler#activateOptions()
      */
-    public void activateOptions() {
-    }
+    public void activateOptions() {}
 
     /* (non-Javadoc)
      * @see org.apache.log4j.Layout#format(java.io.Writer, org.apache.log4j.spi.LoggingEvent)
@@ -228,7 +220,7 @@
     public String format(final ChainsawLoggingEvent event) {
         ChainsawLoggingEvent newEvent = copyForHTML(event);
 
-        Map<String,String> valuesMap = new HashMap<>();
+        Map<String, String> valuesMap = new HashMap<>();
         valuesMap.put("level", event.m_level.toString());
         valuesMap.put("logger", event.m_logger);
         valuesMap.put("time", event.m_timestamp.atZone(ZoneId.systemDefault()).format(m_dateFormat));
@@ -241,8 +233,8 @@
         String resolvedString = sub.replace(m_conversionPattern);
 
         return resolvedString;
-//        synchronized (patternLayout) {
-//            return patternLayout.format(newEvent);
-//        }
+        //        synchronized (patternLayout) {
+        //            return patternLayout.format(newEvent);
+        //        }
     }
 }
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 431bc24..7aca114 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,31 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.layout;
 
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.JTextComponentFormatter;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-
-import javax.swing.*;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.time.Instant;
-import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.Hashtable;
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.JTextComponentFormatter;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
 import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
 
-
 /**
  * An editor Pane that allows a user to Edit a Pattern Layout and preview the output it would
  * generate with an example LoggingEvent
@@ -55,16 +50,11 @@
 
     //  private final JButton applyButton = new JButton();
     private final JEditorPane patternEditor = new JEditorPane("text/plain", "");
-    private final JEditorPane previewer =
-        new JEditorPane(ChainsawConstants.DETAIL_CONTENT_TYPE, "");
-    private final JScrollPane patternEditorScroll =
-        new JScrollPane(
-            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
-            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
-    private final JScrollPane previewEditorScroll =
-        new JScrollPane(
-            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
-            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
+    private final JEditorPane previewer = new JEditorPane(ChainsawConstants.DETAIL_CONTENT_TYPE, "");
+    private final JScrollPane patternEditorScroll = new JScrollPane(
+            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
+    private final JScrollPane previewEditorScroll = new JScrollPane(
+            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
     private ChainsawLoggingEvent event;
     private EventDetailLayout layout = new EventDetailLayout();
     private DateTimeFormatter m_datetimeFormat;
@@ -88,12 +78,11 @@
      * @return
      */
     private Action createCutAction() {
-        final Action action =
-            new AbstractAction("Cut", ChainsawIcons.ICON_CUT) {
-                public void actionPerformed(ActionEvent e) {
-                    // TODO Auto-generated method stub
-                }
-            };
+        final Action action = new AbstractAction("Cut", ChainsawIcons.ICON_CUT) {
+            public void actionPerformed(ActionEvent e) {
+                // TODO Auto-generated method stub
+            }
+        };
 
         action.setEnabled(false);
 
@@ -104,12 +93,11 @@
      * @return
      */
     private Action createCopyAction() {
-        final Action action =
-            new AbstractAction("Copy", ChainsawIcons.ICON_COPY) {
-                public void actionPerformed(ActionEvent e) {
-                    // TODO Auto-generated method stub
-                }
-            };
+        final Action action = new AbstractAction("Copy", ChainsawIcons.ICON_COPY) {
+            public void actionPerformed(ActionEvent e) {
+                // TODO Auto-generated method stub
+            }
+        };
 
         action.setEnabled(false);
 
@@ -120,23 +108,21 @@
      *
      */
     private void setupListeners() {
-        patternEditor.getDocument().addDocumentListener(
-            new DocumentListener() {
-                public void changedUpdate(DocumentEvent e) {
-                    updatePreview();
-                }
+        patternEditor.getDocument().addDocumentListener(new DocumentListener() {
+            public void changedUpdate(DocumentEvent e) {
+                updatePreview();
+            }
 
-                public void insertUpdate(DocumentEvent e) {
-                    updatePreview();
-                }
+            public void insertUpdate(DocumentEvent e) {
+                updatePreview();
+            }
 
-                public void removeUpdate(DocumentEvent e) {
-                    updatePreview();
-                }
-            });
+            public void removeUpdate(DocumentEvent e) {
+                updatePreview();
+            }
+        });
 
-        patternEditor.addCaretListener(
-            e -> updateTextActions(e.getMark() != e.getDot()));
+        patternEditor.addCaretListener(e -> updateTextActions(e.getMark() != e.getDot()));
     }
 
     private void updatePreview() {
@@ -164,12 +150,10 @@
         hashTable.put("key2", "val2");
         hashTable.put("key3", "val3");
 
-        LocationInfo li =
-            new LocationInfo(
-                "myfile.java", "com.mycompany.util.MyClass", "myMethod", 321);
+        LocationInfo li = new LocationInfo("myfile.java", "com.mycompany.util.MyClass", "myMethod", 321);
 
         ChainsawLoggingEventBuilder build = new ChainsawLoggingEventBuilder();
-        build.setLevel( Level.DEBUG )
+        build.setLevel(Level.DEBUG)
                 .setLocationInfo(li)
                 .setLogger("com.mycompany.mylogger")
                 .setMessage("The quick brown fox jumped over the lazy dog")
@@ -201,18 +185,15 @@
         previewEditorScroll.setViewportView(previewer);
 
         patternEditor.setToolTipText("Edit the Pattern here");
-        previewer.setToolTipText(
-            "The result of the layout of the pattern is shown here");
+        previewer.setToolTipText("The result of the layout of the pattern is shown here");
 
         patternEditorScroll.setBorder(
-            BorderFactory.createTitledBorder(
-                BorderFactory.createEtchedBorder(), "Pattern Editor"));
+                BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Pattern Editor"));
         previewEditorScroll.setBorder(
-            BorderFactory.createTitledBorder(
-                BorderFactory.createEtchedBorder(), "Pattern Preview"));
+                BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Pattern Preview"));
 
-//    editorToolbar.add(new JButton(copyAction));
-//    editorToolbar.add(new JButton(cutAction));
+        //    editorToolbar.add(new JButton(copyAction));
+        //    editorToolbar.add(new JButton(cutAction));
 
         configureDatetimeFormatters();
         editorToolbar.add(Box.createHorizontalGlue());
@@ -231,35 +212,42 @@
         add(okCancelToolbar);
     }
 
-    private void configureDatetimeFormatters(){
+    private void configureDatetimeFormatters() {
         java.util.List<DatetimeFormatterOption> options = new ArrayList<>();
 
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.BASIC_ISO_DATE, "Basic ISO Date(20111203)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE, "ISO Local Date(2011-12-03)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE, "ISO Offset Date(2011-12-03+01:00)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE, "ISO Date('2011-12-03+01:00'; '2011-12-03')" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_TIME, "ISO Local Time(10:15:30)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_TIME, "ISO Offset Time(10:15:30+01:00)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_TIME, "ISO Time('10:15:30+01:00'; '10:15:30')" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_LOCAL_DATE_TIME, "ISO Local Date Time(2011-12-03T10:15:30)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_OFFSET_DATE_TIME, "ISO Offset Date Time(2011-12-03T10:15:30+01:00)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ZONED_DATE_TIME, "ISO Zoned Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_DATE_TIME, "ISO Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_ORDINAL_DATE, "ISO Ordinal Date(2012-337)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_WEEK_DATE, "ISO Week Date(2012-W48-6)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.ISO_INSTANT, "ISO Instant(2011-12-03T10:15:30Z)" ) );
-        options.add( new DatetimeFormatterOption( DateTimeFormatter.RFC_1123_DATE_TIME, "RFC 1123 DateTue, 3 Jun 2008 11:05:30 GMT)" ) );
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.BASIC_ISO_DATE, "Basic ISO Date(20111203)"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_LOCAL_DATE, "ISO Local Date(2011-12-03)"));
+        options.add(
+                new DatetimeFormatterOption(DateTimeFormatter.ISO_OFFSET_DATE, "ISO Offset Date(2011-12-03+01:00)"));
+        options.add(
+                new DatetimeFormatterOption(DateTimeFormatter.ISO_DATE, "ISO Date('2011-12-03+01:00'; '2011-12-03')"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_LOCAL_TIME, "ISO Local Time(10:15:30)"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_OFFSET_TIME, "ISO Offset Time(10:15:30+01:00)"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_TIME, "ISO Time('10:15:30+01:00'; '10:15:30')"));
+        options.add(new DatetimeFormatterOption(
+                DateTimeFormatter.ISO_LOCAL_DATE_TIME, "ISO Local Date Time(2011-12-03T10:15:30)"));
+        options.add(new DatetimeFormatterOption(
+                DateTimeFormatter.ISO_OFFSET_DATE_TIME, "ISO Offset Date Time(2011-12-03T10:15:30+01:00)"));
+        options.add(new DatetimeFormatterOption(
+                DateTimeFormatter.ISO_ZONED_DATE_TIME, "ISO Zoned Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])"));
+        options.add(new DatetimeFormatterOption(
+                DateTimeFormatter.ISO_DATE_TIME, "ISO Date Time(2011-12-03T10:15:30+01:00[Europe/Paris])"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_ORDINAL_DATE, "ISO Ordinal Date(2012-337)"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_WEEK_DATE, "ISO Week Date(2012-W48-6)"));
+        options.add(new DatetimeFormatterOption(DateTimeFormatter.ISO_INSTANT, "ISO Instant(2011-12-03T10:15:30Z)"));
+        options.add(new DatetimeFormatterOption(
+                DateTimeFormatter.RFC_1123_DATE_TIME, "RFC 1123 DateTue, 3 Jun 2008 11:05:30 GMT)"));
 
-        for( DatetimeFormatterOption opt : options ){
+        for (DatetimeFormatterOption opt : options) {
             m_datetimeCombo.addItem(opt);
 
-            if( opt.m_formatter.equals( m_datetimeFormat ) ){
+            if (opt.m_formatter.equals(m_datetimeFormat)) {
                 m_datetimeCombo.setSelectedItem(opt);
             }
         }
 
         m_datetimeCombo.addActionListener((ae) -> {
-            DatetimeFormatterOption option = (DatetimeFormatterOption)m_datetimeCombo.getSelectedItem();
+            DatetimeFormatterOption option = (DatetimeFormatterOption) m_datetimeCombo.getSelectedItem();
             m_datetimeFormat = option.m_formatter;
             updatePreview();
         });
@@ -281,12 +269,12 @@
         cancelButton.addActionListener(l);
     }
 
-    public void setDatetimeFormatter( DateTimeFormatter formatter ){
+    public void setDatetimeFormatter(DateTimeFormatter formatter) {
         m_datetimeFormat = formatter;
 
-        for( int x = 0; x < m_datetimeCombo.getItemCount(); x++ ){
-            DatetimeFormatterOption opt = (DatetimeFormatterOption)m_datetimeCombo.getItemAt(x);
-            if( opt.m_formatter == formatter ){
+        for (int x = 0; x < m_datetimeCombo.getItemCount(); x++) {
+            DatetimeFormatterOption opt = (DatetimeFormatterOption) m_datetimeCombo.getItemAt(x);
+            if (opt.m_formatter == formatter) {
                 m_datetimeCombo.setSelectedIndex(x);
                 break;
             }
@@ -295,7 +283,7 @@
         updatePreview();
     }
 
-    public DateTimeFormatter getDatetimeFormatter(){
+    public DateTimeFormatter getDatetimeFormatter() {
         return m_datetimeFormat;
     }
 
@@ -303,13 +291,13 @@
         final DateTimeFormatter m_formatter;
         final String m_text;
 
-        DatetimeFormatterOption( DateTimeFormatter formatter, String text ){
+        DatetimeFormatterOption(DateTimeFormatter formatter, String text) {
             m_formatter = formatter;
             m_text = text;
         }
 
         @Override
-        public String toString(){
+        public String toString() {
             return m_text;
         }
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEvent.java b/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEvent.java
index 5c4e335..b98b139 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,7 +17,6 @@
 package org.apache.log4j.chainsaw.logevents;
 
 import java.time.Instant;
-import java.time.ZonedDateTime;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -39,10 +38,10 @@
     public final String m_logger;
     public final LocationInfo m_locationInfo;
     public final String m_ndc;
-    public final Map<String,String> m_mdc;
-    private Map<String,String> m_properties;
+    public final Map<String, String> m_mdc;
+    private Map<String, String> m_properties;
 
-    ChainsawLoggingEvent( ChainsawLoggingEventBuilder b ){
+    ChainsawLoggingEvent(ChainsawLoggingEventBuilder b) {
         m_timestamp = b.m_timestamp;
         m_level = b.m_level;
         m_message = b.m_message;
@@ -54,23 +53,23 @@
         m_properties = new HashMap<>();
     }
 
-    public void setProperty(String name, String value){
+    public void setProperty(String name, String value) {
         m_properties.put(name, value);
     }
 
-    public String removeProperty(String name){
+    public String removeProperty(String name) {
         return m_properties.remove(name);
     }
 
-    public String getProperty(String name){
+    public String getProperty(String name) {
         return m_properties.get(name);
     }
 
-    public Set<String> getPropertyKeySet(){
+    public Set<String> getPropertyKeySet() {
         return m_properties.keySet();
     }
 
-    public Map<String,String> getProperties(){
+    public Map<String, String> getProperties() {
         return new HashMap<>(m_properties);
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEventBuilder.java b/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEventBuilder.java
index 3ba7b0f..6ba4fee 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEventBuilder.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logevents/ChainsawLoggingEventBuilder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,7 +17,6 @@
 package org.apache.log4j.chainsaw.logevents;
 
 import java.time.Instant;
-import java.time.ZonedDateTime;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,15 +33,15 @@
     String m_logger;
     LocationInfo m_locationInfo;
     String m_ndc;
-    Map<String,String> m_mdc;
+    Map<String, String> m_mdc;
 
-    public ChainsawLoggingEventBuilder(){}
+    public ChainsawLoggingEventBuilder() {}
 
     /**
      * Copy fields from an already-existing log event.
      * Clears any data that already exists in this builder.
      */
-    public ChainsawLoggingEventBuilder copyFromEvent( final ChainsawLoggingEvent evt ){
+    public ChainsawLoggingEventBuilder copyFromEvent(final ChainsawLoggingEvent evt) {
         clear();
         m_timestamp = evt.m_timestamp;
         m_level = evt.m_level;
@@ -51,13 +50,13 @@
         m_logger = evt.m_logger;
         m_locationInfo = evt.m_locationInfo;
         m_ndc = evt.m_ndc;
-        if( evt.m_mdc != null ){
+        if (evt.m_mdc != null) {
             m_mdc = new HashMap<>(evt.m_mdc);
         }
         return this;
     }
 
-    public void clear(){
+    public void clear() {
         m_timestamp = null;
         m_level = null;
         m_message = null;
@@ -67,60 +66,60 @@
         m_mdc = null;
     }
 
-    public ChainsawLoggingEventBuilder setTimestamp( Instant inTimestamp ){
+    public ChainsawLoggingEventBuilder setTimestamp(Instant inTimestamp) {
         m_timestamp = inTimestamp;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setLevel( Level inLevel ){
+    public ChainsawLoggingEventBuilder setLevel(Level inLevel) {
         m_level = inLevel;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setLevelFromString( String inLevel ){
-        m_level = Level.valueOf( inLevel );
+    public ChainsawLoggingEventBuilder setLevelFromString(String inLevel) {
+        m_level = Level.valueOf(inLevel);
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setMessage( String inMessage ){
+    public ChainsawLoggingEventBuilder setMessage(String inMessage) {
         m_message = inMessage;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setThreadName( String threadName ){
+    public ChainsawLoggingEventBuilder setThreadName(String threadName) {
         m_threadName = threadName;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setLogger( String logger ){
+    public ChainsawLoggingEventBuilder setLogger(String logger) {
         m_logger = logger;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setLocationInfo( LocationInfo info ){
+    public ChainsawLoggingEventBuilder setLocationInfo(LocationInfo info) {
         m_locationInfo = info;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setNDC( String ndc ){
+    public ChainsawLoggingEventBuilder setNDC(String ndc) {
         m_ndc = ndc;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder setMDC( Map<String,String> mdc ){
+    public ChainsawLoggingEventBuilder setMDC(Map<String, String> mdc) {
         m_mdc = mdc;
         return this;
     }
 
-    public ChainsawLoggingEventBuilder addMDCEntry( String key, String value ){
-        if( m_mdc == null ){
+    public ChainsawLoggingEventBuilder addMDCEntry(String key, String value) {
+        if (m_mdc == null) {
             m_mdc = new HashMap<>();
         }
-        m_mdc.put( key, value );
+        m_mdc.put(key, value);
         return this;
     }
 
-    public ChainsawLoggingEvent create(){
-        return new ChainsawLoggingEvent( this );
+    public ChainsawLoggingEvent create() {
+        return new ChainsawLoggingEvent(this);
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logevents/Level.java b/src/main/java/org/apache/log4j/chainsaw/logevents/Level.java
index 1eb9caf..a66f1f1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logevents/Level.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logevents/Level.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/logevents/LocationInfo.java b/src/main/java/org/apache/log4j/chainsaw/logevents/LocationInfo.java
index 8f84c27..af55f2c 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logevents/LocationInfo.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logevents/LocationInfo.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -25,14 +25,10 @@
     public final String methodName;
     public final int lineNumber;
 
-    public LocationInfo(
-      final String file,
-      final String classname,
-      final String method,
-      final int line) {
-      this.fileName = file;
-      this.className = classname;
-      this.methodName = method;
-      this.lineNumber = line;
+    public LocationInfo(final String file, final String classname, final String method, final int line) {
+        this.fileName = file;
+        this.className = classname;
+        this.methodName = method;
+        this.lineNumber = line;
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logui/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/logui/LogUI.java
index db1380e..e2a9158 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logui/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logui/LogUI.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,9 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.logui;
 
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.net.URL;
+import java.util.*;
+import java.util.List;
+import javax.swing.*;
+import javax.swing.event.EventListenerList;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.log4j.chainsaw.*;
 import org.apache.log4j.chainsaw.components.about.ChainsawAbout;
@@ -39,21 +52,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import javax.swing.*;
-import javax.swing.event.EventListenerList;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
-import java.net.URL;
-import java.util.*;
-import java.util.List;
-
 /**
  * The main entry point for Chainsaw, this class represents the first frame
  * that is used to display a Welcome panel, and any other panels that are
@@ -144,7 +142,8 @@
 
         createDragAndDrop();
 
-        applicationPreferenceModelPanel = new ApplicationPreferenceModelPanel(settingsManager, applicationPreferenceModel);
+        applicationPreferenceModelPanel =
+                new ApplicationPreferenceModelPanel(settingsManager, applicationPreferenceModel);
 
         applicationPreferenceModelPanel.setOkCancelActionListener(e -> preferencesFrame.setVisible(false));
 
@@ -154,11 +153,21 @@
                 preferencesFrame.setVisible(false);
             }
         };
-        preferencesFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "ESCAPE");
-        preferencesFrame.getRootPane().
-            getActionMap().put("ESCAPE", closeAction);
+        preferencesFrame
+                .getRootPane()
+                .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
+                .put(escape, "ESCAPE");
+        preferencesFrame.getRootPane().getActionMap().put("ESCAPE", closeAction);
 
-        logUIPanelBuilder = new LogUIPanelBuilder(tabbedPane, identifierPanels, chainsawToolBarAndMenus, panelMap, settingsManager, applicationPreferenceModel, statusBar, zeroConf);
+        logUIPanelBuilder = new LogUIPanelBuilder(
+                tabbedPane,
+                identifierPanels,
+                chainsawToolBarAndMenus,
+                panelMap,
+                settingsManager,
+                applicationPreferenceModel,
+                statusBar,
+                zeroConf);
 
         OSXIntegration.init(this);
     }
@@ -201,21 +210,22 @@
         tutorialFrame = new TutorialFrame(receivers, receiverListeners, this, statusBar);
 
         JToolBar tb = welcomePanel.getToolbar();
-        JButton help = new SmallButton.Builder().iconUrl(ChainsawIcons.HELP)
-            .action(tutorialFrame::setupTutorial).shortDescription("Tutorial").build();
+        JButton help = new SmallButton.Builder()
+                .iconUrl(ChainsawIcons.HELP)
+                .action(tutorialFrame::setupTutorial)
+                .shortDescription("Tutorial")
+                .build();
 
         tb.add(help);
 
         tb.addSeparator();
 
-        JButton exampleButton = new SmallButton.Builder().iconUrl(ChainsawIcons.HELP)
-            .action(
-                () -> HelpManager.getInstance().setHelpURL(ChainsawConstants.EXAMPLE_CONFIG_URL)
-            )
-            .name("View example Receiver configuration")
-            .shortDescription("Displays an example Log4j configuration file with several Receivers defined.")
-            .build();
-
+        JButton exampleButton = new SmallButton.Builder()
+                .iconUrl(ChainsawIcons.HELP)
+                .action(() -> HelpManager.getInstance().setHelpURL(ChainsawConstants.EXAMPLE_CONFIG_URL))
+                .name("View example Receiver configuration")
+                .shortDescription("Displays an example Log4j configuration file with several Receivers defined.")
+                .build();
 
         tb.add(exampleButton);
         tb.add(Box.createHorizontalGlue());
@@ -224,16 +234,14 @@
          * Setup a listener on the HelpURL property and automatically change the WelcomePages URL
          * to it.
          */
-        HelpManager.getInstance().addPropertyChangeListener(
-            "helpURL",
-            evt -> {
-                URL newURL = (URL) evt.getNewValue();
+        HelpManager.getInstance().addPropertyChangeListener("helpURL", evt -> {
+            URL newURL = (URL) evt.getNewValue();
 
-                if (newURL != null) {
-                    welcomePanel.setURL(newURL);
-                    ensureWelcomePanelVisible();
-                }
-            });
+            if (newURL != null) {
+                welcomePanel.setURL(newURL);
+                ensureWelcomePanelVisible();
+            }
+        });
     }
 
     /**
@@ -252,9 +260,7 @@
      */
     private void loadSettings() {
         AbstractConfiguration config = settingsManager.getGlobalConfiguration();
-        setLocation(
-            config.getInt(LogUI.MAIN_WINDOW_X, 0),
-            config.getInt(LogUI.MAIN_WINDOW_Y, 0));
+        setLocation(config.getInt(LogUI.MAIN_WINDOW_X, 0), config.getInt(LogUI.MAIN_WINDOW_Y, 0));
 
         int width = config.getInt(LogUI.MAIN_WINDOW_WIDTH, -1);
         int height = config.getInt(LogUI.MAIN_WINDOW_HEIGHT, -1);
@@ -308,22 +314,19 @@
 
         createReceiversPanel(panePanel);
 
-        addWindowListener(
-            new WindowAdapter() {
-                public void windowClosing(WindowEvent event) {
-                    exit();
-                }
-            });
+        addWindowListener(new WindowAdapter() {
+            public void windowClosing(WindowEvent event) {
+                exit();
+            }
+        });
         preferencesFrame.setTitle("'Application-wide Preferences");
-        preferencesFrame.setIconImage(
-            ((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
+        preferencesFrame.setIconImage(((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
         preferencesFrame.getContentPane().add(applicationPreferenceModelPanel);
 
         preferencesFrame.setSize(750, 520);
 
         Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
-        preferencesFrame.setLocation(
-            new Point(
+        preferencesFrame.setLocation(new Point(
                 (screenDimension.width / 2) - (preferencesFrame.getSize().width / 2),
                 (screenDimension.height / 2) - (preferencesFrame.getSize().height / 2)));
 
@@ -366,12 +369,13 @@
     }
 
     private void createReceiversPanel(JPanel panePanel) {
-        LogUiReceiversPanel logUiReceiversPanel = new LogUiReceiversPanel(settingsManager, applicationPreferenceModel, receivers, this, statusBar, panePanel);
+        LogUiReceiversPanel logUiReceiversPanel = new LogUiReceiversPanel(
+                settingsManager, applicationPreferenceModel, receivers, this, statusBar, panePanel);
         getContentPane().add(logUiReceiversPanel.getMainReceiverSplitPane(), BorderLayout.CENTER);
     }
 
     public void createCustomExpressionLogPanel(String ident) {
-        //collect events matching the rule from all of the tabs
+        // collect events matching the rule from all of the tabs
         try {
             List<ChainsawLoggingEvent> list = new ArrayList<>();
             Rule rule = ExpressionRule.getRule(ident);
@@ -384,9 +388,7 @@
 
             logUIPanelBuilder.buildLogPanel(true, ident, null);
         } catch (IllegalArgumentException iae) {
-            statusBar.setMessage(
-                "Unable to add tab using expression: " + ident + ", reason: "
-                    + iae.getMessage());
+            statusBar.setMessage("Unable to add tab using expression: " + ident + ", reason: " + iae.getMessage());
         }
     }
 
@@ -396,8 +398,7 @@
 
     public void addWelcomePanel() {
         tabbedPane.insertTab(
-            ChainsawTabbedPane.WELCOME_TAB, new ImageIcon(ChainsawIcons.ABOUT), welcomePanel,
-            "Welcome/Help", 0);
+                ChainsawTabbedPane.WELCOME_TAB, new ImageIcon(ChainsawIcons.ABOUT), welcomePanel, "Welcome/Help", 0);
         tabbedPane.setSelectedComponent(welcomePanel);
         panelMap.put(ChainsawTabbedPane.WELCOME_TAB, welcomePanel);
     }
@@ -405,8 +406,7 @@
     public void removeWelcomePanel() {
         EventQueue.invokeLater(() -> {
             if (tabbedPane.containsWelcomePanel()) {
-                tabbedPane.remove(
-                    tabbedPane.getComponentAt(tabbedPane.indexOfTab(ChainsawTabbedPane.WELCOME_TAB)));
+                tabbedPane.remove(tabbedPane.getComponentAt(tabbedPane.indexOfTab(ChainsawTabbedPane.WELCOME_TAB)));
             }
         });
     }
@@ -457,9 +457,9 @@
             settingsManager.saveSettingsForReceiver(rx);
         }
 
-        for (Component comp :  panelMap.values()) {
+        for (Component comp : panelMap.values()) {
             if (comp instanceof LogPanel) {
-                ((LogPanel)comp).saveSettings();
+                ((LogPanel) comp).saveSettings();
             }
         }
 
@@ -531,8 +531,7 @@
      */
     private void setStatusBarVisible(final boolean visible) {
         logger.debug("Setting StatusBar to {}", visible);
-        SwingUtilities.invokeLater(
-            () -> statusBar.setVisible(visible));
+        SwingUtilities.invokeLater(() -> statusBar.setVisible(visible));
     }
 
     public boolean isStatusBarVisible() {
@@ -599,14 +598,10 @@
             public void mouseClicked(MouseEvent e) {
                 super.mouseClicked(e);
 
-                if (
-                    (e.getClickCount() > 1)
-                        && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
+                if ((e.getClickCount() > 1) && ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
                     int tabIndex = tabbedPane.getSelectedIndex();
 
-                    if (
-                        (tabIndex != -1)
-                            && (tabIndex == tabbedPane.getSelectedIndex())) {
+                    if ((tabIndex != -1) && (tabIndex == tabbedPane.getSelectedIndex())) {
                         LogPanel logPanel = getCurrentLogPanel();
 
                         if (logPanel != null) {
@@ -651,8 +646,7 @@
                 for (int i = 0; i < count; i++) {
                     String name = tabbedPane.getTitleAt(index);
 
-                    if (
-                        panelMap.containsKey(name) && !name.equals(currentName)) {
+                    if (panelMap.containsKey(name) && !name.equals(currentName)) {
                         displayPanel(name, false);
                         chainsawToolBarAndMenus.stateChange();
                     } else {
diff --git a/src/main/java/org/apache/log4j/chainsaw/logui/LogUIPanelBuilder.java b/src/main/java/org/apache/log4j/chainsaw/logui/LogUIPanelBuilder.java
index 33c77dd..e089717 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logui/LogUIPanelBuilder.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logui/LogUIPanelBuilder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,9 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.logui;
 
+import java.awt.*;
+import java.beans.PropertyChangeListener;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.swing.*;
 import org.apache.log4j.chainsaw.ApplicationPreferenceModel;
 import org.apache.log4j.chainsaw.ChainsawConstants;
 import org.apache.log4j.chainsaw.ChainsawStatusBar;
@@ -32,13 +37,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import javax.swing.*;
-import java.awt.*;
-import java.beans.PropertyChangeListener;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 public class LogUIPanelBuilder {
     private static Logger logger = LogManager.getLogger(LogUIPanelBuilder.class);
     private final ApplicationPreferenceModel applicationPreferenceModel;
@@ -55,10 +53,15 @@
     private Map<String, RuleColorizer> allColorizers = new HashMap<>();
     private RuleColorizer globalRuleColorizer = new RuleColorizer();
 
-    public LogUIPanelBuilder(ChainsawTabbedPane tabbedPane, List<LogPanel> identifierPanels,
-                             ChainsawToolBarAndMenus chainsawToolBarAndMenus, Map<String, Component> panelMap,
-                             SettingsManager settingsManager, ApplicationPreferenceModel applicationPreferenceModel,
-                             ChainsawStatusBar chainsawStatusBar, ZeroConfPlugin zeroConfPlugin) {
+    public LogUIPanelBuilder(
+            ChainsawTabbedPane tabbedPane,
+            List<LogPanel> identifierPanels,
+            ChainsawToolBarAndMenus chainsawToolBarAndMenus,
+            Map<String, Component> panelMap,
+            SettingsManager settingsManager,
+            ApplicationPreferenceModel applicationPreferenceModel,
+            ChainsawStatusBar chainsawStatusBar,
+            ZeroConfPlugin zeroConfPlugin) {
         this.tabbedPane = tabbedPane;
         this.identifierPanels = identifierPanels;
         this.chainsawToolBarAndMenus = chainsawToolBarAndMenus;
@@ -73,8 +76,14 @@
     }
 
     void buildLogPanel(boolean customExpression, final String ident, final ChainsawReceiver rx)
-        throws IllegalArgumentException {
-        final LogPanel thisPanel = new LogPanel(settingsManager, applicationPreferenceModel, chainsawStatusBar, ident, allColorizers, globalRuleColorizer);
+            throws IllegalArgumentException {
+        final LogPanel thisPanel = new LogPanel(
+                settingsManager,
+                applicationPreferenceModel,
+                chainsawStatusBar,
+                ident,
+                allColorizers,
+                globalRuleColorizer);
 
         if (!customExpression && rx != null) {
             thisPanel.setReceiver(rx);
@@ -93,33 +102,28 @@
 
         tabbedPane.addChangeListener(iconHandler);
 
-        PropertyChangeListener toolbarMenuUpdateListener =
-            evt -> chainsawToolBarAndMenus.stateChange();
+        PropertyChangeListener toolbarMenuUpdateListener = evt -> chainsawToolBarAndMenus.stateChange();
 
         thisPanel.addPropertyChangeListener(toolbarMenuUpdateListener);
         thisPanel.addPropertyChangeListener(toolbarMenuUpdateListener);
 
-        thisPanel.addPropertyChangeListener(
-            "docked",
-            evt -> {
-                LogPanel logPanel = (LogPanel) evt.getSource();
+        thisPanel.addPropertyChangeListener("docked", evt -> {
+            LogPanel logPanel = (LogPanel) evt.getSource();
 
-                if (logPanel.isDocked()) {
-                    panelMap.put(logPanel.getIdentifier(), logPanel);
-                    tabbedPane.addANewTab(
-                        logPanel.getIdentifier(), logPanel, null,
-                        true);
-                    tabbedPane.setSelectedTab(tabbedPane.indexOfTab(logPanel.getIdentifier()));
-                } else {
-                    tabbedPane.remove(logPanel);
-                }
-            });
+            if (logPanel.isDocked()) {
+                panelMap.put(logPanel.getIdentifier(), logPanel);
+                tabbedPane.addANewTab(logPanel.getIdentifier(), logPanel, null, true);
+                tabbedPane.setSelectedTab(tabbedPane.indexOfTab(logPanel.getIdentifier()));
+            } else {
+                tabbedPane.remove(logPanel);
+            }
+        });
 
         logger.debug("adding logpanel to tabbed pane: {}", ident);
 
-        //NOTE: tab addition is a very fragile process - if you modify this code,
-        //verify the frames in the individual log panels initialize to their
-        //correct sizes
+        // NOTE: tab addition is a very fragile process - if you modify this code,
+        // verify the frames in the individual log panels initialize to their
+        // correct sizes
         tabbedPane.add(ident, thisPanel);
         panelMap.put(ident, thisPanel);
 
@@ -127,20 +131,12 @@
          * Let the new LogPanel receive this batch
          */
 
-        SwingUtilities.invokeLater(
-            () -> {
-                tabbedPane.addANewTab(
-                    ident,
-                    thisPanel,
-                    new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER),
-                    false);
-                thisPanel.layoutComponents();
+        SwingUtilities.invokeLater(() -> {
+            tabbedPane.addANewTab(ident, thisPanel, new ImageIcon(ChainsawIcons.ANIM_RADIO_TOWER), false);
+            thisPanel.layoutComponents();
 
-                tabbedPane.addANewTab(ChainsawTabbedPane.ZEROCONF,
-                    zeroConfPlugin,
-                    null,
-                    false);
-            });
+            tabbedPane.addANewTab(ChainsawTabbedPane.ZEROCONF, zeroConfPlugin, null, false);
+        });
 
         logger.debug("added tab {}", ident);
     }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logui/LogUiKeyStrokeCreator.java b/src/main/java/org/apache/log4j/chainsaw/logui/LogUiKeyStrokeCreator.java
index efc979e..fb07af6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logui/LogUiKeyStrokeCreator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logui/LogUiKeyStrokeCreator.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,76 +16,72 @@
  */
 package org.apache.log4j.chainsaw.logui;
 
-import org.apache.log4j.chainsaw.components.tabbedpane.ChainsawTabbedPane;
-
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import javax.swing.*;
+import org.apache.log4j.chainsaw.components.tabbedpane.ChainsawTabbedPane;
 
 public class LogUiKeyStrokeCreator {
 
     static void createKeyStrokeGotoLine(ChainsawTabbedPane tabbedPane, LogUI logUI) {
-        KeyStroke ksGotoLine =
-            KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-            ksGotoLine, "GotoLine");
+        KeyStroke ksGotoLine = KeyStroke.getKeyStroke(
+                KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksGotoLine, "GotoLine");
 
-        Action gotoLine =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    String inputLine = JOptionPane.showInputDialog(logUI, "Enter the line number to go:", "Goto Line", JOptionPane.PLAIN_MESSAGE);
-                    try {
-                        int lineNumber = Integer.parseInt(inputLine);
-                        int row = logUI.getCurrentLogPanel().setSelectedEvent(lineNumber);
-                        if (row == -1) {
-                            JOptionPane.showMessageDialog(logUI, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
-                        }
-                    } catch (NumberFormatException nfe) {
-                        JOptionPane.showMessageDialog(logUI, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
+        Action gotoLine = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                String inputLine = JOptionPane.showInputDialog(
+                        logUI, "Enter the line number to go:", "Goto Line", JOptionPane.PLAIN_MESSAGE);
+                try {
+                    int lineNumber = Integer.parseInt(inputLine);
+                    int row = logUI.getCurrentLogPanel().setSelectedEvent(lineNumber);
+                    if (row == -1) {
+                        JOptionPane.showMessageDialog(
+                                logUI, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
                     }
+                } catch (NumberFormatException nfe) {
+                    JOptionPane.showMessageDialog(
+                            logUI, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
                 }
-            };
+            }
+        };
 
         tabbedPane.getActionMap().put("GotoLine", gotoLine);
     }
 
     static void createKeyStrokeLeft(ChainsawTabbedPane tabbedPane) {
-        KeyStroke ksLeft =
-            KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-            ksLeft, "MoveLeft");
+        KeyStroke ksLeft = KeyStroke.getKeyStroke(
+                KeyEvent.VK_LEFT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksLeft, "MoveLeft");
 
-        Action moveLeft =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    int temp = tabbedPane.getSelectedIndex();
-                    --temp;
+        Action moveLeft = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                int temp = tabbedPane.getSelectedIndex();
+                --temp;
 
-                    if (temp > -1) {
-                        tabbedPane.setSelectedTab(temp);
-                    }
+                if (temp > -1) {
+                    tabbedPane.setSelectedTab(temp);
                 }
-            };
+            }
+        };
         tabbedPane.getActionMap().put("MoveLeft", moveLeft);
     }
 
     static void createKeyStrokeRight(ChainsawTabbedPane tabbedPane) {
-        KeyStroke ksRight =
-            KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
-        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
-            ksRight, "MoveRight");
-        Action moveRight =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    int temp = tabbedPane.getSelectedIndex();
-                    ++temp;
+        KeyStroke ksRight = KeyStroke.getKeyStroke(
+                KeyEvent.VK_RIGHT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
+        tabbedPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ksRight, "MoveRight");
+        Action moveRight = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                int temp = tabbedPane.getSelectedIndex();
+                ++temp;
 
-                    if (temp != tabbedPane.getTabCount()) {
-                        tabbedPane.setSelectedTab(temp);
-                    }
+                if (temp != tabbedPane.getTabCount()) {
+                    tabbedPane.setSelectedTab(temp);
                 }
-            };
+            }
+        };
         tabbedPane.getActionMap().put("MoveRight", moveRight);
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/logui/LogUiReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/logui/LogUiReceiversPanel.java
index ab0899f..eb809b9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/logui/LogUiReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/logui/LogUiReceiversPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,15 +16,14 @@
  */
 package org.apache.log4j.chainsaw.logui;
 
+import java.util.List;
+import javax.swing.*;
 import org.apache.log4j.chainsaw.ApplicationPreferenceModel;
 import org.apache.log4j.chainsaw.ChainsawStatusBar;
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
 import org.apache.log4j.chainsaw.receivers.ReceiversPanel;
 
-import javax.swing.*;
-import java.util.List;
-
 public class LogUiReceiversPanel {
 
     private ReceiversPanel receiversPanel;
@@ -33,8 +32,14 @@
     private int dividerSize;
     private static final double DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION = 0.85d;
     private double lastMainReceiverSplitLocation = DEFAULT_MAIN_RECEIVER_SPLIT_LOCATION;
-    public LogUiReceiversPanel(SettingsManager settingsManager, ApplicationPreferenceModel applicationPreferenceModel,
-                               List<ChainsawReceiver> receivers, LogUI logUI, ChainsawStatusBar statusBar, JPanel panePanel) {
+
+    public LogUiReceiversPanel(
+            SettingsManager settingsManager,
+            ApplicationPreferenceModel applicationPreferenceModel,
+            List<ChainsawReceiver> receivers,
+            LogUI logUI,
+            ChainsawStatusBar statusBar,
+            JPanel panePanel) {
         receiversPanel = new ReceiversPanel(settingsManager, receivers, logUI, statusBar);
         mainReceiverSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panePanel, receiversPanel);
         mainReceiverSplitPane.setContinuousLayout(true);
@@ -44,17 +49,16 @@
 
         boolean showReceivers = applicationPreferenceModel.isReceiversVisible();
 
-        applicationPreferenceModel.addEventListener(
-            evt -> {
-                if (evt.getPropertyName().equals(ApplicationPreferenceModel.RECEIVERS_VISIBLE)) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    if (value) {
-                        showReceiverPanel();
-                    } else {
-                        hideReceiverPanel();
-                    }
+        applicationPreferenceModel.addEventListener(evt -> {
+            if (evt.getPropertyName().equals(ApplicationPreferenceModel.RECEIVERS_VISIBLE)) {
+                boolean value = (Boolean) evt.getPropertyValue();
+                if (value) {
+                    showReceiverPanel();
+                } else {
+                    hideReceiverPanel();
                 }
-            });
+            }
+        });
 
         if (showReceivers) {
             showReceiverPanel();
@@ -63,7 +67,6 @@
         }
     }
 
-
     public JSplitPane getMainReceiverSplitPane() {
         return mainReceiverSplitPane;
     }
@@ -82,13 +85,12 @@
      * Hide the log tree pane, holding the current divider location for later use
      */
     public void hideReceiverPanel() {
-        //subtract one to make sizes match
+        // subtract one to make sizes match
         int currentSize = mainReceiverSplitPane.getWidth() - mainReceiverSplitPane.getDividerSize();
         if (mainReceiverSplitPane.getDividerLocation() > -1) {
             if (!(((mainReceiverSplitPane.getDividerLocation() + 1) == currentSize)
-                || ((mainReceiverSplitPane.getDividerLocation() - 1) == 0))) {
-                lastMainReceiverSplitLocation = ((double) mainReceiverSplitPane
-                    .getDividerLocation() / currentSize);
+                    || ((mainReceiverSplitPane.getDividerLocation() - 1) == 0))) {
+                lastMainReceiverSplitLocation = ((double) mainReceiverSplitPane.getDividerLocation() / currentSize);
             }
         }
         mainReceiverSplitPane.setDividerSize(0);
diff --git a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
index ed6d736..9b86e6f 100644
--- a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
+++ b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,9 +16,8 @@
  */
 package org.apache.log4j.chainsaw.osx;
 
-import org.apache.log4j.chainsaw.logui.LogUI;
-
 import java.awt.Desktop;
+import org.apache.log4j.chainsaw.logui.LogUI;
 
 /**
  * This class leverages the 'Desktop' awt API in order to follow Mac-specific UI guidelines.
@@ -33,27 +32,21 @@
 
     public static void init(final LogUI logUI) {
         if (desktop.isSupported(Desktop.Action.APP_ABOUT)) {
-            desktop.setAboutHandler(e ->
-                logUI.showAboutBox()
-            );
+            desktop.setAboutHandler(e -> logUI.showAboutBox());
         }
 
         if (desktop.isSupported(Desktop.Action.APP_PREFERENCES)) {
-            desktop.setPreferencesHandler(e ->
-                logUI.showApplicationPreferences()
-            );
+            desktop.setPreferencesHandler(e -> logUI.showApplicationPreferences());
         }
 
         if (desktop.isSupported(Desktop.Action.APP_QUIT_HANDLER)) {
             desktop.setQuitHandler((e, r) -> {
-                    if (
-                        logUI.exit()) {
-                        r.performQuit();
-                    } else {
-                        r.cancelQuit();
-                    }
+                if (logUI.exit()) {
+                    r.performQuit();
+                } else {
+                    r.cancelQuit();
                 }
-            );
+            });
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/AbstractSettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/AbstractSettingsEvent.java
index 7dc6d2e..a4285a1 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/AbstractSettingsEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/AbstractSettingsEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -26,14 +26,12 @@
 
     private final File settingsLocation;
 
-
     /**
      * @param source
      */
     public AbstractSettingsEvent(Object source, File settingsLocation) {
         super(source);
         this.settingsLocation = settingsLocation;
-
     }
 
     public File getSettingsLocation() {
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 0b5849e..8625c49 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/LoadSettingsEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -42,12 +42,8 @@
             return Integer.parseInt(val);
         } catch (NumberFormatException e) {
             e.printStackTrace();
-            throw new RuntimeException(
-                "An error occurred retrieving the Integer value of the setting '"
-                    + key
-                    + "'");
+            throw new RuntimeException("An error occurred retrieving the Integer value of the setting '" + key + "'");
         }
-
     }
 
     private final Properties properties;
@@ -70,6 +66,5 @@
         }
 
         return Collections.unmodifiableCollection(c);
-
     }
 }
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 5eebbb2..b099a39 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/MRUFileList.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,16 +16,14 @@
  */
 package org.apache.log4j.chainsaw.prefs;
 
-
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-import java.io.Reader;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EventListener;
 import java.util.List;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.EventListenerList;
 
 // MRU appears to stand for 'most recently used'
 public class MRUFileList {
@@ -38,9 +36,7 @@
 
     private static transient EventListenerList listeners = new EventListenerList();
 
-    private MRUFileList() {
-
-    }
+    private MRUFileList() {}
 
     public static void addChangeListener(ChangeListener listener) {
         listeners.add(ChangeListener.class, listener);
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/ProfileManager.java b/src/main/java/org/apache/log4j/chainsaw/prefs/ProfileManager.java
index 0a01c3e..a4f6a6d 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/ProfileManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/ProfileManager.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,8 +16,6 @@
  */
 package org.apache.log4j.chainsaw.prefs;
 
-import java.util.Properties;
-
 /**
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
@@ -30,17 +28,14 @@
     }
 
     public void configure(Profileable p) {
-//        Properties props = new Properties(SettingsManager.getInstance().getDefaultSettings());
-//        LoadSettingsEvent event = new LoadSettingsEvent(this, props);
-//        p.loadSettings(event);
+        //        Properties props = new Properties(SettingsManager.getInstance().getDefaultSettings());
+        //        LoadSettingsEvent event = new LoadSettingsEvent(this, props);
+        //        p.loadSettings(event);
     }
 
     public void configure(Profileable p, String profileName) {
         throw new UnsupportedOperationException("Not implemented as yet");
     }
 
-    private ProfileManager() {
-
-
-    }
+    private ProfileManager() {}
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/Profileable.java b/src/main/java/org/apache/log4j/chainsaw/prefs/Profileable.java
index 097f7c5..dcc23e2 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/Profileable.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/Profileable.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -34,6 +34,4 @@
      * the default profile name prefix for this component.
      */
     String getNamespace();
-
-
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java
index 4535370..4af43ae 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SaveSettingsEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -24,7 +24,6 @@
  */
 public class SaveSettingsEvent extends AbstractSettingsEvent {
 
-
     SaveSettingsEvent(Object source, File settingsLocation) {
         super(source, settingsLocation);
     }
@@ -57,6 +56,5 @@
      */
     public void saveSetting(String string, boolean b) {
         properties.put(string, b ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
-
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java
index 50f9097..33fafc0 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java
index f94bfa9..10bde4b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
index 99e826b..d69c6a8 100644
--- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -17,6 +17,15 @@
 package org.apache.log4j.chainsaw.prefs;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
 import org.apache.commons.configuration2.AbstractConfiguration;
 import org.apache.commons.configuration2.CombinedConfiguration;
 import org.apache.commons.configuration2.PropertiesConfiguration;
@@ -31,16 +40,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-
 /**
  * SettingManager allows components to register interest in Saving/Loading
  * of general application preferences/settings.
@@ -84,17 +83,13 @@
         if (f.exists()) {
             fileParams.setFile(f);
         } else {
-            URL defaultPrefs = this.getClass().getClassLoader()
-                .getResource("org/apache/log4j/chainsaw/prefs/default.properties");
+            URL defaultPrefs =
+                    this.getClass().getClassLoader().getResource("org/apache/log4j/chainsaw/prefs/default.properties");
             fileParams.setURL(defaultPrefs);
         }
 
-        builder =
-            new FileBasedConfigurationBuilder<>(
-                PropertiesConfiguration.class)
-                .configure(fileParams
-                    .setListDelimiterHandler(new DefaultListDelimiterHandler(','))
-                );
+        builder = new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
+                .configure(fileParams.setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
 
         try {
             PropertiesConfiguration config = builder.getConfiguration();
@@ -118,14 +113,14 @@
 
         // If we get here, it is likely that we have not opened the file.
         // Force a save to create the file
-//        try{
-//            m_builder.save();
-//            PropertiesConfiguration config = m_builder.getConfiguration();
-//            m_configuration = config;
-//            return;
-//        }catch( ConfigurationException ex ){
-//            ex.printStackTrace();
-//        }
+        //        try{
+        //            m_builder.save();
+        //            PropertiesConfiguration config = m_builder.getConfiguration();
+        //            m_configuration = config;
+        //            return;
+        //        }catch( ConfigurationException ex ){
+        //            ex.printStackTrace();
+        //        }
     }
 
     public AbstractConfiguration getGlobalConfiguration() {
@@ -154,19 +149,16 @@
         File f = new File(getSettingsDirectory(), identifier + "-receiver.properties");
 
         if (!f.exists()) {
-            URL defaultPrefs = this.getClass().getClassLoader()
-                .getResource("org/apache/log4j/chainsaw/prefs/logpanel.properties");
+            URL defaultPrefs =
+                    this.getClass().getClassLoader().getResource("org/apache/log4j/chainsaw/prefs/logpanel.properties");
             params.setURL(defaultPrefs);
         } else {
             params.setFile(f);
         }
 
-        FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
-            new FileBasedConfigurationBuilder<>(
-                PropertiesConfiguration.class)
-                .configure(params
-                    .setListDelimiterHandler(new DefaultListDelimiterHandler(','))
-                );
+        FileBasedConfigurationBuilder<PropertiesConfiguration> builder = new FileBasedConfigurationBuilder<>(
+                        PropertiesConfiguration.class)
+                .configure(params.setListDelimiterHandler(new DefaultListDelimiterHandler(',')));
 
         TabSettingsData data = new TabSettingsData();
         data.file = builder;
@@ -209,9 +201,11 @@
 
         for (String key : tabSettings.keySet()) {
             try {
-                logger.debug("Saving {}({}) to {}", key,
-                    tabSettings.get(key).tabSettings,
-                    tabSettings.get(key).file.getFileHandler().getURL());
+                logger.debug(
+                        "Saving {}({}) to {}",
+                        key,
+                        tabSettings.get(key).tabSettings,
+                        tabSettings.get(key).file.getFileHandler().getURL());
                 tabSettings.get(key).file.save();
             } catch (ConfigurationException ex) {
                 logger.error("Unable to save settings for {}", key);
diff --git a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiver.java b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiver.java
index 9caede2..8e21fbf 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiver.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,56 +16,50 @@
  */
 package org.apache.log4j.chainsaw.receiver;
 
+import java.beans.PropertyChangeListener;
 import org.apache.log4j.chainsaw.ChainsawEventBatchListener;
 import org.apache.log4j.chainsaw.logevents.Level;
 
-import java.beans.PropertyChangeListener;
-
 /**
  * A receiver receives log events from a source.
  */
 public interface ChainsawReceiver {
-    
-    void addChainsawEventBatchListener( ChainsawEventBatchListener listen );
-    
-    void removeEventBatchListener( ChainsawEventBatchListener listen );
-    
+
+    void addChainsawEventBatchListener(ChainsawEventBatchListener listen);
+
+    void removeEventBatchListener(ChainsawEventBatchListener listen);
+
     void setThreshold(final Level level);
-    
+
     Level getThreshold();
-    
+
     String getName();
-    
+
     void setName(String name);
-    
+
     int getQueueInterval();
 
     void setQueueInterval(int interval);
-    
+
     void setPaused(boolean paused);
-    
+
     boolean getPaused();
-    
+
     /**
      * Start this receiver by(for example) opening a network socket.
      */
     void start();
-    
+
     /**
      * Stop this receiver by(for example) closing network sockets.
      */
     void shutdown();
-    
+
     void addPropertyChangeListener(final PropertyChangeListener listener);
-    
-    void addPropertyChangeListener(
-        final String propertyName,
-        final PropertyChangeListener listener);
-    
-    void removePropertyChangeListener(
-        final PropertyChangeListener listener);
-    
-    void removePropertyChangeListener(
-        final String propertyName,
-        final PropertyChangeListener listener);
+
+    void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener);
+
+    void removePropertyChangeListener(final PropertyChangeListener listener);
+
+    void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener);
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverFactory.java b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverFactory.java
index f1e77bc..32f239b 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -23,29 +23,29 @@
  * A factory that will create new instances of Receivers
  */
 public interface ChainsawReceiverFactory {
-    
+
     /**
      * Create a new ChainsawReceiver from this factory.
-     * @return 
+     * @return
      */
     ChainsawReceiver create();
-    
+
     /**
      * For the type of ChainsawReceiver that this factory creates,
      * get the property descriptors for the class.
-     * @return 
+     * @return
      */
     PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException;
-    
+
     /**
      * Get the name of the receiver that this factory will create
-     * @return 
+     * @return
      */
     String getReceiverName();
 
     /**
      * Documentation string in HTML format that will be displayed to the user.
-     * 
+     *
      * @return
      */
     String getReceiverDocumentation();
diff --git a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverSkeleton.java b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverSkeleton.java
index ea580df..a45b851 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverSkeleton.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receiver/ChainsawReceiverSkeleton.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,60 +16,57 @@
  */
 package org.apache.log4j.chainsaw.receiver;
 
-import org.apache.log4j.chainsaw.ChainsawEventBatchListener;
-import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-import org.apache.log4j.chainsaw.logevents.Level;
-
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.log4j.chainsaw.ChainsawEventBatchListener;
+import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.chainsaw.logevents.Level;
 
 /**
  *
  */
 public abstract class ChainsawReceiverSkeleton implements ChainsawReceiver {
-    
+
     /**
      * Name of this plugin.
      */
     protected String name = "Receiver";
 
-
     /**
      * This is a delegate that does all the PropertyChangeListener
      * support.
      */
-    private PropertyChangeSupport propertySupport =
-        new PropertyChangeSupport(this);
-    
+    private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
+
     /**
      * Threshold level.
      */
     protected Level thresholdLevel = Level.TRACE;
-    
+
     private List<ChainsawEventBatchListener> m_eventListeners;
     private WorkQueue m_worker;
     private final Object mutex = new Object();
     private int m_sleepInterval = 1000;
     private boolean m_paused = false;
-    
-    public ChainsawReceiverSkeleton(){
+
+    public ChainsawReceiverSkeleton() {
         m_eventListeners = new ArrayList<>();
         m_worker = new WorkQueue();
     }
 
     @Override
     public void addChainsawEventBatchListener(ChainsawEventBatchListener listen) {
-        if( listen != null ){
-            m_eventListeners.add( listen );
+        if (listen != null) {
+            m_eventListeners.add(listen);
         }
     }
 
     @Override
     public void removeEventBatchListener(ChainsawEventBatchListener listen) {
-        if( listen != null ){
-            m_eventListeners.remove( listen );
+        if (listen != null) {
+            m_eventListeners.remove(listen);
         }
     }
 
@@ -92,7 +89,7 @@
 
     @Override
     public void setName(String name) {
-        if( this.name.equals(name) ){
+        if (this.name.equals(name)) {
             return;
         }
 
@@ -120,7 +117,7 @@
     public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
         propertySupport.removePropertyChangeListener(propertyName, listener);
     }
-    
+
     @Override
     public int getQueueInterval() {
         return m_sleepInterval;
@@ -130,28 +127,28 @@
     public void setQueueInterval(int interval) {
         m_sleepInterval = interval;
     }
-    
+
     @Override
-    public void setPaused(boolean paused){
+    public void setPaused(boolean paused) {
         m_paused = paused;
     }
-    
+
     @Override
-    public boolean getPaused(){
+    public boolean getPaused() {
         return m_paused;
     }
-    
+
     /**
      * Whenever a new log event comes in, create a ChainsawLoggingEvent and call
      * this method.  If this receiver is paused, discard the event.
-     * 
-     * @param event 
+     *
+     * @param event
      */
-    public void append(final ChainsawLoggingEvent event){
-        if( m_paused ) return;
+    public void append(final ChainsawLoggingEvent event) {
+        if (m_paused) return;
         m_worker.enqueue(event);
     }
-    
+
     /**
      * Queue of Events are placed in here, which are picked up by an asychronous
      * thread. The WorkerThread looks for events once a second and processes all
@@ -196,7 +193,7 @@
                     synchronized (mutex) {
                         try {
                             while ((queue.size() == 0)) {
-//                                setDataRate(0);
+                                //                                setDataRate(0);
                                 mutex.wait();
                             }
                             if (queue.size() > 0) {
@@ -207,10 +204,10 @@
                         }
                     }
 
-                    for( ChainsawEventBatchListener evtListner : m_eventListeners ){
+                    for (ChainsawEventBatchListener evtListner : m_eventListeners) {
                         evtListner.receiveChainsawEventBatch(innerList);
                     }
-                    
+
                     if (getQueueInterval() > 1000) {
                         try {
                             synchronized (this) {
@@ -221,14 +218,14 @@
                     } else {
                         Thread.yield();
                     }
-//                    if (size == 0) {
-//                        setDataRate(0.0);
-//                    } else {
-//                        long timeEnd = System.currentTimeMillis();
-//                        long diffInSeconds = (timeEnd - timeStart) / 1000;
-//                        double rate = (((double) size) / diffInSeconds);
-//                        setDataRate(rate);
-//                    }
+                    //                    if (size == 0) {
+                    //                        setDataRate(0.0);
+                    //                    } else {
+                    //                        long timeEnd = System.currentTimeMillis();
+                    //                        long diffInSeconds = (timeEnd - timeStart) / 1000;
+                    //                        double rate = (((double) size) / diffInSeconds);
+                    //                        setDataRate(rate);
+                    //                    }
                 }
             }
         }
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
index ae9f1c6..58778b6 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/NewReceiverDialogPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.receivers;
 
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverFactory;
-import org.apache.log4j.chainsaw.helper.OkCancelPanel;
-
-import javax.swing.*;
 import java.awt.*;
 import java.beans.IntrospectionException;
-
+import javax.swing.*;
+import org.apache.log4j.chainsaw.helper.OkCancelPanel;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverFactory;
 
 /**
  * A panel that allows a user to configure a new Plugin, and
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
index fcbdb29..5f1001f 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/PluginPropertyEditorPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,24 +16,21 @@
  */
 package org.apache.log4j.chainsaw.receivers;
 
-import org.apache.log4j.chainsaw.logevents.Level;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.helper.TableCellEditorFactory;
-
+import java.awt.*;
+import java.beans.PropertyDescriptor;
+import java.util.*;
+import java.util.List;
 import javax.swing.*;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellEditor;
 import javax.swing.table.TableModel;
-import java.awt.*;
-import java.beans.PropertyDescriptor;
-import java.util.*;
-import java.util.List;
-
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.helper.TableCellEditorFactory;
+import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A panel that allows the user to edit a particular Plugin, by using introspection
@@ -47,8 +44,7 @@
     private final JTable propertyTable = new JTable();
 
     private ChainsawReceiver m_receiver;
-    private TableModel defaultModel = new DefaultTableModel(
-        new String[]{"Property", "Value"}, 1);
+    private TableModel defaultModel = new DefaultTableModel(new String[] {"Property", "Value"}, 1);
 
     private static final Logger logger = LogManager.getLogger();
 
@@ -70,18 +66,14 @@
 
         add(scrollPane, BorderLayout.CENTER);
 
-        propertyTable.setModel(
-            defaultModel = new DefaultTableModel(
-                new String[]{"Property", "Value"}, 1));
-
+        propertyTable.setModel(defaultModel = new DefaultTableModel(new String[] {"Property", "Value"}, 1));
     }
 
     /**
      * @return Returns the plugin.
      */
     public final ChainsawReceiver getPlugin() {
-        propertyTable.getColumnModel().getColumn(1)
-            .getCellEditor().stopCellEditing();
+        propertyTable.getColumnModel().getColumn(1).getCellEditor().stopCellEditing();
         return m_receiver;
     }
 
@@ -90,15 +82,13 @@
      */
     public final void setReceiverAndProperties(ChainsawReceiver plugin, PropertyDescriptor[] descriptors) {
         this.m_receiver = plugin;
-        
-        if(descriptors != null){
-            PluginPropertyTableModel model =
-                new PluginPropertyTableModel(descriptors);
+
+        if (descriptors != null) {
+            PluginPropertyTableModel model = new PluginPropertyTableModel(descriptors);
             propertyTable.setModel(model);
-            propertyTable.getColumnModel().getColumn(1)
-                .setCellEditor(new PluginTableCellEditor());
+            propertyTable.getColumnModel().getColumn(1).setCellEditor(new PluginTableCellEditor());
             propertyTable.setEnabled(true);
-        }else{
+        } else {
             propertyTable.setModel(defaultModel);
             propertyTable.setEnabled(false);
         }
@@ -107,29 +97,25 @@
     /**
      * @author psmith
      */
-    private class PluginTableCellEditor extends AbstractCellEditor
-        implements TableCellEditor {
+    private class PluginTableCellEditor extends AbstractCellEditor implements TableCellEditor {
 
         private Map editorMap = new HashMap();
-        private DefaultCellEditor defaultEditor = new DefaultCellEditor(
-            new JTextField());
+        private DefaultCellEditor defaultEditor = new DefaultCellEditor(new JTextField());
         private DefaultCellEditor currentEditor = defaultEditor;
 
         private PluginTableCellEditor() {
 
-            editorMap.put(Boolean.class,
-                TableCellEditorFactory.createBooleanTableCellEditor());
-            editorMap.put(Level.class,
-                TableCellEditorFactory.createLevelTableCellEditor());
-            //support primitive boolean parameters with the appropriate editor
+            editorMap.put(Boolean.class, TableCellEditorFactory.createBooleanTableCellEditor());
+            editorMap.put(Level.class, TableCellEditorFactory.createLevelTableCellEditor());
+            // support primitive boolean parameters with the appropriate editor
             editorMap.put(boolean.class, TableCellEditorFactory.createBooleanTableCellEditor());
         }
 
         /* (non-Javadoc)
          * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
          */
-        public Component getTableCellEditorComponent(JTable table, Object value,
-                                                     boolean isSelected, int row, int column) {
+        public Component getTableCellEditorComponent(
+                JTable table, Object value, boolean isSelected, int row, int column) {
 
             PluginPropertyTableModel model = (PluginPropertyTableModel) table.getModel();
             PropertyDescriptor descriptor = model.getDescriptors()[row];
@@ -137,22 +123,18 @@
 
             if (editorMap.containsKey(valueClass)) {
 
-                DefaultCellEditor editor =
-                    (DefaultCellEditor) editorMap.get(valueClass);
+                DefaultCellEditor editor = (DefaultCellEditor) editorMap.get(valueClass);
                 logger.debug("Located CellEditor for " + valueClass);
                 currentEditor = editor;
 
-                return currentEditor.getTableCellEditorComponent(table, value,
-                    isSelected, row, column);
+                return currentEditor.getTableCellEditorComponent(table, value, isSelected, row, column);
             }
 
             currentEditor = defaultEditor;
-            logger.debug("Cell value class " + valueClass +
-                " not know, using default editor");
+            logger.debug("Cell value class " + valueClass + " not know, using default editor");
 
-            Component c = defaultEditor.getTableCellEditorComponent(table, value,
-                isSelected, row, column);
-            table.setRowHeight( row, c.getPreferredSize().height );
+            Component c = defaultEditor.getTableCellEditorComponent(table, value, isSelected, row, column);
+            table.setRowHeight(row, c.getPreferredSize().height);
             return c;
         }
 
@@ -163,29 +145,24 @@
 
             return currentEditor.getCellEditorValue();
         }
-
     }
 
     private class PluginPropertyTableModel extends AbstractTableModel {
 
         private final PropertyDescriptor[] descriptors;
 
-        private PluginPropertyTableModel(PropertyDescriptor[] descriptors){
+        private PluginPropertyTableModel(PropertyDescriptor[] descriptors) {
             super();
 
-            List<PropertyDescriptor> list = new ArrayList<>(Arrays.asList(
-                descriptors));
+            List<PropertyDescriptor> list = new ArrayList<>(Arrays.asList(descriptors));
 
             list.sort((o1, o2) -> {
-
                 PropertyDescriptor d1 = (PropertyDescriptor) o1;
                 PropertyDescriptor d2 = (PropertyDescriptor) o2;
 
-                return d1.getDisplayName().compareToIgnoreCase(
-                    d2.getDisplayName());
+                return d1.getDisplayName().compareToIgnoreCase(d2.getDisplayName());
             });
-            this.descriptors = list.toArray(
-                new PropertyDescriptor[0]);
+            this.descriptors = list.toArray(new PropertyDescriptor[0]);
         }
 
         /* (non-Javadoc)
@@ -196,9 +173,7 @@
             PropertyDescriptor d = descriptors[row];
 
             switch (col) {
-
                 case 1:
-
                     try {
 
                         Object object = d.getReadMethod().invoke(m_receiver);
@@ -208,8 +183,7 @@
                             return object;
                         }
                     } catch (Exception e) {
-                        logger.error(
-                            "Error reading value for PropertyDescriptor " + d);
+                        logger.error("Error reading value for PropertyDescriptor " + d);
                     }
 
                     return "";
@@ -242,9 +216,8 @@
          */
         public boolean isCellEditable(int rowIndex, int columnIndex) {
 
-//        TODO Determine if the property is one of the ones a User could edit
+            //        TODO Determine if the property is one of the ones a User could edit
             return columnIndex == 1 && descriptors[rowIndex].getWriteMethod() != null;
-
         }
 
         /* (non-Javadoc)
@@ -260,27 +233,24 @@
          */
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
 
-
             if (columnIndex == 1) {
-                //ensure name is set
-                if (descriptors[rowIndex].getName().equalsIgnoreCase("name") && (aValue == null || aValue.toString().trim().isEmpty())) {
+                // ensure name is set
+                if (descriptors[rowIndex].getName().equalsIgnoreCase("name")
+                        && (aValue == null || aValue.toString().trim().isEmpty())) {
                     logger.error("Name required");
                     return;
                 }
                 aValue = translateValueIfNeeded(rowIndex, aValue);
-                logger.debug(
-                    "setValueAt, " + rowIndex + ", " + columnIndex +
-                        ", value=" + aValue + ", valueClass" + aValue.getClass());
+                logger.debug("setValueAt, " + rowIndex + ", " + columnIndex + ", value=" + aValue + ", valueClass"
+                        + aValue.getClass());
 
                 try {
-                    descriptors[rowIndex].getWriteMethod().invoke(m_receiver,
-                        aValue);
+                    descriptors[rowIndex].getWriteMethod().invoke(m_receiver, aValue);
                     fireTableCellUpdated(rowIndex, columnIndex);
                 } catch (IllegalArgumentException e) {
                     // ignore
                 } catch (Exception e) {
-                    logger.error(
-                        "Failed to modify the Plugin because of Exception", e);
+                    logger.error("Failed to modify the Plugin because of Exception", e);
                 }
 
             } else {
@@ -298,8 +268,8 @@
          */
         private Object translateValueIfNeeded(int row, Object value) {
 
-            if ((descriptors[row].getPropertyType() == int.class) ||
-                (descriptors[row].getPropertyType() == Integer.class)) {
+            if ((descriptors[row].getPropertyType() == int.class)
+                    || (descriptors[row].getPropertyType() == Integer.class)) {
 
                 try {
 
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 f7ecc63..3cfb7af 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiverTreeCellRenderer.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,20 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.receivers;
 
-import org.apache.log4j.chainsaw.components.tutorial.Generator;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.icons.LevelIconFactory;
-
+import java.awt.*;
 import javax.swing.*;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellRenderer;
-import java.awt.*;
+import org.apache.log4j.chainsaw.components.tutorial.Generator;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.icons.LevelIconFactory;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
 
-
 /**
  * A TreeCellRenderer that can format the information of Receivers
  * and their children
@@ -45,16 +42,14 @@
         panel.setLayout(layout);
         panel.setOpaque(false);
         panel.add(levelLabel);
-        //set preferredsize to something wide
+        // set preferredsize to something wide
         setPreferredSize(new Dimension(200, 19));
         panel.add(this);
     }
 
     public Component getTreeCellRendererComponent(
-        JTree tree, Object value, boolean sel, boolean expanded, boolean leaf,
-        int row, boolean focus) {
-        super.getTreeCellRendererComponent(
-            tree, value, sel, expanded, leaf, row, focus);
+            JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean focus) {
+        super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, focus);
 
         DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
         Object o = node.getUserObject();
@@ -63,8 +58,7 @@
         String tooltip = "";
 
         setIcon(null);
-        if (
-            o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
+        if (o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
             setText(o.toString());
         } else if (o instanceof String) {
             setText(o.toString());
@@ -73,14 +67,13 @@
             Generator generator = (Generator) o;
             setText(generator.getName());
             setIcon(ChainsawIcons.ICON_HELP);
-        }else if(o instanceof ChainsawReceiver){
+        } else if (o instanceof ChainsawReceiver) {
             setText(((ChainsawReceiver) o).getName());
         } else {
             setText("(Unknown Type) :: " + o);
         }
 
-        if (
-            o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
+        if (o == ((ReceiversTreeModel) tree.getModel()).getRootNode().getUserObject()) {
             setIcon(rootIcon);
         }
 
@@ -90,10 +83,10 @@
         if (o instanceof ChainsawReceiver) {
             ChainsawReceiver t = (ChainsawReceiver) o;
 
-            if (t.getThreshold()!= null) {
-                levelLabel.setIcon(
-                    LevelIconFactory.getInstance().getLevelToIconMap().get(
-                        t.getThreshold().toString()));
+            if (t.getThreshold() != null) {
+                levelLabel.setIcon(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/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index 505b120..7b2656a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,29 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.receivers;
 
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverFactory;
-import org.apache.log4j.chainsaw.ChainsawStatusBar;
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.log4j.chainsaw.PopupListener;
-import org.apache.log4j.chainsaw.components.elements.SmallButton;
-import org.apache.log4j.chainsaw.help.HelpManager;
-import org.apache.log4j.chainsaw.helper.SwingHelper;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.icons.LevelIconFactory;
-import org.apache.log4j.chainsaw.logevents.Level;
-import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
-import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
-import org.apache.log4j.chainsaw.prefs.SettingsListener;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
 import javax.swing.*;
 import javax.swing.event.TreeExpansionEvent;
 import javax.swing.event.TreeModelEvent;
@@ -55,22 +49,25 @@
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ServiceLoader;
-
+import org.apache.log4j.chainsaw.ChainsawStatusBar;
+import org.apache.log4j.chainsaw.PopupListener;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.help.HelpManager;
+import org.apache.log4j.chainsaw.helper.SwingHelper;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.icons.LevelIconFactory;
+import org.apache.log4j.chainsaw.logevents.Level;
+import org.apache.log4j.chainsaw.logui.LogUI;
+import org.apache.log4j.chainsaw.prefs.LoadSettingsEvent;
+import org.apache.log4j.chainsaw.prefs.SaveSettingsEvent;
+import org.apache.log4j.chainsaw.prefs.SettingsListener;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 /**
  * This panel is used to manage all the Receivers configured within Log4j
@@ -89,22 +86,23 @@
     private final Action startAllAction;
     private final JPopupMenu popupMenu = new ReceiverPopupMenu();
     private final JTree receiversTree = new JTree();
-    private final NewReceiverPopupMenu newReceiverPopup =
-        new NewReceiverPopupMenu();
+    private final NewReceiverPopupMenu newReceiverPopup = new NewReceiverPopupMenu();
     private final ReceiverToolbar buttonPanel;
     private final JSplitPane splitter = new JSplitPane();
-    private final PluginPropertyEditorPanel pluginEditorPanel =
-        new PluginPropertyEditorPanel();
+    private final PluginPropertyEditorPanel pluginEditorPanel = new PluginPropertyEditorPanel();
     private final Logger logger = LogManager.getLogger(ReceiversPanel.class);
 
     private final LogUI m_parent;
-    private final Map<Class,PropertyDescriptor[]> m_classToProperties = 
-            new HashMap<>();
+    private final Map<Class, PropertyDescriptor[]> m_classToProperties = new HashMap<>();
     private SettingsManager settingsManager;
     private List<ChainsawReceiver> receivers;
     private final ChainsawStatusBar statusBar;
 
-    public ReceiversPanel(SettingsManager settingsManager, List<ChainsawReceiver> receivers, LogUI parentUi, ChainsawStatusBar statusBar) {
+    public ReceiversPanel(
+            SettingsManager settingsManager,
+            List<ChainsawReceiver> receivers,
+            LogUI parentUi,
+            ChainsawStatusBar statusBar) {
         super(new BorderLayout());
         this.settingsManager = settingsManager;
         this.receivers = receivers;
@@ -116,212 +114,169 @@
         receiversTree.setModel(model);
 
         receiversTree.setExpandsSelectedPaths(true);
-        model.addTreeModelListener(
-            new TreeModelListener() {
-                public void treeNodesChanged(TreeModelEvent e) {
-                    expandRoot();
+        model.addTreeModelListener(new TreeModelListener() {
+            public void treeNodesChanged(TreeModelEvent e) {
+                expandRoot();
+            }
+
+            public void treeNodesInserted(TreeModelEvent e) {
+                expandRoot();
+            }
+
+            public void treeNodesRemoved(TreeModelEvent e) {
+                expandRoot();
+            }
+
+            public void treeStructureChanged(TreeModelEvent e) {
+                expandRoot();
+            }
+
+            private void expandRoot() {
+                receiversTree.expandPath(new TreePath(model.getPathToRoot(model.RootNode)));
+            }
+        });
+        receiversTree.expandPath(new TreePath(model.getPathToRoot(model.RootNode)));
+
+        receiversTree.addTreeWillExpandListener(new TreeWillExpandListener() {
+            public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoException {
+                if (event.getPath().getLastPathComponent() == model.RootNode) {
+                    throw new ExpandVetoException(event);
                 }
+            }
 
-                public void treeNodesInserted(TreeModelEvent e) {
-                    expandRoot();
+            public void treeWillExpand(TreeExpansionEvent event) {}
+        });
+
+        receiversTree.addTreeSelectionListener(e -> {
+            TreePath path = e.getNewLeadSelectionPath();
+
+            if (path != null) {
+                DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
+
+                if ((node != null)
+                        && (node.getUserObject() != null)
+                        && (node.getUserObject() instanceof ChainsawReceiver)) {
+                    ChainsawReceiver p = (ChainsawReceiver) node.getUserObject();
+                    logger.debug("plugin={}", p);
+                    pluginEditorPanel.setReceiverAndProperties(p, m_classToProperties.get(p.getClass()));
+                } else {
+                    pluginEditorPanel.setReceiverAndProperties(null, null);
                 }
-
-                public void treeNodesRemoved(TreeModelEvent e) {
-                    expandRoot();
-                }
-
-                public void treeStructureChanged(TreeModelEvent e) {
-                    expandRoot();
-                }
-
-                private void expandRoot() {
-                    receiversTree.expandPath(
-                        new TreePath(model.getPathToRoot(model.RootNode)));
-                }
-            });
-        receiversTree.expandPath(
-            new TreePath(model.getPathToRoot(model.RootNode)));
-
-        receiversTree.addTreeWillExpandListener(
-            new TreeWillExpandListener() {
-                public void treeWillCollapse(TreeExpansionEvent event)
-                    throws ExpandVetoException {
-                    if (event.getPath().getLastPathComponent() == model.RootNode) {
-                        throw new ExpandVetoException(event);
-                    }
-                }
-
-                public void treeWillExpand(TreeExpansionEvent event) {
-                }
-            });
-
-        receiversTree.addTreeSelectionListener(
-            e -> {
-                TreePath path = e.getNewLeadSelectionPath();
-
-                if (path != null) {
-                    DefaultMutableTreeNode node =
-                        (DefaultMutableTreeNode) path.getLastPathComponent();
-
-                    if (
-                        (node != null) && (node.getUserObject() != null)
-                            && (node.getUserObject() instanceof ChainsawReceiver)) {
-                        ChainsawReceiver p = (ChainsawReceiver) node.getUserObject();
-                        logger.debug("plugin={}", p);
-                        pluginEditorPanel.setReceiverAndProperties(p, 
-                                m_classToProperties.get(p.getClass()));
-                    } else {
-                        pluginEditorPanel.setReceiverAndProperties(null, null);
-                    }
-                }
-            });
+            }
+        });
 
         receiversTree.setToolTipText("Allows you to manage Log4j Receivers");
-        newReceiverButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    newReceiverPopup.show(
-                        buttonPanel.newReceiverButton, 0,
-                        buttonPanel.newReceiverButton.getHeight());
-                }
-            };
-        newReceiverButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_NEW_RECEIVER));
-        newReceiverButtonAction.putValue(
-            Action.SHORT_DESCRIPTION, "Creates and configures a new Receiver");
+        newReceiverButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                newReceiverPopup.show(buttonPanel.newReceiverButton, 0, buttonPanel.newReceiverButton.getHeight());
+            }
+        };
+        newReceiverButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_NEW_RECEIVER));
+        newReceiverButtonAction.putValue(Action.SHORT_DESCRIPTION, "Creates and configures a new Receiver");
         newReceiverButtonAction.putValue(Action.NAME, "New Receiver");
-        newReceiverButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_N);
+        newReceiverButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_N);
 
         newReceiverButtonAction.setEnabled(true);
 
-        playReceiverButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    playCurrentlySelectedReceiver();
-                }
-            };
+        playReceiverButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                playCurrentlySelectedReceiver();
+            }
+        };
 
-        playReceiverButtonAction.putValue(
-            Action.SHORT_DESCRIPTION, "Resumes the selected Node");
+        playReceiverButtonAction.putValue(Action.SHORT_DESCRIPTION, "Resumes the selected Node");
         playReceiverButtonAction.putValue(Action.NAME, "Resume");
-        playReceiverButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER));
+        playReceiverButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER));
         playReceiverButtonAction.setEnabled(false);
-        playReceiverButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_R);
+        playReceiverButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_R);
 
-        pauseReceiverButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    pauseCurrentlySelectedReceiver();
-                }
-            };
+        pauseReceiverButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                pauseCurrentlySelectedReceiver();
+            }
+        };
 
         pauseReceiverButtonAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Pause the selected Receiver.  All events received will be discarded.");
+                Action.SHORT_DESCRIPTION, "Pause the selected Receiver.  All events received will be discarded.");
         pauseReceiverButtonAction.putValue(Action.NAME, "Pause");
 
-        pauseReceiverButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_P);
+        pauseReceiverButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_P);
 
-        pauseReceiverButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
+        pauseReceiverButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.PAUSE));
         pauseReceiverButtonAction.setEnabled(false);
 
-        shutdownReceiverButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    shutdownCurrentlySelectedReceiver();
-                }
-            };
+        shutdownReceiverButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                shutdownCurrentlySelectedReceiver();
+            }
+        };
 
         shutdownReceiverButtonAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Shuts down the selected Receiver, and removes it from the Plugin registry");
+                Action.SHORT_DESCRIPTION, "Shuts down the selected Receiver, and removes it from the Plugin registry");
         shutdownReceiverButtonAction.putValue(Action.NAME, "Shutdown");
 
-        shutdownReceiverButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER));
-        shutdownReceiverButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_S);
+        shutdownReceiverButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER));
+        shutdownReceiverButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_S);
 
         shutdownReceiverButtonAction.setEnabled(false);
 
-        saveReceiversButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    saveReceivers();
-                }
-            };
+        saveReceiversButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                saveReceivers();
+            }
+        };
 
-        saveReceiversButtonAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Save the current receiver configuration");
+        saveReceiversButtonAction.putValue(Action.SHORT_DESCRIPTION, "Save the current receiver configuration");
         saveReceiversButtonAction.putValue(Action.NAME, "Save receivers");
 
-        saveReceiversButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_SAVE_AS));
-        saveReceiversButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_V);
+        saveReceiversButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.FILE_SAVE_AS));
+        saveReceiversButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_V);
 
-
-        restartReceiverButtonAction =
-            new AbstractAction() {
-                public void actionPerformed(ActionEvent e) {
-                    ChainsawReceiver selectedReceiver = getCurrentlySelectedReceiver();
-                    if (selectedReceiver == null) {
-                        return;
-                    }
-                    selectedReceiver.shutdown();
-                    selectedReceiver.start();
-                    //allow the visual receiver to get a container on restart
-                    if (selectedReceiver instanceof VisualReceiver) {
-                        ((VisualReceiver) selectedReceiver).setContainer(ReceiversPanel.this);
-                    }
+        restartReceiverButtonAction = new AbstractAction() {
+            public void actionPerformed(ActionEvent e) {
+                ChainsawReceiver selectedReceiver = getCurrentlySelectedReceiver();
+                if (selectedReceiver == null) {
+                    return;
                 }
-            };
+                selectedReceiver.shutdown();
+                selectedReceiver.start();
+                // allow the visual receiver to get a container on restart
+                if (selectedReceiver instanceof VisualReceiver) {
+                    ((VisualReceiver) selectedReceiver).setContainer(ReceiversPanel.this);
+                }
+            }
+        };
 
-        restartReceiverButtonAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Restarts the selected Receiver");
+        restartReceiverButtonAction.putValue(Action.SHORT_DESCRIPTION, "Restarts the selected Receiver");
         restartReceiverButtonAction.putValue(Action.NAME, "Restart");
 
-        restartReceiverButtonAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESTART));
-        restartReceiverButtonAction.putValue(
-            Action.MNEMONIC_KEY, KeyEvent.VK_R);
+        restartReceiverButtonAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.ICON_RESTART));
+        restartReceiverButtonAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_R);
 
         restartReceiverButtonAction.setEnabled(false);
 
-        showReceiverHelpAction =
-            new AbstractAction("Help") {
-                public void actionPerformed(ActionEvent e) {
-                    ChainsawReceiver receiver = getCurrentlySelectedReceiver();
+        showReceiverHelpAction = new AbstractAction("Help") {
+            public void actionPerformed(ActionEvent e) {
+                ChainsawReceiver receiver = getCurrentlySelectedReceiver();
 
-                    if (receiver != null) {
-                        HelpManager.getInstance().showHelpForClass(receiver.getClass());
-                    }
+                if (receiver != null) {
+                    HelpManager.getInstance().showHelpForClass(receiver.getClass());
                 }
-            };
+            }
+        };
 
-        showReceiverHelpAction.putValue(
-            Action.SMALL_ICON, new ImageIcon(ChainsawIcons.HELP));
-        showReceiverHelpAction.putValue(
-            Action.SHORT_DESCRIPTION, "Displays the JavaDoc page for this Plugin");
+        showReceiverHelpAction.putValue(Action.SMALL_ICON, new ImageIcon(ChainsawIcons.HELP));
+        showReceiverHelpAction.putValue(Action.SHORT_DESCRIPTION, "Displays the JavaDoc page for this Plugin");
 
-        startAllAction =
-            new AbstractAction(
-                "(Re)start All Receivers", new ImageIcon(ChainsawIcons.ICON_RESTART_ALL)) {
-                public void actionPerformed(ActionEvent e) {
-                    if (
-                        JOptionPane.showConfirmDialog(
-                            null,
-                            "This will cause any active Receiver to stop, and disconnect.  Is this ok?",
-                            "Confirm", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
-                        new Thread(
-                            () -> {
+        startAllAction = new AbstractAction("(Re)start All Receivers", new ImageIcon(ChainsawIcons.ICON_RESTART_ALL)) {
+            public void actionPerformed(ActionEvent e) {
+                if (JOptionPane.showConfirmDialog(
+                                null,
+                                "This will cause any active Receiver to stop, and disconnect.  Is this ok?",
+                                "Confirm",
+                                JOptionPane.OK_CANCEL_OPTION)
+                        == JOptionPane.OK_OPTION) {
+                    new Thread(() -> {
                                 List<ChainsawReceiver> allReceivers = m_parent.getAllReceivers();
 
                                 for (ChainsawReceiver rx : allReceivers) {
@@ -330,14 +285,15 @@
                                 }
 
                                 statusBar.setMessage("All Receivers have been (re)started");
-                            }).start();
-                    }
+                            })
+                            .start();
                 }
-            };
+            }
+        };
 
         startAllAction.putValue(
-            Action.SHORT_DESCRIPTION,
-            "Ensures that any Receiver that isn't active, is started, and any started action is stopped, and then restarted");
+                Action.SHORT_DESCRIPTION,
+                "Ensures that any Receiver that isn't active, is started, and any started action is stopped, and then restarted");
 
         receiversTree.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
         receiversTree.setCellRenderer(new ReceiverTreeCellRenderer());
@@ -369,9 +325,9 @@
         }
     }
 
-    public void saveReceiversToFile(File file){
+    public void saveReceiversToFile(File file) {
         try {
-            //we programmatically register the ZeroConf plugin in the plugin registry
+            // we programmatically register the ZeroConf plugin in the plugin registry
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
             factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
@@ -403,7 +359,6 @@
                 }
 
                 rootElement.appendChild(pluginElement);
-
             }
 
             TransformerFactory transformerFactory = TransformerFactory.newInstance();
@@ -418,9 +373,10 @@
             stream.close();
 
         } catch (Exception e) {
-            logger.error(e,e);
+            logger.error(e, e);
         }
     }
+
     protected ReceiversTreeModel getReceiverTreeModel() {
         return ((ReceiversTreeModel) receiversTree.getModel());
     }
@@ -429,19 +385,16 @@
      *
      */
     protected void updateCurrentlySelectedNodeInDispatchThread() {
-        SwingUtilities.invokeLater(
-            () -> {
-                DefaultMutableTreeNode node =
-                    (DefaultMutableTreeNode) receiversTree
-                        .getLastSelectedPathComponent();
+        SwingUtilities.invokeLater(() -> {
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
 
-                if (node == null) {
-                    return;
-                }
+            if (node == null) {
+                return;
+            }
 
-                getReceiverTreeModel().nodeChanged(node);
-                updateActions();
-            });
+            getReceiverTreeModel().nodeChanged(node);
+            updateActions();
+        });
     }
 
     /**
@@ -452,8 +405,7 @@
      * @return Receiver or null
      */
     private ChainsawReceiver getCurrentlySelectedReceiver() {
-        DefaultMutableTreeNode node =
-            (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
+        DefaultMutableTreeNode node = (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
 
         if (node == null) {
             return null;
@@ -473,8 +425,7 @@
         Collection receivers = new ArrayList();
 
         for (TreePath path : paths) {
-            DefaultMutableTreeNode node =
-                (DefaultMutableTreeNode) path.getLastPathComponent();
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
 
             if ((node != null) && node.getUserObject() instanceof ChainsawReceiver) {
                 receivers.add(node.getUserObject());
@@ -492,8 +443,7 @@
      * @return Object representing currently seleted Node's User Object
      */
     private Object getCurrentlySelectedUserObject() {
-        DefaultMutableTreeNode node =
-            (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
+        DefaultMutableTreeNode node = (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
 
         if (node == null) {
             return null;
@@ -530,21 +480,22 @@
      * The user is asked to confirm this operation
      */
     private void shutdownCurrentlySelectedReceiver() {
-        if (
-            JOptionPane.showConfirmDialog(
-                null,
-                "Are you sure you wish to shutdown this receiver?\n\nThis will disconnect any network resources, and remove it from the PluginRegistry.",
-                "Confirm stop of Receiver", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
-            new Thread(
-                () -> {
-                    ChainsawReceiver[] receivers = getSelectedReceivers();
+        if (JOptionPane.showConfirmDialog(
+                        null,
+                        "Are you sure you wish to shutdown this receiver?\n\nThis will disconnect any network resources, and remove it from the PluginRegistry.",
+                        "Confirm stop of Receiver",
+                        JOptionPane.YES_NO_OPTION)
+                == JOptionPane.YES_OPTION) {
+            new Thread(() -> {
+                        ChainsawReceiver[] receivers = getSelectedReceivers();
 
-                    if (receivers != null) {
-                        for (ChainsawReceiver receiver : receivers) {
-                            receiver.shutdown();
+                        if (receivers != null) {
+                            for (ChainsawReceiver receiver : receivers) {
+                                receiver.shutdown();
+                            }
                         }
-                    }
-                }).start();
+                    })
+                    .start();
         }
     }
 
@@ -589,14 +540,12 @@
         firePropertyChange("visible", oldValue, isVisible());
     }
 
-    public void loadSettings(LoadSettingsEvent event) {
-    }
+    public void loadSettings(LoadSettingsEvent event) {}
 
     /**
      * Saves all the receivers which are active at shut down as a configuration
      * file which can be loaded when Chainsaw will be restarted.
      */
-
     public void saveSettings(SaveSettingsEvent event) {
         File file = new File(SettingsManager.getSettingsDirectory(), "receiver-config.xml");
         saveReceiversToFile(file);
@@ -612,54 +561,54 @@
     class NewReceiverPopupMenu extends JPopupMenu {
         NewReceiverPopupMenu() {
             ServiceLoader<ChainsawReceiverFactory> sl = ServiceLoader.load(ChainsawReceiverFactory.class);
-            
-            for( ChainsawReceiverFactory crFactory : sl ){
-                add(
-                    new AbstractAction("New " + crFactory.getReceiverName() + "...") {
-                        public void actionPerformed(ActionEvent e) {
-                            Container container = SwingUtilities.getAncestorOfClass(JFrame.class, ReceiversPanel.this);
-                            final JDialog dialog = new JDialog((JFrame) container, "New " + crFactory.getReceiverName() + "...", true);
 
-                            try {
-                                final NewReceiverDialogPanel panel =
-                                    NewReceiverDialogPanel.create(crFactory);
-                                dialog.getContentPane().add(panel);
-                                dialog.pack();
-                                SwingHelper.centerOnScreen(dialog);
+            for (ChainsawReceiverFactory crFactory : sl) {
+                add(new AbstractAction("New " + crFactory.getReceiverName() + "...") {
+                    public void actionPerformed(ActionEvent e) {
+                        Container container = SwingUtilities.getAncestorOfClass(JFrame.class, ReceiversPanel.this);
+                        final JDialog dialog =
+                                new JDialog((JFrame) container, "New " + crFactory.getReceiverName() + "...", true);
 
-                                /*
-                                 * Make the default button the ok button
-                                 */
-                                dialog.getRootPane().setDefaultButton(panel.getOkPanel().getOkButton());
+                        try {
+                            final NewReceiverDialogPanel panel = NewReceiverDialogPanel.create(crFactory);
+                            dialog.getContentPane().add(panel);
+                            dialog.pack();
+                            SwingHelper.centerOnScreen(dialog);
 
-                                /*
-                                 * Use the standard Cancel metaphor
-                                 */
-                                SwingHelper.configureCancelForDialog(dialog, panel.getOkPanel().getCancelButton());
+                            /*
+                             * Make the default button the ok button
+                             */
+                            dialog.getRootPane()
+                                    .setDefaultButton(panel.getOkPanel().getOkButton());
 
-                                final PropertyDescriptor[] descriptors = crFactory.getPropertyDescriptors();
-                                panel.getOkPanel().getOkButton().addActionListener(
-                                    e2 -> {
-                                        ChainsawReceiver receiver = panel.getReceiver();
-                                        if (receiver.getName() != null && !receiver.getName().trim().isEmpty()) {
-                                            dialog.dispose();
-                                            // Notify the LogUI that a new reciever has been created so it can spawn a new tab
-                                            m_parent.addReceiver(receiver);
-                                            receiver.start();
-                                            m_classToProperties.put(receiver.getClass(), descriptors);
-                                            statusBar.setMessage("Receiver '" + receiver.getName() + "' started");
-                                        } else {
-                                            logger.error("Name required to create receiver");
-                                        }
-                                    });
-                                dialog.setVisible(true);
-                            } catch (Exception e1) {
-                                logger.error(
-                                    "Failed to create the new Receiver dialog", e1);
-                            }
+                            /*
+                             * Use the standard Cancel metaphor
+                             */
+                            SwingHelper.configureCancelForDialog(
+                                    dialog, panel.getOkPanel().getCancelButton());
+
+                            final PropertyDescriptor[] descriptors = crFactory.getPropertyDescriptors();
+                            panel.getOkPanel().getOkButton().addActionListener(e2 -> {
+                                ChainsawReceiver receiver = panel.getReceiver();
+                                if (receiver.getName() != null
+                                        && !receiver.getName().trim().isEmpty()) {
+                                    dialog.dispose();
+                                    // Notify the LogUI that a new reciever has been created so it can spawn a new tab
+                                    m_parent.addReceiver(receiver);
+                                    receiver.start();
+                                    m_classToProperties.put(receiver.getClass(), descriptors);
+                                    statusBar.setMessage("Receiver '" + receiver.getName() + "' started");
+                                } else {
+                                    logger.error("Name required to create receiver");
+                                }
+                            });
+                            dialog.setVisible(true);
+                        } catch (Exception e1) {
+                            logger.error("Failed to create the new Receiver dialog", e1);
                         }
-                    });
-                }
+                    }
+                });
+            }
         }
     }
 
@@ -674,8 +623,7 @@
          * @see javax.swing.JPopupMenu#show(java.awt.Component, int, int)
          */
         public void show(Component invoker, int x, int y) {
-            DefaultMutableTreeNode node =
-                (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
+            DefaultMutableTreeNode node = (DefaultMutableTreeNode) receiversTree.getLastSelectedPathComponent();
 
             if (node == null) {
                 return;
@@ -728,20 +676,17 @@
             add(showReceiverHelpAction);
         }
 
-        private JRadioButtonMenuItem createLevelRadioButton(
-            final ChainsawReceiver r, final Level l) {
+        private JRadioButtonMenuItem createLevelRadioButton(final ChainsawReceiver r, final Level l) {
             Map<String, Icon> levelIconMap = LevelIconFactory.getInstance().getLevelToIconMap();
 
-            Action action =
-                new AbstractAction(
-                    l.toString(), levelIconMap.get(l.toString())) {
-                    public void actionPerformed(ActionEvent e) {
-                        if (r != null) {
-                            r.setThreshold(l);
-                            updateCurrentlySelectedNodeInDispatchThread();
-                        }
+            Action action = new AbstractAction(l.toString(), levelIconMap.get(l.toString())) {
+                public void actionPerformed(ActionEvent e) {
+                    if (r != null) {
+                        r.setThreshold(l);
+                        updateCurrentlySelectedNodeInDispatchThread();
                     }
-                };
+                }
+            };
 
             JRadioButtonMenuItem item = new JRadioButtonMenuItem(action);
             item.setSelected(r.getThreshold() == l);
@@ -769,8 +714,7 @@
      *
      * @author Paul Smith &lt;psmith@apache.org&gt;
      */
-    private class ReceiverToolbar extends JToolBar
-        implements TreeSelectionListener {
+    private class ReceiverToolbar extends JToolBar implements TreeSelectionListener {
         final SmallButton newReceiverButton;
 
         private ReceiverToolbar() {
@@ -779,18 +723,15 @@
             SmallButton restartReceiverButton = new SmallButton(restartReceiverButtonAction);
             restartReceiverButton.setText(null);
 
-            SmallButton shutdownReceiverButton =
-                new SmallButton(shutdownReceiverButtonAction);
+            SmallButton shutdownReceiverButton = new SmallButton(shutdownReceiverButtonAction);
             shutdownReceiverButton.setText(null);
 
-            SmallButton saveReceiversButton =
-                new SmallButton(saveReceiversButtonAction);
+            SmallButton saveReceiversButton = new SmallButton(saveReceiversButtonAction);
             saveReceiversButton.setText(null);
 
             SmallButton restartAllButton = new SmallButton(startAllAction);
             restartAllButton.setText(null);
 
-
             newReceiverButton = new SmallButton(newReceiverButtonAction);
             newReceiverButton.setText(null);
             newReceiverButton.addMouseListener(new PopupListener(newReceiverPopup));
@@ -809,9 +750,9 @@
             add(Box.createHorizontalGlue());
 
             SmallButton closeButton = new SmallButton.Builder()
-                .shortDescription("Closes the Receiver panel")
-                .action(() -> ReceiversPanel.this.setVisible(false))
-                .build();
+                    .shortDescription("Closes the Receiver panel")
+                    .action(() -> ReceiversPanel.this.setVisible(false))
+                    .build();
             add(closeButton);
 
             add(Box.createHorizontalStrut(5));
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
index 0701ad4..c965f4a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversTreeModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,21 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.receivers;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
+import java.beans.PropertyChangeListener;
+import java.util.Enumeration;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import javax.swing.tree.TreeNode;
-import java.beans.PropertyChangeListener;
-import java.util.Enumeration;
-
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
 import org.apache.log4j.chainsaw.ReceiverEventListener;
-
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A TreeModel that encapsulates the details of all the Receivers and their
@@ -36,11 +32,9 @@
  *
  * @author Paul Smith &lt;psmith@apache.org&gt;
  */
-public class ReceiversTreeModel extends DefaultTreeModel
-    implements ReceiverEventListener {
+public class ReceiversTreeModel extends DefaultTreeModel implements ReceiverEventListener {
     private static final String ROOTNODE_LABEL = "Receivers";
-    final DefaultMutableTreeNode NoReceiversNode =
-        new DefaultMutableTreeNode("No Receivers defined");
+    final DefaultMutableTreeNode NoReceiversNode = new DefaultMutableTreeNode("No Receivers defined");
     final DefaultMutableTreeNode RootNode;
     private final Logger logger = LogManager.getLogger(ReceiversTreeModel.class);
 
@@ -57,40 +51,40 @@
      * @return ReceiversTreeModel
      */
     public final synchronized ReceiversTreeModel refresh() {
-//        RootNode.removeAllChildren();
-//
-//        LoggerRepository repo = LogManager.getLoggerRepository();
-//        Collection receivers;
-//        if (repo instanceof LoggerRepositoryEx) {
-//            receivers = ((LoggerRepositoryEx) repo).getPluginRegistry().getPlugins(Receiver.class);
-//        } else {
-//            receivers = new Vector();
-//        }
-//
-//        updateRootDisplay();
-//
-//        if (receivers.size() == 0) {
-//            getRootNode().add(NoReceiversNode);
-//        } else {
-//            for (Object receiver : receivers) {
-//                final Receiver item = (Receiver) receiver;
-//                final DefaultMutableTreeNode receiverNode = new DefaultMutableTreeNode(item);
-//
-//                item.addPropertyChangeListener(creatPluginPropertyChangeListener(item, receiverNode));
-//                getRootNode().add(receiverNode);
-//            }
-//        }
-//
-//        reload();
+        //        RootNode.removeAllChildren();
+        //
+        //        LoggerRepository repo = LogManager.getLoggerRepository();
+        //        Collection receivers;
+        //        if (repo instanceof LoggerRepositoryEx) {
+        //            receivers = ((LoggerRepositoryEx) repo).getPluginRegistry().getPlugins(Receiver.class);
+        //        } else {
+        //            receivers = new Vector();
+        //        }
+        //
+        //        updateRootDisplay();
+        //
+        //        if (receivers.size() == 0) {
+        //            getRootNode().add(NoReceiversNode);
+        //        } else {
+        //            for (Object receiver : receivers) {
+        //                final Receiver item = (Receiver) receiver;
+        //                final DefaultMutableTreeNode receiverNode = new DefaultMutableTreeNode(item);
+        //
+        //                item.addPropertyChangeListener(creatPluginPropertyChangeListener(item, receiverNode));
+        //                getRootNode().add(receiverNode);
+        //            }
+        //        }
+        //
+        //        reload();
 
         return this;
     }
 
-    private PropertyChangeListener creatPluginPropertyChangeListener(final ChainsawReceiver item, final DefaultMutableTreeNode receiverNode) {
+    private PropertyChangeListener creatPluginPropertyChangeListener(
+            final ChainsawReceiver item, final DefaultMutableTreeNode receiverNode) {
         return evt -> {
             logger.debug(evt.toString());
             ReceiversTreeModel.this.fireTreeNodesChanged(item, receiverNode.getPath(), null, null);
-
         };
     }
 
@@ -133,35 +127,29 @@
         if (NoReceiversNode.getParent() == getRootNode()) {
             int index = getRootNode().getIndex(NoReceiversNode);
             getRootNode().remove(NoReceiversNode);
-            nodesWereRemoved(
-                getRootNode(), new int[]{index}, new Object[]{NoReceiversNode});
+            nodesWereRemoved(getRootNode(), new int[] {index}, new Object[] {NoReceiversNode});
         }
 
-        
         DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(rx);
         getRootNode().add(newNode);
         rx.addPropertyChangeListener(creatPluginPropertyChangeListener(rx, newNode));
-        nodesWereInserted(
-            getRootNode(), new int[]{getRootNode().getIndex(newNode)});
-            
+        nodesWereInserted(getRootNode(), new int[] {getRootNode().getIndex(newNode)});
     }
 
     @Override
     public void receiverRemoved(ChainsawReceiver rx) {
-        DefaultMutableTreeNode node =
-            (DefaultMutableTreeNode) resolvePluginNode(rx);
+        DefaultMutableTreeNode node = (DefaultMutableTreeNode) resolvePluginNode(rx);
         if (node != null) {
             int index = getRootNode().getIndex(node);
             getRootNode().remove(node);
-            nodesWereRemoved(
-                getRootNode(), new int[]{index}, new Object[]{node});
+            nodesWereRemoved(getRootNode(), new int[] {index}, new Object[] {node});
         }
 
         if (getRootNode().getChildCount() == 0) {
             getRootNode().add(NoReceiversNode);
 
             int index = getRootNode().getIndex(NoReceiversNode);
-            nodesWereInserted(getRootNode(), new int[]{index});
+            nodesWereInserted(getRootNode(), new int[] {index});
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java b/src/main/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java
index 10dc693..646e23d 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/VisualReceiver.java
@@ -1,9 +1,10 @@
 /*
- * Copyright 1999,2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -13,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.receivers;
 
 import java.awt.*;
@@ -27,7 +27,6 @@
  *
  * @author Scott Deboy&lt;sdeboy@apache.org&gt;
  */
-
 public interface VisualReceiver {
     /**
      * Provides access to a container.
diff --git a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
index eb80a17..37b9178 100644
--- a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
+++ b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiver.java
@@ -1,28 +1,25 @@
 /*
- * Copyright 1999,2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.vfs;
 
-import org.apache.log4j.chainsaw.receivers.VisualReceiver;
-import org.apache.log4j.varia.LogFilePatternReceiver;
-
-import javax.swing.*;
 import java.awt.*;
 import java.io.*;
 import java.util.zip.GZIPInputStream;
+import javax.swing.*;
 import org.apache.commons.vfs2.FileObject;
 import org.apache.commons.vfs2.FileSystemException;
 import org.apache.commons.vfs2.FileSystemManager;
@@ -32,6 +29,8 @@
 import org.apache.commons.vfs2.provider.URLFileName;
 import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
 import org.apache.commons.vfs2.util.RandomAccessMode;
+import org.apache.log4j.chainsaw.receivers.VisualReceiver;
+import org.apache.log4j.varia.LogFilePatternReceiver;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -223,92 +222,96 @@
      * Read and process the log file.
      */
     public void activateOptions() {
-        //we don't want to call super.activateOptions, but we do want active to be set to true
+        // we don't want to call super.activateOptions, but we do want active to be set to true
         active = true;
-        //on receiver restart, only prompt for credentials if we don't already have them
+        // on receiver restart, only prompt for credentials if we don't already have them
         if (promptForUserInfo && !getFileURL().contains("@")) {
-    	  /*
-    	  if promptforuserinfo is true, wait for a reference to the container
-    	  (via the VisualReceiver callback).
+            /*
+            if promptforuserinfo is true, wait for a reference to the container
+            (via the VisualReceiver callback).
 
-    	  We need to display a login dialog on top of the container, so we must then
-    	  wait until the container has been added to a frame
-    	  */
+            We need to display a login dialog on top of the container, so we must then
+            wait until the container has been added to a frame
+            */
 
-            //get a reference to the container
+            // get a reference to the container
             new Thread(() -> {
-                synchronized (waitForContainerLock) {
-                    while (container == null) {
-                        try {
-                            waitForContainerLock.wait(1000);
-                            logger.debug("waiting for setContainer call");
-                        } catch (InterruptedException ie) {
-                        }
-                    }
-                }
-
-                Frame containerFrame1;
-                if (container instanceof Frame) {
-                    containerFrame1 = (Frame) container;
-                } else {
-                    synchronized (waitForContainerLock) {
-//loop until the container has a frame
-                        while ((containerFrame1 = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, container)) == null) {
-                            try {
-                                waitForContainerLock.wait(1000);
-                                logger.debug("waiting for container's frame to be available");
-                            } catch (InterruptedException ie) {
+                        synchronized (waitForContainerLock) {
+                            while (container == null) {
+                                try {
+                                    waitForContainerLock.wait(1000);
+                                    logger.debug("waiting for setContainer call");
+                                } catch (InterruptedException ie) {
+                                }
                             }
                         }
-                    }
-                }
-                final Frame containerFrame = containerFrame1;
-                //create the dialog
-                SwingUtilities.invokeLater(() -> {
-                    Frame owner = null;
-                    if (container != null) {
-                        owner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, containerFrame);
-                    }
-                    final UserNamePasswordDialog f = new UserNamePasswordDialog(owner);
-                    f.pack();
-                    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
-                    f.setLocation(d.width / 2, d.height / 2);
-                    f.setVisible(true);
-                    if (null == f.getUserName() || null == f.getPassword()) {
-                        logger.info("Username and password not both provided, not using credentials");
-                    } else {
-                        String oldURL = getFileURL();
-                        int index = oldURL.indexOf("://");
-                        String firstPart = oldURL.substring(0, index);
-                        String lastPart = oldURL.substring(index + "://".length());
-                        setFileURL(firstPart + "://" + f.getUserName() + ":" + new String(f.getPassword()) + "@" + lastPart);
 
-                        setHost(oldURL.substring(0, index + "://".length()));
-                        setPath(oldURL.substring(index + "://".length()));
-                    }
-                    vfsReader = new VFSReader();
-                    new Thread(vfsReader).start();
-                });
-            }).start();
+                        Frame containerFrame1;
+                        if (container instanceof Frame) {
+                            containerFrame1 = (Frame) container;
+                        } else {
+                            synchronized (waitForContainerLock) {
+                                // loop until the container has a frame
+                                while ((containerFrame1 =
+                                                (Frame) SwingUtilities.getAncestorOfClass(Frame.class, container))
+                                        == null) {
+                                    try {
+                                        waitForContainerLock.wait(1000);
+                                        logger.debug("waiting for container's frame to be available");
+                                    } catch (InterruptedException ie) {
+                                    }
+                                }
+                            }
+                        }
+                        final Frame containerFrame = containerFrame1;
+                        // create the dialog
+                        SwingUtilities.invokeLater(() -> {
+                            Frame owner = null;
+                            if (container != null) {
+                                owner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, containerFrame);
+                            }
+                            final UserNamePasswordDialog f = new UserNamePasswordDialog(owner);
+                            f.pack();
+                            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
+                            f.setLocation(d.width / 2, d.height / 2);
+                            f.setVisible(true);
+                            if (null == f.getUserName() || null == f.getPassword()) {
+                                logger.info("Username and password not both provided, not using credentials");
+                            } else {
+                                String oldURL = getFileURL();
+                                int index = oldURL.indexOf("://");
+                                String firstPart = oldURL.substring(0, index);
+                                String lastPart = oldURL.substring(index + "://".length());
+                                setFileURL(firstPart + "://" + f.getUserName() + ":" + new String(f.getPassword()) + "@"
+                                        + lastPart);
+
+                                setHost(oldURL.substring(0, index + "://".length()));
+                                setPath(oldURL.substring(index + "://".length()));
+                            }
+                            vfsReader = new VFSReader();
+                            new Thread(vfsReader).start();
+                        });
+                    })
+                    .start();
         } else {
-            //starts with protocol:/  but not protocol://
+            // starts with protocol:/  but not protocol://
             String oldURL = getFileURL();
             if (oldURL != null && oldURL.contains(":/") && !oldURL.contains("://")) {
                 int index = oldURL.indexOf(":/");
                 String lastPart = oldURL.substring(index + ":/".length());
                 int passEndIndex = lastPart.indexOf("@");
-                if (passEndIndex > -1) { //we have a username/password
+                if (passEndIndex > -1) { // we have a username/password
                     setHost(oldURL.substring(0, index + ":/".length()));
                     setPath(lastPart.substring(passEndIndex + 1));
                 }
                 vfsReader = new VFSReader();
                 new Thread(vfsReader).start();
             } else if (oldURL != null && oldURL.contains("://")) {
-                //starts with protocol://
+                // starts with protocol://
                 int index = oldURL.indexOf("://");
                 String lastPart = oldURL.substring(index + "://".length());
                 int passEndIndex = lastPart.indexOf("@");
-                if (passEndIndex > -1) { //we have a username/password
+                if (passEndIndex > -1) { // we have a username/password
                     setHost(oldURL.substring(0, index + "://".length()));
                     setPath(lastPart.substring(passEndIndex + 1));
                 }
@@ -326,21 +329,24 @@
         private FileObject fileObject;
 
         private boolean isGZip(String fileName) {
-            return fileName.endsWith( ".gz" );
+            return fileName.endsWith(".gz");
         }
 
         public void run() {
-            //thread should end when we're no longer active
+            // thread should end when we're no longer active
             while (reader == null && !terminated) {
                 int atIndex = getFileURL().indexOf("@");
                 int protocolIndex = getFileURL().indexOf("://");
 
-                String loggableFileURL = atIndex > -1 ? getFileURL().substring(0, protocolIndex + "://".length()) + "username:password" + getFileURL().substring(atIndex) : getFileURL();
+                String loggableFileURL = atIndex > -1
+                        ? getFileURL().substring(0, protocolIndex + "://".length()) + "username:password"
+                                + getFileURL().substring(atIndex)
+                        : getFileURL();
                 logger.info("attempting to load file: " + loggableFileURL);
                 try {
                     FileSystemManager fileSystemManager = VFS.getManager();
                     FileSystemOptions opts = new FileSystemOptions();
-                    //if jsch not in classpath, can get NoClassDefFoundError here
+                    // if jsch not in classpath, can get NoClassDefFoundError here
                     try {
                         SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
                     } catch (NoClassDefFoundError ncdfe) {
@@ -350,20 +356,28 @@
                     synchronized (fileSystemManager) {
                         fileObject = fileSystemManager.resolveFile(getFileURL(), opts);
                         if (fileObject.exists()) {
-                            reader = new InputStreamReader(fileObject.getContent().getInputStream(), "UTF-8");
-                            //now that we have a reader, remove additional portions of the file url (sftp passwords, etc.)
-                            //check to see if the name is a URLFileName..if so, set file name to not include username/pass
+                            reader = new InputStreamReader(
+                                    fileObject.getContent().getInputStream(), "UTF-8");
+                            // now that we have a reader, remove additional portions of the file url (sftp passwords,
+                            // etc.)
+                            // check to see if the name is a URLFileName..if so, set file name to not include
+                            // username/pass
                             if (fileObject.getName() instanceof URLFileName) {
                                 URLFileName urlFileName = (URLFileName) fileObject.getName();
                                 setHost(urlFileName.getHostName());
                                 setPath(urlFileName.getPath());
                             }
                         } else {
-                            logger.info(loggableFileURL + " not available - will re-attempt to load after waiting " + MISSING_FILE_RETRY_MILLIS + " millis");
+                            logger.info(loggableFileURL + " not available - will re-attempt to load after waiting "
+                                    + MISSING_FILE_RETRY_MILLIS + " millis");
                         }
                     }
                 } catch (FileSystemException fse) {
-                    logger.info(loggableFileURL + " not available - may be due to incorrect credentials, but will re-attempt to load after waiting " + MISSING_FILE_RETRY_MILLIS + " millis", fse);
+                    logger.info(
+                            loggableFileURL
+                                    + " not available - may be due to incorrect credentials, but will re-attempt to load after waiting "
+                                    + MISSING_FILE_RETRY_MILLIS + " millis",
+                            fse);
                 } catch (UnsupportedEncodingException e) {
                     logger.info("UTF-8 not available", e);
                 }
@@ -377,7 +391,7 @@
                 }
             }
             if (terminated) {
-                //shut down while waiting for a file
+                // shut down while waiting for a file
                 return;
             }
             initialize();
@@ -392,17 +406,20 @@
                     do {
                         FileSystemManager fileSystemManager = VFS.getManager();
                         FileSystemOptions opts = new FileSystemOptions();
-                        //if jsch not in classpath, can get NoClassDefFoundError here
+                        // if jsch not in classpath, can get NoClassDefFoundError here
                         try {
                             SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
                         } catch (NoClassDefFoundError ncdfe) {
                             logger.warn("JSch not on classpath!", ncdfe);
                         }
 
-                        //fileobject was created above, release it and construct a new one
+                        // fileobject was created above, release it and construct a new one
                         synchronized (fileSystemManager) {
                             if (fileObject != null) {
-                                fileObject.getFileSystem().getFileSystemManager().closeFileSystem(fileObject.getFileSystem());
+                                fileObject
+                                        .getFileSystem()
+                                        .getFileSystemManager()
+                                        .closeFileSystem(fileObject.getFileSystem());
                                 fileObject.close();
                                 fileObject = null;
                             }
@@ -410,32 +427,35 @@
                             fileObject = fileSystemManager.resolveFile(getFileURL(), opts);
                         }
 
-                        //file may not exist..
+                        // file may not exist..
                         boolean fileLarger = false;
                         if (fileObject != null && fileObject.exists()) {
                             try {
-                                //available in vfs as of 30 Mar 2006 - will load but not tail if not available
+                                // available in vfs as of 30 Mar 2006 - will load but not tail if not available
                                 fileObject.refresh();
                             } catch (Error err) {
                                 logger.info(getPath() + " - unable to refresh fileobject", err);
                             }
 
                             if (isGZip(getFileURL())) {
-                                InputStream gzipStream = new GZIPInputStream(fileObject.getContent().getInputStream());
-                                Reader decoder = new InputStreamReader(gzipStream,  "UTF-8");
+                                InputStream gzipStream = new GZIPInputStream(
+                                        fileObject.getContent().getInputStream());
+                                Reader decoder = new InputStreamReader(gzipStream, "UTF-8");
                                 BufferedReader bufferedReader = new BufferedReader(decoder);
                                 process(bufferedReader);
                                 readingFinished = true;
                             }
-                            //could have been truncated or appended to (don't do anything if same size)
+                            // could have been truncated or appended to (don't do anything if same size)
                             if (fileObject.getContent().getSize() < lastFileSize) {
-                                reader = new InputStreamReader(fileObject.getContent().getInputStream(), "UTF-8");
+                                reader = new InputStreamReader(
+                                        fileObject.getContent().getInputStream(), "UTF-8");
                                 logger.debug(getPath() + " was truncated");
-                                lastFileSize = 0; //seek to beginning of file
+                                lastFileSize = 0; // seek to beginning of file
                                 lastFilePointer = 0;
                             } else if (fileObject.getContent().getSize() > lastFileSize) {
                                 fileLarger = true;
-                                RandomAccessContent rac = fileObject.getContent().getRandomAccessContent(RandomAccessMode.READ);
+                                RandomAccessContent rac =
+                                        fileObject.getContent().getRandomAccessContent(RandomAccessMode.READ);
                                 rac.seek(lastFilePointer);
                                 reader = new InputStreamReader(rac.getInputStream(), "UTF-8");
                                 BufferedReader bufferedReader = new BufferedReader(reader);
@@ -453,7 +473,8 @@
                                 logger.debug(getPath() + " - unable to close reader", ioe);
                             }
                         } else {
-                            logger.info(getPath() + " - not available - will re-attempt to load after waiting " + getWaitMillis() + " millis");
+                            logger.info(getPath() + " - not available - will re-attempt to load after waiting "
+                                    + getWaitMillis() + " millis");
                         }
 
                         try {
diff --git a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java
index c3985e3..bfd9159 100644
--- a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java
+++ b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverBeanInfo.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.chainsaw.vfs;
 
 import java.beans.PropertyDescriptor;
 import java.beans.SimpleBeanInfo;
 
-
 /**
  * BeanInfo class for the meta-data of the VFSLogFilePatternReceiver.
  */
@@ -30,10 +28,9 @@
      */
     public PropertyDescriptor[] getPropertyDescriptors() {
         try {
-            return new PropertyDescriptor[]{
+            return new PropertyDescriptor[] {
                 new PropertyDescriptor("fileURL", VFSLogFilePatternReceiver.class),
-                new PropertyDescriptor(
-                    "timestampFormat", VFSLogFilePatternReceiver.class),
+                new PropertyDescriptor("timestampFormat", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("logFormat", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("name", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("tailing", VFSLogFilePatternReceiver.class),
@@ -41,10 +38,8 @@
                 new PropertyDescriptor("waitMillis", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("appendNonMatches", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("customLevelDefinitions", VFSLogFilePatternReceiver.class),
-                new PropertyDescriptor(
-                    "filterExpression", VFSLogFilePatternReceiver.class),
-                new PropertyDescriptor(
-                    "promptForUserInfo", VFSLogFilePatternReceiver.class),
+                new PropertyDescriptor("filterExpression", VFSLogFilePatternReceiver.class),
+                new PropertyDescriptor("promptForUserInfo", VFSLogFilePatternReceiver.class),
                 new PropertyDescriptor("group", VFSLogFilePatternReceiver.class),
             };
         } catch (Exception e) {
diff --git a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverFactory.java b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverFactory.java
index 8aeec19..77ba28a 100644
--- a/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/vfs/VFSLogFilePatternReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -34,7 +34,7 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
+        return new PropertyDescriptor[] {
             new PropertyDescriptor("name", LogFilePatternReceiver.class),
             new PropertyDescriptor("fileURL", LogFilePatternReceiver.class),
             new PropertyDescriptor("appendNonMatches", LogFilePatternReceiver.class),
@@ -54,91 +54,91 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "<html>VFSLogFilePatternReceiver can parse and tail log files, converting entries into\n" +
-"LoggingEvents.  If the file doesn't exist when the receiver is initialized, the\n" +
-"receiver will look for the file once every 10 seconds.\n" +
-"<p>\n" +
-"This receiver relies on java.util.regex features to perform the parsing of text in the\n" +
-"log file, however the only regular expression field explicitly supported is\n" +
-" * a glob-style wildcard used to ignore fields in the log file if needed.  All other\n" +
-"fields are parsed by using the supplied keywords.\n" +
-"<p>\n" +
-"<b>Features:</b><br>\n" +
-"- specify the URL of the log file to be processed<br>\n" +
-"- specify the timestamp format in the file (if one exists, using patterns from {@link java.text.SimpleDateFormat})<br>\n" +
-"- specify the pattern (logFormat) used in the log file using keywords, a wildcard character (*) and fixed text<br>\n" +
-"- 'tail' the file (allows the contents of the file to be continually read and new events processed)<br>\n" +
-"- supports the parsing of multi-line messages and exceptions\n" +
-"- 'hostname' property set to URL host (or 'file' if not available)\n" +
-"- 'application' property set to URL path (or value of fileURL if not available)\n" +
-"- 'group' property can be set to associate multiple log file receivers\n" +
-"<p>\n" +
-"<b>Keywords:</b><br>\n" +
-"TIMESTAMP<br>\n" +
-"LOGGER<br>\n" +
-"LEVEL<br>\n" +
-"THREAD<br>\n" +
-"CLASS<br>\n" +
-"FILE<br>\n" +
-"LINE<br>\n" +
-"METHOD<br>\n" +
-"RELATIVETIME<br>\n" +
-"MESSAGE<br>\n" +
-"NDC<br>\n" +
-"PROP(key)<br>\n" +
-"(NL)<br>\n" +
-"<p>\n" +
-"(NL) represents a new line embedded in the log format, supporting log formats whose fields span multiple lines\n" +
-"<p>\n" +
-"Use a * to ignore portions of the log format that should be ignored\n" +
-"<p>\n" +
-"Example:<br>\n" +
-"If your file's patternlayout is this:<br>\n" +
-"<b>%d %-5p [%t] %C{2} (%F:%L) - %m%n</b>\n" +
-"<p>\n" +
-"specify this as the log format:<br>\n" +
-"<b>TIMESTAMP LEVEL [THREAD] CLASS (FILE:LINE) - MESSAGE</b>\n" +
-"<p>\n" +
-"To define a PROPERTY field, use PROP(key)\n" +
-"<p>\n" +
-"Example:<br>\n" +
-"If you used the RELATIVETIME pattern layout character in the file,\n" +
-"you can use PROP(RELATIVETIME) in the logFormat definition to assign\n" +
-"the RELATIVETIME field as a property on the event.\n" +
-"<p>\n" +
-"If your file's patternlayout is this:<br>\n" +
-"<b>%r [%t] %-5p %c %x - %m%n</b>\n" +
-"<p>\n" +
-"specify this as the log format:<br>\n" +
-"<b>PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE</b>\n" +
-"<p>\n" +
-"Note the * - it can be used to ignore a single word or sequence of words in the log file\n" +
-"(in order for the wildcard to ignore a sequence of words, the text being ignored must be\n" +
-"followed by some delimiter, like '-' or '[') - ndc is being ignored in the following example.\n" +
-"<p>\n" +
-"Assign a filterExpression in order to only process events which match a filter.\n" +
-"If a filterExpression is not assigned, all events are processed.\n" +
-"<p>\n" +
-"<b>Limitations:</b><br>\n" +
-"- no support for the single-line version of throwable supported by patternlayout<br>\n" +
-"(this version of throwable will be included as the last line of the message)<br>\n" +
-"- the relativetime patternLayout character must be set as a property: PROP(RELATIVETIME)<br>\n" +
-"- messages should appear as the last field of the logFormat because the variability in message content<br>\n" +
-"- exceptions are converted if the exception stack trace (other than the first line of the exception)<br>\n" +
-"is stored in the log file with a tab followed by the word 'at' as the first characters in the line<br>\n" +
-"- tailing may fail if the file rolls over.\n" +
-"<p>\n" +
-"<b>Example receiver configuration settings</b> (add these as params, specifying a LogFilePatternReceiver 'plugin'):<br>\n" +
-"param: \"timestampFormat\" value=\"yyyy-MM-d HH:mm:ss,SSS\"<br>\n" +
-"param: \"logFormat\" value=\"PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE\"<br>\n" +
-"param: \"fileURL\" value=\"file:///c:/events.log\"<br>\n" +
-"param: \"tailing\" value=\"true\"\n" +
-"<p>\n" +
-"This configuration will be able to process these sample events:<br>\n" +
-"710    [       Thread-0] DEBUG                   first.logger first - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n" +
-"880    [       Thread-2] DEBUG                   first.logger third - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n" +
-"880    [       Thread-0] INFO                    first.logger first - infomsg-0<br>\n" +
-"java.lang.Exception: someexception-first<br>\n" +
-"at Generator2.run(Generator2.java:102)<br>";
+        return "<html>VFSLogFilePatternReceiver can parse and tail log files, converting entries into\n"
+                + "LoggingEvents.  If the file doesn't exist when the receiver is initialized, the\n"
+                + "receiver will look for the file once every 10 seconds.\n"
+                + "<p>\n"
+                + "This receiver relies on java.util.regex features to perform the parsing of text in the\n"
+                + "log file, however the only regular expression field explicitly supported is\n"
+                + " * a glob-style wildcard used to ignore fields in the log file if needed.  All other\n"
+                + "fields are parsed by using the supplied keywords.\n"
+                + "<p>\n"
+                + "<b>Features:</b><br>\n"
+                + "- specify the URL of the log file to be processed<br>\n"
+                + "- specify the timestamp format in the file (if one exists, using patterns from {@link java.text.SimpleDateFormat})<br>\n"
+                + "- specify the pattern (logFormat) used in the log file using keywords, a wildcard character (*) and fixed text<br>\n"
+                + "- 'tail' the file (allows the contents of the file to be continually read and new events processed)<br>\n"
+                + "- supports the parsing of multi-line messages and exceptions\n"
+                + "- 'hostname' property set to URL host (or 'file' if not available)\n"
+                + "- 'application' property set to URL path (or value of fileURL if not available)\n"
+                + "- 'group' property can be set to associate multiple log file receivers\n"
+                + "<p>\n"
+                + "<b>Keywords:</b><br>\n"
+                + "TIMESTAMP<br>\n"
+                + "LOGGER<br>\n"
+                + "LEVEL<br>\n"
+                + "THREAD<br>\n"
+                + "CLASS<br>\n"
+                + "FILE<br>\n"
+                + "LINE<br>\n"
+                + "METHOD<br>\n"
+                + "RELATIVETIME<br>\n"
+                + "MESSAGE<br>\n"
+                + "NDC<br>\n"
+                + "PROP(key)<br>\n"
+                + "(NL)<br>\n"
+                + "<p>\n"
+                + "(NL) represents a new line embedded in the log format, supporting log formats whose fields span multiple lines\n"
+                + "<p>\n"
+                + "Use a * to ignore portions of the log format that should be ignored\n"
+                + "<p>\n"
+                + "Example:<br>\n"
+                + "If your file's patternlayout is this:<br>\n"
+                + "<b>%d %-5p [%t] %C{2} (%F:%L) - %m%n</b>\n"
+                + "<p>\n"
+                + "specify this as the log format:<br>\n"
+                + "<b>TIMESTAMP LEVEL [THREAD] CLASS (FILE:LINE) - MESSAGE</b>\n"
+                + "<p>\n"
+                + "To define a PROPERTY field, use PROP(key)\n"
+                + "<p>\n"
+                + "Example:<br>\n"
+                + "If you used the RELATIVETIME pattern layout character in the file,\n"
+                + "you can use PROP(RELATIVETIME) in the logFormat definition to assign\n"
+                + "the RELATIVETIME field as a property on the event.\n"
+                + "<p>\n"
+                + "If your file's patternlayout is this:<br>\n"
+                + "<b>%r [%t] %-5p %c %x - %m%n</b>\n"
+                + "<p>\n"
+                + "specify this as the log format:<br>\n"
+                + "<b>PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE</b>\n"
+                + "<p>\n"
+                + "Note the * - it can be used to ignore a single word or sequence of words in the log file\n"
+                + "(in order for the wildcard to ignore a sequence of words, the text being ignored must be\n"
+                + "followed by some delimiter, like '-' or '[') - ndc is being ignored in the following example.\n"
+                + "<p>\n"
+                + "Assign a filterExpression in order to only process events which match a filter.\n"
+                + "If a filterExpression is not assigned, all events are processed.\n"
+                + "<p>\n"
+                + "<b>Limitations:</b><br>\n"
+                + "- no support for the single-line version of throwable supported by patternlayout<br>\n"
+                + "(this version of throwable will be included as the last line of the message)<br>\n"
+                + "- the relativetime patternLayout character must be set as a property: PROP(RELATIVETIME)<br>\n"
+                + "- messages should appear as the last field of the logFormat because the variability in message content<br>\n"
+                + "- exceptions are converted if the exception stack trace (other than the first line of the exception)<br>\n"
+                + "is stored in the log file with a tab followed by the word 'at' as the first characters in the line<br>\n"
+                + "- tailing may fail if the file rolls over.\n"
+                + "<p>\n"
+                + "<b>Example receiver configuration settings</b> (add these as params, specifying a LogFilePatternReceiver 'plugin'):<br>\n"
+                + "param: \"timestampFormat\" value=\"yyyy-MM-d HH:mm:ss,SSS\"<br>\n"
+                + "param: \"logFormat\" value=\"PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE\"<br>\n"
+                + "param: \"fileURL\" value=\"file:///c:/events.log\"<br>\n"
+                + "param: \"tailing\" value=\"true\"\n"
+                + "<p>\n"
+                + "This configuration will be able to process these sample events:<br>\n"
+                + "710    [       Thread-0] DEBUG                   first.logger first - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n"
+                + "880    [       Thread-2] DEBUG                   first.logger third - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n"
+                + "880    [       Thread-0] INFO                    first.logger first - infomsg-0<br>\n"
+                + "java.lang.Exception: someexception-first<br>\n"
+                + "at Generator2.run(Generator2.java:102)<br>";
     }
 }
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 789a9ad..f008214 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfDeviceModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,12 +16,12 @@
  */
 package org.apache.log4j.chainsaw.zeroconf;
 
+import java.util.ArrayList;
+import java.util.List;
 import javax.jmdns.ServiceEvent;
 import javax.jmdns.ServiceInfo;
 import javax.jmdns.ServiceListener;
 import javax.swing.table.AbstractTableModel;
-import java.util.ArrayList;
-import java.util.List;
 
 public class ZeroConfDeviceModel extends AbstractTableModel implements ServiceListener {
 
@@ -51,10 +51,13 @@
             case 1:
                 return info.getAddress().getHostName() + ":" + info.getPort();
             case 2:
-                return zeroConfPreferenceModel.getAutoConnectDevices().contains(getAutoConnectHandle(info)) ? Boolean.TRUE : Boolean.FALSE;
+                return zeroConfPreferenceModel.getAutoConnectDevices().contains(getAutoConnectHandle(info))
+                        ? Boolean.TRUE
+                        : Boolean.FALSE;
             case 3:
-//                return plugin.isConnectedTo(info) ? "Connected" : "Not Connected";
-//                return plugin.isConnectedTo(info)?new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT):new ImageIcon();
+                //                return plugin.isConnectedTo(info) ? "Connected" : "Not Connected";
+                //                return plugin.isConnectedTo(info)?new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT):new
+                // ImageIcon();
             default:
                 return "";
         }
@@ -65,8 +68,7 @@
     }
 
     @Override
-    public void serviceAdded(ServiceEvent event) {
-    }
+    public void serviceAdded(ServiceEvent event) {}
 
     public void serviceRemoved(ServiceEvent event) {
         deviceList.removeIf(info -> info.getName().equals(event.getName()));
@@ -78,8 +80,7 @@
         fireTableDataChanged();
     }
 
-    public void setZeroConfPreferenceModel(
-        ZeroConfPreferenceModel zeroConfPreferenceModel) {
+    public void setZeroConfPreferenceModel(ZeroConfPreferenceModel zeroConfPreferenceModel) {
         this.zeroConfPreferenceModel = zeroConfPreferenceModel;
     }
 
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 34a2ae2..396d034 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,24 +16,6 @@
  */
 package org.apache.log4j.chainsaw.zeroconf;
 
-import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
-import org.apache.log4j.chainsaw.DockablePanel;
-import org.apache.log4j.chainsaw.components.elements.SmallButton;
-import org.apache.log4j.chainsaw.help.HelpManager;
-import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.chainsaw.prefs.SettingsManager;
-import org.apache.log4j.net.MulticastReceiver;
-import org.apache.log4j.net.UDPReceiver;
-import org.apache.log4j.net.XMLSocketReceiver;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import javax.jmdns.JmDNS;
-import javax.jmdns.ServiceEvent;
-import javax.jmdns.ServiceInfo;
-import javax.jmdns.ServiceListener;
-import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.MouseAdapter;
@@ -42,6 +24,23 @@
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
+import javax.jmdns.JmDNS;
+import javax.jmdns.ServiceEvent;
+import javax.jmdns.ServiceInfo;
+import javax.jmdns.ServiceListener;
+import javax.swing.*;
+import org.apache.log4j.chainsaw.ChainsawConstants;
+import org.apache.log4j.chainsaw.DockablePanel;
+import org.apache.log4j.chainsaw.components.elements.SmallButton;
+import org.apache.log4j.chainsaw.help.HelpManager;
+import org.apache.log4j.chainsaw.icons.ChainsawIcons;
+import org.apache.log4j.chainsaw.prefs.SettingsManager;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
+import org.apache.log4j.net.MulticastReceiver;
+import org.apache.log4j.net.UDPReceiver;
+import org.apache.log4j.net.XMLSocketReceiver;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * This plugin is designed to detect specific Zeroconf zones (Rendevouz/Bonjour,
@@ -68,14 +67,13 @@
     private ZeroConfPreferenceModel preferenceModel;
 
     private final JMenu connectToMenu = new JMenu("Connect to");
-    private final JMenuItem helpItem = new JMenuItem(new AbstractAction("Learn more about ZeroConf...",
-        ChainsawIcons.ICON_HELP) {
+    private final JMenuItem helpItem =
+            new JMenuItem(new AbstractAction("Learn more about ZeroConf...", ChainsawIcons.ICON_HELP) {
 
-        public void actionPerformed(ActionEvent e) {
-            HelpManager.getInstance()
-                .showHelpForClass(ZeroConfPlugin.class);
-        }
-    });
+                public void actionPerformed(ActionEvent e) {
+                    HelpManager.getInstance().showHelpForClass(ZeroConfPlugin.class);
+                }
+            });
 
     private final JMenuItem nothingToConnectTo = new JMenuItem("No devices discovered");
     private static final String MULTICAST_APPENDER_SERVICE_NAME = "_log4j_xml_mcast_appender.local.";
@@ -85,13 +83,13 @@
     private static final String NEW_UDP_APPENDER_SERVICE_NAME = "_log4j._udp.local.";
 
     private JmDNS jmDNS;
-    
+
     public ZeroConfPlugin() {
         setName("Zeroconf");
         deviceTable.setRowHeight(ChainsawConstants.DEFAULT_ROW_HEIGHT);
-        try{
+        try {
             activateOptions();
-        }catch( IOException ex ){
+        } catch (IOException ex) {
             LOG.error(ex);
         }
     }
@@ -121,11 +119,11 @@
         JToolBar toolbar = new JToolBar();
 
         SmallButton helpButton = new SmallButton.Builder()
-            .text(helpItem.getText())
-            .icon(ChainsawIcons.ICON_HELP)
-            .action(() -> HelpManager.getInstance().showHelpForClass(ZeroConfPlugin.class))
-            .name("Learn more about ZeroConf...")
-            .build();
+                .text(helpItem.getText())
+                .icon(ChainsawIcons.ICON_HELP)
+                .action(() -> HelpManager.getInstance().showHelpForClass(ZeroConfPlugin.class))
+                .name("Learn more about ZeroConf...")
+                .build();
 
         toolbar.add(helpButton);
         toolbar.setFloatable(false);
@@ -134,41 +132,44 @@
 
         injectMenu();
 
-//        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPluginListener(new PluginListener() {
-//
-//            public void pluginStarted(PluginEvent e) {
-//
-//            }
-//
-//            public void pluginStopped(PluginEvent e) {
-//                Plugin plugin = e.getPlugin();
-//                synchronized (serviceInfoToReceiveMap) {
-//                    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();
-//                        }
-//                    }
-//                }
-////                 need to make sure that the menu item tracking this item has it's icon and enabled state updade
-//                discoveredDevices.fireTableDataChanged();
-//            }
-//        });
+        //        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPluginListener(new
+        // PluginListener() {
+        //
+        //            public void pluginStarted(PluginEvent e) {
+        //
+        //            }
+        //
+        //            public void pluginStopped(PluginEvent e) {
+        //                Plugin plugin = e.getPlugin();
+        //                synchronized (serviceInfoToReceiveMap) {
+        //                    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();
+        //                        }
+        //                    }
+        //                }
+        ////                 need to make sure that the menu item tracking this item has it's icon and enabled state
+        // updade
+        //                discoveredDevices.fireTableDataChanged();
+        //            }
+        //        });
 
-//        File fileLocation = getPreferenceFileLocation();
-//        XStream stream = new XStream(new DomDriver());
-//        if (fileLocation.exists()) {
-//            try {
-//                this.preferenceModel = (ZeroConfPreferenceModel) stream
-//                    .fromXML(new FileReader(fileLocation));
-//            } catch (Exception e) {
-//                LOG.error("Failed to load ZeroConfPlugin configuration file", e);
-//            }
-//        } else {
-//            this.preferenceModel = new ZeroConfPreferenceModel();
-//        }
+        //        File fileLocation = getPreferenceFileLocation();
+        //        XStream stream = new XStream(new DomDriver());
+        //        if (fileLocation.exists()) {
+        //            try {
+        //                this.preferenceModel = (ZeroConfPreferenceModel) stream
+        //                    .fromXML(new FileReader(fileLocation));
+        //            } catch (Exception e) {
+        //                LOG.error("Failed to load ZeroConfPlugin configuration file", e);
+        //            }
+        //        } else {
+        //            this.preferenceModel = new ZeroConfPreferenceModel();
+        //        }
         discoveredDevices.setZeroConfPreferenceModel(preferenceModel);
-//        discoveredDevices.setZeroConfPluginParent(this);
+        //        discoveredDevices.setZeroConfPluginParent(this);
     }
 
     private void registerServiceListenersForAppenders() {
@@ -181,14 +182,12 @@
 
         for (Object serviceName1 : serviceNames) {
             String serviceName = serviceName1.toString();
-            jmDNS.addServiceListener(
-                serviceName,
-                new ZeroConfServiceListener());
+            jmDNS.addServiceListener(serviceName, new ZeroConfServiceListener());
 
             jmDNS.addServiceListener(serviceName, discoveredDevices);
         }
 
-        //now add each appender constant
+        // now add each appender constant
     }
 
     /**
@@ -214,7 +213,6 @@
                 } else if (discoveredDevices.getRowCount() > 0) {
                     connectToMenu.remove(nothingToConnectTo);
                 }
-
             });
 
             nothingToConnectTo.setEnabled(false);
@@ -250,9 +248,8 @@
      */
     private void deviceDiscovered(final ServiceInfo info) {
         final String name = info.getName();
-//        TODO currently adding ALL devices to autoConnectlist
-//        preferenceModel.addAutoConnectDevice(name);
-
+        //        TODO currently adding ALL devices to autoConnectlist
+        //        preferenceModel.addAutoConnectDevice(name);
 
         JMenuItem connectToDeviceMenuItem = new JMenuItem(new AbstractAction(info.getName()) {
 
@@ -281,12 +278,15 @@
         } else {
             connectToMenu.insert(connectToDeviceMenuItem, 0);
         }
-//         if the device name is one of the autoconnect devices, then connect immediately
-        if (preferenceModel != null && preferenceModel.getAutoConnectDevices() != null && preferenceModel.getAutoConnectDevices().contains(name)) {
+        //         if the device name is one of the autoconnect devices, then connect immediately
+        if (preferenceModel != null
+                && preferenceModel.getAutoConnectDevices() != null
+                && preferenceModel.getAutoConnectDevices().contains(name)) {
             new Thread(() -> {
-                LOG.info("Auto-connecting to {}", name);
-                connectTo(info);
-            }).start();
+                        LOG.info("Auto-connecting to {}", name);
+                        connectTo(info);
+                    })
+                    .start();
         }
     }
 
@@ -322,8 +322,7 @@
              * background thread or not.. All it says is to NOT do it in the AWT
              * thread, so I'm thinking it probably should be a background thread
              */
-            Runnable runnable = () -> ZeroConfPlugin.this.jmDNS.requestServiceInfo(event
-                .getType(), event.getName());
+            Runnable runnable = () -> ZeroConfPlugin.this.jmDNS.requestServiceInfo(event.getType(), event.getName());
 
             Thread thread = new Thread(runnable, "ChainsawZeroConfRequestResolutionThread");
             thread.setPriority(Thread.MIN_PRIORITY);
@@ -341,7 +340,6 @@
         }
     }
 
-
     /**
      * When the user double clicks on a row, then the device is connected to,
      * the only exception is when clicking in the check box column for auto connect.
@@ -371,24 +369,25 @@
              * This methodh handles when the user clicks the
              * auto-connect
              */
-//            int index = listBox.locationToIndex(e.getPoint());
-//
-//            if (index != -1) {
-////                Point p = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), )
-//                Component c = SwingUtilities.getDeepestComponentAt(ZeroConfPlugin.this, e.getX(), e.getY());
-//                if (c instanceof JCheckBox) {
-//                    ServiceInfo info = (ServiceInfo) listBox.getModel()
-//                            .getElementAt(index);
-//                    String name = info.getName();
-//                    if (preferenceModel.getAutoConnectDevices().contains(name)) {
-//                        preferenceModel.removeAutoConnectDevice(name);
-//                    } else {
-//                        preferenceModel.addAutoConnectDevice(name);
-//                    }
-//                    discoveredDevices.fireContentsChanged();
-//                    repaint();
-//                }
-//            }
+            //            int index = listBox.locationToIndex(e.getPoint());
+            //
+            //            if (index != -1) {
+            ////                Point p = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), )
+            //                Component c = SwingUtilities.getDeepestComponentAt(ZeroConfPlugin.this, e.getX(),
+            // e.getY());
+            //                if (c instanceof JCheckBox) {
+            //                    ServiceInfo info = (ServiceInfo) listBox.getModel()
+            //                            .getElementAt(index);
+            //                    String name = info.getName();
+            //                    if (preferenceModel.getAutoConnectDevices().contains(name)) {
+            //                        preferenceModel.removeAutoConnectDevice(name);
+            //                    } else {
+            //                        preferenceModel.addAutoConnectDevice(name);
+            //                    }
+            //                    discoveredDevices.fireContentsChanged();
+            //                    repaint();
+            //                }
+            //            }
         }
     }
 
@@ -396,17 +395,18 @@
         if (!isConnectedTo(info)) {
             return; // not connected, who cares
         }
-//        Plugin plugin;
-//        synchronized (serviceInfoToReceiveMap) {
-//            plugin = serviceInfoToReceiveMap.get(info);
-//        }
-//        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().stopPlugin(plugin.getName());
-//
-//        JMenuItem item = locateMatchingMenuItem(info.getName());
-//        if (item != null) {
-//            item.setIcon(null);
-//            item.setEnabled(true);
-//        }
+        //        Plugin plugin;
+        //        synchronized (serviceInfoToReceiveMap) {
+        //            plugin = serviceInfoToReceiveMap.get(info);
+        //        }
+        //        ((LoggerRepositoryEx)
+        // LogManager.getLoggerRepository()).getPluginRegistry().stopPlugin(plugin.getName());
+        //
+        //        JMenuItem item = locateMatchingMenuItem(info.getName());
+        //        if (item != null) {
+        //            item.setIcon(null);
+        //            item.setEnabled(true);
+        //        }
     }
 
     /**
@@ -417,7 +417,7 @@
      */
     boolean isConnectedTo(ServiceInfo info) {
         return false;
-//        return serviceInfoToReceiveMap.containsKey(info);
+        //        return serviceInfoToReceiveMap.containsKey(info);
     }
 
     /**
@@ -427,31 +427,31 @@
      */
     private void connectTo(ServiceInfo info) {
         LOG.info("Connection request for {}", info);
-        //Chainsaw can construct receivers from discovered appenders
+        // Chainsaw can construct receivers from discovered appenders
         ChainsawReceiver receiver = getReceiver(info);
-        //if null, unable to resolve the service name..no-op
+        // if null, unable to resolve the service name..no-op
         if (receiver == null) {
             return;
         }
         // TODO tell LogUI that we have a new receiver
 
-//        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPlugin(receiver);
-//        receiver.activateOptions();
-//        LOG.info("Receiver '" + receiver.getName() + "' has been started");
-//
-//        // ServiceInfo obeys equals() and hashCode() contracts, so this should be safe.
-//        synchronized (serviceInfoToReceiveMap) {
-//            serviceInfoToReceiveMap.put(info, receiver);
-//        }
+        //        ((LoggerRepositoryEx) LogManager.getLoggerRepository()).getPluginRegistry().addPlugin(receiver);
+        //        receiver.activateOptions();
+        //        LOG.info("Receiver '" + receiver.getName() + "' has been started");
+        //
+        //        // ServiceInfo obeys equals() and hashCode() contracts, so this should be safe.
+        //        synchronized (serviceInfoToReceiveMap) {
+        //            serviceInfoToReceiveMap.put(info, receiver);
+        //        }
 
-//         this instance of the menu item needs to be disabled, and have an icon added
+        //         this instance of the menu item needs to be disabled, and have an icon added
         JMenuItem item = locateMatchingMenuItem(info.getName());
         if (item != null) {
             item.setIcon(new ImageIcon(ChainsawIcons.ANIM_NET_CONNECT));
             item.setEnabled(false);
         }
-//        // now notify the list model has changed, it needs redrawing of the receiver icon now it's connected
-//        discoveredDevices.fireContentsChanged();
+        //        // now notify the list model has changed, it needs redrawing of the receiver icon now it's connected
+        //        discoveredDevices.fireContentsChanged();
     }
 
     private ChainsawReceiver getReceiver(ServiceInfo info) {
@@ -466,30 +466,32 @@
             receiver.setName(name + "-receiver");
             return receiver;
         }
-        //FileAppender or socketappender
-        //TODO: add more checks (actual layout format, etc)
+        // FileAppender or socketappender
+        // TODO: add more checks (actual layout format, etc)
         if (TCP_APPENDER_SERVICE_NAME.equals(zone)) {
-            //CHECK content type
-            //text/plain = VFSLogFilePatternReceiver (if structured=false)
-//            String contentType = info.getPropertyString("contentType").toLowerCase();
-//            //won't work with log4j2, as Chainsaw depends on log4j1.x
-//            //this will work - regular text log files are fine
-//            if ("text/plain".equals(contentType)) {
-//                VFSLogFilePatternReceiver receiver = new VFSLogFilePatternReceiver();
-//                receiver.setAppendNonMatches(true);
-//                receiver.setFileURL(info.getPropertyString("fileURI"));
-//                receiver.setLogFormat(LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(info.getPropertyString("format")));
-//                receiver.setTimestampFormat(LogFilePatternLayoutBuilder.getTimeStampFormat(info.getPropertyString("format")));
-//                receiver.setName(name + "-receiver");
-//                receiver.setTailing(true);
-//                return receiver;
-//            }
+            // CHECK content type
+            // text/plain = VFSLogFilePatternReceiver (if structured=false)
+            //            String contentType = info.getPropertyString("contentType").toLowerCase();
+            //            //won't work with log4j2, as Chainsaw depends on log4j1.x
+            //            //this will work - regular text log files are fine
+            //            if ("text/plain".equals(contentType)) {
+            //                VFSLogFilePatternReceiver receiver = new VFSLogFilePatternReceiver();
+            //                receiver.setAppendNonMatches(true);
+            //                receiver.setFileURL(info.getPropertyString("fileURI"));
+            //
+            // receiver.setLogFormat(LogFilePatternLayoutBuilder.getLogFormatFromPatternLayout(info.getPropertyString("format")));
+            //
+            // receiver.setTimestampFormat(LogFilePatternLayoutBuilder.getTimeStampFormat(info.getPropertyString("format")));
+            //                receiver.setName(name + "-receiver");
+            //                receiver.setTailing(true);
+            //                return receiver;
+            //            }
         }
 
-        //MulticastAppender
+        // MulticastAppender
         if (MULTICAST_APPENDER_SERVICE_NAME.equals(zone)) {
             MulticastReceiver receiver = new MulticastReceiver();
-            //this needs to be a multicast address, not the host address, so we need to use a property
+            // this needs to be a multicast address, not the host address, so we need to use a property
             receiver.setAddress(info.getPropertyString("multicastAddress"));
             receiver.setPort(port);
             receiver.setName(name + "-receiver");
@@ -499,7 +501,7 @@
 
             return receiver;
         }
-        //UDPAppender
+        // UDPAppender
         if (UDP_APPENDER_SERVICE_NAME.equals(zone)) {
             UDPReceiver receiver = new UDPReceiver();
             receiver.setPort(port);
@@ -510,7 +512,7 @@
             return receiver;
         }
 
-        //non-log4j XML-based socketappender
+        // non-log4j XML-based socketappender
         if (XML_SOCKET_APPENDER_SERVICE_NAME.equals(zone)) {
             XMLSocketReceiver receiver = new XMLSocketReceiver();
             receiver.setPort(port);
@@ -521,7 +523,7 @@
             return receiver;
         }
 
-        //not recognized
+        // not recognized
         LOG.debug("Unable to find receiver for appender with service name: {}", zone);
         return null;
     }
@@ -544,5 +546,4 @@
         }
         return null;
     }
-
 }
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 53b35a5..e838952 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPreferenceModel.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -26,15 +26,15 @@
     private List<String> monitoredZones = new ArrayList<>();
     private Set<String> autoConnectDevices = new HashSet<>();
 
-//   TODO expose addPropertyChangeListener
+    //   TODO expose addPropertyChangeListener
 
     public void addAutoConnectDevice(String deviceName) {
-//        TODO  fire property changes
+        //        TODO  fire property changes
         autoConnectDevices.add(deviceName);
     }
 
     public void addMonitoredZone(String zone) {
-//        TODO fire property change events
+        //        TODO fire property change events
         monitoredZones.add(zone);
     }
 
@@ -57,6 +57,4 @@
     public void removeAutoConnectDevice(String device) {
         autoConnectDevices.remove(device);
     }
-
-
 }
diff --git a/src/main/java/org/apache/log4j/helpers/Constants.java b/src/main/java/org/apache/log4j/helpers/Constants.java
index 0de3245..c9c6f91 100644
--- a/src/main/java/org/apache/log4j/helpers/Constants.java
+++ b/src/main/java/org/apache/log4j/helpers/Constants.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.helpers;
 
-
 /**
  * Constants used internally throughout log4j.
  */
@@ -91,9 +89,7 @@
     /**
      * Codes URL string literal.
      */
-    String CODES_HREF =
-        "http://logging.apache.org/log4j/docs/codes.html";
-
+    String CODES_HREF = "http://logging.apache.org/log4j/docs/codes.html";
 
     /**
      * ABSOLUTE string literal.
diff --git a/src/main/java/org/apache/log4j/helpers/MessageFormatter.java b/src/main/java/org/apache/log4j/helpers/MessageFormatter.java
index 05a753d..5d70c7a 100644
--- a/src/main/java/org/apache/log4j/helpers/MessageFormatter.java
+++ b/src/main/java/org/apache/log4j/helpers/MessageFormatter.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.helpers;
 
-
 /**
  * Formats messages according to very simple rules.
  * See {@link #format(String, Object)} and
@@ -56,8 +54,7 @@
      * @param argument       The argument to be inserted instead of the formatting element
      * @return The formatted message
      */
-    public static String format(final String messagePattern,
-                                final Object argument) {
+    public static String format(final String messagePattern, final Object argument) {
         int j = messagePattern.indexOf(DELIM_START);
         int len = messagePattern.length();
         char escape = 'x';
@@ -76,9 +73,7 @@
                 // present
                 return messagePattern;
             } else {
-                String sbuf = messagePattern.substring(0, j) +
-                    argument +
-                    messagePattern.substring(j + 2);
+                String sbuf = messagePattern.substring(0, j) + argument + messagePattern.substring(j + 2);
                 return sbuf;
             }
         }
@@ -102,9 +97,7 @@
      * @param arg2           The second argument to replace the second formatting element
      * @return The formatted message
      */
-    public static String format(final String messagePattern,
-                                final Object arg1,
-                                final Object arg2) {
+    public static String format(final String messagePattern, final Object arg1, final Object arg2) {
         int i = 0;
         int len = messagePattern.length();
 
@@ -120,16 +113,14 @@
                 } else {
                     // add the tail string which contains no variables
                     // and return the result.
-                    sbuf.append(messagePattern.substring(i,
-                        messagePattern.length()));
+                    sbuf.append(messagePattern.substring(i, messagePattern.length()));
                     return sbuf.toString();
                 }
             } else {
                 char delimStop = messagePattern.charAt(j + 1);
                 if ((delimStop != DELIM_STOP)) {
                     // invalid DELIM_START/DELIM_STOP pair
-                    sbuf.append(messagePattern.substring(i,
-                        messagePattern.length()));
+                    sbuf.append(messagePattern.substring(i, messagePattern.length()));
                     return sbuf.toString();
                 }
                 sbuf.append(messagePattern.substring(i, j));
diff --git a/src/main/java/org/apache/log4j/net/AddressBased.java b/src/main/java/org/apache/log4j/net/AddressBased.java
index f1d10c0..6124cfa 100644
--- a/src/main/java/org/apache/log4j/net/AddressBased.java
+++ b/src/main/java/org/apache/log4j/net/AddressBased.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
-
 /**
  * Net based entities that 'work with' an Address
  * should consider implementing this
diff --git a/src/main/java/org/apache/log4j/net/ECSLogEvent.java b/src/main/java/org/apache/log4j/net/ECSLogEvent.java
index 8011ef4..3fc24b6 100644
--- a/src/main/java/org/apache/log4j/net/ECSLogEvent.java
+++ b/src/main/java/org/apache/log4j/net/ECSLogEvent.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -18,7 +18,6 @@
 
 import com.owlike.genson.annotation.JsonProperty;
 import java.time.ZonedDateTime;
-import java.util.Hashtable;
 import java.util.List;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
@@ -29,19 +28,24 @@
 public class ECSLogEvent {
     @JsonProperty("@timestamp")
     public String timestamp;
+
     @JsonProperty("log.level")
     public String level;
+
     public String message;
+
     @JsonProperty("process.thread.name")
     public String thread_name;
+
     @JsonProperty("log.logger")
     public String logger;
+
     public List<String> tags;
 
-    ChainsawLoggingEvent toChainsawLoggingEvent( ChainsawLoggingEventBuilder build ){
+    ChainsawLoggingEvent toChainsawLoggingEvent(ChainsawLoggingEventBuilder build) {
         build.clear();
 
-        build.setLevelFromString( level )
+        build.setLevelFromString(level)
                 .setMessage(message)
                 .setLogger(logger)
                 .setThreadName(thread_name)
diff --git a/src/main/java/org/apache/log4j/net/JsonReceiver.java b/src/main/java/org/apache/log4j/net/JsonReceiver.java
index 04c2a4a..de6a984 100644
--- a/src/main/java/org/apache/log4j/net/JsonReceiver.java
+++ b/src/main/java/org/apache/log4j/net/JsonReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -18,14 +18,13 @@
 
 import com.owlike.genson.Genson;
 import com.owlike.genson.GensonBuilder;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.InputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.util.Iterator;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -41,7 +40,7 @@
     public static final int DEFAULT_PORT = 4449;
     protected int m_port = DEFAULT_PORT;
     private boolean active = false;
-    
+
     private static final Logger logger = LogManager.getLogger();
 
     /**
@@ -118,9 +117,7 @@
         try {
             m_serverSocket = new ServerSocket(m_port, 1);
         } catch (Exception e) {
-            logger.error(
-                "error starting JsonReceiver (" + this.getName()
-                    + "), receiver did not start", e);
+            logger.error("error starting JsonReceiver (" + this.getName() + "), receiver did not start", e);
             active = false;
             doShutdown();
 
@@ -136,7 +133,7 @@
 
             while (!m_rxThread.isInterrupted()) {
                 // if we have a socket, start watching it
-                if (socket != null ) {
+                if (socket != null) {
                     logger.debug("socket not null - parsing data");
                     parseIncomingData(socket);
                 }
@@ -154,8 +151,7 @@
                 socket.close();
             }
         } catch (Exception e) {
-            logger.warn(
-                "socket server disconnected, stopping");
+            logger.warn("socket server disconnected, stopping");
         }
     }
 
@@ -163,8 +159,8 @@
     public int getPort() {
         return m_port;
     }
-    
-    public void setPort(int portnum){
+
+    public void setPort(int portnum) {
         m_port = portnum;
     }
 
@@ -172,10 +168,10 @@
     public boolean isActive() {
         return active;
     }
-    
-    private void parseIncomingData(Socket sock){
+
+    private void parseIncomingData(Socket sock) {
         InputStream is;
-        
+
         try {
             is = sock.getInputStream();
         } catch (Exception e) {
@@ -185,21 +181,19 @@
         }
 
         if (is != null) {
-            Genson genson = new GensonBuilder()
-                    .useDateAsTimestamp(true)
-                    .create();
+            Genson genson = new GensonBuilder().useDateAsTimestamp(true).create();
 
             try {
-                //read data from the socket.
+                // read data from the socket.
                 // Once we have a full JSON message, parse it
                 ChainsawLoggingEventBuilder build = new ChainsawLoggingEventBuilder();
                 while (true) {
-                    logger.debug( "About to deserialize values" );
+                    logger.debug("About to deserialize values");
                     Iterator<ECSLogEvent> iter = genson.deserializeValues(is, ECSLogEvent.class);
                     // Because the socket can be closed, if we don't have anything parsed
                     // assume that the socket is closed.
-                    if( !iter.hasNext() ) break;
-                    while( iter.hasNext() ){
+                    if (!iter.hasNext()) break;
+                    while (iter.hasNext()) {
                         ECSLogEvent evt = iter.next();
                         append(evt.toChainsawLoggingEvent(build));
                     }
@@ -215,7 +209,7 @@
                 is.close();
             }
         } catch (Exception e) {
-            //logger.info("Could not close connection.", e);
+            // logger.info("Could not close connection.", e);
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/net/JsonReceiverFactory.java b/src/main/java/org/apache/log4j/net/JsonReceiverFactory.java
index 8003886..a105777 100644
--- a/src/main/java/org/apache/log4j/net/JsonReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/net/JsonReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -34,14 +34,14 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
-                new PropertyDescriptor("name", JsonReceiver.class),
-//                new PropertyDescriptor("address", JsonReceiver.class),
-                new PropertyDescriptor("port", JsonReceiver.class),
-//                new PropertyDescriptor("threshold", MulticastReceiver.class),
-//                new PropertyDescriptor("decoder", MulticastReceiver.class),
-//                new PropertyDescriptor("advertiseViaMulticastDNS", MulticastReceiver.class),
-            };
+        return new PropertyDescriptor[] {
+            new PropertyDescriptor("name", JsonReceiver.class),
+            //                new PropertyDescriptor("address", JsonReceiver.class),
+            new PropertyDescriptor("port", JsonReceiver.class),
+            //                new PropertyDescriptor("threshold", MulticastReceiver.class),
+            //                new PropertyDescriptor("decoder", MulticastReceiver.class),
+            //                new PropertyDescriptor("advertiseViaMulticastDNS", MulticastReceiver.class),
+        };
     }
 
     @Override
@@ -51,9 +51,7 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "JSON Recevier\n" +
-                "The JSON recevier receives events in an ECS Log Event format.\n" +
-                "This receiver listens on the specified port for incoming data.";
+        return "JSON Recevier\n" + "The JSON recevier receives events in an ECS Log Event format.\n"
+                + "This receiver listens on the specified port for incoming data.";
     }
-    
 }
diff --git a/src/main/java/org/apache/log4j/net/JsonSocketNode.java b/src/main/java/org/apache/log4j/net/JsonSocketNode.java
deleted file mode 100644
index 17e9024..0000000
--- a/src/main/java/org/apache/log4j/net/JsonSocketNode.java
+++ /dev/null
@@ -1,158 +0,0 @@
-///*
-// * Licensed to the Apache Software Foundation (ASF) under one or more
-// * contributor license agreements.  See the NOTICE file distributed with
-// * this work for additional information regarding copyright ownership.
-// * The ASF licenses this file to You under the Apache License, Version 2.0
-// * (the "License"); you may not use this file except in compliance with
-// * the License.  You may obtain a copy of the License at
-// *
-// *      http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing, software
-// * distributed under the License is distributed on an "AS IS" BASIS,
-// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// * See the License for the specific language governing permissions and
-// * limitations under the License.
-// */
-//
-//package org.apache.log4j.net;
-//
-//import com.owlike.genson.Genson;
-//import com.owlike.genson.GensonBuilder;
-//import com.owlike.genson.stream.ObjectReader;
-//import org.apache.log4j.Logger;
-//import org.apache.log4j.helpers.Constants;
-//import org.apache.log4j.plugins.Receiver;
-//import org.apache.log4j.spi.ComponentBase;
-//import org.apache.log4j.spi.Decoder;
-//import org.apache.log4j.spi.LoggerRepository;
-//import org.apache.log4j.spi.LoggingEvent;
-//
-//import java.io.IOException;
-//import java.io.InputStream;
-//import java.net.Socket;
-//import java.util.ArrayDeque;
-//import java.util.ArrayList;
-//import java.util.Deque;
-//import java.util.Iterator;
-//import java.util.List;
-//import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
-//
-//
-///**
-// * Read {@link LoggingEvent} objects sent from a remote client using JSON over
-// * Sockets (TCP). These logging events are logged according to local
-// * policy, as if they were generated locally.
-// */
-//public class JsonSocketNode implements Runnable {
-//    Socket m_socket;
-//    JsonReceiver m_receiver;
-//    SocketNodeEventListener m_listener;
-//    private List<Byte> m_jsonBuffer;
-//
-//    /**
-//     * Constructor for socket and reciever.
-//     */
-//    public JsonSocketNode(Socket socket, JsonReceiver receiver) {
-//        this.m_socket = socket;
-//        this.m_receiver = receiver;
-//    }
-//
-//    /**
-//     * Set the event listener on this node.
-//     */
-//    public void setListener(SocketNodeEventListener _listener) {
-//        m_listener = _listener;
-//    }
-//
-//    public void run() {
-//        Logger remoteLogger;
-//        Exception listenerException = null;
-//        InputStream is;
-//
-//        if ((this.m_receiver == null) ) {
-//            listenerException =
-//                new Exception(
-//                    "No receiver provided.  Cannot process JSON socket events");
-//            getLogger().error(
-//                "Exception constructing JSON Socket Receiver", listenerException);
-//        }
-//
-//        m_jsonBuffer = new ArrayList<>( 8192 );
-//
-//        try {
-//            is = m_socket.getInputStream();
-//        } catch (Exception e) {
-//            is = null;
-//            listenerException = e;
-//            getLogger().error("Exception opening InputStream to " + m_socket, e);
-//        }
-//
-//        if (is != null) {
-//            String hostName = m_socket.getInetAddress().getHostName();
-//            String remoteInfo = hostName + ":" + m_socket.getPort();
-//            Genson genson = new GensonBuilder()
-//                    .useDateAsTimestamp(true)
-//                    .create();
-//
-//            try {
-//                //read data from the socket.
-//                // Once we have a full JSON message, parse it
-//                ChainsawLoggingEventBuilder build = new ChainsawLoggingEventBuilder();
-//                while (true) {
-//                    getLogger().debug( "About to deserialize values" );
-//                    Iterator<ECSLogEvent> iter = genson.deserializeValues(is, ECSLogEvent.class);
-//                    // Because the socket can be closed, if we don't have anything parsed
-//                    // assume that the socket is closed.
-//                    if( !iter.hasNext() ) break;
-//                    while( iter.hasNext() ){
-//                        ECSLogEvent evt = iter.next();
-//                        m_receiver.append(evt.toChainsawLoggingEvent(build));
-////                        LoggingEvent e = evt.toLoggingEvent();
-////                        e.setProperty(Constants.HOSTNAME_KEY, hostName);
-////
-////                        // store the known remote info in an event property
-////                        e.setProperty("log4j.remoteSourceInfo", remoteInfo);
-////
-////                        // if configured with a receiver, tell it to post the event
-////                        if (m_receiver != null) {
-////                            m_receiver.doPost(e);
-////
-////                            // else post it via the hierarchy
-////                        } else {
-////                            // get a logger from the hierarchy. The name of the logger
-////                            // is taken to be the name contained in the event.
-////                            remoteLogger = repository.getLogger(e.getLoggerName());
-////
-////                            //event.logger = remoteLogger;
-////                            // apply the logger-level filter
-////                            if (
-////                                e.getLevel().isGreaterOrEqual(
-////                                    remoteLogger.getEffectiveLevel())) {
-////                                // finally log the event as if was generated locally
-////                                remoteLogger.callAppenders(e);
-////                            }
-////                        }
-//                    }
-//                }
-//            } catch (Exception e) {
-//                getLogger().error("Unexpected exception. Closing connection.", e);
-//                listenerException = e;
-//            }
-//        }
-//
-//        // close the socket
-//        try {
-//            if (is != null) {
-//                is.close();
-//            }
-//        } catch (Exception e) {
-//            //logger.info("Could not close connection.", e);
-//        }
-//
-//        // send event to listener, if configured
-//        if (m_listener != null) {
-//            m_listener.socketClosedEvent(listenerException);
-//        }
-//    }
-//}
diff --git a/src/main/java/org/apache/log4j/net/MulticastReceiver.java b/src/main/java/org/apache/log4j/net/MulticastReceiver.java
index d37f45a..6509b70 100644
--- a/src/main/java/org/apache/log4j/net/MulticastReceiver.java
+++ b/src/main/java/org/apache/log4j/net/MulticastReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,21 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
-import org.apache.log4j.spi.Decoder;
-
 import java.io.IOException;
 import java.net.*;
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
+import org.apache.log4j.spi.Decoder;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * Multicast-based receiver.  Accepts LoggingEvents encoded using
  * MulticastAppender and XMLLayout. The the XML data is converted
@@ -36,15 +33,14 @@
  *
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
-public class MulticastReceiver extends ChainsawReceiverSkeleton implements PortBased,
-    AddressBased {
+public class MulticastReceiver extends ChainsawReceiverSkeleton implements PortBased, AddressBased {
     private static final int PACKET_LENGTH = 16384;
     private int port;
     private String address;
     private String encoding;
     private MulticastSocket socket = null;
 
-    //default to log4j xml decoder
+    // default to log4j xml decoder
     private String decoder = "org.apache.log4j.xml.XMLDecoder";
     private Decoder decoderImpl;
     private MulticastReceiverThread receiverThread;
@@ -182,7 +178,6 @@
 
                     for (Object aList2 : list2) {
                         String data = (String) aList2;
-                        
                     }
 
                     list2.clear();
@@ -213,15 +208,13 @@
                 try {
                     socket.receive(p);
 
-                    //this string constructor which accepts a charset throws an exception if it is
-                    //null
+                    // this string constructor which accepts a charset throws an exception if it is
+                    // null
                     String data;
                     if (encoding == null) {
-                        data =
-                            new String(p.getData(), 0, p.getLength());
+                        data = new String(p.getData(), 0, p.getLength());
                     } else {
-                        data =
-                            new String(p.getData(), 0, p.getLength(), encoding);
+                        data = new String(p.getData(), 0, p.getLength(), encoding);
                     }
 
                     List<ChainsawLoggingEvent> v = decoderImpl.decodeEvents(data.trim());
@@ -233,7 +226,7 @@
                         }
                     }
                 } catch (SocketException se) {
-                    //disconnected
+                    // disconnected
                 } catch (IOException ioe) {
                     ioe.printStackTrace();
                 }
diff --git a/src/main/java/org/apache/log4j/net/MulticastReceiverBeanInfo.java b/src/main/java/org/apache/log4j/net/MulticastReceiverBeanInfo.java
index ec986c8..cabbb65 100644
--- a/src/main/java/org/apache/log4j/net/MulticastReceiverBeanInfo.java
+++ b/src/main/java/org/apache/log4j/net/MulticastReceiverBeanInfo.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -19,7 +19,6 @@
 import java.beans.PropertyDescriptor;
 import java.beans.SimpleBeanInfo;
 
-
 /**
  * BeanInfo class for the meta-data of the MulticastReceiver.
  *
@@ -34,7 +33,7 @@
 
         try {
 
-            return new PropertyDescriptor[]{
+            return new PropertyDescriptor[] {
                 new PropertyDescriptor("name", MulticastReceiver.class),
                 new PropertyDescriptor("address", MulticastReceiver.class),
                 new PropertyDescriptor("port", MulticastReceiver.class),
diff --git a/src/main/java/org/apache/log4j/net/MulticastReceiverFactory.java b/src/main/java/org/apache/log4j/net/MulticastReceiverFactory.java
index 4f9086d..d974a40 100644
--- a/src/main/java/org/apache/log4j/net/MulticastReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/net/MulticastReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -24,7 +24,7 @@
 /**
  *
  */
-public class MulticastReceiverFactory implements ChainsawReceiverFactory{
+public class MulticastReceiverFactory implements ChainsawReceiverFactory {
 
     @Override
     public ChainsawReceiver create() {
@@ -33,7 +33,7 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
+        return new PropertyDescriptor[] {
             new PropertyDescriptor("name", MulticastReceiver.class),
             new PropertyDescriptor("port", MulticastReceiver.class),
             new PropertyDescriptor("address", MulticastReceiver.class),
@@ -49,14 +49,12 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "<html>The multicast recevier has the following parameters:<br/>" +
-                "<ul>" +
-                "<li>port - the port to listen on for incoming data</li>"+
-                "<li>address - the IP address to listen on for incoming data</li>"+
-                "<li>encoding - the encoding of the data(e.g. UTF-8)</li>"+
-                "<li>decoder - the specific decoder to use to decode the data.  Only XML decoding is built-in</li>"+
-                "</ul>"+
-                "</html>";
+        return "<html>The multicast recevier has the following parameters:<br/>" + "<ul>"
+                + "<li>port - the port to listen on for incoming data</li>"
+                + "<li>address - the IP address to listen on for incoming data</li>"
+                + "<li>encoding - the encoding of the data(e.g. UTF-8)</li>"
+                + "<li>decoder - the specific decoder to use to decode the data.  Only XML decoding is built-in</li>"
+                + "</ul>"
+                + "</html>";
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/net/NetworkBased.java b/src/main/java/org/apache/log4j/net/NetworkBased.java
index 8bd3908..73653f7 100644
--- a/src/main/java/org/apache/log4j/net/NetworkBased.java
+++ b/src/main/java/org/apache/log4j/net/NetworkBased.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
 /**
diff --git a/src/main/java/org/apache/log4j/net/PortBased.java b/src/main/java/org/apache/log4j/net/PortBased.java
index 98a9b3e..b8c2405 100644
--- a/src/main/java/org/apache/log4j/net/PortBased.java
+++ b/src/main/java/org/apache/log4j/net/PortBased.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
-
 /**
  * Net based entities that 'work with' a Port should consider implementing this
  * interface so that they can be treated generically.
diff --git a/src/main/java/org/apache/log4j/net/SocketNodeEventListener.java b/src/main/java/org/apache/log4j/net/SocketNodeEventListener.java
index 037f31f..68fb926 100644
--- a/src/main/java/org/apache/log4j/net/SocketNodeEventListener.java
+++ b/src/main/java/org/apache/log4j/net/SocketNodeEventListener.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
 import java.util.EventListener;
diff --git a/src/main/java/org/apache/log4j/net/UDPReceiver.java b/src/main/java/org/apache/log4j/net/UDPReceiver.java
index d99ec43..db496d7 100644
--- a/src/main/java/org/apache/log4j/net/UDPReceiver.java
+++ b/src/main/java/org/apache/log4j/net/UDPReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
 import java.io.IOException;
@@ -22,13 +21,12 @@
 import java.net.DatagramSocket;
 import java.net.SocketException;
 import java.util.List;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.spi.Decoder;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * Receive LoggingEvents encoded with an XMLLayout, convert the XML data to a
  * LoggingEvent and post the LoggingEvent.
@@ -40,7 +38,7 @@
     private UDPReceiverThread receiverThread;
     private String encoding;
 
-    //default to log4j xml decoder
+    // default to log4j xml decoder
     private String decoder = "org.apache.log4j.xml.XMLDecoder";
     private Decoder decoderImpl;
     private boolean closed = false;
@@ -55,7 +53,6 @@
      */
     public static final String ZONE = "_log4j_xml_udp_receiver.local.";
 
-
     public int getPort() {
         return port;
     }
@@ -150,8 +147,8 @@
                 try {
                     socket.receive(p);
 
-                    //this string constructor which accepts a charset throws an exception if it is
-                    //null
+                    // this string constructor which accepts a charset throws an exception if it is
+                    // null
                     String data;
                     if (encoding == null) {
                         data = new String(p.getData(), 0, p.getLength());
@@ -160,17 +157,17 @@
                     }
 
                     List<ChainsawLoggingEvent> v = decoderImpl.decodeEvents(data);
-                    for( ChainsawLoggingEvent evt : v ){
+                    for (ChainsawLoggingEvent evt : v) {
                         append(evt);
                     }
                 } catch (SocketException se) {
-                    //disconnected
+                    // disconnected
                 } catch (IOException ioe) {
                     ioe.printStackTrace();
                 }
             }
 
-            //LogLog.debug(UDPReceiver.this.getName() + "'s thread is ending.");
+            // LogLog.debug(UDPReceiver.this.getName() + "'s thread is ending.");
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/net/UDPReceiverFactory.java b/src/main/java/org/apache/log4j/net/UDPReceiverFactory.java
index 2fe3729..0793af6 100644
--- a/src/main/java/org/apache/log4j/net/UDPReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/net/UDPReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -24,7 +24,7 @@
 /**
  *
  */
-public class UDPReceiverFactory implements ChainsawReceiverFactory{
+public class UDPReceiverFactory implements ChainsawReceiverFactory {
 
     @Override
     public ChainsawReceiver create() {
@@ -33,7 +33,7 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
+        return new PropertyDescriptor[] {
             new PropertyDescriptor("name", UDPReceiver.class),
             new PropertyDescriptor("port", UDPReceiver.class),
             new PropertyDescriptor("encoding", UDPReceiver.class),
@@ -48,12 +48,11 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "<html>The UDP recevier has the following parameters:<br/>" +
-                "<ul>" +
-                "<li>port - the port to listen on for incoming data on all interfaces</li>"+
-                "<li>encoding - the encoding of the data(e.g. UTF-8)</li>"+
-                "<li>decoder - the specific decoder to use to decode the data.  Only XML decoding is built-in</li>"+
-                "</ul>"+
-                "</html>";
+        return "<html>The UDP recevier has the following parameters:<br/>" + "<ul>"
+                + "<li>port - the port to listen on for incoming data on all interfaces</li>"
+                + "<li>encoding - the encoding of the data(e.g. UTF-8)</li>"
+                + "<li>decoder - the specific decoder to use to decode the data.  Only XML decoding is built-in</li>"
+                + "</ul>"
+                + "</html>";
     }
 }
diff --git a/src/main/java/org/apache/log4j/net/XMLReceiverFactory.java b/src/main/java/org/apache/log4j/net/XMLReceiverFactory.java
index 0a74820..2369925 100644
--- a/src/main/java/org/apache/log4j/net/XMLReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/net/XMLReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -25,7 +25,7 @@
  *
  * @author robert
  */
-public class XMLReceiverFactory implements ChainsawReceiverFactory{
+public class XMLReceiverFactory implements ChainsawReceiverFactory {
 
     @Override
     public ChainsawReceiver create() {
@@ -34,10 +34,10 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
-                new PropertyDescriptor("name", XMLSocketReceiver.class),
-                new PropertyDescriptor("port", XMLSocketReceiver.class),
-            };
+        return new PropertyDescriptor[] {
+            new PropertyDescriptor("name", XMLSocketReceiver.class),
+            new PropertyDescriptor("port", XMLSocketReceiver.class),
+        };
     }
 
     @Override
@@ -47,11 +47,10 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "<html>The XML recevier has the following parameters:<br/>" +
-                "<ul>" +
-                "<li>port - the port to listen on for incoming data via TCP</li>"+
-                "</ul>"+
-                "Note that this receiver listens for only log4j1 style XML events"+
-                "</html>";
+        return "<html>The XML recevier has the following parameters:<br/>" + "<ul>"
+                + "<li>port - the port to listen on for incoming data via TCP</li>"
+                + "</ul>"
+                + "Note that this receiver listens for only log4j1 style XML events"
+                + "</html>";
     }
 }
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketNode.java b/src/main/java/org/apache/log4j/net/XMLSocketNode.java
deleted file mode 100644
index e592ae1..0000000
--- a/src/main/java/org/apache/log4j/net/XMLSocketNode.java
+++ /dev/null
@@ -1,201 +0,0 @@
-///*
-// * Licensed to the Apache Software Foundation (ASF) under one or more
-// * contributor license agreements.  See the NOTICE file distributed with
-// * this work for additional information regarding copyright ownership.
-// * The ASF licenses this file to You under the Apache License, Version 2.0
-// * (the "License"); you may not use this file except in compliance with
-// * the License.  You may obtain a copy of the License at
-// *
-// *      http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing, software
-// * distributed under the License is distributed on an "AS IS" BASIS,
-// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// * See the License for the specific language governing permissions and
-// * limitations under the License.
-// */
-//
-//package org.apache.log4j.net;
-//
-//import org.apache.log4j.Logger;
-//import org.apache.log4j.helpers.Constants;
-//import org.apache.log4j.plugins.Receiver;
-//import org.apache.log4j.spi.ComponentBase;
-//import org.apache.log4j.spi.Decoder;
-//import org.apache.log4j.spi.LoggerRepository;
-//import org.apache.log4j.spi.LoggingEvent;
-//
-//import java.io.IOException;
-//import java.io.InputStream;
-//import java.net.Socket;
-//import java.util.List;
-//
-//
-///**
-// * Read {@link LoggingEvent} objects sent from a remote client using XML over
-// * Sockets (TCP). These logging events are logged according to local
-// * policy, as if they were generated locally.
-// * <p>
-// * <p>For example, the socket node might decide to log events to a
-// * local file and also resent them to a second socket node.
-// *
-// * @author Scott Deboy &lt;sdeboy@apache.org&gt;;
-// * @since 0.8.4
-// */
-//public class XMLSocketNode extends ComponentBase implements Runnable {
-//    Socket socket;
-//    Receiver receiver;
-//    Decoder decoder;
-//    SocketNodeEventListener listener;
-//
-//    /**
-//     * Constructor for socket and logger repository.
-//     */
-//    public XMLSocketNode(
-//        String decoder, Socket socket, LoggerRepository hierarchy) {
-//        this.repository = hierarchy;
-//        try {
-//            Class c = Class.forName(decoder);
-//            Object o = c.newInstance();
-//
-//            if (o instanceof Decoder) {
-//                this.decoder = (Decoder) o;
-//            }
-//        } catch (ClassNotFoundException cnfe) {
-//            getLogger().warn("Unable to find decoder", cnfe);
-//        } catch (IllegalAccessException | InstantiationException iae) {
-//            getLogger().warn("Unable to construct decoder", iae);
-//        }
-//
-//        this.socket = socket;
-//    }
-//
-//    /**
-//     * Constructor for socket and reciever.
-//     */
-//    public XMLSocketNode(String decoder, Socket socket, Receiver receiver) {
-//        try {
-//            Class c = Class.forName(decoder);
-//            Object o = c.newInstance();
-//
-//            if (o instanceof Decoder) {
-//                this.decoder = (Decoder) o;
-//            }
-//        } catch (ClassNotFoundException cnfe) {
-//            getLogger().warn("Unable to find decoder", cnfe);
-//        } catch (IllegalAccessException | InstantiationException iae) {
-//            getLogger().warn("Unable to construct decoder", iae);
-//        }
-//
-//        this.socket = socket;
-//        this.receiver = receiver;
-//    }
-//
-//    /**
-//     * Set the event listener on this node.
-//     */
-//    public void setListener(SocketNodeEventListener _listener) {
-//        listener = _listener;
-//    }
-//
-//    public void run() {
-//        Logger remoteLogger;
-//        Exception listenerException = null;
-//        InputStream is;
-//
-//        if ((this.receiver == null) || (this.decoder == null)) {
-//            listenerException =
-//                new Exception(
-//                    "No receiver or decoder provided.  Cannot process xml socket events");
-//            getLogger().error(
-//                "Exception constructing XML Socket Receiver", listenerException);
-//        }
-//
-//        try {
-//            is = socket.getInputStream();
-//        } catch (Exception e) {
-//            is = null;
-//            listenerException = e;
-//            getLogger().error("Exception opening InputStream to " + socket, e);
-//        }
-//
-//        if (is != null) {
-//            String hostName = socket.getInetAddress().getHostName();
-//            String remoteInfo = hostName + ":" + socket.getPort();
-//
-//            try {
-//                //read data from the socket
-//                //it's up to the individual decoder to handle incomplete event data
-//                while (true) {
-//                    byte[] b = new byte[1024];
-//                    int length = is.read(b);
-//                    if (length == -1) {
-//                        getLogger().info(
-//                            "no bytes read from stream - closing connection.");
-//                        break;
-//                    }
-//                    List<LoggingEvent> v = decoder.decodeEvents(new String(b, 0, length));
-//
-//                    if (v != null) {
-//
-//                        for (Object aV : v) {
-//                            LoggingEvent e = (LoggingEvent) aV;
-//                            e.setProperty(Constants.HOSTNAME_KEY, hostName);
-//
-//                            // store the known remote info in an event property
-//                            e.setProperty("log4j.remoteSourceInfo", remoteInfo);
-//
-//                            // if configured with a receiver, tell it to post the event
-//                            if (receiver != null) {
-//                                receiver.doPost(e);
-//
-//                                // else post it via the hierarchy
-//                            } else {
-//                                // get a logger from the hierarchy. The name of the logger
-//                                // is taken to be the name contained in the event.
-//                                remoteLogger = repository.getLogger(e.getLoggerName());
-//
-//                                //event.logger = remoteLogger;
-//                                // apply the logger-level filter
-//                                if (
-//                                    e.getLevel().isGreaterOrEqual(
-//                                        remoteLogger.getEffectiveLevel())) {
-//                                    // finally log the event as if was generated locally
-//                                    remoteLogger.callAppenders(e);
-//                                }
-//                            }
-//                        }
-//                    }
-//                }
-//            } catch (java.io.EOFException e) {
-//                getLogger().info("Caught java.io.EOFException closing connection.");
-//                listenerException = e;
-//            } catch (java.net.SocketException e) {
-//                getLogger().info(
-//                    "Caught java.net.SocketException closing connection.");
-//                listenerException = e;
-//            } catch (IOException e) {
-//                getLogger().info("Caught java.io.IOException: " + e);
-//                getLogger().info("Closing connection.");
-//                listenerException = e;
-//            } catch (Exception e) {
-//                getLogger().error("Unexpected exception. Closing connection.", e);
-//                listenerException = e;
-//            }
-//        }
-//
-//        // close the socket
-//        try {
-//            if (is != null) {
-//                is.close();
-//            }
-//        } catch (Exception e) {
-//            //logger.info("Could not close connection.", e);
-//        }
-//
-//        // send event to listener, if configured
-//        if (listener != null) {
-//            listener.socketClosedEvent(listenerException);
-//        }
-//    }
-//}
diff --git a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
index 2637377..58dad56 100644
--- a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,23 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.net;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.io.InputStream;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.util.List;
 import java.util.Vector;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.spi.Decoder;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * XMLSocketReceiver receives a remote logging event via XML on a configured
  * socket and "posts" it to a LoggerRepository as if the event were
@@ -52,7 +49,7 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  */
 public class XMLSocketReceiver extends ChainsawReceiverSkeleton implements Runnable, PortBased {
-    //default to log4j xml decoder
+    // default to log4j xml decoder
     protected String decoder = "org.apache.log4j.xml.XMLDecoder";
     private ServerSocket serverSocket;
     private List<Socket> socketList = new Vector<>();
@@ -73,8 +70,7 @@
      * _log4j_xml_tcpconnect_appender.local.
      */
 
-    public XMLSocketReceiver() {
-    }
+    public XMLSocketReceiver() {}
 
     /**
      * Get the port to receive logging events on.
@@ -177,9 +173,7 @@
         try {
             serverSocket = new ServerSocket(port);
         } catch (Exception e) {
-            logger.error(
-                "error starting XMLSocketReceiver (" + this.getName()
-                    + "), receiver did not start", e);
+            logger.error("error starting XMLSocketReceiver (" + this.getName() + "), receiver did not start", e);
             active = false;
             doShutdown();
 
@@ -195,7 +189,7 @@
 
             while (!rThread.isInterrupted()) {
                 // if we have a socket, start watching it
-                if (socket != null ) {
+                if (socket != null) {
                     logger.debug("socket not null - parsing data");
                     parseIncomingData(socket);
                 }
@@ -213,8 +207,7 @@
                 socket.close();
             }
         } catch (Exception e) {
-            logger.warn(
-                "socket server disconnected, stopping");
+            logger.warn("socket server disconnected, stopping");
         }
     }
 
@@ -235,11 +228,11 @@
         return active;
     }
 
-    private void parseIncomingData(Socket sock){
+    private void parseIncomingData(Socket sock) {
         InputStream is;
         Decoder d = null;
-        
-        try{
+
+        try {
             d = (Decoder) Class.forName(decoder).getDeclaredConstructor().newInstance();
         } catch (Exception e) {
             logger.error("Unable to load correct decoder", e);
@@ -255,20 +248,19 @@
         }
 
         while (is != null) {
-            try{
+            try {
                 byte[] b = new byte[1024];
                 int length = is.read(b);
                 if (length == -1) {
-                    logger.info(
-                        "no bytes read from stream - closing connection.");
+                    logger.info("no bytes read from stream - closing connection.");
                     break;
                 }
                 List<ChainsawLoggingEvent> v = d.decodeEvents(new String(b, 0, length));
 
-                for( ChainsawLoggingEvent evt : v ){
+                for (ChainsawLoggingEvent evt : v) {
                     append(evt);
                 }
-            }catch(Exception ex){
+            } catch (Exception ex) {
                 logger.error(ex);
                 break;
             }
@@ -280,7 +272,7 @@
                 is.close();
             }
         } catch (Exception e) {
-            //logger.info("Could not close connection.", e);
+            // logger.info("Could not close connection.", e);
         }
     }
 }
diff --git a/src/main/java/org/apache/log4j/rule/AbstractRule.java b/src/main/java/org/apache/log4j/rule/AbstractRule.java
index f74bf50..3b4c4ca 100644
--- a/src/main/java/org/apache/log4j/rule/AbstractRule.java
+++ b/src/main/java/org/apache/log4j/rule/AbstractRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.beans.PropertyChangeEvent;
@@ -22,7 +21,6 @@
 import java.beans.PropertyChangeSupport;
 import java.io.Serializable;
 
-
 /**
  * An abstract Rule class that provides the PropertyChange support plumbing.
  *
@@ -33,29 +31,28 @@
     /**
      * Serialization id.
      */
-  static final long serialVersionUID = -2844288145563025172L;
+    static final long serialVersionUID = -2844288145563025172L;
 
     /**
      * PropertySupport instance.
      */
-  private PropertyChangeSupport propertySupport =
-    new PropertyChangeSupport(this);
+    private PropertyChangeSupport propertySupport = new PropertyChangeSupport(this);
 
     /**
      * Add property change listener.
      * @param l listener.
      */
-  public void addPropertyChangeListener(final PropertyChangeListener l) {
-    propertySupport.addPropertyChangeListener(l);
-  }
+    public void addPropertyChangeListener(final PropertyChangeListener l) {
+        propertySupport.addPropertyChangeListener(l);
+    }
 
     /**
      * Remove property change listener.
      * @param l listener.
      */
-  public void removePropertyChangeListener(final PropertyChangeListener l) {
-    propertySupport.removePropertyChangeListener(l);
-  }
+    public void removePropertyChangeListener(final PropertyChangeListener l) {
+        propertySupport.removePropertyChangeListener(l);
+    }
 
     /**
      * Send property change notification to attached listeners.
@@ -63,18 +60,15 @@
      * @param oldVal old value.
      * @param newVal new value.
      */
-  protected void firePropertyChange(
-    final String propertyName,
-    final Object oldVal,
-    final Object newVal) {
-    propertySupport.firePropertyChange(propertyName, oldVal, newVal);
-  }
+    protected void firePropertyChange(final String propertyName, final Object oldVal, final Object newVal) {
+        propertySupport.firePropertyChange(propertyName, oldVal, newVal);
+    }
 
-  /**
-   * Send property change notification to attached listeners.
-   * @param evt property change event.
-   */
-  public void firePropertyChange(final PropertyChangeEvent evt) {
-    propertySupport.firePropertyChange(evt);
-  }
+    /**
+     * Send property change notification to attached listeners.
+     * @param evt property change event.
+     */
+    public void firePropertyChange(final PropertyChangeEvent evt) {
+        propertySupport.firePropertyChange(evt);
+    }
 }
diff --git a/src/main/java/org/apache/log4j/rule/AndRule.java b/src/main/java/org/apache/log4j/rule/AndRule.java
index fd06435..b1478b0 100644
--- a/src/main/java/org/apache/log4j/rule/AndRule.java
+++ b/src/main/java/org/apache/log4j/rule/AndRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashMap;
@@ -25,7 +24,6 @@
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 
-
 /**
  * A Rule class implementing a logical 'and'.
  *
@@ -35,47 +33,45 @@
     /**
      * First rule.
      */
-  private final Rule firstRule;
+    private final Rule firstRule;
     /**
      * Second rule.
      */
-  private final Rule secondRule;
+    private final Rule secondRule;
     /**
      * Serialization id.
      */
-  static final long serialVersionUID = -8233444426923854651L;
+    static final long serialVersionUID = -8233444426923854651L;
 
     /**
      * Create new instance.
      * @param first first rule.
      * @param second second rule.
      */
-  private AndRule(final Rule first, final Rule second) {
-    super();
-    this.firstRule = first;
-    this.secondRule = second;
-  }
+    private AndRule(final Rule first, final Rule second) {
+        super();
+        this.firstRule = first;
+        this.secondRule = second;
+    }
 
     /**
      * Create rule from top two elements of stack.
      * @param stack stack of rules.
      * @return Rule that evaluates true only if both rules are true.
      */
-  public static Rule getRule(final Stack stack) {
-    if (stack.size() < 2) {
-        throw new IllegalArgumentException(
-                "Invalid AND rule - expected two rules but received "
-                        + stack.size());
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException("Invalid AND rule - expected two rules but received " + stack.size());
+        }
+        Object o2 = stack.pop();
+        Object o1 = stack.pop();
+        if ((o2 instanceof Rule) && (o1 instanceof Rule)) {
+            Rule p2 = (Rule) o2;
+            Rule p1 = (Rule) o1;
+            return new AndRule(p1, p2);
+        }
+        throw new IllegalArgumentException("Invalid AND rule: " + o2 + "..." + o1);
     }
-    Object o2 = stack.pop();
-    Object o1 = stack.pop();
-    if ((o2 instanceof Rule) && (o1 instanceof Rule)) {
-        Rule p2 = (Rule) o2;
-        Rule p1 = (Rule) o1;
-        return new AndRule(p1, p2);
-    }
-    throw new IllegalArgumentException("Invalid AND rule: " + o2 + "..." + o1);
-  }
 
     /**
      * Get rule.
@@ -83,14 +79,14 @@
      * @param secondParam second rule.
      * @return Rule that evaluates true only if both rules are true.
      */
-  public static Rule getRule(final Rule firstParam, final Rule secondParam) {
-    return new AndRule(firstParam, secondParam);
-  }
+    public static Rule getRule(final Rule firstParam, final Rule secondParam) {
+        return new AndRule(firstParam, secondParam);
+    }
 
     /**
      * {@inheritDoc}
      */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
         if (matches == null) {
             return firstRule.evaluate(event, null) && secondRule.evaluate(event, null);
         }
@@ -98,10 +94,10 @@
         Map tempMatches2 = new HashMap();
         boolean result = firstRule.evaluate(event, tempMatches1) && secondRule.evaluate(event, tempMatches2);
         if (result) {
-            for (Iterator iter = tempMatches1.entrySet().iterator();iter.hasNext();) {
-                Map.Entry entry = (Map.Entry)iter.next();
+            for (Iterator iter = tempMatches1.entrySet().iterator(); iter.hasNext(); ) {
+                Map.Entry entry = (Map.Entry) iter.next();
                 Object key = entry.getKey();
-                Set value = (Set)entry.getValue();
+                Set value = (Set) entry.getValue();
                 Set mainSet = (Set) matches.get(key);
                 if (mainSet == null) {
                     mainSet = new HashSet();
@@ -109,10 +105,10 @@
                 }
                 mainSet.addAll(value);
             }
-            for (Iterator iter = tempMatches2.entrySet().iterator();iter.hasNext();) {
-                Map.Entry entry = (Map.Entry)iter.next();
+            for (Iterator iter = tempMatches2.entrySet().iterator(); iter.hasNext(); ) {
+                Map.Entry entry = (Map.Entry) iter.next();
                 Object key = entry.getKey();
-                Set value = (Set)entry.getValue();
+                Set value = (Set) entry.getValue();
                 Set mainSet = (Set) matches.get(key);
                 if (mainSet == null) {
                     mainSet = new HashSet();
@@ -122,5 +118,5 @@
             }
         }
         return result;
-  }
+    }
 }
diff --git a/src/main/java/org/apache/log4j/rule/ColorRule.java b/src/main/java/org/apache/log4j/rule/ColorRule.java
index 51c6bd1..f46d73d 100644
--- a/src/main/java/org/apache/log4j/rule/ColorRule.java
+++ b/src/main/java/org/apache/log4j/rule/ColorRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.awt.Color;
@@ -22,7 +21,6 @@
 import java.util.Map;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 
-
 /**
  * A Rule class which also holds a color.
  *
@@ -32,24 +30,24 @@
     /**
      * Serialization id.
      */
-  static final long serialVersionUID = -794434783372847773L;
+    static final long serialVersionUID = -794434783372847773L;
 
     /**
      * Wrapped rule.
      */
-  private final Rule rule;
+    private final Rule rule;
     /**
      * Foreground color.
      */
-  private final Color foregroundColor;
+    private final Color foregroundColor;
     /**
      * Background color.
      */
-  private final Color backgroundColor;
+    private final Color backgroundColor;
     /**
      * Expression.
      */
-  private final String expression;
+    private final String expression;
 
     /**
      * Create new instance.
@@ -58,69 +56,67 @@
      * @param backgroundColor background color.
      * @param foregroundColor foreground color.
      */
-  public ColorRule(final String expression,
-                   final Rule rule,
-                   final Color backgroundColor,
-                   final Color foregroundColor) {
-    super();
-    this.expression = expression;
-    this.rule = rule;
-    this.backgroundColor = backgroundColor;
-    this.foregroundColor = foregroundColor;
-  }
+    public ColorRule(
+            final String expression, final Rule rule, final Color backgroundColor, final Color foregroundColor) {
+        super();
+        this.expression = expression;
+        this.rule = rule;
+        this.backgroundColor = backgroundColor;
+        this.foregroundColor = foregroundColor;
+    }
 
     /**
      * Get rule.
      * @return underlying rule.
      */
-  public Rule getRule() {
-      return rule;
-  }
+    public Rule getRule() {
+        return rule;
+    }
 
     /**
      * Get foreground color.
      * @return foreground color.
      */
-  public Color getForegroundColor() {
-    return foregroundColor;
-  }
+    public Color getForegroundColor() {
+        return foregroundColor;
+    }
 
     /**
      * Get background color.
      * @return background color.
      */
-  public Color getBackgroundColor() {
-    return backgroundColor;
-  }
+    public Color getBackgroundColor() {
+        return backgroundColor;
+    }
 
     /**
      * Get expression.
      * @return expression.
      */
-  public String getExpression() {
-      return expression;
-  }
+    public String getExpression() {
+        return expression;
+    }
 
     /**
      * {@inheritDoc}
      */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    //no need for color rules to build matches
-    return (rule != null && rule.evaluate(event, null));
-  }
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        // no need for color rules to build matches
+        return (rule != null && rule.evaluate(event, null));
+    }
 
     /**
      * {@inheritDoc}
      */
-  public String toString() {
-      StringBuffer buf = new StringBuffer("color rule - expression: ");
-      buf.append(expression);
-      buf.append(", rule: ");
-      buf.append(rule);
-      buf.append(" bg: ");
-      buf.append(backgroundColor);
-      buf.append(" fg: ");
-      buf.append(foregroundColor);
-      return buf.toString();
-  }
+    public String toString() {
+        StringBuffer buf = new StringBuffer("color rule - expression: ");
+        buf.append(expression);
+        buf.append(", rule: ");
+        buf.append(rule);
+        buf.append(" bg: ");
+        buf.append(backgroundColor);
+        buf.append(" fg: ");
+        buf.append(foregroundColor);
+        return buf.toString();
+    }
 }
diff --git a/src/main/java/org/apache/log4j/rule/EqualsRule.java b/src/main/java/org/apache/log4j/rule/EqualsRule.java
index daade6e..49cebb4 100644
--- a/src/main/java/org/apache/log4j/rule/EqualsRule.java
+++ b/src/main/java/org/apache/log4j/rule/EqualsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A Rule class which returns the result of
@@ -36,84 +33,81 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = 1712851553477517245L;
+    static final long serialVersionUID = 1712851553477517245L;
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-    LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Value.
      */
-  private final String value;
+    private final String value;
     /**
      * Field.
      */
-  private final String field;
+    private final String field;
 
     /**
      * Create new instance.
      * @param field field
      * @param value value
      */
-  private EqualsRule(final String field, final String value) {
-    super();
-    if (!RESOLVER.isField(field)) {
-      throw new IllegalArgumentException(
-        "Invalid EQUALS rule - " + field + " is not a supported field");
-    }
+    private EqualsRule(final String field, final String value) {
+        super();
+        if (!RESOLVER.isField(field)) {
+            throw new IllegalArgumentException("Invalid EQUALS rule - " + field + " is not a supported field");
+        }
 
-    this.field = field;
-    this.value = value;
-  }
+        this.field = field;
+        this.value = value;
+    }
 
     /**
      * Create new instance from top two elements of stack.
      * @param stack stack
      * @return new instance
      */
-  public static Rule getRule(final Stack stack) {
-    if (stack.size() < 2) {
-      throw new IllegalArgumentException(
-        "Invalid EQUALS rule - expected two parameters but received "
-        + stack.size());
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException(
+                    "Invalid EQUALS rule - expected two parameters but received " + stack.size());
+        }
+
+        String p2 = stack.pop().toString();
+        String p1 = stack.pop().toString();
+
+        return getRule(p1, p2);
     }
 
-    String p2 = stack.pop().toString();
-    String p1 = stack.pop().toString();
-
-    return getRule(p1, p2);
-  }
-
     /**
      * Create new instance.
      * @param p1 field, special treatment for level and timestamp.
      * @param p2 value
      * @return new instance
      */
-  public static Rule getRule(final String p1, final String p2) {
-    if (p1.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
-        return LevelEqualsRule.getRule(p2);
-    } else if (p1.equalsIgnoreCase(LoggingEventFieldResolver.TIMESTAMP_FIELD)) {
-        return TimestampEqualsRule.getRule(p2);
-    } else {
-        return new EqualsRule(p1, p2);
+    public static Rule getRule(final String p1, final String p2) {
+        if (p1.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
+            return LevelEqualsRule.getRule(p2);
+        } else if (p1.equalsIgnoreCase(LoggingEventFieldResolver.TIMESTAMP_FIELD)) {
+            return TimestampEqualsRule.getRule(p2);
+        } else {
+            return new EqualsRule(p1, p2);
+        }
     }
-  }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    Object p2 = RESOLVER.getValue(field, event);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        Object p2 = RESOLVER.getValue(field, event);
 
-    boolean result = (p2 != null) && p2.toString().equals(value);
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(field.toUpperCase());
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(field.toUpperCase(), entries);
+        boolean result = (p2 != null) && p2.toString().equals(value);
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(field.toUpperCase());
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(field.toUpperCase(), entries);
+            }
+            entries.add(value);
         }
-        entries.add(value);
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/ExistsRule.java b/src/main/java/org/apache/log4j/rule/ExistsRule.java
index d49ea3d..844d990 100644
--- a/src/main/java/org/apache/log4j/rule/ExistsRule.java
+++ b/src/main/java/org/apache/log4j/rule/ExistsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A Rule class implementing a not null (and not empty string) check.
@@ -35,39 +32,37 @@
     /**
      * Serialization id.
      */
-  static final long serialVersionUID = -5386265224649967464L;
+    static final long serialVersionUID = -5386265224649967464L;
     /**
      * field resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-    LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * field name.
      */
-  private final String field;
+    private final String field;
 
     /**
      * Create new instance.
      * @param fld field name.
      */
-  private ExistsRule(final String fld) {
-    super();
-    if (!RESOLVER.isField(fld)) {
-      throw new IllegalArgumentException(
-        "Invalid EXISTS rule - " + fld + " is not a supported field");
-    }
+    private ExistsRule(final String fld) {
+        super();
+        if (!RESOLVER.isField(fld)) {
+            throw new IllegalArgumentException("Invalid EXISTS rule - " + fld + " is not a supported field");
+        }
 
-    this.field = fld;
-  }
+        this.field = fld;
+    }
 
     /**
      * Get an instance of ExistsRule.
      * @param field field.
      * @return instance of ExistsRule.
      */
-  public static Rule getRule(final String field) {
-    return new ExistsRule(field);
-  }
+    public static Rule getRule(final String field) {
+        return new ExistsRule(field);
+    }
 
     /**
      * Create an instance of ExistsRule using the
@@ -75,31 +70,30 @@
      * @param stack stack
      * @return instance of ExistsRule.
      */
-  public static Rule getRule(final Stack stack) {
-    if (stack.size() < 1) {
-      throw new IllegalArgumentException(
-        "Invalid EXISTS rule - expected one parameter but received "
-        + stack.size());
-    }
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 1) {
+            throw new IllegalArgumentException(
+                    "Invalid EXISTS rule - expected one parameter but received " + stack.size());
+        }
 
-    return new ExistsRule(stack.pop().toString());
-  }
+        return new ExistsRule(stack.pop().toString());
+    }
 
     /**
      * {@inheritDoc}
      */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    Object p2 = RESOLVER.getValue(field, event);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        Object p2 = RESOLVER.getValue(field, event);
 
-    boolean result = !((p2 == null) || (p2.toString().isEmpty()));
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(field.toUpperCase());
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(field.toUpperCase(), entries);
+        boolean result = !((p2 == null) || (p2.toString().isEmpty()));
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(field.toUpperCase());
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(field.toUpperCase(), entries);
+            }
+            entries.add(p2);
         }
-        entries.add(p2);
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/ExpressionRule.java b/src/main/java/org/apache/log4j/rule/ExpressionRule.java
index ea110c9..cc093c0 100644
--- a/src/main/java/org/apache/log4j/rule/ExpressionRule.java
+++ b/src/main/java/org/apache/log4j/rule/ExpressionRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.Map;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 
-
 /**
  * A Rule class supporting both infix and postfix expressions,
  * accepting any rule which
@@ -50,38 +48,37 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = 5809121703146893729L;
+    static final long serialVersionUID = 5809121703146893729L;
     /**
      * Converter.
      */
-  private static final InFixToPostFix CONVERTER = new InFixToPostFix();
+    private static final InFixToPostFix CONVERTER = new InFixToPostFix();
     /**
      * Compiler.
      */
-  private static final PostFixExpressionCompiler COMPILER =
-          new PostFixExpressionCompiler();
+    private static final PostFixExpressionCompiler COMPILER = new PostFixExpressionCompiler();
     /**
      * Rule.
      */
-  private final Rule rule;
+    private final Rule rule;
 
     /**
      * Create new instance.
      * @param r rule
      */
-  private ExpressionRule(final Rule r) {
-    super();
-    this.rule = r;
-  }
+    private ExpressionRule(final Rule r) {
+        super();
+        this.rule = r;
+    }
 
     /**
      * Get rule.
      * @param expression expression.
      * @return rule.
      */
-  public static Rule getRule(final String expression) {
-      return getRule(expression, false);
-  }
+    public static Rule getRule(final String expression) {
+        return getRule(expression, false);
+    }
 
     /**
      * Get rule.
@@ -89,92 +86,89 @@
      * @param isPostFix If post-fix.
      * @return rule
      */
-  public static Rule getRule(final String expression,
-                             final boolean isPostFix) {
-    String postFix = expression;
-    if (!isPostFix) {
-      postFix = CONVERTER.convert(expression);
+    public static Rule getRule(final String expression, final boolean isPostFix) {
+        String postFix = expression;
+        if (!isPostFix) {
+            postFix = CONVERTER.convert(expression);
+        }
+
+        return new ExpressionRule(COMPILER.compileExpression(postFix));
     }
 
-    return new ExpressionRule(COMPILER.compileExpression(postFix));
-  }
+    /**
+     * {@inheritDoc}
+     */
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        return rule.evaluate(event, matches);
+    }
 
     /**
      * {@inheritDoc}
      */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    return rule.evaluate(event, matches);
-  }
+    public String toString() {
+        return rule.toString();
+    }
 
     /**
-     * {@inheritDoc}
+     * Evaluate a boolean postfix expression.
+     *
      */
-  public String toString() {
-      return rule.toString();
-  }
+    static final class PostFixExpressionCompiler {
+        /**
+         * Compile expression.
+         * @param expression expression.
+         * @return rule.
+         */
+        public Rule compileExpression(final String expression) {
+            RuleFactory factory = RuleFactory.getInstance();
 
-  /**
-   * Evaluate a boolean postfix expression.
-   *
-   */
-  static final class PostFixExpressionCompiler {
-      /**
-       * Compile expression.
-       * @param expression expression.
-       * @return rule.
-       */
-    public Rule compileExpression(final String expression) {
-      RuleFactory factory = RuleFactory.getInstance();
+            Stack stack = new Stack();
+            InFixToPostFix.CustomTokenizer tokenizer = new InFixToPostFix.CustomTokenizer(expression);
 
-      Stack stack = new Stack();
-      InFixToPostFix.CustomTokenizer tokenizer = new InFixToPostFix.CustomTokenizer(expression);
-
-          while (tokenizer.hasMoreTokens()) {
-            //examine each token
-            String token = tokenizer.nextToken();
-              if (token.startsWith("'") || token.startsWith("\"")) {
-                String quoteChar = token.substring(0, 1);
-                token = token.substring(1);
-                while (!token.endsWith(quoteChar) && tokenizer.hasMoreTokens()) {
-                  token = token + " " + tokenizer.nextToken();
+            while (tokenizer.hasMoreTokens()) {
+                // examine each token
+                String token = tokenizer.nextToken();
+                if (token.startsWith("'") || token.startsWith("\"")) {
+                    String quoteChar = token.substring(0, 1);
+                    token = token.substring(1);
+                    while (!token.endsWith(quoteChar) && tokenizer.hasMoreTokens()) {
+                        token = token + " " + tokenizer.nextToken();
+                    }
+                    if (token.length() > 0) {
+                        token = token.substring(0, token.length() - 1);
+                    }
+                } else {
+                    // if a symbol is found, pop 2 off the stack,
+                    // evaluate and push the result
+                    if (factory.isRule(token)) {
+                        Rule r = factory.getRule(token, stack);
+                        stack.push(r);
+                        // null out the token so we don't try to push it below
+                        token = null;
+                    }
                 }
-                if (token.length() > 0) {
-                  token = token.substring(0, token.length() - 1);
-                }
-              } else {
-                //if a symbol is found, pop 2 off the stack,
-                  // evaluate and push the result
-                if (factory.isRule(token)) {
-                  Rule r = factory.getRule(token, stack);
-                  stack.push(r);
-                  //null out the token so we don't try to push it below
-                  token = null;
+                // variables or constants are pushed onto the stack
+                if (token != null && token.length() > 0) {
+                    stack.push(token);
                 }
             }
-              //variables or constants are pushed onto the stack
-              if (token != null && token.length() > 0) {
-                  stack.push(token);
-              }
-          }
 
-          if ((stack.size() == 1) && (!(stack.peek() instanceof Rule))) {
-            //while this may be an attempt at creating an expression,
-            //for ease of use, convert this single entry to a partial-text
-            //match on the MSG field
-            Object o = stack.pop();
-            stack.push("MSG");
-            stack.push(o);
-            return factory.getRule("~=", stack);
-          }
+            if ((stack.size() == 1) && (!(stack.peek() instanceof Rule))) {
+                // while this may be an attempt at creating an expression,
+                // for ease of use, convert this single entry to a partial-text
+                // match on the MSG field
+                Object o = stack.pop();
+                stack.push("MSG");
+                stack.push(o);
+                return factory.getRule("~=", stack);
+            }
 
-          //stack should contain a single rule if the expression is valid
-          if ((stack.size() != 1) || (!(stack.peek() instanceof Rule))) {
-            throw new IllegalArgumentException("invalid expression: " + expression);
-          } else {
-            return (Rule) stack.pop();
-          }
+            // stack should contain a single rule if the expression is valid
+            if ((stack.size() != 1) || (!(stack.peek() instanceof Rule))) {
+                throw new IllegalArgumentException("invalid expression: " + expression);
+            } else {
+                return (Rule) stack.pop();
+            }
         }
-  }
+    }
 }
-
-
diff --git a/src/main/java/org/apache/log4j/rule/InFixToPostFix.java b/src/main/java/org/apache/log4j/rule/InFixToPostFix.java
index 43239c2..63b0aa8 100644
--- a/src/main/java/org/apache/log4j/rule/InFixToPostFix.java
+++ b/src/main/java/org/apache/log4j/rule/InFixToPostFix.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashMap;
@@ -25,7 +24,6 @@
 import java.util.Map;
 import java.util.Stack;
 import java.util.Vector;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
@@ -51,67 +49,65 @@
  *
  * @author Scott Deboy (sdeboy@apache.org)
  */
-
 public class InFixToPostFix {
     /**
      * Precedence map.
      */
-  private static final Map precedenceMap = new HashMap();
+    private static final Map precedenceMap = new HashMap();
     /**
      * Operators.
      */
-  private static final List operators = new Vector();
+    private static final List operators = new Vector();
 
+    static {
+        // order multi-char operators before single-char operators (will use this order during parsing)
+        operators.add("<=");
+        operators.add(">=");
+        operators.add("!=");
+        operators.add("==");
+        operators.add("~=");
+        operators.add("||");
+        operators.add("&&");
+        operators.add("like");
+        operators.add("exists");
+        operators.add("!");
+        operators.add("<");
+        operators.add(">");
 
-  static {
-    //order multi-char operators before single-char operators (will use this order during parsing)
-    operators.add("<=");
-    operators.add(">=");
-    operators.add("!=");
-    operators.add("==");
-    operators.add("~=");
-    operators.add("||");
-    operators.add("&&");
-    operators.add("like");
-    operators.add("exists");
-    operators.add("!");
-    operators.add("<");
-    operators.add(">");
+        // boolean precedence
+        precedenceMap.put("<", new Integer(3));
+        precedenceMap.put(">", new Integer(3));
+        precedenceMap.put("<=", new Integer(3));
+        precedenceMap.put(">=", new Integer(3));
 
-    //boolean precedence
-    precedenceMap.put("<", new Integer(3));
-    precedenceMap.put(">", new Integer(3));
-    precedenceMap.put("<=", new Integer(3));
-    precedenceMap.put(">=", new Integer(3));
+        precedenceMap.put("!", new Integer(3));
+        precedenceMap.put("!=", new Integer(3));
+        precedenceMap.put("==", new Integer(3));
+        precedenceMap.put("~=", new Integer(3));
+        precedenceMap.put("like", new Integer(3));
+        precedenceMap.put("exists", new Integer(3));
 
-    precedenceMap.put("!", new Integer(3));
-    precedenceMap.put("!=", new Integer(3));
-    precedenceMap.put("==", new Integer(3));
-    precedenceMap.put("~=", new Integer(3));
-    precedenceMap.put("like", new Integer(3));
-    precedenceMap.put("exists", new Integer(3));
-
-    precedenceMap.put("||", new Integer(2));
-    precedenceMap.put("&&", new Integer(2));
-  }
+        precedenceMap.put("||", new Integer(2));
+        precedenceMap.put("&&", new Integer(2));
+    }
     /**
      * Convert in-fix expression to post-fix.
      * @param expression in-fix expression.
      * @return post-fix expression.
      */
-  public String convert(final String expression) {
-    return infixToPostFix(new CustomTokenizer(expression));
-  }
+    public String convert(final String expression) {
+        return infixToPostFix(new CustomTokenizer(expression));
+    }
 
     /**
      * Evaluates whether symbol is operand.
      * @param s symbol.
      * @return true if operand.
      */
-  public static boolean isOperand(final String s) {
-    String symbol = s.toLowerCase(Locale.ENGLISH);
-    return (!operators.contains(symbol));
-  }
+    public static boolean isOperand(final String s) {
+        String symbol = s.toLowerCase(Locale.ENGLISH);
+        return (!operators.contains(symbol));
+    }
 
     /**
      * Determines whether one symbol precedes another.
@@ -119,261 +115,262 @@
      * @param s2 symbol 2
      * @return true if symbol 1 precedes symbol 2
      */
-  boolean precedes(final String s1, final String s2) {
-    String symbol1 = s1.toLowerCase(Locale.ENGLISH);
-    String symbol2 = s2.toLowerCase(Locale.ENGLISH);
+    boolean precedes(final String s1, final String s2) {
+        String symbol1 = s1.toLowerCase(Locale.ENGLISH);
+        String symbol2 = s2.toLowerCase(Locale.ENGLISH);
 
-    if (!precedenceMap.keySet().contains(symbol1)) {
-      return false;
+        if (!precedenceMap.keySet().contains(symbol1)) {
+            return false;
+        }
+
+        if (!precedenceMap.keySet().contains(symbol2)) {
+            return false;
+        }
+
+        int index1 = ((Integer) precedenceMap.get(symbol1)).intValue();
+        int index2 = ((Integer) precedenceMap.get(symbol2)).intValue();
+
+        boolean precedesResult = (index1 < index2);
+
+        return precedesResult;
     }
 
-    if (!precedenceMap.keySet().contains(symbol2)) {
-      return false;
-    }
-
-    int index1 = ((Integer) precedenceMap.get(symbol1)).intValue();
-    int index2 = ((Integer) precedenceMap.get(symbol2)).intValue();
-
-    boolean precedesResult = (index1 < index2);
-
-    return precedesResult;
-  }
-
     /**
      * convert in-fix expression to post-fix.
      * @param tokenizer tokenizer.
      * @return post-fix expression.
      */
-  String infixToPostFix(final CustomTokenizer tokenizer) {
-    final String space = " ";
-    StringBuffer postfix = new StringBuffer();
+    String infixToPostFix(final CustomTokenizer tokenizer) {
+        final String space = " ";
+        StringBuffer postfix = new StringBuffer();
 
-    Stack stack = new Stack();
+        Stack stack = new Stack();
 
-    while (tokenizer.hasMoreTokens()) {
-      String token = tokenizer.nextToken();
+        while (tokenizer.hasMoreTokens()) {
+            String token = tokenizer.nextToken();
 
-      boolean inText = (token.startsWith("'") && (!token.endsWith("'"))) || (token.startsWith("\"") && (!token.endsWith("\"")));
-      String quoteChar = token.substring(0, 1);
-      if (inText) {
-          while (inText && tokenizer.hasMoreTokens()) {
-            token = token + " " + tokenizer.nextToken();
-            inText = !(token.endsWith(quoteChar));
+            boolean inText = (token.startsWith("'") && (!token.endsWith("'")))
+                    || (token.startsWith("\"") && (!token.endsWith("\"")));
+            String quoteChar = token.substring(0, 1);
+            if (inText) {
+                while (inText && tokenizer.hasMoreTokens()) {
+                    token = token + " " + tokenizer.nextToken();
+                    inText = !(token.endsWith(quoteChar));
+                }
+            }
+
+            if ("(".equals(token)) {
+                // recurse
+                postfix.append(infixToPostFix(tokenizer));
+                postfix.append(space);
+            } else if (")".equals(token)) {
+                // exit recursion level
+                while (stack.size() > 0) {
+                    postfix.append(stack.pop().toString());
+                    postfix.append(space);
+                }
+
+                return postfix.toString();
+            } else if (isOperand(token)) {
+                postfix.append(token);
+                postfix.append(space);
+            } else {
+                // operator..
+                // peek the stack..if the top element has a lower precedence than token
+                // (peeked + has lower precedence than token *),
+                // push token onto the stack
+                // otherwise, pop top element off stack and add to postfix string
+                // in a loop until lower precedence or empty..then push token
+                if (stack.size() > 0) {
+
+                    String peek = stack.peek().toString();
+
+                    if (precedes(peek, token)) {
+                        stack.push(token);
+                    } else {
+                        boolean bypass = false;
+
+                        do {
+                            if ((stack.size() > 0) && !precedes(stack.peek().toString(), token)) {
+                                postfix.append(stack.pop().toString());
+                                postfix.append(space);
+                            } else {
+                                bypass = true;
+                            }
+                        } while (!bypass);
+
+                        stack.push(token);
+                    }
+                } else {
+                    stack.push(token);
+                }
+            }
         }
-      }
 
-      if ("(".equals(token)) {
-        //recurse
-        postfix.append(infixToPostFix(tokenizer));
-        postfix.append(space);
-      } else if (")".equals(token)) {
-        //exit recursion level
         while (stack.size() > 0) {
-          postfix.append(stack.pop().toString());
-          postfix.append(space);
+            postfix.append(stack.pop().toString());
+            postfix.append(space);
         }
 
         return postfix.toString();
-      } else if (isOperand(token)) {
-        postfix.append(token);
-        postfix.append(space);
-      } else {
-        //operator..
-        //peek the stack..if the top element has a lower precedence than token
-        //(peeked + has lower precedence than token *),
-        // push token onto the stack
-        //otherwise, pop top element off stack and add to postfix string
-        //in a loop until lower precedence or empty..then push token
-        if (stack.size() > 0) {
+    }
 
-          String peek = stack.peek().toString();
+    public static class CustomTokenizer {
+        private LinkedList linkedList = new LinkedList();
 
-          if (precedes(peek, token)) {
-            stack.push(token);
-          } else {
-            boolean bypass = false;
-
-            do {
-              if (
-                (stack.size() > 0)
-                  && !precedes(stack.peek().toString(), token)) {
-                postfix.append(stack.pop().toString());
-                postfix.append(space);
-              } else {
-                bypass = true;
-              }
-            } while (!bypass);
-
-            stack.push(token);
-          }
-        } else {
-          stack.push(token);
+        public CustomTokenizer(String input) {
+            parseInput(input, linkedList);
         }
-      }
-    }
 
-    while (stack.size() > 0) {
-      postfix.append(stack.pop().toString());
-      postfix.append(space);
-    }
-
-    return postfix.toString();
-  }
-
-  public static class CustomTokenizer {
-    private LinkedList linkedList = new LinkedList();
-
-    public CustomTokenizer(String input) {
-      parseInput(input, linkedList);
-    }
-
-    public void parseInput(String input, LinkedList linkedList) {
-      /*
-     Operators:
-         !
-         !=
-         ==
-         ~=
-         ||
-         &&
-         like
-         exists
-         <
-         <=
-         >
-         >=
-      */
-      //for operators, handle multi-char matches before single-char matches
-      //order does not matter for keywords
-      List keywords = LoggingEventFieldResolver.KEYWORD_LIST;
-      //remove PROP. from the keyword list...it is a keyword in that list, but is handled separately here from the other keywords since its name is not fixed
-      keywords.remove("PROP.");
-      int pos = 0;
-      while (pos < input.length()) {
-        if (nextValueIs(input, pos, "'") || nextValueIs(input, pos, "\"")) {
-          pos = handleQuotedString(input, pos, linkedList);
+        public void parseInput(String input, LinkedList linkedList) {
+            /*
+            Operators:
+                !
+                !=
+                ==
+                ~=
+                ||
+                &&
+                like
+                exists
+                <
+                <=
+                >
+                >=
+             */
+            // for operators, handle multi-char matches before single-char matches
+            // order does not matter for keywords
+            List keywords = LoggingEventFieldResolver.KEYWORD_LIST;
+            // remove PROP. from the keyword list...it is a keyword in that list, but is handled separately here from
+            // the other keywords since its name is not fixed
+            keywords.remove("PROP.");
+            int pos = 0;
+            while (pos < input.length()) {
+                if (nextValueIs(input, pos, "'") || nextValueIs(input, pos, "\"")) {
+                    pos = handleQuotedString(input, pos, linkedList);
+                }
+                if (nextValueIs(input, pos, "PROP.")) {
+                    pos = handleProperty(input, pos, linkedList);
+                }
+                boolean operatorFound = false;
+                for (Iterator iter = operators.iterator(); iter.hasNext(); ) {
+                    String operator = (String) iter.next();
+                    if (nextValueIs(input, pos, operator)) {
+                        operatorFound = true;
+                        pos = handle(pos, linkedList, operator);
+                    }
+                }
+                boolean keywordFound = false;
+                for (Iterator iter = keywords.iterator(); iter.hasNext(); ) {
+                    String keyword = (String) iter.next();
+                    if (nextValueIs(input, pos, keyword)) {
+                        keywordFound = true;
+                        pos = handle(pos, linkedList, keyword);
+                    }
+                }
+                if (operatorFound || keywordFound) {
+                    continue;
+                }
+                if (nextValueIs(input, pos, ")")) {
+                    pos = handle(pos, linkedList, ")");
+                } else if (nextValueIs(input, pos, "(")) {
+                    pos = handle(pos, linkedList, "(");
+                } else if (nextValueIs(input, pos, " ")) {
+                    pos++;
+                } else {
+                    pos = handleText(input, pos, linkedList);
+                }
+            }
         }
-        if (nextValueIs(input, pos, "PROP.")) {
-          pos = handleProperty(input, pos, linkedList);
+
+        private boolean nextValueIs(String input, int pos, String value) {
+            return (input.length() >= (pos + value.length()))
+                    && (input.substring(pos, pos + value.length()).equalsIgnoreCase(value));
         }
-        boolean operatorFound = false;
-        for (Iterator iter = operators.iterator();iter.hasNext();) {
-          String operator = (String)iter.next();
-          if (nextValueIs(input, pos, operator)) {
-            operatorFound = true;
-            pos = handle(pos, linkedList, operator);
-          }
+
+        private int handle(int pos, LinkedList linkedList, String value) {
+            linkedList.add(value);
+            return pos + value.length();
         }
-        boolean keywordFound = false;
-        for (Iterator iter = keywords.iterator();iter.hasNext();) {
-          String keyword = (String)iter.next();
-          if (nextValueIs(input, pos, keyword)) {
-            keywordFound = true;
-            pos = handle(pos, linkedList, keyword);
-          }
+
+        private int handleQuotedString(String input, int pos, LinkedList linkedList) {
+            String quoteChar = input.substring(pos, pos + 1);
+            int nextSingleQuotePos = input.indexOf(quoteChar, pos + 1);
+            if (nextSingleQuotePos < 0) {
+                throw new IllegalArgumentException("Missing an end quote");
+            }
+            String result = input.substring(pos, nextSingleQuotePos + 1);
+            linkedList.add(result);
+            return nextSingleQuotePos + 1;
         }
-        if (operatorFound || keywordFound) {
-          continue;
+
+        private int handleText(String input, int pos, LinkedList linkedList) {
+            StringBuffer text = new StringBuffer("");
+            int newPos = pos;
+            while (newPos < input.length()) {
+                if (nextValueIs(input, newPos, " ")) {
+                    linkedList.add(text);
+                    return newPos;
+                }
+                if (nextValueIs(input, newPos, "(")) {
+                    linkedList.add(text);
+                    return newPos;
+                }
+                if (nextValueIs(input, newPos, ")")) {
+                    linkedList.add(text);
+                    return newPos;
+                }
+                for (Iterator iter = operators.iterator(); iter.hasNext(); ) {
+                    String operator = (String) iter.next();
+                    if (nextValueIs(input, newPos, operator)) {
+                        linkedList.add(text);
+                        return newPos;
+                    }
+                }
+                text.append(input.substring(newPos, ++newPos));
+            }
+            // don't add empty text entry (may be at end)
+            if (!text.toString().trim().isEmpty()) {
+                linkedList.add(text);
+            }
+            return newPos;
         }
-        if (nextValueIs(input, pos, ")")) {
-          pos = handle(pos, linkedList, ")");
-        } else if (nextValueIs(input, pos, "(")) {
-          pos = handle(pos, linkedList, "(");
-        } else if (nextValueIs(input, pos, " ")) {
-          pos++;
-        } else {
-          pos = handleText(input, pos, linkedList);
+
+        private int handleProperty(String input, int pos, LinkedList linkedList) {
+            int propertyPos = pos + "PROP.".length();
+            StringBuffer propertyName = new StringBuffer("PROP.");
+            while (propertyPos < input.length()) {
+                if (nextValueIs(input, propertyPos, " ")) {
+                    linkedList.add(propertyName);
+                    return propertyPos;
+                }
+                if (nextValueIs(input, propertyPos, "(")) {
+                    linkedList.add(propertyName);
+                    return propertyPos;
+                }
+                if (nextValueIs(input, propertyPos, ")")) {
+                    linkedList.add(propertyName);
+                    return propertyPos;
+                }
+                for (Iterator iter = operators.iterator(); iter.hasNext(); ) {
+                    String operator = (String) iter.next();
+                    if (nextValueIs(input, propertyPos, operator)) {
+                        linkedList.add(propertyName);
+                        return propertyPos;
+                    }
+                }
+                propertyName.append(input.substring(propertyPos, ++propertyPos));
+            }
+            linkedList.add(propertyName);
+            return propertyPos;
         }
-      }
-    }
 
-    private boolean nextValueIs(String input, int pos, String value) {
-      return (input.length() >= (pos + value.length())) && (input.substring(pos, pos + value.length()).equalsIgnoreCase(value));
-    }
+        public boolean hasMoreTokens() {
+            return linkedList.size() > 0;
+        }
 
-    private int handle(int pos, LinkedList linkedList, String value) {
-      linkedList.add(value);
-      return pos + value.length();
+        public String nextToken() {
+            return linkedList.remove().toString();
+        }
     }
-
-    private int handleQuotedString(String input, int pos, LinkedList linkedList) {
-      String quoteChar = input.substring(pos, pos + 1);
-      int nextSingleQuotePos = input.indexOf(quoteChar, pos + 1);
-      if (nextSingleQuotePos < 0) {
-        throw new IllegalArgumentException("Missing an end quote");
-      }
-      String result = input.substring(pos, nextSingleQuotePos + 1);
-      linkedList.add(result);
-      return nextSingleQuotePos + 1;
-    }
-
-    private int handleText(String input, int pos, LinkedList linkedList) {
-     StringBuffer text = new StringBuffer("");
-     int newPos = pos;
-     while (newPos < input.length()) {
-       if (nextValueIs(input, newPos, " ")) {
-         linkedList.add(text);
-         return newPos;
-       }
-       if (nextValueIs(input, newPos, "(")) {
-         linkedList.add(text);
-         return newPos;
-       }
-       if (nextValueIs(input, newPos, ")")) {
-         linkedList.add(text);
-         return newPos;
-       }
-       for (Iterator iter = operators.iterator();iter.hasNext();) {
-         String operator = (String)iter.next();
-         if (nextValueIs(input, newPos, operator)) {
-           linkedList.add(text);
-           return newPos;
-         }
-       }
-       text.append(input.substring(newPos, ++newPos));
-     }
-     //don't add empty text entry (may be at end)
-     if (!text.toString().trim().isEmpty()) {
-      linkedList.add(text);
-     }
-     return newPos;
-    }
-
-    private int handleProperty(String input, int pos, LinkedList linkedList) {
-     int propertyPos = pos + "PROP.".length();
-     StringBuffer propertyName = new StringBuffer("PROP.");
-     while (propertyPos < input.length()) {
-       if (nextValueIs(input, propertyPos, " ")) {
-         linkedList.add(propertyName);
-         return propertyPos;
-       }
-       if (nextValueIs(input, propertyPos, "(")) {
-         linkedList.add(propertyName);
-         return propertyPos;
-       }
-       if (nextValueIs(input, propertyPos, ")")) {
-         linkedList.add(propertyName);
-         return propertyPos;
-       }
-       for (Iterator iter = operators.iterator();iter.hasNext();) {
-         String operator = (String)iter.next();
-         if (nextValueIs(input, propertyPos, operator)) {
-           linkedList.add(propertyName);
-           return propertyPos;
-         }
-       }
-       propertyName.append(input.substring(propertyPos, ++propertyPos));
-     }
-      linkedList.add(propertyName);
-      return propertyPos;
-    }
-
-    public boolean hasMoreTokens() {
-      return linkedList.size() > 0;
-    }
-
-    public String nextToken() {
-      return linkedList.remove().toString();
-    }
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/InequalityRule.java b/src/main/java/org/apache/log4j/rule/InequalityRule.java
index c53619e..11e5388 100644
--- a/src/main/java/org/apache/log4j/rule/InequalityRule.java
+++ b/src/main/java/org/apache/log4j/rule/InequalityRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A Rule class implementing inequality evaluation.
@@ -40,24 +37,23 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = -5592986598528885122L;
+    static final long serialVersionUID = -5592986598528885122L;
     /**
      * field RESOLVER.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-          LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Field name.
      */
-  private final String field;
+    private final String field;
     /**
      * Comparison value.
      */
-  private final String value;
+    private final String value;
     /**
      * Inequality symbol.
      */
-  private final String inequalitySymbol;
+    private final String inequalitySymbol;
 
     /**
      * Create new instance.
@@ -65,20 +61,17 @@
      * @param field field
      * @param value comparison value.
      */
-  private InequalityRule(
-    final String inequalitySymbol,
-    final String field,
-    final String value) {
-    super();
-    this.inequalitySymbol = inequalitySymbol;
-    if (!RESOLVER.isField(field)) {
-        throw new IllegalArgumentException("Invalid " + inequalitySymbol
-                + " rule - " + field + " is not a supported field");
-    }
+    private InequalityRule(final String inequalitySymbol, final String field, final String value) {
+        super();
+        this.inequalitySymbol = inequalitySymbol;
+        if (!RESOLVER.isField(field)) {
+            throw new IllegalArgumentException(
+                    "Invalid " + inequalitySymbol + " rule - " + field + " is not a supported field");
+        }
 
-    this.field = field;
-    this.value = value;
-  }
+        this.field = field;
+        this.value = value;
+    }
 
     /**
      * Create new instance from top two elements on stack.
@@ -86,18 +79,16 @@
      * @param stack stack.
      * @return rule.
      */
-  public static Rule getRule(final String inequalitySymbol,
-                             final Stack stack) {
-      if (stack.size() < 2) {
-          throw new IllegalArgumentException("Invalid " + inequalitySymbol
-                  + " rule - expected two parameters but received "
-                  + stack.size());
-      } 
+    public static Rule getRule(final String inequalitySymbol, final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException(
+                    "Invalid " + inequalitySymbol + " rule - expected two parameters but received " + stack.size());
+        }
 
-      String p2 = stack.pop().toString();
-      String p1 = stack.pop().toString();
-      return getRule(inequalitySymbol, p1, p2);
-  }
+        String p2 = stack.pop().toString();
+        String p1 = stack.pop().toString();
+        return getRule(inequalitySymbol, p1, p2);
+    }
 
     /**
      * Create new instance from top two elements on stack.
@@ -106,57 +97,54 @@
      * @param value comparison value.
      * @return rule.
      */
-  public static Rule getRule(final String inequalitySymbol,
-                             final String field,
-                             final String value) {
-    if (field.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
-      //push the value back on the stack and
-        // allow the level-specific rule pop values
-      return LevelInequalityRule.getRule(inequalitySymbol, value);
-    } else if (
-            field.equalsIgnoreCase(LoggingEventFieldResolver.TIMESTAMP_FIELD)) {
-      return TimestampInequalityRule.getRule(inequalitySymbol, value);
-    } else {
-      return new InequalityRule(inequalitySymbol, field, value);
+    public static Rule getRule(final String inequalitySymbol, final String field, final String value) {
+        if (field.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
+            // push the value back on the stack and
+            // allow the level-specific rule pop values
+            return LevelInequalityRule.getRule(inequalitySymbol, value);
+        } else if (field.equalsIgnoreCase(LoggingEventFieldResolver.TIMESTAMP_FIELD)) {
+            return TimestampInequalityRule.getRule(inequalitySymbol, value);
+        } else {
+            return new InequalityRule(inequalitySymbol, field, value);
+        }
     }
-  }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    long first = 0;
-      try {
-          first = new Long(RESOLVER.getValue(field, event).toString()).longValue();
-    } catch (NumberFormatException nfe) {
-      return false;
-    }
-
-    long second = 0;
-
-    try {
-      second = new Long(value).longValue();
-    } catch (NumberFormatException nfe) {
-      return false;
-    }
-
-    boolean result = false;
-
-    if ("<".equals(inequalitySymbol)) {
-      result = first < second;
-    } else if (">".equals(inequalitySymbol)) {
-      result = first > second;
-    } else if ("<=".equals(inequalitySymbol)) {
-      result = first <= second;
-    } else if (">=".equals(inequalitySymbol)) {
-      result = first >= second;
-    }
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(field.toUpperCase());
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(field.toUpperCase(), entries);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        long first = 0;
+        try {
+            first = new Long(RESOLVER.getValue(field, event).toString()).longValue();
+        } catch (NumberFormatException nfe) {
+            return false;
         }
-        entries.add(String.valueOf(first));
+
+        long second = 0;
+
+        try {
+            second = new Long(value).longValue();
+        } catch (NumberFormatException nfe) {
+            return false;
+        }
+
+        boolean result = false;
+
+        if ("<".equals(inequalitySymbol)) {
+            result = first < second;
+        } else if (">".equals(inequalitySymbol)) {
+            result = first > second;
+        } else if ("<=".equals(inequalitySymbol)) {
+            result = first <= second;
+        } else if (">=".equals(inequalitySymbol)) {
+            result = first >= second;
+        }
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(field.toUpperCase());
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(field.toUpperCase(), entries);
+            }
+            entries.add(String.valueOf(first));
+        }
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/LevelEqualsRule.java b/src/main/java/org/apache/log4j/rule/LevelEqualsRule.java
index 95b7615..18a6a3a 100644
--- a/src/main/java/org/apache/log4j/rule/LevelEqualsRule.java
+++ b/src/main/java/org/apache/log4j/rule/LevelEqualsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.spi.LoggingEventFieldResolver;
@@ -86,7 +83,7 @@
         if (levelList.contains(value.toUpperCase())) {
             thisLevel = Level.valueOf(value.toUpperCase());
         } else {
-//            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
+            //            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
         }
 
         return new LevelEqualsRule(thisLevel);
@@ -96,8 +93,8 @@
      * {@inheritDoc}
      */
     public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-        //both util.logging and log4j contain 'info' - use the int values instead of equality
-        //info level set to the same value for both levels
+        // both util.logging and log4j contain 'info' - use the int values instead of equality
+        // info level set to the same value for both levels
         Level eventLevel = event.m_level;
         boolean result = (level.ordinal() == eventLevel.ordinal());
         if (result && matches != null) {
diff --git a/src/main/java/org/apache/log4j/rule/LevelInequalityRule.java b/src/main/java/org/apache/log4j/rule/LevelInequalityRule.java
index ec77dbf..8d4ae75 100644
--- a/src/main/java/org/apache/log4j/rule/LevelInequalityRule.java
+++ b/src/main/java/org/apache/log4j/rule/LevelInequalityRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashSet;
@@ -24,7 +23,6 @@
 import java.util.Set;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
@@ -43,7 +41,6 @@
      */
     private static List utilLoggingLevelList;
 
-
     static {
         populateLevels();
     }
@@ -70,13 +67,13 @@
 
         utilLoggingLevelList = new LinkedList();
 
-//        utilLoggingLevelList.add(UtilLoggingLevel.SEVERE.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.WARNING.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.INFO.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.CONFIG.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.FINE.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.FINER.toString());
-//        utilLoggingLevelList.add(UtilLoggingLevel.FINEST.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.SEVERE.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.WARNING.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.INFO.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.CONFIG.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.FINE.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.FINER.toString());
+        //        utilLoggingLevelList.add(UtilLoggingLevel.FINEST.toString());
 
     }
 
@@ -86,26 +83,24 @@
      * @param value Symbolic name of comparison level.
      * @return instance of AbstractRule.
      */
-    public static Rule getRule(final String inequalitySymbol,
-                               final String value) {
+    public static Rule getRule(final String inequalitySymbol, final String value) {
 
         Level thisLevel = null;
 
-        //if valid util.logging levels are used against events
+        // if valid util.logging levels are used against events
         // with log4j levels, the
-        //DEBUG level is used and an illegalargumentexception won't be generated
+        // DEBUG level is used and an illegalargumentexception won't be generated
 
-        //an illegalargumentexception is only generated
+        // an illegalargumentexception is only generated
         // if the user types a level name
-        //that doesn't exist as either a log4j or util.logging level name
+        // that doesn't exist as either a log4j or util.logging level name
         if (levelList.contains(value.toUpperCase())) {
             thisLevel = Level.valueOf(value.toUpperCase());
         } else if (utilLoggingLevelList.contains(value.toUpperCase())) {
-//            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
+            //            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
         } else {
             throw new IllegalArgumentException(
-                    "Invalid level inequality rule - " + value
-                            + " is not a supported level");
+                    "Invalid level inequality rule - " + value + " is not a supported level");
         }
 
         if ("<".equals(inequalitySymbol)) {
@@ -231,7 +226,6 @@
      * Rule returning true if event level less than or
      * equal to specified level.
      */
-
     private static final class LessThanEqualsRule extends AbstractRule {
         /**
          * Comparison level.
diff --git a/src/main/java/org/apache/log4j/rule/LikeRule.java b/src/main/java/org/apache/log4j/rule/LikeRule.java
index 46b9d21..ec73ca9 100644
--- a/src/main/java/org/apache/log4j/rule/LikeRule.java
+++ b/src/main/java/org/apache/log4j/rule/LikeRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,11 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Map;
@@ -28,6 +25,7 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A Rule class supporting java.util.regex regular expression syntax.
@@ -38,58 +36,55 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = -3375458885595683156L;
+    static final long serialVersionUID = -3375458885595683156L;
 
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-            LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Pattern.
      */
-  private transient Pattern pattern;
+    private transient Pattern pattern;
     /**
      * Regular expression matcher.
      */
-  private transient Matcher matcher = null;
+    private transient Matcher matcher = null;
     /**
      * Field.
      */
-  private transient String field;
+    private transient String field;
 
     /**
      * Create new instance.
      * @param field field
      * @param pattern pattern
      */
-  private LikeRule(final String field, final Pattern pattern) {
-    super();
-    if (!RESOLVER.isField(field)) {
-        throw new IllegalArgumentException(
-                "Invalid LIKE rule - " + field + " is not a supported field");
-    }
+    private LikeRule(final String field, final Pattern pattern) {
+        super();
+        if (!RESOLVER.isField(field)) {
+            throw new IllegalArgumentException("Invalid LIKE rule - " + field + " is not a supported field");
+        }
 
-    this.field = field;
-    this.pattern = pattern;
-  }
+        this.field = field;
+        this.pattern = pattern;
+    }
 
     /**
      * Create new instance from top two elements of stack.
      * @param stack stack
      * @return new instance
      */
-  public static Rule getRule(final Stack stack) {
-      if (stack.size() < 2) {
-          throw new IllegalArgumentException(
-                  "Invalid LIKE rule - expected two parameters but received "
-                          + stack.size());
-      }
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException(
+                    "Invalid LIKE rule - expected two parameters but received " + stack.size());
+        }
 
-      String p2 = stack.pop().toString();
-      String p1 = stack.pop().toString();
-      return getRule(p1, p2);
-  }
+        String p2 = stack.pop().toString();
+        String p1 = stack.pop().toString();
+        return getRule(p1, p2);
+    }
 
     /**
      * Create new instance.
@@ -97,68 +92,65 @@
      * @param pattern pattern
      * @return new instance
      */
-  public static Rule getRule(final String field, final String pattern) {
-    try {
-        return new LikeRule(field, Pattern.compile(pattern, Pattern.CASE_INSENSITIVE));
-    } catch (PatternSyntaxException e) {
-        throw new IllegalArgumentException(
-                "Invalid LIKE rule - " + e.getMessage());
+    public static Rule getRule(final String field, final String pattern) {
+        try {
+            return new LikeRule(field, Pattern.compile(pattern, Pattern.CASE_INSENSITIVE));
+        } catch (PatternSyntaxException e) {
+            throw new IllegalArgumentException("Invalid LIKE rule - " + e.getMessage());
+        }
     }
-  }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    //no need to figure out what part of the string matched, just set the entire string as a match
-    Object input = RESOLVER.getValue(field, event);
-    if((input != null) && (pattern != null)) {
-        if (matcher == null) {
-            matcher = pattern.matcher(input.toString());
-        } else {
-            matcher.reset(input.toString());
-        }
-        boolean result = matcher.matches();
-        if (result && matches != null) {
-            Set entries = (Set) matches.get(field.toUpperCase());
-            if (entries == null) {
-                entries = new HashSet();
-                matches.put(field.toUpperCase(), entries);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        // no need to figure out what part of the string matched, just set the entire string as a match
+        Object input = RESOLVER.getValue(field, event);
+        if ((input != null) && (pattern != null)) {
+            if (matcher == null) {
+                matcher = pattern.matcher(input.toString());
+            } else {
+                matcher.reset(input.toString());
             }
-            entries.add(input);
+            boolean result = matcher.matches();
+            if (result && matches != null) {
+                Set entries = (Set) matches.get(field.toUpperCase());
+                if (entries == null) {
+                    entries = new HashSet();
+                    matches.put(field.toUpperCase(), entries);
+                }
+                entries.add(input);
+            }
+            return result;
         }
-        return result;
+        return false;
     }
-    return false;
-  }
 
-  /**
-    * Deserialize the state of the object.
-    *
-    * @param in object input stream
-    *
-    * @throws IOException if IOException during deserialization
-    * @throws ClassNotFoundException if class not found.
-    */
-   private void readObject(final java.io.ObjectInputStream in)
-     throws IOException, ClassNotFoundException {
-         try {
-           field = (String) in.readObject();
-           String patternString = (String) in.readObject();
-           pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
-         } catch (PatternSyntaxException e) {
-             throw new IOException("Invalid LIKE rule - " + e.getMessage());
-         }
-   }
+    /**
+     * Deserialize the state of the object.
+     *
+     * @param in object input stream
+     *
+     * @throws IOException if IOException during deserialization
+     * @throws ClassNotFoundException if class not found.
+     */
+    private void readObject(final java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
+        try {
+            field = (String) in.readObject();
+            String patternString = (String) in.readObject();
+            pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
+        } catch (PatternSyntaxException e) {
+            throw new IOException("Invalid LIKE rule - " + e.getMessage());
+        }
+    }
 
-   /**
-    * Serialize the state of the object.
-    *
-    * @param out object output stream
-    *
-    * @throws IOException if IOException during serialization
-    */
-   private void writeObject(final java.io.ObjectOutputStream out)
-     throws IOException {
-     out.writeObject(field);
-     out.writeObject(pattern.pattern());
-   }
+    /**
+     * Serialize the state of the object.
+     *
+     * @param out object output stream
+     *
+     * @throws IOException if IOException during serialization
+     */
+    private void writeObject(final java.io.ObjectOutputStream out) throws IOException {
+        out.writeObject(field);
+        out.writeObject(pattern.pattern());
+    }
 }
diff --git a/src/main/java/org/apache/log4j/rule/NotEqualsRule.java b/src/main/java/org/apache/log4j/rule/NotEqualsRule.java
index 60e9fb4..9c26d78 100644
--- a/src/main/java/org/apache/log4j/rule/NotEqualsRule.java
+++ b/src/main/java/org/apache/log4j/rule/NotEqualsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashSet;
@@ -22,10 +21,8 @@
 import java.util.Set;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
-
 /**
  * A Rule class implementing not equals against two strings.
  *
@@ -35,36 +32,34 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = -1135478467213793211L;
+    static final long serialVersionUID = -1135478467213793211L;
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-    LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Field.
      */
-  private final String field;
+    private final String field;
     /**
      * Value.
      */
-  private final String value;
+    private final String value;
 
     /**
      * Create new instance.
      * @param field field
      * @param value value
      */
-  private NotEqualsRule(final String field, final String value) {
-    super();
-    if (!RESOLVER.isField(field)) {
-      throw new IllegalArgumentException(
-        "Invalid NOT EQUALS rule - " + field + " is not a supported field");
-    }
+    private NotEqualsRule(final String field, final String value) {
+        super();
+        if (!RESOLVER.isField(field)) {
+            throw new IllegalArgumentException("Invalid NOT EQUALS rule - " + field + " is not a supported field");
+        }
 
-    this.field = field;
-    this.value = value;
-  }
+        this.field = field;
+        this.value = value;
+    }
 
     /**
      * Get new instance.
@@ -72,50 +67,49 @@
      * @param value value
      * @return new instance.
      */
-  public static Rule getRule(final String field, final String value) {
-    if (field.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
-        return NotLevelEqualsRule.getRule(value);
-    } else {
-        return new NotEqualsRule(field, value);
+    public static Rule getRule(final String field, final String value) {
+        if (field.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
+            return NotLevelEqualsRule.getRule(value);
+        } else {
+            return new NotEqualsRule(field, value);
+        }
     }
-  }
 
     /**
      * Get new instance from top two elements of stack.
      * @param stack stack.
      * @return new instance.
      */
-  public static Rule getRule(final Stack stack) {
-    if (stack.size() < 2) {
-      throw new IllegalArgumentException(
-        "Invalid NOT EQUALS rule - expected two parameters but received "
-        + stack.size());
-    }
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException(
+                    "Invalid NOT EQUALS rule - expected two parameters but received " + stack.size());
+        }
 
-    String p2 = stack.pop().toString();
-    String p1 = stack.pop().toString();
+        String p2 = stack.pop().toString();
+        String p1 = stack.pop().toString();
 
-    if (p1.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
-        return NotLevelEqualsRule.getRule(p2);
-    } else {
-        return new NotEqualsRule(p1, p2);
+        if (p1.equalsIgnoreCase(LoggingEventFieldResolver.LEVEL_FIELD)) {
+            return NotLevelEqualsRule.getRule(p2);
+        } else {
+            return new NotEqualsRule(p1, p2);
+        }
     }
-  }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    Object p2 = RESOLVER.getValue(field, event);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        Object p2 = RESOLVER.getValue(field, event);
 
-    boolean result = (p2 != null) && !(p2.toString().equals(value));
-    if (result && matches != null) {
-        //not equals - add the text that isn't equal (p2)
-        Set entries = (Set) matches.get(field.toUpperCase());
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(field.toUpperCase(), entries);
+        boolean result = (p2 != null) && !(p2.toString().equals(value));
+        if (result && matches != null) {
+            // not equals - add the text that isn't equal (p2)
+            Set entries = (Set) matches.get(field.toUpperCase());
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(field.toUpperCase(), entries);
+            }
+            entries.add(value);
         }
-        entries.add(value);
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/NotLevelEqualsRule.java b/src/main/java/org/apache/log4j/rule/NotLevelEqualsRule.java
index 25dafb4..b6a0b24 100644
--- a/src/main/java/org/apache/log4j/rule/NotLevelEqualsRule.java
+++ b/src/main/java/org/apache/log4j/rule/NotLevelEqualsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -25,7 +23,6 @@
 import java.util.Set;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.Level;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
@@ -85,8 +82,8 @@
         Level thisLevel = null;
         if (levelList.contains(value.toUpperCase())) {
             thisLevel = Level.valueOf(value.toUpperCase());
-          } else {
-//            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
+        } else {
+            //            thisLevel = UtilLoggingLevel.toLevel(value.toUpperCase());
         }
 
         return new NotLevelEqualsRule(thisLevel);
@@ -96,8 +93,8 @@
      * {@inheritDoc}
      */
     public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-        //both util.logging and log4j contain 'info' - use the int values instead of equality
-        //info level set to the same value for both levels
+        // both util.logging and log4j contain 'info' - use the int values instead of equality
+        // info level set to the same value for both levels
         Level eventLevel = event.m_level;
         boolean result = level.ordinal() != eventLevel.ordinal();
         if (result && matches != null) {
diff --git a/src/main/java/org/apache/log4j/rule/NotRule.java b/src/main/java/org/apache/log4j/rule/NotRule.java
index 752fe19..5fff9c9 100644
--- a/src/main/java/org/apache/log4j/rule/NotRule.java
+++ b/src/main/java/org/apache/log4j/rule/NotRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashMap;
@@ -34,70 +33,67 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = -6827159473117969306L;
+    static final long serialVersionUID = -6827159473117969306L;
     /**
      * Enclosed rule.
      */
-  private final Rule rule;
+    private final Rule rule;
 
     /**
      * Create new instance.
      * @param rule enclosed rule.
      */
-  private NotRule(final Rule rule) {
-    super();
-    this.rule = rule;
-  }
+    private NotRule(final Rule rule) {
+        super();
+        this.rule = rule;
+    }
 
     /**
      * Create new instance.
      * @param rule enclosed rule.
      * @return new rule.
      */
-  public static Rule getRule(final Rule rule) {
-      return new NotRule(rule);
-  }
+    public static Rule getRule(final Rule rule) {
+        return new NotRule(rule);
+    }
 
     /**
      * Create new instance from top element of stack.
      * @param stack stack
      * @return new rule.
      */
-  public static Rule getRule(final Stack stack) {
-      if (stack.size() < 1) {
-          throw new IllegalArgumentException(
-                  "Invalid NOT rule - expected one rule but received "
-                          + stack.size());
-      }
-      Object o1 = stack.pop();
-      if (o1 instanceof Rule) {
-        Rule p1 = (Rule) o1;
-        return new NotRule(p1);
-      }
-      throw new IllegalArgumentException(
-              "Invalid NOT rule: - expected rule but received " + o1);
-  }
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 1) {
+            throw new IllegalArgumentException("Invalid NOT rule - expected one rule but received " + stack.size());
+        }
+        Object o1 = stack.pop();
+        if (o1 instanceof Rule) {
+            Rule p1 = (Rule) o1;
+            return new NotRule(p1);
+        }
+        throw new IllegalArgumentException("Invalid NOT rule: - expected rule but received " + o1);
+    }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    if (matches == null) {
-      return !(rule.evaluate(event, null));
-    }
-    Map tempMatches = new HashMap();
-    boolean result = !(rule.evaluate(event, tempMatches));
-    if (result) {
-        for (Iterator iter = tempMatches.entrySet().iterator();iter.hasNext();) {
-            Map.Entry entry = (Map.Entry)iter.next();
-            Object key = entry.getKey();
-            Set value = (Set)entry.getValue();
-            Set mainSet = (Set) matches.get(key);
-            if (mainSet == null) {
-                mainSet = new HashSet();
-                matches.put(key, mainSet);
-            }
-            mainSet.addAll(value);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        if (matches == null) {
+            return !(rule.evaluate(event, null));
         }
+        Map tempMatches = new HashMap();
+        boolean result = !(rule.evaluate(event, tempMatches));
+        if (result) {
+            for (Iterator iter = tempMatches.entrySet().iterator(); iter.hasNext(); ) {
+                Map.Entry entry = (Map.Entry) iter.next();
+                Object key = entry.getKey();
+                Set value = (Set) entry.getValue();
+                Set mainSet = (Set) matches.get(key);
+                if (mainSet == null) {
+                    mainSet = new HashSet();
+                    matches.put(key, mainSet);
+                }
+                mainSet.addAll(value);
+            }
+        }
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/OrRule.java b/src/main/java/org/apache/log4j/rule/OrRule.java
index c7f26e3..610238f 100644
--- a/src/main/java/org/apache/log4j/rule/OrRule.java
+++ b/src/main/java/org/apache/log4j/rule/OrRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.HashMap;
@@ -34,26 +33,26 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = 2088765995061413165L;
+    static final long serialVersionUID = 2088765995061413165L;
     /**
      * rule 1.
      */
-  private final Rule rule1;
+    private final Rule rule1;
     /**
      * Rule 2.
      */
-  private final Rule rule2;
+    private final Rule rule2;
 
     /**
      * Create new instance.
      * @param firstParam first rule
      * @param secondParam second rule
      */
-  private OrRule(final Rule firstParam, final Rule secondParam) {
-    super();
-    this.rule1 = firstParam;
-    this.rule2 = secondParam;
-  }
+    private OrRule(final Rule firstParam, final Rule secondParam) {
+        super();
+        this.rule1 = firstParam;
+        this.rule2 = secondParam;
+    }
 
     /**
      * Create new instance.
@@ -61,66 +60,64 @@
      * @param secondParam second rule
      * @return new instance
      */
-  public static Rule getRule(final Rule firstParam, final Rule secondParam) {
-      return new OrRule(firstParam, secondParam);
-  }
+    public static Rule getRule(final Rule firstParam, final Rule secondParam) {
+        return new OrRule(firstParam, secondParam);
+    }
 
     /**
      * Create new instance from top two elements of stack.
      * @param stack stack
      * @return new instance
      */
-  public static Rule getRule(final Stack stack) {
-      if (stack.size() < 2) {
-          throw new IllegalArgumentException(
-                  "Invalid OR rule - expected two rules but received "
-                          + stack.size());
-      }
-      Object o2 = stack.pop();
-      Object o1 = stack.pop();
-      if ((o2 instanceof Rule) && (o1 instanceof Rule)) {
-          Rule p2 = (Rule) o2;
-          Rule p1 = (Rule) o1;
-          return new OrRule(p1, p2);
-      }
-      throw new IllegalArgumentException("Invalid OR rule: " + o2 + "..." + o1);
-  }
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException("Invalid OR rule - expected two rules but received " + stack.size());
+        }
+        Object o2 = stack.pop();
+        Object o1 = stack.pop();
+        if ((o2 instanceof Rule) && (o1 instanceof Rule)) {
+            Rule p2 = (Rule) o2;
+            Rule p1 = (Rule) o1;
+            return new OrRule(p1, p2);
+        }
+        throw new IllegalArgumentException("Invalid OR rule: " + o2 + "..." + o1);
+    }
 
-  /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-      if (matches == null) {
-        return (rule1.evaluate(event, null) || rule2.evaluate(event, null));
-      }
-      Map tempMatches1 = new HashMap();
-      Map tempMatches2 = new HashMap();
-      //not short-circuiting because we want to build the matches list
-      boolean result1 = rule1.evaluate(event, tempMatches1);
-      boolean result2 = rule2.evaluate(event, tempMatches2);
-      boolean result = result1 || result2;
-      if (result) {
-          for (Iterator iter = tempMatches1.entrySet().iterator();iter.hasNext();) {
-              Map.Entry entry = (Map.Entry)iter.next();
-              Object key = entry.getKey();
-              Set value = (Set)entry.getValue();
-              Set mainSet = (Set) matches.get(key);
-              if (mainSet == null) {
-                  mainSet = new HashSet();
-                  matches.put(key, mainSet);
-              }
-              mainSet.addAll(value);
-          }
-          for (Iterator iter = tempMatches2.entrySet().iterator();iter.hasNext();) {
-              Map.Entry entry = (Map.Entry)iter.next();
-              Object key = entry.getKey();
-              Set value = (Set)entry.getValue();
-              Set mainSet = (Set) matches.get(key);
-              if (mainSet == null) {
-                  mainSet = new HashSet();
-                  matches.put(key, mainSet);
-              }
-              mainSet.addAll(value);
-          }
-      }
-      return result;
-  }
+    /** {@inheritDoc} */
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        if (matches == null) {
+            return (rule1.evaluate(event, null) || rule2.evaluate(event, null));
+        }
+        Map tempMatches1 = new HashMap();
+        Map tempMatches2 = new HashMap();
+        // not short-circuiting because we want to build the matches list
+        boolean result1 = rule1.evaluate(event, tempMatches1);
+        boolean result2 = rule2.evaluate(event, tempMatches2);
+        boolean result = result1 || result2;
+        if (result) {
+            for (Iterator iter = tempMatches1.entrySet().iterator(); iter.hasNext(); ) {
+                Map.Entry entry = (Map.Entry) iter.next();
+                Object key = entry.getKey();
+                Set value = (Set) entry.getValue();
+                Set mainSet = (Set) matches.get(key);
+                if (mainSet == null) {
+                    mainSet = new HashSet();
+                    matches.put(key, mainSet);
+                }
+                mainSet.addAll(value);
+            }
+            for (Iterator iter = tempMatches2.entrySet().iterator(); iter.hasNext(); ) {
+                Map.Entry entry = (Map.Entry) iter.next();
+                Object key = entry.getKey();
+                Set value = (Set) entry.getValue();
+                Set mainSet = (Set) matches.get(key);
+                if (mainSet == null) {
+                    mainSet = new HashSet();
+                    matches.put(key, mainSet);
+                }
+                mainSet.addAll(value);
+            }
+        }
+        return result;
+    }
 }
diff --git a/src/main/java/org/apache/log4j/rule/PartialTextMatchRule.java b/src/main/java/org/apache/log4j/rule/PartialTextMatchRule.java
index 35a60e5..55a77a1 100644
--- a/src/main/java/org/apache/log4j/rule/PartialTextMatchRule.java
+++ b/src/main/java/org/apache/log4j/rule/PartialTextMatchRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import org.apache.log4j.spi.LoggingEventFieldResolver;
-
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
+import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
  * A Rule class implementing case-insensitive
@@ -36,36 +33,34 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = 6963284773637727558L;
+    static final long serialVersionUID = 6963284773637727558L;
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-    LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Field.
      */
-  private final String field;
+    private final String field;
     /**
      * Value.
      */
-  private final String value;
+    private final String value;
 
     /**
      * Create new instance.
      * @param field field
      * @param value value
      */
-  private PartialTextMatchRule(final String field, final String value) {
-    super();
-    if (!RESOLVER.isField(field)) {
-      throw new IllegalArgumentException(
-        "Invalid partial text rule - " + field + " is not a supported field");
-    }
+    private PartialTextMatchRule(final String field, final String value) {
+        super();
+        if (!RESOLVER.isField(field)) {
+            throw new IllegalArgumentException("Invalid partial text rule - " + field + " is not a supported field");
+        }
 
-    this.field = field;
-    this.value = value;
-  }
+        this.field = field;
+        this.value = value;
+    }
 
     /**
      * Create new instance.
@@ -73,40 +68,40 @@
      * @param value value
      * @return new instance
      */
-  public static Rule getRule(final String field, final String value) {
-    return new PartialTextMatchRule(field, value);
-  }
+    public static Rule getRule(final String field, final String value) {
+        return new PartialTextMatchRule(field, value);
+    }
 
     /**
      * Create new instance from top two elements of stack.
      * @param stack stack
      * @return new instance
      */
-  public static Rule getRule(final Stack stack) {
-    if (stack.size() < 2) {
-      throw new IllegalArgumentException(
-        "invalid partial text rule - expected two parameters but received "
-        + stack.size());
+    public static Rule getRule(final Stack stack) {
+        if (stack.size() < 2) {
+            throw new IllegalArgumentException(
+                    "invalid partial text rule - expected two parameters but received " + stack.size());
+        }
+
+        String p2 = stack.pop().toString();
+        String p1 = stack.pop().toString();
+
+        return new PartialTextMatchRule(p1, p2);
     }
 
-    String p2 = stack.pop().toString();
-    String p1 = stack.pop().toString();
-
-    return new PartialTextMatchRule(p1, p2);
-  }
-
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    Object p2 = RESOLVER.getValue(field, event);
-    boolean result = ((p2 != null) && (value != null) && (p2.toString().toLowerCase().indexOf(value.toLowerCase()) > -1));
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(field.toUpperCase());
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(field.toUpperCase(), entries);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        Object p2 = RESOLVER.getValue(field, event);
+        boolean result =
+                ((p2 != null) && (value != null) && (p2.toString().toLowerCase().indexOf(value.toLowerCase()) > -1));
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(field.toUpperCase());
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(field.toUpperCase(), entries);
+            }
+            entries.add(value);
         }
-        entries.add(value);
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/Rule.java b/src/main/java/org/apache/log4j/rule/Rule.java
index a225372..27f87a2 100644
--- a/src/main/java/org/apache/log4j/rule/Rule.java
+++ b/src/main/java/org/apache/log4j/rule/Rule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,16 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-/*
- */
 package org.apache.log4j.rule;
 
 import java.beans.PropertyChangeListener;
 import java.util.Map;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 
-
 /**
  * A Rule evaluates to true of false given a LoggingEvent object, and can notify
  * listeners when the underlying implementation of this Rule has it's
@@ -33,31 +29,31 @@
  * @author Scott Deboy (sdeboy@apache.org)
  */
 public interface Rule {
-  /**
-   * Returns true if this implementation of the rule accepts the LoggingEvent,
-   * or false if not.
-   *
-   * <p>What True/False means can be client-specific.
-   *
-   * @param e LoggingEvent this instance will evaluate
-   * @param matches a Map of event field keys to Sets of matching strings (may be null) which will be
-   * updated during execution of this method to include field and string matches based on the rule
-   * evaluation results 
-   * @return true if this Rule instance accepts the event, otherwise false.
-   */
-  boolean evaluate(ChainsawLoggingEvent e, Map matches);
+    /**
+     * Returns true if this implementation of the rule accepts the LoggingEvent,
+     * or false if not.
+     *
+     * <p>What True/False means can be client-specific.
+     *
+     * @param e LoggingEvent this instance will evaluate
+     * @param matches a Map of event field keys to Sets of matching strings (may be null) which will be
+     * updated during execution of this method to include field and string matches based on the rule
+     * evaluation results
+     * @return true if this Rule instance accepts the event, otherwise false.
+     */
+    boolean evaluate(ChainsawLoggingEvent e, Map matches);
 
-  /**
-   * Adds a PropertyChangeListener to this instance, which is notified when
-   * underlying Rule information has changed.
-   * (there are no specific property name events).
-   * @param listener listener
-   */
-  void addPropertyChangeListener(PropertyChangeListener listener);
+    /**
+     * Adds a PropertyChangeListener to this instance, which is notified when
+     * underlying Rule information has changed.
+     * (there are no specific property name events).
+     * @param listener listener
+     */
+    void addPropertyChangeListener(PropertyChangeListener listener);
 
-  /**
-   * Removes a known PropertyChangeListener from this Rule.
-   * @param listener listener
-   */
-  void removePropertyChangeListener(PropertyChangeListener listener);
+    /**
+     * Removes a known PropertyChangeListener from this Rule.
+     * @param listener listener
+     */
+    void removePropertyChangeListener(PropertyChangeListener listener);
 }
diff --git a/src/main/java/org/apache/log4j/rule/RuleFactory.java b/src/main/java/org/apache/log4j/rule/RuleFactory.java
index afc6668..33257c3 100644
--- a/src/main/java/org/apache/log4j/rule/RuleFactory.java
+++ b/src/main/java/org/apache/log4j/rule/RuleFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
 import java.util.Collection;
@@ -26,7 +25,7 @@
  * A Factory class which, given a string representation of the rule,
  * and a context stack, will
  * return a Rule ready for evaluation against events.
- * If an operator is requested that isn't supported, 
+ * If an operator is requested that isn't supported,
  * an IllegalArgumentException is thrown.
  *
  * @author Scott Deboy (sdeboy@apache.org)
@@ -35,79 +34,79 @@
     /**
      * Singleton instance.
      */
-  private static final RuleFactory FACTORY = new RuleFactory();
+    private static final RuleFactory FACTORY = new RuleFactory();
     /**
      * Rules.
      */
-  private static final Collection RULES = new LinkedList();
+    private static final Collection RULES = new LinkedList();
     /**
      * AND operator literal.
      */
-  private static final String AND_RULE = "&&";
+    private static final String AND_RULE = "&&";
     /**
      * OR operator literal.
      */
-  private static final String OR_RULE = "||";
+    private static final String OR_RULE = "||";
     /**
      * NOT operator literal.
      */
-  private static final String NOT_RULE = "!";
+    private static final String NOT_RULE = "!";
     /**
      * Inequality operator literal.
      */
-  private static final String NOT_EQUALS_RULE = "!=";
+    private static final String NOT_EQUALS_RULE = "!=";
     /**
      * Equality operator literal.
      */
-  private static final String EQUALS_RULE = "==";
+    private static final String EQUALS_RULE = "==";
     /**
      * Partial match operator literal.
      */
-  private static final String PARTIAL_TEXT_MATCH_RULE = "~=";
+    private static final String PARTIAL_TEXT_MATCH_RULE = "~=";
     /**
      * Like operator literal.
      */
-  private static final String LIKE_RULE = "like";
+    private static final String LIKE_RULE = "like";
     /**
      * Exists operator literal.
      */
-  private static final String EXISTS_RULE = "exists";
+    private static final String EXISTS_RULE = "exists";
     /**
      * Less than operator literal.
      */
-  private static final String LESS_THAN_RULE = "<";
+    private static final String LESS_THAN_RULE = "<";
     /**
      * Greater than operator literal.
      */
-  private static final String GREATER_THAN_RULE = ">";
+    private static final String GREATER_THAN_RULE = ">";
     /**
      * Less than or equal operator literal.
      */
-  private static final String LESS_THAN_EQUALS_RULE = "<=";
+    private static final String LESS_THAN_EQUALS_RULE = "<=";
     /**
      * Greater than or equal operator literal.
      */
-  private static final String GREATER_THAN_EQUALS_RULE = ">=";
+    private static final String GREATER_THAN_EQUALS_RULE = ">=";
 
-  static {
-    RULES.add(AND_RULE);
-    RULES.add(OR_RULE);
-    RULES.add(NOT_RULE);
-    RULES.add(NOT_EQUALS_RULE);
-    RULES.add(EQUALS_RULE);
-    RULES.add(PARTIAL_TEXT_MATCH_RULE);
-    RULES.add(LIKE_RULE);
-    RULES.add(EXISTS_RULE);
-    RULES.add(LESS_THAN_RULE);
-    RULES.add(GREATER_THAN_RULE);
-    RULES.add(LESS_THAN_EQUALS_RULE);
-    RULES.add(GREATER_THAN_EQUALS_RULE);
-  }
+    static {
+        RULES.add(AND_RULE);
+        RULES.add(OR_RULE);
+        RULES.add(NOT_RULE);
+        RULES.add(NOT_EQUALS_RULE);
+        RULES.add(EQUALS_RULE);
+        RULES.add(PARTIAL_TEXT_MATCH_RULE);
+        RULES.add(LIKE_RULE);
+        RULES.add(EXISTS_RULE);
+        RULES.add(LESS_THAN_RULE);
+        RULES.add(GREATER_THAN_RULE);
+        RULES.add(LESS_THAN_EQUALS_RULE);
+        RULES.add(GREATER_THAN_EQUALS_RULE);
+    }
 
     /**
      * Create instance.
      */
-  private RuleFactory() {
+    private RuleFactory() {
         super();
     }
 
@@ -115,18 +114,18 @@
      * Get instance.
      * @return rule factory instance.
      */
-  public static RuleFactory getInstance() {
-      return FACTORY;
-  }
+    public static RuleFactory getInstance() {
+        return FACTORY;
+    }
 
     /**
      * Determine if specified string is a known operator.
      * @param symbol string
      * @return true if string is a known operator
      */
-  public boolean isRule(final String symbol) {
-    return ((symbol != null) && (RULES.contains(symbol.toLowerCase(Locale.ENGLISH))));
-  }
+    public boolean isRule(final String symbol) {
+        return ((symbol != null) && (RULES.contains(symbol.toLowerCase(Locale.ENGLISH))));
+    }
 
     /**
      * Create rule from applying operator to stack.
@@ -134,54 +133,54 @@
      * @param stack stack
      * @return new instance
      */
-  public Rule getRule(final String symbol, final Stack stack) {
-    if (AND_RULE.equals(symbol)) {
-      return AndRule.getRule(stack);
-    }
+    public Rule getRule(final String symbol, final Stack stack) {
+        if (AND_RULE.equals(symbol)) {
+            return AndRule.getRule(stack);
+        }
 
-    if (OR_RULE.equals(symbol)) {
-      return OrRule.getRule(stack);
-    }
+        if (OR_RULE.equals(symbol)) {
+            return OrRule.getRule(stack);
+        }
 
-    if (NOT_RULE.equals(symbol)) {
-      return NotRule.getRule(stack);
-    }
+        if (NOT_RULE.equals(symbol)) {
+            return NotRule.getRule(stack);
+        }
 
-    if (NOT_EQUALS_RULE.equals(symbol)) {
-      return NotEqualsRule.getRule(stack);
-    }
+        if (NOT_EQUALS_RULE.equals(symbol)) {
+            return NotEqualsRule.getRule(stack);
+        }
 
-    if (EQUALS_RULE.equals(symbol)) {
-      return EqualsRule.getRule(stack);
-    }
+        if (EQUALS_RULE.equals(symbol)) {
+            return EqualsRule.getRule(stack);
+        }
 
-    if (PARTIAL_TEXT_MATCH_RULE.equals(symbol)) {
-      return PartialTextMatchRule.getRule(stack);
-    }
+        if (PARTIAL_TEXT_MATCH_RULE.equals(symbol)) {
+            return PartialTextMatchRule.getRule(stack);
+        }
 
-    if (RULES.contains(LIKE_RULE) && LIKE_RULE.equalsIgnoreCase(symbol)) {
-      return LikeRule.getRule(stack);
-    }
+        if (RULES.contains(LIKE_RULE) && LIKE_RULE.equalsIgnoreCase(symbol)) {
+            return LikeRule.getRule(stack);
+        }
 
-    if (EXISTS_RULE.equalsIgnoreCase(symbol)) {
-      return ExistsRule.getRule(stack);
-    }
+        if (EXISTS_RULE.equalsIgnoreCase(symbol)) {
+            return ExistsRule.getRule(stack);
+        }
 
-    if (LESS_THAN_RULE.equals(symbol)) {
-      return InequalityRule.getRule(LESS_THAN_RULE, stack);
-    }
+        if (LESS_THAN_RULE.equals(symbol)) {
+            return InequalityRule.getRule(LESS_THAN_RULE, stack);
+        }
 
-    if (GREATER_THAN_RULE.equals(symbol)) {
-      return InequalityRule.getRule(GREATER_THAN_RULE, stack);
-    }
+        if (GREATER_THAN_RULE.equals(symbol)) {
+            return InequalityRule.getRule(GREATER_THAN_RULE, stack);
+        }
 
-    if (LESS_THAN_EQUALS_RULE.equals(symbol)) {
-      return InequalityRule.getRule(LESS_THAN_EQUALS_RULE, stack);
-    }
+        if (LESS_THAN_EQUALS_RULE.equals(symbol)) {
+            return InequalityRule.getRule(LESS_THAN_EQUALS_RULE, stack);
+        }
 
-    if (GREATER_THAN_EQUALS_RULE.equals(symbol)) {
-      return InequalityRule.getRule(GREATER_THAN_EQUALS_RULE, stack);
+        if (GREATER_THAN_EQUALS_RULE.equals(symbol)) {
+            return InequalityRule.getRule(GREATER_THAN_EQUALS_RULE, stack);
+        }
+        throw new IllegalArgumentException("Invalid rule: " + symbol);
     }
-    throw new IllegalArgumentException("Invalid rule: " + symbol);
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/TimestampEqualsRule.java b/src/main/java/org/apache/log4j/rule/TimestampEqualsRule.java
index dd761e9..83dc466 100644
--- a/src/main/java/org/apache/log4j/rule/TimestampEqualsRule.java
+++ b/src/main/java/org/apache/log4j/rule/TimestampEqualsRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import java.io.IOException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -25,7 +23,6 @@
 import java.util.Map;
 import java.util.Set;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
@@ -37,61 +34,60 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = 1639079557187790321L;
+    static final long serialVersionUID = 1639079557187790321L;
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-          LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Date format.
      */
-  private static final DateFormat DATE_FORMAT =
-          new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 
     /**
      * time stamp.
      */
-  private long timeStamp;
+    private long timeStamp;
 
     /**
      * Create new instance.
      * @param value string representation of date.
      */
-  private TimestampEqualsRule(final String value) {
-    super();
-    //expects value to be a timestamp value represented as a long
-    try {
-        synchronized(this) {
-            timeStamp = DATE_FORMAT.parse(value).getTime();
+    private TimestampEqualsRule(final String value) {
+        super();
+        // expects value to be a timestamp value represented as a long
+        try {
+            synchronized (this) {
+                timeStamp = DATE_FORMAT.parse(value).getTime();
+            }
+        } catch (ParseException pe) {
+            throw new IllegalArgumentException("Could not parse date: " + value);
         }
-    } catch (ParseException pe) {
-        throw new IllegalArgumentException("Could not parse date: " + value);
     }
-  }
 
     /**
      * Create new instance.
      * @param value string representation of date.
      * @return new instance
      */
-  public static Rule getRule(final String value) {
-      return new TimestampEqualsRule(value);
-  }
+    public static Rule getRule(final String value) {
+        return new TimestampEqualsRule(value);
+    }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    String eventTimeStampString = RESOLVER.getValue(LoggingEventFieldResolver.TIMESTAMP_FIELD, event).toString();
-    long eventTimeStamp = Long.parseLong(eventTimeStampString) / 1000 * 1000;
-    boolean result = (eventTimeStamp == timeStamp);
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(LoggingEventFieldResolver.TIMESTAMP_FIELD, entries);
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        String eventTimeStampString = RESOLVER.getValue(LoggingEventFieldResolver.TIMESTAMP_FIELD, event)
+                .toString();
+        long eventTimeStamp = Long.parseLong(eventTimeStampString) / 1000 * 1000;
+        boolean result = (eventTimeStamp == timeStamp);
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(LoggingEventFieldResolver.TIMESTAMP_FIELD, entries);
+            }
+            entries.add(eventTimeStampString);
         }
-        entries.add(eventTimeStampString);
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/rule/TimestampInequalityRule.java b/src/main/java/org/apache/log4j/rule/TimestampInequalityRule.java
index 412fb7d..e70dd2b 100644
--- a/src/main/java/org/apache/log4j/rule/TimestampInequalityRule.java
+++ b/src/main/java/org/apache/log4j/rule/TimestampInequalityRule.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.rule;
 
-import java.io.IOException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -25,7 +23,6 @@
 import java.util.Map;
 import java.util.Set;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
 import org.apache.log4j.spi.LoggingEventFieldResolver;
 
 /**
@@ -37,43 +34,40 @@
     /**
      * Serialization ID.
      */
-  static final long serialVersionUID = -4642641663914789241L;
+    static final long serialVersionUID = -4642641663914789241L;
     /**
      * Resolver.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-            LoggingEventFieldResolver.getInstance();
+    private static final LoggingEventFieldResolver RESOLVER = LoggingEventFieldResolver.getInstance();
     /**
      * Date format.
      */
-  private static final DateFormat DATE_FORMAT =
-          new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+    private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     /**
      * Inequality symbol.
      */
-  private transient String inequalitySymbol;
+    private transient String inequalitySymbol;
     /**
      * Timestamp.
      */
-  private long timeStamp;
+    private long timeStamp;
 
     /**
      * Create new instance.
      * @param inequalitySymbol inequality symbol.
      * @param value string representation of date.
      */
-  private TimestampInequalityRule(
-    final String inequalitySymbol, final String value) {
-    super();
-    this.inequalitySymbol = inequalitySymbol;
-    try {
-        synchronized (this) {
-            timeStamp = DATE_FORMAT.parse(value).getTime();
+    private TimestampInequalityRule(final String inequalitySymbol, final String value) {
+        super();
+        this.inequalitySymbol = inequalitySymbol;
+        try {
+            synchronized (this) {
+                timeStamp = DATE_FORMAT.parse(value).getTime();
+            }
+        } catch (ParseException pe) {
+            throw new IllegalArgumentException("Could not parse date: " + value);
         }
-    } catch (ParseException pe) {
-        throw new IllegalArgumentException("Could not parse date: " + value);
     }
-  }
 
     /**
      * Create new instance.
@@ -81,37 +75,36 @@
      * @param value string representation of date
      * @return new instance
      */
-  public static Rule getRule(final String inequalitySymbol,
-                             final String value) {
-      return new TimestampInequalityRule(inequalitySymbol, value);
-  }
+    public static Rule getRule(final String inequalitySymbol, final String value) {
+        return new TimestampInequalityRule(inequalitySymbol, value);
+    }
 
     /** {@inheritDoc} */
-  public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
-    String eventTimeStampString = RESOLVER.getValue(LoggingEventFieldResolver.TIMESTAMP_FIELD, event).toString();
-    long eventTimeStamp = Long.parseLong(
-                eventTimeStampString) / 1000 * 1000;
-    boolean result = false;
-    long first = eventTimeStamp;
-    long second = timeStamp;
+    public boolean evaluate(final ChainsawLoggingEvent event, Map matches) {
+        String eventTimeStampString = RESOLVER.getValue(LoggingEventFieldResolver.TIMESTAMP_FIELD, event)
+                .toString();
+        long eventTimeStamp = Long.parseLong(eventTimeStampString) / 1000 * 1000;
+        boolean result = false;
+        long first = eventTimeStamp;
+        long second = timeStamp;
 
-    if ("<".equals(inequalitySymbol)) {
-      result = first < second;
-    } else if (">".equals(inequalitySymbol)) {
-      result = first > second;
-    } else if ("<=".equals(inequalitySymbol)) {
-      result = first <= second;
-    } else if (">=".equals(inequalitySymbol)) {
-      result = first >= second;
-    }
-    if (result && matches != null) {
-        Set entries = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
-        if (entries == null) {
-            entries = new HashSet();
-            matches.put(LoggingEventFieldResolver.TIMESTAMP_FIELD, entries);
+        if ("<".equals(inequalitySymbol)) {
+            result = first < second;
+        } else if (">".equals(inequalitySymbol)) {
+            result = first > second;
+        } else if ("<=".equals(inequalitySymbol)) {
+            result = first <= second;
+        } else if (">=".equals(inequalitySymbol)) {
+            result = first >= second;
         }
-        entries.add(eventTimeStampString);
+        if (result && matches != null) {
+            Set entries = (Set) matches.get(LoggingEventFieldResolver.TIMESTAMP_FIELD);
+            if (entries == null) {
+                entries = new HashSet();
+                matches.put(LoggingEventFieldResolver.TIMESTAMP_FIELD, entries);
+            }
+            entries.add(eventTimeStampString);
+        }
+        return result;
     }
-    return result;
-  }
 }
diff --git a/src/main/java/org/apache/log4j/scheduler/Job.java b/src/main/java/org/apache/log4j/scheduler/Job.java
index 76181a0..76bda7e 100644
--- a/src/main/java/org/apache/log4j/scheduler/Job.java
+++ b/src/main/java/org/apache/log4j/scheduler/Job.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,10 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.scheduler;
 
-
 /**
  * Job is a very simple interface. It only has a single method {@link #execute}
  * which is called by the {@link Scheduler} when a task is ready for execution.
diff --git a/src/main/java/org/apache/log4j/scheduler/Scheduler.java b/src/main/java/org/apache/log4j/scheduler/Scheduler.java
index 43aa1af..c4bf93f 100644
--- a/src/main/java/org/apache/log4j/scheduler/Scheduler.java
+++ b/src/main/java/org/apache/log4j/scheduler/Scheduler.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,15 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.scheduler;
 
-import org.apache.log4j.chainsaw.logui.LogUI;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.List;
 import java.util.Vector;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * A simple but still useful implementation of a Scheduler (in memory only).
@@ -109,7 +106,6 @@
         }
     }
 
-
     /**
      * Schedule a {@link Job} for execution at system time given by
      * the <code>desiredTime</code> parameter.
@@ -117,8 +113,7 @@
      * @param job         job to schedule.
      * @param desiredTime desired time of execution.
      */
-    public synchronized void schedule(final Job job,
-                                      final long desiredTime) {
+    public synchronized void schedule(final Job job, final long desiredTime) {
         schedule(new ScheduledJobEntry(job, desiredTime));
     }
 
@@ -133,9 +128,7 @@
      * @param desiredTime desired time of execution.
      * @param period      repeat period.
      */
-    public synchronized void schedule(final Job job,
-                                      final long desiredTime,
-                                      final long period) {
+    public synchronized void schedule(final Job job, final long desiredTime, final long period) {
         schedule(new ScheduledJobEntry(job, desiredTime, period));
     }
 
@@ -150,11 +143,9 @@
      * @param newPeriod new repeat period.
      * @return true if period could be changed.
      */
-    public synchronized boolean changePeriod(final Job job,
-                                             final long newPeriod) {
+    public synchronized boolean changePeriod(final Job job, final long newPeriod) {
         if (newPeriod <= 0) {
-            throw new IllegalArgumentException(
-                "Period must be an integer langer than zero");
+            throw new IllegalArgumentException("Period must be an integer langer than zero");
         }
 
         int i = findIndex(job);
@@ -305,16 +296,11 @@
          * @param desiredTime desired time
          * @param period      repeat period
          */
-        ScheduledJobEntry(final Job job,
-                          final long desiredTime,
-                          final long period) {
+        ScheduledJobEntry(final Job job, final long desiredTime, final long period) {
             super();
             this.desiredExecutionTime = desiredTime;
             this.job = job;
             this.period = period;
         }
     }
-
 }
-
-
diff --git a/src/main/java/org/apache/log4j/spi/Decoder.java b/src/main/java/org/apache/log4j/spi/Decoder.java
index 5d3cb15..c189313 100644
--- a/src/main/java/org/apache/log4j/spi/Decoder.java
+++ b/src/main/java/org/apache/log4j/spi/Decoder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,17 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.spi;
 
-
 import java.io.IOException;
 import java.net.URL;
 import java.util.Map;
 import java.util.Vector;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 
-
 /**
  * Allow LoggingEvents to be reconstructed from a different format
  * (usually XML).
diff --git a/src/main/java/org/apache/log4j/spi/ErrorItem.java b/src/main/java/org/apache/log4j/spi/ErrorItem.java
index 52db469..f58bd1f 100644
--- a/src/main/java/org/apache/log4j/spi/ErrorItem.java
+++ b/src/main/java/org/apache/log4j/spi/ErrorItem.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,14 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.spi;
 
+import java.io.PrintStream;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.io.PrintStream;
-
 /**
  * Used to store special log4j errors which cannot be logged using internal
  * logging. Such errors include those occurring during the initial phases
@@ -148,8 +146,7 @@
      * @return string.
      */
     public String toString() {
-        String str =
-            "Reported error: \"" + message + "\"";
+        String str = "Reported error: \"" + message + "\"";
 
         if (lineNumber != -1) {
             str += " at line " + lineNumber + " column " + colNumber;
@@ -173,8 +170,7 @@
      * @param ps print stream.
      */
     public void dump(final PrintStream ps) {
-        String str =
-            "Reported error: \"" + message + "\"";
+        String str = "Reported error: \"" + message + "\"";
 
         if (lineNumber != -1) {
             str += " at line " + lineNumber + " column " + colNumber;
diff --git a/src/main/java/org/apache/log4j/spi/LoggingEventFieldResolver.java b/src/main/java/org/apache/log4j/spi/LoggingEventFieldResolver.java
index 2f9679d..6bc2315 100644
--- a/src/main/java/org/apache/log4j/spi/LoggingEventFieldResolver.java
+++ b/src/main/java/org/apache/log4j/spi/LoggingEventFieldResolver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,20 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.spi;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import java.util.Locale;
+import java.util.Map;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
-
 import org.apache.log4j.rule.InFixToPostFix;
 
-
 /**
  * A singleton helper utility which accepts a field name
  * and a LoggingEvent and returns the value of that field.
@@ -55,7 +50,7 @@
  * THREAD        thread                                    String
  * PROP.keyName  entry in the Property hashtable           String
  *               mapped to the key [keyName]
-
+ *
  * NOTE:  the values for the 'keyName' portion of the MDC and PROP mappings must
  * be an exact match to the key in the hashTable (case sensitive).
  *
@@ -70,83 +65,82 @@
     /**
      * Keyword list.
      */
-  public static final List KEYWORD_LIST = new ArrayList();
+    public static final List KEYWORD_LIST = new ArrayList();
     /**
      * LOGGER string literal.
      */
-  public static final String LOGGER_FIELD = "LOGGER";
+    public static final String LOGGER_FIELD = "LOGGER";
     /**
      * LEVEL string literal.
      */
-  public static final String LEVEL_FIELD = "LEVEL";
+    public static final String LEVEL_FIELD = "LEVEL";
     /**
      * CLASS string literal.
      */
-  public static final String CLASS_FIELD = "CLASS";
+    public static final String CLASS_FIELD = "CLASS";
     /**
      * FILE string literal.
      */
-  public static final String FILE_FIELD = "FILE";
+    public static final String FILE_FIELD = "FILE";
     /**
      * LINE string literal.
      */
-  public static final String LINE_FIELD = "LINE";
+    public static final String LINE_FIELD = "LINE";
     /**
      * METHOD string literal.
      */
-  public static final String METHOD_FIELD = "METHOD";
+    public static final String METHOD_FIELD = "METHOD";
     /**
      * MSG string literal.
      */
-  public static final String MSG_FIELD = "MSG";
+    public static final String MSG_FIELD = "MSG";
     /**
      * NDC string literal.
      */
-  public static final String NDC_FIELD = "NDC";
+    public static final String NDC_FIELD = "NDC";
     /**
      * EXCEPTION string literal.
      */
-  public static final String EXCEPTION_FIELD = "EXCEPTION";
+    public static final String EXCEPTION_FIELD = "EXCEPTION";
     /**
      * TIMESTAMP string literal.
      */
-  public static final String TIMESTAMP_FIELD = "TIMESTAMP";
+    public static final String TIMESTAMP_FIELD = "TIMESTAMP";
     /**
      * THREAD string literal.
      */
-  public static final String THREAD_FIELD = "THREAD";
+    public static final String THREAD_FIELD = "THREAD";
     /**
      * PROP. string literal.
      */
-  public static final String PROP_FIELD = "PROP.";
+    public static final String PROP_FIELD = "PROP.";
     /**
      * empty string literal.
      */
-  public static final String EMPTY_STRING = "";
+    public static final String EMPTY_STRING = "";
     /**
      * LOGGER string literal.
      */
-  private static final LoggingEventFieldResolver RESOLVER =
-    new LoggingEventFieldResolver();
+    private static final LoggingEventFieldResolver RESOLVER = new LoggingEventFieldResolver();
 
     /**
      * Create new instance.
      */
-  private LoggingEventFieldResolver() {
-    super();
-    KEYWORD_LIST.add(LOGGER_FIELD);
-    KEYWORD_LIST.add(LEVEL_FIELD);
-    KEYWORD_LIST.add(CLASS_FIELD);
-    KEYWORD_LIST.add(FILE_FIELD);
-    KEYWORD_LIST.add(LINE_FIELD);
-    KEYWORD_LIST.add(METHOD_FIELD);
-    KEYWORD_LIST.add(MSG_FIELD);
-    KEYWORD_LIST.add(NDC_FIELD);
-    KEYWORD_LIST.add(EXCEPTION_FIELD);
-    KEYWORD_LIST.add(TIMESTAMP_FIELD);
-    KEYWORD_LIST.add(THREAD_FIELD);
-    KEYWORD_LIST.add(PROP_FIELD);
-  }
+    private LoggingEventFieldResolver() {
+        super();
+        KEYWORD_LIST.add(LOGGER_FIELD);
+        KEYWORD_LIST.add(LEVEL_FIELD);
+        KEYWORD_LIST.add(CLASS_FIELD);
+        KEYWORD_LIST.add(FILE_FIELD);
+        KEYWORD_LIST.add(LINE_FIELD);
+        KEYWORD_LIST.add(METHOD_FIELD);
+        KEYWORD_LIST.add(MSG_FIELD);
+        KEYWORD_LIST.add(NDC_FIELD);
+        KEYWORD_LIST.add(EXCEPTION_FIELD);
+        KEYWORD_LIST.add(TIMESTAMP_FIELD);
+        KEYWORD_LIST.add(THREAD_FIELD);
+        KEYWORD_LIST.add(PROP_FIELD);
+    }
 
     /**
      * Apply fields.
@@ -154,51 +148,49 @@
      * @param event logging event.
      * @return evaluted expression
      */
-  public String applyFields(final String replaceText,
-                            final ChainsawLoggingEvent event) {
-      if (replaceText == null) {
-        return null;
-      }
-      InFixToPostFix.CustomTokenizer tokenizer = new InFixToPostFix.CustomTokenizer(replaceText);
-      StringBuffer result = new StringBuffer();
-      boolean found = false;
+    public String applyFields(final String replaceText, final ChainsawLoggingEvent event) {
+        if (replaceText == null) {
+            return null;
+        }
+        InFixToPostFix.CustomTokenizer tokenizer = new InFixToPostFix.CustomTokenizer(replaceText);
+        StringBuffer result = new StringBuffer();
+        boolean found = false;
 
-      while (tokenizer.hasMoreTokens()) {
-          String token = tokenizer.nextToken();
-          if (isField(token) || token.toUpperCase(Locale.US).startsWith(PROP_FIELD)) {
-              result.append(getValue(token, event).toString());
-              found = true;
-          } else {
-              result.append(token);
-          }
-      }
-      if (found) {
-        return result.toString();
-      }
-      return null;
-  }
+        while (tokenizer.hasMoreTokens()) {
+            String token = tokenizer.nextToken();
+            if (isField(token) || token.toUpperCase(Locale.US).startsWith(PROP_FIELD)) {
+                result.append(getValue(token, event).toString());
+                found = true;
+            } else {
+                result.append(token);
+            }
+        }
+        if (found) {
+            return result.toString();
+        }
+        return null;
+    }
 
     /**
      * Get singleton instance.
      * @return singleton instance
      */
-  public static LoggingEventFieldResolver getInstance() {
-    return RESOLVER;
-  }
+    public static LoggingEventFieldResolver getInstance() {
+        return RESOLVER;
+    }
 
     /**
      * Determines if specified string is a recognized field.
      * @param fieldName field name
      * @return true if recognized field.
      */
-  public boolean isField(final String fieldName) {
-    if (fieldName != null) {
-        return (KEYWORD_LIST.contains(
-                fieldName.toUpperCase(Locale.US))
-                || fieldName.toUpperCase().startsWith(PROP_FIELD));
+    public boolean isField(final String fieldName) {
+        if (fieldName != null) {
+            return (KEYWORD_LIST.contains(fieldName.toUpperCase(Locale.US))
+                    || fieldName.toUpperCase().startsWith(PROP_FIELD));
+        }
+        return false;
     }
-    return false;
-  }
 
     /**
      * Get value of field.
@@ -206,63 +198,62 @@
      * @param event event
      * @return value of field
      */
-  public Object getValue(final String fieldName,
-                         final ChainsawLoggingEvent event) {
-    String upperField = fieldName.toUpperCase(Locale.US);
-    if (LOGGER_FIELD.equals(upperField)) {
-      return event.m_logger;
-    } else if (LEVEL_FIELD.equals(upperField)) {
-      return event.m_level;
-    } else if (MSG_FIELD.equals(upperField)) {
-      return event.m_message;
-    } else if (NDC_FIELD.equals(upperField)) {
-      String ndcValue = event.m_ndc;
-      return ((ndcValue == null) ? EMPTY_STRING : ndcValue);
-    } else if (EXCEPTION_FIELD.equals(upperField)) {
-//        String[] throwableRep = event.getThrowableStrRep();
-//        if (throwableRep == null) {
-//            return EMPTY_STRING;
-//        } else {
-//            return getExceptionMessage(throwableRep);
-//        }
-        return "";
-    } else if (TIMESTAMP_FIELD.equals(upperField)) {
-      return event.m_timestamp;
-    } else if (THREAD_FIELD.equals(upperField)) {
-      return event.m_threadName;
-    } else if (upperField.startsWith(PROP_FIELD)) {
-      //note: need to use actual fieldname since case matters
-        String realFieldName = fieldName.substring(5);
-        String property = event.getProperty(realFieldName);
-        if( property != null && property.length() >= 1 ){
-            return property;
-        }
+    public Object getValue(final String fieldName, final ChainsawLoggingEvent event) {
+        String upperField = fieldName.toUpperCase(Locale.US);
+        if (LOGGER_FIELD.equals(upperField)) {
+            return event.m_logger;
+        } else if (LEVEL_FIELD.equals(upperField)) {
+            return event.m_level;
+        } else if (MSG_FIELD.equals(upperField)) {
+            return event.m_message;
+        } else if (NDC_FIELD.equals(upperField)) {
+            String ndcValue = event.m_ndc;
+            return ((ndcValue == null) ? EMPTY_STRING : ndcValue);
+        } else if (EXCEPTION_FIELD.equals(upperField)) {
+            //        String[] throwableRep = event.getThrowableStrRep();
+            //        if (throwableRep == null) {
+            //            return EMPTY_STRING;
+            //        } else {
+            //            return getExceptionMessage(throwableRep);
+            //        }
+            return "";
+        } else if (TIMESTAMP_FIELD.equals(upperField)) {
+            return event.m_timestamp;
+        } else if (THREAD_FIELD.equals(upperField)) {
+            return event.m_threadName;
+        } else if (upperField.startsWith(PROP_FIELD)) {
+            // note: need to use actual fieldname since case matters
+            String realFieldName = fieldName.substring(5);
+            String property = event.getProperty(realFieldName);
+            if (property != null && property.length() >= 1) {
+                return property;
+            }
 
-        // We did not get the property in a case-sensitive manner - check for
-        // case-insensitive
-        for( Map.Entry<String,String> entry : event.getProperties().entrySet() ){
-            if( entry.getKey().equalsIgnoreCase( realFieldName ) ){
-                return entry.getValue();
+            // We did not get the property in a case-sensitive manner - check for
+            // case-insensitive
+            for (Map.Entry<String, String> entry : event.getProperties().entrySet()) {
+                if (entry.getKey().equalsIgnoreCase(realFieldName)) {
+                    return entry.getValue();
+                }
+            }
+
+            return EMPTY_STRING;
+        } else {
+            org.apache.log4j.chainsaw.logevents.LocationInfo info = event.m_locationInfo;
+            if (CLASS_FIELD.equals(upperField)) {
+                return ((info == null) ? EMPTY_STRING : info.className);
+            } else if (FILE_FIELD.equals(upperField)) {
+                return ((info == null) ? EMPTY_STRING : info.fileName);
+            } else if (LINE_FIELD.equals(upperField)) {
+                return ((info == null) ? EMPTY_STRING : info.lineNumber);
+            } else if (METHOD_FIELD.equals(upperField)) {
+                return ((info == null) ? EMPTY_STRING : info.methodName);
             }
         }
-        
-        return EMPTY_STRING;
-    } else {
-        org.apache.log4j.chainsaw.logevents.LocationInfo info = event.m_locationInfo;
-        if (CLASS_FIELD.equals(upperField)) {
-            return ((info == null) ? EMPTY_STRING : info.className);
-        } else if (FILE_FIELD.equals(upperField)) {
-            return ((info == null) ? EMPTY_STRING : info.fileName);
-        } else if (LINE_FIELD.equals(upperField)) {
-            return ((info == null) ? EMPTY_STRING : info.lineNumber);
-        } else if (METHOD_FIELD.equals(upperField)) {
-            return ((info == null) ? EMPTY_STRING : info.methodName);
-        }
-    }
 
-    //there wasn't a match, so throw a runtime exception
-    throw new IllegalArgumentException("Unsupported field name: " + fieldName);
-  }
+        // there wasn't a match, so throw a runtime exception
+        throw new IllegalArgumentException("Unsupported field name: " + fieldName);
+    }
 
     /**
      * Get message from throwable representation.
diff --git a/src/main/java/org/apache/log4j/spi/NOPULogger.java b/src/main/java/org/apache/log4j/spi/NOPULogger.java
index 8845966..3dd1041 100644
--- a/src/main/java/org/apache/log4j/spi/NOPULogger.java
+++ b/src/main/java/org/apache/log4j/spi/NOPULogger.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -18,7 +18,6 @@
 
 import org.apache.log4j.ULogger;
 
-
 /**
  * A no operation (NOP) implementation of {@link ULogger}.
  *
@@ -73,9 +72,7 @@
     /**
      * {@inheritDoc}
      */
-    public void debug(final String parameterizedMsg,
-                      final Object param1,
-                      final Object param2) {
+    public void debug(final String parameterizedMsg, final Object param1, final Object param2) {
         // NOP
     }
 
@@ -111,8 +108,7 @@
     /**
      * {@inheritDoc}
      */
-    public void info(final String parameterizedMsg,
-                     final Object param1, final Object param2) {
+    public void info(final String parameterizedMsg, final Object param1, final Object param2) {
         // NOP
     }
 
@@ -140,17 +136,14 @@
     /**
      * {@inheritDoc}
      */
-    public void warn(final Object parameterizedMsg,
-                     final Object param1) {
+    public void warn(final Object parameterizedMsg, final Object param1) {
         // NOP
     }
 
     /**
      * {@inheritDoc}
      */
-    public void warn(final String parameterizedMsg,
-                     final Object param1,
-                     final Object param2) {
+    public void warn(final String parameterizedMsg, final Object param1, final Object param2) {
         // NOP
     }
 
@@ -185,9 +178,7 @@
     /**
      * {@inheritDoc}
      */
-    public void error(final String parameterizedMsg,
-                      final Object param1,
-                      final Object param2) {
+    public void error(final String parameterizedMsg, final Object param1, final Object param2) {
         // NOP
     }
 
@@ -197,5 +188,4 @@
     public void error(final Object msg, final Throwable t) {
         // NOP
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/spi/SimpleULogger.java b/src/main/java/org/apache/log4j/spi/SimpleULogger.java
index 79cbb81..c695921 100644
--- a/src/main/java/org/apache/log4j/spi/SimpleULogger.java
+++ b/src/main/java/org/apache/log4j/spi/SimpleULogger.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -21,7 +21,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-
 /**
  * A simple implementation that logs messages of level INFO or higher on
  * the console (<code>System.out</code>).
@@ -51,7 +50,6 @@
      */
     private final String loggerName;
 
-
     /**
      * Mark the time when this class gets loaded into memory.
      */
@@ -60,8 +58,7 @@
     /**
      * Line separator.
      */
-    public static final String LINE_SEPARATOR
-        = System.getProperty("line.separator");
+    public static final String LINE_SEPARATOR = System.getProperty("line.separator");
 
     /**
      * INFO string literal.
@@ -120,9 +117,7 @@
     /**
      * {@inheritDoc}
      */
-    public void debug(final String parameterizedMsg,
-                      final Object param1,
-                      final Object param2) {
+    public void debug(final String parameterizedMsg, final Object param1, final Object param2) {
         // NOP
     }
 
@@ -141,9 +136,7 @@
      * @param message message
      * @param t       throwable
      */
-    private void log(final String level,
-                     final String message,
-                     final Throwable t) {
+    private void log(final String level, final String message, final Throwable t) {
         StringBuilder buf = new StringBuilder();
 
         long millis = System.currentTimeMillis();
@@ -167,7 +160,6 @@
         if (t != null) {
             logger.error(t);
         }
-
     }
 
     /**
@@ -178,10 +170,8 @@
      * @param param1           param1
      * @param param2           param2
      */
-    private void parameterizedLog(final String level,
-                                  final Object parameterizedMsg,
-                                  final Object param1,
-                                  final Object param2) {
+    private void parameterizedLog(
+            final String level, final Object parameterizedMsg, final Object param1, final Object param2) {
         if (parameterizedMsg instanceof String) {
             String msgStr = (String) parameterizedMsg;
             msgStr = MessageFormatter.format(msgStr, param1, param2);
@@ -207,7 +197,6 @@
         log(INFO_STR, msg.toString(), null);
     }
 
-
     /**
      * {@inheritDoc}
      */
@@ -218,9 +207,7 @@
     /**
      * {@inheritDoc}
      */
-    public void info(final String parameterizedMsg,
-                     final Object param1,
-                     final Object param2) {
+    public void info(final String parameterizedMsg, final Object param1, final Object param2) {
         parameterizedLog(INFO_STR, parameterizedMsg, param1, param2);
     }
 
@@ -255,9 +242,7 @@
     /**
      * {@inheritDoc}
      */
-    public void warn(final String parameterizedMsg,
-                     final Object param1,
-                     final Object param2) {
+    public void warn(final String parameterizedMsg, final Object param1, final Object param2) {
         parameterizedLog(WARN_STR, parameterizedMsg, param1, param2);
     }
 
@@ -282,7 +267,6 @@
         log(ERROR_STR, msg.toString(), null);
     }
 
-
     /**
      * {@inheritDoc}
      */
@@ -293,9 +277,7 @@
     /**
      * {@inheritDoc}
      */
-    public void error(final String parameterizedMsg,
-                      final Object param1,
-                      final Object param2) {
+    public void error(final String parameterizedMsg, final Object param1, final Object param2) {
         parameterizedLog(ERROR_STR, parameterizedMsg, param1, param2);
     }
 
@@ -305,5 +287,4 @@
     public void error(final Object msg, final Throwable t) {
         log(ERROR_STR, msg.toString(), t);
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
index 9f0f5f3..a287497 100644
--- a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
+++ b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,19 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.varia;
 
-import java.nio.charset.StandardCharsets;
-
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.ExpressionRule;
-import org.apache.log4j.rule.Rule;
-
 import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.util.*;
@@ -34,11 +28,14 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
 import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.ExpressionRule;
+import org.apache.log4j.rule.Rule;
 import org.apache.logging.log4j.LogManager;
 
 /**
@@ -151,12 +148,12 @@
 
     private static final String DEFAULT_HOST = "file";
 
-    //all lines other than first line of exception begin with tab followed by 'at' followed by text
+    // all lines other than first line of exception begin with tab followed by 'at' followed by text
     private static final String EXCEPTION_PATTERN = "^\\s+at.*";
     private static final String REGEXP_DEFAULT_WILDCARD = ".*?";
     private static final String REGEXP_GREEDY_WILDCARD = ".*";
     private static final String PATTERN_WILDCARD = "*";
-    //pull in optional leading and trailing spaces
+    // pull in optional leading and trailing spaces
     private static final String NOSPACE_GROUP = "(\\s*?\\S*?\\s*?)";
     private static final String DEFAULT_GROUP = "(" + REGEXP_DEFAULT_WILDCARD + ")";
     private static final String GREEDY_GROUP = "(" + REGEXP_GREEDY_WILDCARD + ")";
@@ -164,7 +161,7 @@
     private static final String NEWLINE_REGEXP = "\n";
     private final String newLine = System.getProperty("line.separator");
 
-    private final String[] emptyException = new String[]{""};
+    private final String[] emptyException = new String[] {""};
 
     private SimpleDateFormat dateFormat;
     private String timestampFormat;
@@ -175,7 +172,7 @@
     private String path;
     private boolean tailing;
     private String filterExpression;
-    private long waitMillis = 2000; //default 2 seconds
+    private long waitMillis = 2000; // default 2 seconds
     private String group;
 
     private static final String VALID_DATEFORMAT_CHARS = "GyYMwWDdFEuaHkKhmsSzZX";
@@ -198,7 +195,7 @@
     private boolean appendNonMatches;
     private final Map<String, Level> customLevelDefinitionMap = new HashMap<>();
 
-    //default to one line - this number is incremented for each (NL) found in the logFormat
+    // default to one line - this number is incremented for each (NL) found in the logFormat
     private int lineCount = 1;
 
     protected boolean active = false;
@@ -221,7 +218,7 @@
         try {
             exceptionPattern = Pattern.compile(EXCEPTION_PATTERN);
         } catch (PatternSyntaxException pse) {
-            //shouldn't happen
+            // shouldn't happen
         }
     }
 
@@ -357,7 +354,6 @@
         this.group = group;
     }
 
-
     /**
      * Accessor
      *
@@ -495,14 +491,13 @@
             additionalLines.clear();
             return null;
         }
-        //the current map contains fields - build an event
+        // the current map contains fields - build an event
         int exceptionLine = getExceptionLine();
         String[] exception = buildException(exceptionLine);
 
-        //messages are listed before exceptions in additionallines
+        // messages are listed before exceptions in additionallines
         if (!additionalLines.isEmpty() && exception.length > 0) {
-            currentMap.put(MESSAGE, buildMessage(currentMap.get(MESSAGE),
-                exceptionLine));
+            currentMap.put(MESSAGE, buildMessage(currentMap.get(MESSAGE), exceptionLine));
         }
         ChainsawLoggingEvent event = convertToEvent(currentMap, exception);
         currentMap.clear();
@@ -522,10 +517,10 @@
         Matcher eventMatcher;
         Matcher exceptionMatcher;
         String readLine;
-        //if newlines are provided in the logFormat - (NL) - combine the lines prior to matching
+        // if newlines are provided in the logFormat - (NL) - combine the lines prior to matching
         while ((readLine = bufferedReader.readLine()) != null) {
             StringBuilder line = new StringBuilder(readLine);
-            //there is already one line (read above, start i at 1
+            // there is already one line (read above, start i at 1
             for (int i = 1; i < lineCount; i++) {
                 String thisLine = bufferedReader.readLine();
                 if (thisLine != null) {
@@ -534,13 +529,13 @@
             }
             String input = line.toString();
             eventMatcher = regexpPattern.matcher(input);
-            //skip empty line entries
+            // skip empty line entries
             if (input.trim().isEmpty()) {
                 continue;
             }
             exceptionMatcher = exceptionPattern.matcher(input);
             if (eventMatcher.matches()) {
-                //build an event from the previous match (held in current map)
+                // build an event from the previous match (held in current map)
                 ChainsawLoggingEvent event = buildEvent();
                 if (event != null) {
                     if (passesExpression(event)) {
@@ -549,17 +544,20 @@
                 }
                 currentMap.putAll(processEvent(eventMatcher.toMatchResult()));
             } else if (exceptionMatcher.matches()) {
-                //an exception line
+                // an exception line
                 additionalLines.add(input);
             } else {
-                //neither...either post an event with the line or append as additional lines
-                //if this was a logging event with multiple lines, each line will show up as its own event instead of being
-                //appended as multiple lines on the same event..
-                //choice is to have each non-matching line show up as its own line, or append them all to a previous event
+                // neither...either post an event with the line or append as additional lines
+                // if this was a logging event with multiple lines, each line will show up as its own event instead of
+                // being
+                // appended as multiple lines on the same event..
+                // choice is to have each non-matching line show up as its own line, or append them all to a previous
+                // event
                 if (appendNonMatches) {
-                    //hold on to the previous time, so we can do our best to preserve time-based ordering if the event is a non-match
+                    // hold on to the previous time, so we can do our best to preserve time-based ordering if the event
+                    // is a non-match
                     String lastTime = (String) currentMap.get(TIMESTAMP);
-                    //build an event from the previous match (held in current map)
+                    // build an event from the previous match (held in current map)
                     if (currentMap.size() > 0) {
                         ChainsawLoggingEvent event = buildEvent();
                         if (event != null) {
@@ -578,7 +576,7 @@
             }
         }
 
-        //process last event if one exists
+        // process last event if one exists
         ChainsawLoggingEvent event = buildEvent();
         if (event != null) {
             if (passesExpression(event)) {
@@ -600,7 +598,7 @@
     private boolean passesExpression(ChainsawLoggingEvent event) {
         if (event != null) {
             if (expressionRule != null) {
-//                return (expressionRule.evaluate(event, null));
+                //                return (expressionRule.evaluate(event, null));
             }
         }
         return true;
@@ -617,7 +615,7 @@
      */
     private Map<String, String> processEvent(MatchResult result) {
         Map<String, String> map = new HashMap<>();
-        //group zero is the entire match - process all other groups
+        // group zero is the entire match - process all other groups
         for (int i = 1; i < result.groupCount() + 1; i++) {
             String key = matchingKeywords.get(i - 1);
             String value = result.group(i);
@@ -632,13 +630,13 @@
      * @return string
      */
     private String convertTimestamp() {
-        //some locales (for example, French) generate timestamp text with characters not included in \w -
+        // some locales (for example, French) generate timestamp text with characters not included in \w -
         // now using \S (all non-whitespace characters) instead of /w
         String result = "";
         if (timestampFormat != null) {
             result = timestampFormat.replaceAll(Pattern.quote("+"), "[+]");
             result = result.replaceAll(VALID_DATEFORMAT_CHAR_PATTERN, "\\\\S+");
-            //make sure dots in timestamp are escaped
+            // make sure dots in timestamp are escaped
             result = result.replaceAll(Pattern.quote("."), "\\\\.");
         }
         return result;
@@ -685,7 +683,7 @@
             dateFormat = new SimpleDateFormat(quoteTimeStampChars(timestampFormat));
             timestampPatternText = convertTimestamp();
         }
-        //if custom level definitions exist, parse them
+        // if custom level definitions exist, parse them
         updateCustomLevelDefinitionMap();
         try {
             if (filterExpression != null) {
@@ -699,20 +697,21 @@
 
         String newPattern = logFormat;
 
-        //process newlines - (NL) - in the logFormat - before processing properties
+        // process newlines - (NL) - in the logFormat - before processing properties
         int index = 0;
         while (index > -1) {
             index = newPattern.indexOf(NEWLINE);
             if (index > -1) {
-                //keep track of number of expected newlines in the format, so the lines can be concatenated prior to matching
+                // keep track of number of expected newlines in the format, so the lines can be concatenated prior to
+                // matching
                 lineCount++;
                 newPattern = singleReplace(newPattern, NEWLINE, NEWLINE_REGEXP);
             }
         }
 
         String current = newPattern;
-        //build a list of property names and temporarily replace the property with an empty string,
-        //we'll rebuild the pattern later
+        // build a list of property names and temporarily replace the property with an empty string,
+        // we'll rebuild the pattern later
         List<String> propertyNames = new ArrayList<>();
         index = 0;
         while (index > -1) {
@@ -725,7 +724,7 @@
                 current = current.substring(longPropertyName.length() + 1 + index);
                 newPattern = singleReplace(newPattern, longPropertyName, Integer.toString(buildingKeywords.size() - 1));
             } else {
-                //no properties
+                // no properties
                 index = -1;
             }
         }
@@ -757,12 +756,12 @@
                 if (isInteger(stringInt)) {
                     matchingKeywords.add(buildingKeywords.get(Integer.parseInt(stringInt)));
                 }
-                //reset
+                // reset
                 buildingInt.setLength(0);
             }
         }
 
-        //if the very last value is an int, make sure to add it
+        // if the very last value is an int, make sure to add it
         String stringInt = buildingInt.toString();
         if (isInteger(stringInt)) {
             matchingKeywords.add(buildingKeywords.get(Integer.parseInt(stringInt)));
@@ -770,14 +769,14 @@
 
         newPattern = replaceMetaChars(newPattern);
 
-        //compress one or more spaces in the pattern into the [ ]+ regexp
-        //(supports padding of level in log files)
+        // compress one or more spaces in the pattern into the [ ]+ regexp
+        // (supports padding of level in log files)
         newPattern = newPattern.replaceAll(MULTIPLE_SPACES_REGEXP, MULTIPLE_SPACES_REGEXP);
         newPattern = newPattern.replaceAll(Pattern.quote(PATTERN_WILDCARD), REGEXP_DEFAULT_WILDCARD);
-        //use buildingKeywords here to ensure correct order
+        // use buildingKeywords here to ensure correct order
         for (int i = 0; i < buildingKeywords.size(); i++) {
             String keyword = buildingKeywords.get(i);
-            //make the final keyword greedy (we're assuming it's the message)
+            // 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);
             } else if (TIMESTAMP.equals(keyword)) {
@@ -815,25 +814,25 @@
     }
 
     private String quoteTimeStampChars(String input) {
-        //put single quotes around text that isn't a supported dateformat char
+        // put single quotes around text that isn't a supported dateformat char
         StringBuilder result = new StringBuilder();
-        //ok to default to false because we also check for index zero below
+        // ok to default to false because we also check for index zero below
         boolean lastCharIsDateFormat = false;
         for (int i = 0; i < input.length(); i++) {
             String thisVal = input.substring(i, i + 1);
             boolean thisCharIsDateFormat = VALID_DATEFORMAT_CHARS.contains(thisVal);
-            //we have encountered a non-dateformat char
+            // we have encountered a non-dateformat char
             if (!thisCharIsDateFormat && (i == 0 || lastCharIsDateFormat)) {
                 result.append("'");
             }
-            //we have encountered a dateformat char after previously encountering a non-dateformat char
+            // we have encountered a dateformat char after previously encountering a non-dateformat char
             if (thisCharIsDateFormat && i > 0 && !lastCharIsDateFormat) {
                 result.append("'");
             }
             lastCharIsDateFormat = thisCharIsDateFormat;
             result.append(thisVal);
         }
-        //append an end single-quote if we ended with non-dateformat char
+        // append an end single-quote if we ended with non-dateformat char
         if (!lastCharIsDateFormat) {
             result.append("'");
         }
@@ -871,10 +870,10 @@
      * @return string
      */
     private String replaceMetaChars(String input) {
-        //escape backslash first since that character is used to escape the remaining meta chars
+        // escape backslash first since that character is used to escape the remaining meta chars
         input = input.replaceAll("\\\\", "\\\\\\");
 
-        //don't escape star - it's used as the wildcard
+        // don't escape star - it's used as the wildcard
         input = input.replaceAll(Pattern.quote("]"), "\\\\]");
         input = input.replaceAll(Pattern.quote("["), "\\\\[");
         input = input.replaceAll(Pattern.quote("^"), "\\\\^");
@@ -904,7 +903,7 @@
             return null;
         }
 
-        //a logger must exist at a minimum for the event to be processed
+        // a logger must exist at a minimum for the event to be processed
         if (!fieldMap.containsKey(LOGGER)) {
             fieldMap.put(LOGGER, "Unknown");
         }
@@ -928,13 +927,12 @@
 
         if ((dateFormat != null) && fieldMap.containsKey(TIMESTAMP)) {
             try {
-                timeStamp = dateFormat.parse(fieldMap.remove(TIMESTAMP))
-                    .getTime();
+                timeStamp = dateFormat.parse(fieldMap.remove(TIMESTAMP)).getTime();
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }
-        //use current time if timestamp not parseable/dateformat not specified
+        // use current time if timestamp not parseable/dateformat not specified
         if (timeStamp == 0L) {
             timeStamp = System.currentTimeMillis();
         }
@@ -949,7 +947,7 @@
         if (level == null) {
             levelImpl = Level.DEBUG;
         } else {
-            //first try to resolve against custom level definition map, then fall back to regular levels
+            // first try to resolve against custom level definition map, then fall back to regular levels
             levelImpl = customLevelDefinitionMap.get(level);
             if (levelImpl == null) {
                 levelImpl = Level.valueOf(level.trim());
@@ -976,15 +974,13 @@
             properties.put(Constants.GROUP_KEY, group);
         }
 
-        //all remaining entries in fieldmap are properties
+        // all remaining entries in fieldmap are properties
         properties.putAll(fieldMap);
 
         LocationInfo info = null;
 
-        if ((eventFileName != null) || (className != null) || (methodName != null)
-            || (lineNumber != null)) {
-            info = new LocationInfo(eventFileName, className, methodName,
-                    Integer.parseInt(lineNumber));
+        if ((eventFileName != null) || (className != null) || (methodName != null) || (lineNumber != null)) {
+            info = new LocationInfo(eventFileName, className, methodName, Integer.parseInt(lineNumber));
         }
 
         build.clear();
@@ -1000,21 +996,23 @@
         return build.create();
     }
 
-//  public static void main(String[] args) {
-//    org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
-//    org.apache.log4j.ConsoleAppender appender = new org.apache.log4j.ConsoleAppender(new org.apache.log4j.SimpleLayout());
-//    appender.setName("console");
-//    rootLogger.addAppender(appender);
-//    LogFilePatternReceiver test = new LogFilePatternReceiver();
-//    org.apache.log4j.spi.LoggerRepository repo = new org.apache.log4j.LoggerRepositoryExImpl(org.apache.log4j.LogManager.getLoggerRepository());
-//    test.setLoggerRepository(repo);
-//    test.setLogFormat("PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE");
-//    test.setTailing(false);
-//    test.setAppendNonMatches(true);
-//    test.setTimestampFormat("yyyy-MM-d HH:mm:ss,SSS");
-//    test.setFileURL("file:///C:/log/test.log");
-//    test.activateOptions();
-//  }
+    //  public static void main(String[] args) {
+    //    org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
+    //    org.apache.log4j.ConsoleAppender appender = new org.apache.log4j.ConsoleAppender(new
+    // org.apache.log4j.SimpleLayout());
+    //    appender.setName("console");
+    //    rootLogger.addAppender(appender);
+    //    LogFilePatternReceiver test = new LogFilePatternReceiver();
+    //    org.apache.log4j.spi.LoggerRepository repo = new
+    // org.apache.log4j.LoggerRepositoryExImpl(org.apache.log4j.LogManager.getLoggerRepository());
+    //    test.setLoggerRepository(repo);
+    //    test.setLogFormat("PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE");
+    //    test.setTailing(false);
+    //    test.setAppendNonMatches(true);
+    //    test.setTimestampFormat("yyyy-MM-d HH:mm:ss,SSS");
+    //    test.setFileURL("file:///C:/log/test.log");
+    //    test.activateOptions();
+    //  }
 
     /**
      * Close the reader.
@@ -1078,7 +1076,7 @@
                     } while (tailing);
 
                 } catch (IOException ioe) {
-                    //io exception - probably shut down
+                    // io exception - probably shut down
                     logger.info("stream closed");
                 }
                 logger.debug("processing " + path + " complete");
diff --git a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverBeanInfo.java b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverBeanInfo.java
index 01e28c6..7a28c6d 100644
--- a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverBeanInfo.java
+++ b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverBeanInfo.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,13 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.varia;
 
 import java.beans.PropertyDescriptor;
 import java.beans.SimpleBeanInfo;
 
-
 /**
  * BeanInfo class for the meta-data of the LogFilePatternReceiver.
  */
@@ -30,15 +28,13 @@
      */
     public PropertyDescriptor[] getPropertyDescriptors() {
         try {
-            return new PropertyDescriptor[]{
+            return new PropertyDescriptor[] {
                 new PropertyDescriptor("fileURL", LogFilePatternReceiver.class),
-                new PropertyDescriptor(
-                    "timestampFormat", LogFilePatternReceiver.class),
+                new PropertyDescriptor("timestampFormat", LogFilePatternReceiver.class),
                 new PropertyDescriptor("logFormat", LogFilePatternReceiver.class),
                 new PropertyDescriptor("name", LogFilePatternReceiver.class),
                 new PropertyDescriptor("tailing", LogFilePatternReceiver.class),
-                new PropertyDescriptor(
-                    "filterExpression", LogFilePatternReceiver.class),
+                new PropertyDescriptor("filterExpression", LogFilePatternReceiver.class),
                 new PropertyDescriptor("waitMillis", LogFilePatternReceiver.class),
                 new PropertyDescriptor("appendNonMatches", LogFilePatternReceiver.class),
                 new PropertyDescriptor("customLevelDefinitions", LogFilePatternReceiver.class),
diff --git a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverFactory.java b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverFactory.java
index fd51599..d1bd843 100644
--- a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverFactory.java
+++ b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiverFactory.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -33,7 +33,7 @@
 
     @Override
     public PropertyDescriptor[] getPropertyDescriptors() throws IntrospectionException {
-        return new PropertyDescriptor[]{
+        return new PropertyDescriptor[] {
             new PropertyDescriptor("name", LogFilePatternReceiver.class),
             new PropertyDescriptor("fileURL", LogFilePatternReceiver.class),
             new PropertyDescriptor("appendNonMatches", LogFilePatternReceiver.class),
@@ -53,91 +53,91 @@
 
     @Override
     public String getReceiverDocumentation() {
-        return "<html>LogFilePatternReceiver can parse and tail log files, converting entries into\n" +
-"LoggingEvents.  If the file doesn't exist when the receiver is initialized, the\n" +
-"receiver will look for the file once every 10 seconds.\n" +
-"<p>\n" +
-"This receiver relies on java.util.regex features to perform the parsing of text in the\n" +
-"log file, however the only regular expression field explicitly supported is\n" +
-" * a glob-style wildcard used to ignore fields in the log file if needed.  All other\n" +
-"fields are parsed by using the supplied keywords.\n" +
-"<p>\n" +
-"<b>Features:</b><br>\n" +
-"- specify the URL of the log file to be processed<br>\n" +
-"- specify the timestamp format in the file (if one exists, using patterns from {@link java.text.SimpleDateFormat})<br>\n" +
-"- specify the pattern (logFormat) used in the log file using keywords, a wildcard character (*) and fixed text<br>\n" +
-"- 'tail' the file (allows the contents of the file to be continually read and new events processed)<br>\n" +
-"- supports the parsing of multi-line messages and exceptions\n" +
-"- 'hostname' property set to URL host (or 'file' if not available)\n" +
-"- 'application' property set to URL path (or value of fileURL if not available)\n" +
-"- 'group' property can be set to associate multiple log file receivers\n" +
-"<p>\n" +
-"<b>Keywords:</b><br>\n" +
-"TIMESTAMP<br>\n" +
-"LOGGER<br>\n" +
-"LEVEL<br>\n" +
-"THREAD<br>\n" +
-"CLASS<br>\n" +
-"FILE<br>\n" +
-"LINE<br>\n" +
-"METHOD<br>\n" +
-"RELATIVETIME<br>\n" +
-"MESSAGE<br>\n" +
-"NDC<br>\n" +
-"PROP(key)<br>\n" +
-"(NL)<br>\n" +
-"<p>\n" +
-"(NL) represents a new line embedded in the log format, supporting log formats whose fields span multiple lines\n" +
-"<p>\n" +
-"Use a * to ignore portions of the log format that should be ignored\n" +
-"<p>\n" +
-"Example:<br>\n" +
-"If your file's patternlayout is this:<br>\n" +
-"<b>%d %-5p [%t] %C{2} (%F:%L) - %m%n</b>\n" +
-"<p>\n" +
-"specify this as the log format:<br>\n" +
-"<b>TIMESTAMP LEVEL [THREAD] CLASS (FILE:LINE) - MESSAGE</b>\n" +
-"<p>\n" +
-"To define a PROPERTY field, use PROP(key)\n" +
-"<p>\n" +
-"Example:<br>\n" +
-"If you used the RELATIVETIME pattern layout character in the file,\n" +
-"you can use PROP(RELATIVETIME) in the logFormat definition to assign\n" +
-"the RELATIVETIME field as a property on the event.\n" +
-"<p>\n" +
-"If your file's patternlayout is this:<br>\n" +
-"<b>%r [%t] %-5p %c %x - %m%n</b>\n" +
-"<p>\n" +
-"specify this as the log format:<br>\n" +
-"<b>PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE</b>\n" +
-"<p>\n" +
-"Note the * - it can be used to ignore a single word or sequence of words in the log file\n" +
-"(in order for the wildcard to ignore a sequence of words, the text being ignored must be\n" +
-"followed by some delimiter, like '-' or '[') - ndc is being ignored in the following example.\n" +
-"<p>\n" +
-"Assign a filterExpression in order to only process events which match a filter.\n" +
-"If a filterExpression is not assigned, all events are processed.\n" +
-"<p>\n" +
-"<b>Limitations:</b><br>\n" +
-"- no support for the single-line version of throwable supported by patternlayout<br>\n" +
-"(this version of throwable will be included as the last line of the message)<br>\n" +
-"- the relativetime patternLayout character must be set as a property: PROP(RELATIVETIME)<br>\n" +
-"- messages should appear as the last field of the logFormat because the variability in message content<br>\n" +
-"- exceptions are converted if the exception stack trace (other than the first line of the exception)<br>\n" +
-"is stored in the log file with a tab followed by the word 'at' as the first characters in the line<br>\n" +
-"- tailing may fail if the file rolls over.\n" +
-"<p>\n" +
-"<b>Example receiver configuration settings</b> (add these as params, specifying a LogFilePatternReceiver 'plugin'):<br>\n" +
-"param: \"timestampFormat\" value=\"yyyy-MM-d HH:mm:ss,SSS\"<br>\n" +
-"param: \"logFormat\" value=\"PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE\"<br>\n" +
-"param: \"fileURL\" value=\"file:///c:/events.log\"<br>\n" +
-"param: \"tailing\" value=\"true\"\n" +
-"<p>\n" +
-"This configuration will be able to process these sample events:<br>\n" +
-"710    [       Thread-0] DEBUG                   first.logger first - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n" +
-"880    [       Thread-2] DEBUG                   first.logger third - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n" +
-"880    [       Thread-0] INFO                    first.logger first - infomsg-0<br>\n" +
-"java.lang.Exception: someexception-first<br>\n" +
-"at Generator2.run(Generator2.java:102)<br>";
+        return "<html>LogFilePatternReceiver can parse and tail log files, converting entries into\n"
+                + "LoggingEvents.  If the file doesn't exist when the receiver is initialized, the\n"
+                + "receiver will look for the file once every 10 seconds.\n"
+                + "<p>\n"
+                + "This receiver relies on java.util.regex features to perform the parsing of text in the\n"
+                + "log file, however the only regular expression field explicitly supported is\n"
+                + " * a glob-style wildcard used to ignore fields in the log file if needed.  All other\n"
+                + "fields are parsed by using the supplied keywords.\n"
+                + "<p>\n"
+                + "<b>Features:</b><br>\n"
+                + "- specify the URL of the log file to be processed<br>\n"
+                + "- specify the timestamp format in the file (if one exists, using patterns from {@link java.text.SimpleDateFormat})<br>\n"
+                + "- specify the pattern (logFormat) used in the log file using keywords, a wildcard character (*) and fixed text<br>\n"
+                + "- 'tail' the file (allows the contents of the file to be continually read and new events processed)<br>\n"
+                + "- supports the parsing of multi-line messages and exceptions\n"
+                + "- 'hostname' property set to URL host (or 'file' if not available)\n"
+                + "- 'application' property set to URL path (or value of fileURL if not available)\n"
+                + "- 'group' property can be set to associate multiple log file receivers\n"
+                + "<p>\n"
+                + "<b>Keywords:</b><br>\n"
+                + "TIMESTAMP<br>\n"
+                + "LOGGER<br>\n"
+                + "LEVEL<br>\n"
+                + "THREAD<br>\n"
+                + "CLASS<br>\n"
+                + "FILE<br>\n"
+                + "LINE<br>\n"
+                + "METHOD<br>\n"
+                + "RELATIVETIME<br>\n"
+                + "MESSAGE<br>\n"
+                + "NDC<br>\n"
+                + "PROP(key)<br>\n"
+                + "(NL)<br>\n"
+                + "<p>\n"
+                + "(NL) represents a new line embedded in the log format, supporting log formats whose fields span multiple lines\n"
+                + "<p>\n"
+                + "Use a * to ignore portions of the log format that should be ignored\n"
+                + "<p>\n"
+                + "Example:<br>\n"
+                + "If your file's patternlayout is this:<br>\n"
+                + "<b>%d %-5p [%t] %C{2} (%F:%L) - %m%n</b>\n"
+                + "<p>\n"
+                + "specify this as the log format:<br>\n"
+                + "<b>TIMESTAMP LEVEL [THREAD] CLASS (FILE:LINE) - MESSAGE</b>\n"
+                + "<p>\n"
+                + "To define a PROPERTY field, use PROP(key)\n"
+                + "<p>\n"
+                + "Example:<br>\n"
+                + "If you used the RELATIVETIME pattern layout character in the file,\n"
+                + "you can use PROP(RELATIVETIME) in the logFormat definition to assign\n"
+                + "the RELATIVETIME field as a property on the event.\n"
+                + "<p>\n"
+                + "If your file's patternlayout is this:<br>\n"
+                + "<b>%r [%t] %-5p %c %x - %m%n</b>\n"
+                + "<p>\n"
+                + "specify this as the log format:<br>\n"
+                + "<b>PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE</b>\n"
+                + "<p>\n"
+                + "Note the * - it can be used to ignore a single word or sequence of words in the log file\n"
+                + "(in order for the wildcard to ignore a sequence of words, the text being ignored must be\n"
+                + "followed by some delimiter, like '-' or '[') - ndc is being ignored in the following example.\n"
+                + "<p>\n"
+                + "Assign a filterExpression in order to only process events which match a filter.\n"
+                + "If a filterExpression is not assigned, all events are processed.\n"
+                + "<p>\n"
+                + "<b>Limitations:</b><br>\n"
+                + "- no support for the single-line version of throwable supported by patternlayout<br>\n"
+                + "(this version of throwable will be included as the last line of the message)<br>\n"
+                + "- the relativetime patternLayout character must be set as a property: PROP(RELATIVETIME)<br>\n"
+                + "- messages should appear as the last field of the logFormat because the variability in message content<br>\n"
+                + "- exceptions are converted if the exception stack trace (other than the first line of the exception)<br>\n"
+                + "is stored in the log file with a tab followed by the word 'at' as the first characters in the line<br>\n"
+                + "- tailing may fail if the file rolls over.\n"
+                + "<p>\n"
+                + "<b>Example receiver configuration settings</b> (add these as params, specifying a LogFilePatternReceiver 'plugin'):<br>\n"
+                + "param: \"timestampFormat\" value=\"yyyy-MM-d HH:mm:ss,SSS\"<br>\n"
+                + "param: \"logFormat\" value=\"PROP(RELATIVETIME) [THREAD] LEVEL LOGGER * - MESSAGE\"<br>\n"
+                + "param: \"fileURL\" value=\"file:///c:/events.log\"<br>\n"
+                + "param: \"tailing\" value=\"true\"\n"
+                + "<p>\n"
+                + "This configuration will be able to process these sample events:<br>\n"
+                + "710    [       Thread-0] DEBUG                   first.logger first - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n"
+                + "880    [       Thread-2] DEBUG                   first.logger third - &lt;test&gt;   &lt;test2&gt;something here&lt;/test2&gt;   &lt;test3 blah=something/&gt;   &lt;test4&gt;       &lt;test5&gt;something else&lt;/test5&gt;   &lt;/test4&gt;&lt;/test&gt;<br>\n"
+                + "880    [       Thread-0] INFO                    first.logger first - infomsg-0<br>\n"
+                + "java.lang.Exception: someexception-first<br>\n"
+                + "at Generator2.run(Generator2.java:102)<br>";
     }
 }
diff --git a/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java b/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
index 455ca1d..dfcd95d 100644
--- a/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
+++ b/src/main/java/org/apache/log4j/xml/Log4jEntityResolver.java
@@ -2,52 +2,50 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.xml;
 
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-
-import java.io.InputStream;
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
 
 /**
  * An {@link EntityResolver} specifically designed to return
  * <code>log4j.dtd</code> which is embedded within the log4j jar
- * file. 
+ * file.
  *
  * @author Paul Austin
  * */
 public class Log4jEntityResolver implements EntityResolver {
-  private static final String PUBLIC_ID = "-//APACHE//DTD LOG4J 1.2//EN";
-  private static final Logger logger = LogManager.getLogger();
+    private static final String PUBLIC_ID = "-//APACHE//DTD LOG4J 1.2//EN";
+    private static final Logger logger = LogManager.getLogger();
 
-  public InputSource resolveEntity (String publicId, String systemId) {
-    if (systemId.endsWith("log4j.dtd")  || PUBLIC_ID.equals(publicId)) {
-      Class clazz = getClass();
-      InputStream in = clazz.getResourceAsStream("/org/apache/log4j/xml/log4j.dtd");
-      if (in == null) {
-	    logger.warn("Could not find [log4j.dtd] using [" + clazz.getClassLoader()
-		     + "] class loader, parsed without DTD.");
-        in = new ByteArrayInputStream(new byte[0]);
-      }
-	  return new InputSource(in);
-    } else {
-      return null;
+    public InputSource resolveEntity(String publicId, String systemId) {
+        if (systemId.endsWith("log4j.dtd") || PUBLIC_ID.equals(publicId)) {
+            Class clazz = getClass();
+            InputStream in = clazz.getResourceAsStream("/org/apache/log4j/xml/log4j.dtd");
+            if (in == null) {
+                logger.warn("Could not find [log4j.dtd] using [" + clazz.getClassLoader()
+                        + "] class loader, parsed without DTD.");
+                in = new ByteArrayInputStream(new byte[0]);
+            }
+            return new InputSource(in);
+        } else {
+            return null;
+        }
     }
-  }
 }
diff --git a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
index ccff7e1..d1a70db 100644
--- a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
+++ b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,21 +14,19 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.xml;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.ExpressionRule;
-import org.apache.log4j.rule.Rule;
-import org.apache.log4j.spi.Decoder;
-
 import java.io.*;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Collection;
-import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
+import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton;
+import org.apache.log4j.helpers.Constants;
+import org.apache.log4j.rule.ExpressionRule;
+import org.apache.log4j.rule.Rule;
+import org.apache.log4j.spi.Decoder;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -57,7 +55,6 @@
  * @author Scott Deboy &lt;sdeboy@apache.org&gt;
  * @since 1.3
  */
-
 public class LogFileXMLReceiver extends ChainsawReceiverSkeleton {
     private String fileURL;
     private Rule expressionRule;
@@ -298,8 +295,6 @@
             Thread thread = new Thread(runnable, "LogFileXMLReceiver-" + getName());
 
             thread.start();
-
         }
     }
-
 }
diff --git a/src/main/java/org/apache/log4j/xml/UtilLoggingEntityResolver.java b/src/main/java/org/apache/log4j/xml/UtilLoggingEntityResolver.java
index 84b5632..a0fc5c1 100644
--- a/src/main/java/org/apache/log4j/xml/UtilLoggingEntityResolver.java
+++ b/src/main/java/org/apache/log4j/xml/UtilLoggingEntityResolver.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,15 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.xml;
 
+import java.io.ByteArrayInputStream;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 
-import java.io.ByteArrayInputStream;
-
-
 /**
  * An {@link EntityResolver} specifically designed to return
  * an empty InputSource for logger.dtd.
@@ -36,12 +33,10 @@
         super();
     }
 
-
     /**
      * {@inheritDoc}
      */
-    public InputSource resolveEntity(final String publicId,
-                                     final String systemId) {
+    public InputSource resolveEntity(final String publicId, final String systemId) {
         if (systemId.endsWith("logger.dtd")) {
             return new InputSource(new ByteArrayInputStream(new byte[0]));
         } else {
diff --git a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
index 4715979..c45d855 100644
--- a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,31 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.xml;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.spi.Decoder;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import javax.swing.*;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
 import java.awt.*;
 import java.io.*;
 import java.net.URL;
 import java.time.Instant;
 import java.util.*;
 import java.util.zip.ZipInputStream;
+import javax.swing.*;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
-
+import org.apache.log4j.spi.Decoder;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
 
 /**
  * Decodes JDK 1.4's java.util.logging package events
@@ -48,13 +45,12 @@
  * @author Paul Smith (psmith@apache.org)
  */
 public class UtilLoggingXMLDecoder implements Decoder {
-    //NOTE: xml section is only handed on first delivery of events
-    //on this first delivery of events, there is no end tag for the log element
+    // NOTE: xml section is only handed on first delivery of events
+    // on this first delivery of events, there is no end tag for the log element
     /**
      * Document prolog.
      */
-    private static final String BEGIN_PART =
-        "<log>";
+    private static final String BEGIN_PART = "<log>";
     /**
      * Document close.
      */
@@ -148,8 +144,7 @@
                 buf.append(END_PART);
             }
 
-            InputSource inputSource =
-                new InputSource(new StringReader(buf.toString()));
+            InputSource inputSource = new InputSource(new StringReader(buf.toString()));
             document = docBuilder.parse(inputSource);
         } catch (Exception e) {
             e.printStackTrace();
@@ -172,16 +167,14 @@
         InputStream inputStream;
         if (isZipFile) {
             inputStream = new ZipInputStream(url.openStream());
-            //move stream to next entry so we can read it
+            // move stream to next entry so we can read it
             ((ZipInputStream) inputStream).getNextEntry();
         } else {
             inputStream = url.openStream();
         }
         if (owner != null) {
-            reader = new LineNumberReader(
-                new InputStreamReader(
-                    new ProgressMonitorInputStream(owner,
-                        "Loading " + url, inputStream), ENCODING));
+            reader = new LineNumberReader(new InputStreamReader(
+                    new ProgressMonitorInputStream(owner, "Loading " + url, inputStream), ENCODING));
         } else {
             reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
         }
@@ -230,23 +223,20 @@
 
             String newDoc;
             String newPartialEvent = null;
-            //separate the string into the last portion ending with </record>
+            // separate the string into the last portion ending with </record>
             // (which will be processed) and the partial event which
             // will be combined and processed in the next section
 
-            //if the document does not contain a record end,
+            // if the document does not contain a record end,
             // append it to the partial event string
             if (document.lastIndexOf(RECORD_END) == -1) {
                 partialEvent = partialEvent + document;
                 return null;
             }
 
-            if (document.lastIndexOf(RECORD_END) + RECORD_END.length()
-                < document.length()) {
-                newDoc = document.substring(0,
-                    document.lastIndexOf(RECORD_END) + RECORD_END.length());
-                newPartialEvent = document.substring(
-                    document.lastIndexOf(RECORD_END) + RECORD_END.length());
+            if (document.lastIndexOf(RECORD_END) + RECORD_END.length() < document.length()) {
+                newDoc = document.substring(0, document.lastIndexOf(RECORD_END) + RECORD_END.length());
+                newPartialEvent = document.substring(document.lastIndexOf(RECORD_END) + RECORD_END.length());
             } else {
                 newDoc = document;
             }
@@ -299,8 +289,7 @@
 
         NodeList eventList = document.getElementsByTagName("record");
 
-        for (int eventIndex = 0; eventIndex < eventList.getLength();
-             eventIndex++) {
+        for (int eventIndex = 0; eventIndex < eventList.getLength(); eventIndex++) {
             Node eventNode = eventList.item(eventIndex);
 
             String logger = null;
@@ -315,8 +304,8 @@
             String lineNumber = "0"; // TODO this is not working
             Hashtable properties = new Hashtable();
 
-            //format of date: 2003-05-04T11:04:52
-            //ignore date or set as a property? using millis in constructor instead
+            // format of date: 2003-05-04T11:04:52
+            // ignore date or set as a property? using millis in constructor instead
             NodeList list = eventNode.getChildNodes();
             int listLength = list.getLength();
 
@@ -399,20 +388,16 @@
             }
 
             LocationInfo info;
-            if ((fileName != null)
-                || (className != null)
-                || (methodName != null)
-                || (lineNumber != null)) {
-                info = new LocationInfo(fileName, className, methodName, 
-                        Integer.parseInt(lineNumber));
+            if ((fileName != null) || (className != null) || (methodName != null) || (lineNumber != null)) {
+                info = new LocationInfo(fileName, className, methodName, Integer.parseInt(lineNumber));
             } else {
                 info = null;
             }
 
-//            ThrowableInformation throwableInfo = null;
-//            if (exception != null) {
-//                throwableInfo = new ThrowableInformation(exception);
-//            }
+            //            ThrowableInformation throwableInfo = null;
+            //            if (exception != null) {
+            //                throwableInfo = new ThrowableInformation(exception);
+            //            }
 
             builder.clear();
             builder.setLogger(logger)
@@ -424,9 +409,7 @@
                     .setNDC(ndc)
                     .setLocationInfo(info);
 
-
             events.add(builder.create());
-
         }
         return events;
     }
@@ -444,9 +427,7 @@
         for (int x = 0; x < nl.getLength(); x++) {
             Node innerNode = nl.item(x);
 
-            if (
-                (innerNode.getNodeType() == Node.TEXT_NODE)
-                    || (innerNode.getNodeType() == Node.CDATA_SECTION_NODE)) {
+            if ((innerNode.getNodeType() == Node.TEXT_NODE) || (innerNode.getNodeType() == Node.CDATA_SECTION_NODE)) {
                 buf.append(innerNode.getNodeValue());
             }
         }
diff --git a/src/main/java/org/apache/log4j/xml/XMLDecoder.java b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
index 4b88018..518352e 100644
--- a/src/main/java/org/apache/log4j/xml/XMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -14,21 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.log4j.xml;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import org.apache.log4j.spi.Decoder;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import javax.swing.*;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
 import java.awt.*;
 import java.io.*;
 import java.net.URL;
@@ -38,11 +26,19 @@
 import java.util.Map;
 import java.util.Vector;
 import java.util.zip.ZipInputStream;
+import javax.swing.*;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder;
-import org.apache.log4j.chainsaw.logevents.Level;
 import org.apache.log4j.chainsaw.logevents.LocationInfo;
-
+import org.apache.log4j.spi.Decoder;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
 
 /**
  * Decodes Logging Events in XML formated into elements that are used by
@@ -68,8 +64,7 @@
     /**
      * Document prolog.
      */
-    private static final String BEGINPART =
-        "<?xml version=\"1.0\" encoding=\"" + ENCODING + "\" ?>"
+    private static final String BEGINPART = "<?xml version=\"1.0\" encoding=\"" + ENCODING + "\" ?>"
             + "<!DOCTYPE log4j:eventSet SYSTEM \"http://localhost/log4j.dtd\">"
             + "<log4j:eventSet version=\"1.2\" "
             + "xmlns:log4j=\"http://jakarta.apache.org/log4j/\">";
@@ -121,7 +116,7 @@
             dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
             dbf.setValidating(false);
             docBuilder = dbf.newDocumentBuilder();
-//            docBuilder.setErrorHandler(new SAXErrorHandler());
+            //            docBuilder.setErrorHandler(new SAXErrorHandler());
             docBuilder.setEntityResolver(new Log4jEntityResolver());
         } catch (ParserConfigurationException pce) {
             System.err.println("Unable to get document builder");
@@ -188,16 +183,14 @@
         InputStream inputStream;
         if (isZipFile) {
             inputStream = new ZipInputStream(url.openStream());
-            //move stream to next entry so we can read it
+            // move stream to next entry so we can read it
             ((ZipInputStream) inputStream).getNextEntry();
         } else {
             inputStream = url.openStream();
         }
         if (owner != null) {
-            reader = new LineNumberReader(
-                new InputStreamReader(
-                    new ProgressMonitorInputStream(owner,
-                        "Loading " + url, inputStream), ENCODING));
+            reader = new LineNumberReader(new InputStreamReader(
+                    new ProgressMonitorInputStream(owner, "Loading " + url, inputStream), ENCODING));
         } else {
             reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
         }
@@ -244,24 +237,21 @@
             }
             String newDoc;
             String newPartialEvent = null;
-            //separate the string into the last portion ending with
+            // separate the string into the last portion ending with
             // </log4j:event> (which will be processed) and the
             // partial event which will be combined and
             // processed in the next section
 
-            //if the document does not contain a record end,
+            // if the document does not contain a record end,
             // append it to the partial event string
             if (document.lastIndexOf(RECORD_END) == -1) {
                 partialEvent = partialEvent + document;
                 return null;
             }
 
-            if (document.lastIndexOf(RECORD_END)
-                + RECORD_END.length() < document.length()) {
-                newDoc = document.substring(0,
-                    document.lastIndexOf(RECORD_END) + RECORD_END.length());
-                newPartialEvent = document.substring(
-                    document.lastIndexOf(RECORD_END) + RECORD_END.length());
+            if (document.lastIndexOf(RECORD_END) + RECORD_END.length() < document.length()) {
+                newDoc = document.substring(0, document.lastIndexOf(RECORD_END) + RECORD_END.length());
+                newPartialEvent = document.substring(document.lastIndexOf(RECORD_END) + RECORD_END.length());
             } else {
                 newDoc = document;
             }
@@ -329,15 +319,15 @@
 
         NodeList eventList = eventSet.getChildNodes();
 
-        for (int eventIndex = 0; eventIndex < eventList.getLength();
-             eventIndex++) {
+        for (int eventIndex = 0; eventIndex < eventList.getLength(); eventIndex++) {
             Node eventNode = eventList.item(eventIndex);
-            //ignore carriage returns in xml
+            // ignore carriage returns in xml
             if (eventNode.getNodeType() != Node.ELEMENT_NODE) {
                 continue;
             }
             logger = eventNode.getAttributes().getNamedItem("logger").getNodeValue();
-            timeStamp = Long.parseLong(eventNode.getAttributes().getNamedItem("timestamp").getNodeValue());
+            timeStamp = Long.parseLong(
+                    eventNode.getAttributes().getNamedItem("timestamp").getNodeValue());
             level = eventNode.getAttributes().getNamedItem("level").getNodeValue();
             threadName = eventNode.getAttributes().getNamedItem("thread").getNodeValue();
 
@@ -358,7 +348,7 @@
                 if (tagName.equalsIgnoreCase("log4j:NDC")) {
                     ndc = getCData(list.item(y));
                 }
-                //still support receiving of MDC and convert to properties
+                // still support receiving of MDC and convert to properties
                 if (tagName.equalsIgnoreCase("log4j:MDC")) {
                     properties = new Hashtable();
                     NodeList propertyList = list.item(y).getChildNodes();
@@ -369,10 +359,12 @@
 
                         if (propertyTag.equalsIgnoreCase("log4j:data")) {
                             Node property = propertyList.item(i);
-                            String name =
-                                property.getAttributes().getNamedItem("name").getNodeValue();
-                            String value =
-                                property.getAttributes().getNamedItem("value").getNodeValue();
+                            String name = property.getAttributes()
+                                    .getNamedItem("name")
+                                    .getNodeValue();
+                            String value = property.getAttributes()
+                                    .getNamedItem("value")
+                                    .getNodeValue();
                             properties.put(name, value);
                         }
                     }
@@ -381,20 +373,18 @@
                 if (tagName.equalsIgnoreCase("log4j:throwable")) {
                     String exceptionString = getCData(list.item(y));
                     if (exceptionString != null && !exceptionString.trim().isEmpty()) {
-                        exception = new String[]{exceptionString.trim()
-                        };
+                        exception = new String[] {exceptionString.trim()};
                     }
                 }
 
                 if (tagName.equalsIgnoreCase("log4j:locationinfo")) {
                     className =
-                        list.item(y).getAttributes().getNamedItem("class").getNodeValue();
+                            list.item(y).getAttributes().getNamedItem("class").getNodeValue();
                     methodName =
-                        list.item(y).getAttributes().getNamedItem("method").getNodeValue();
-                    fileName =
-                        list.item(y).getAttributes().getNamedItem("file").getNodeValue();
+                            list.item(y).getAttributes().getNamedItem("method").getNodeValue();
+                    fileName = list.item(y).getAttributes().getNamedItem("file").getNodeValue();
                     lineNumber =
-                        list.item(y).getAttributes().getNamedItem("line").getNodeValue();
+                            list.item(y).getAttributes().getNamedItem("line").getNodeValue();
                 }
 
                 if (tagName.equalsIgnoreCase("log4j:properties")) {
@@ -409,10 +399,12 @@
 
                         if (propertyTag.equalsIgnoreCase("log4j:data")) {
                             Node property = propertyList.item(i);
-                            String name =
-                                property.getAttributes().getNamedItem("name").getNodeValue();
-                            String value =
-                                property.getAttributes().getNamedItem("value").getNodeValue();
+                            String name = property.getAttributes()
+                                    .getNamedItem("name")
+                                    .getNodeValue();
+                            String value = property.getAttributes()
+                                    .getNamedItem("value")
+                                    .getNodeValue();
                             properties.put(name, value);
                         }
                     }
@@ -434,19 +426,15 @@
             }
 
             LocationInfo info;
-            if ((fileName != null)
-                || (className != null)
-                || (methodName != null)
-                || (lineNumber != null)) {
-                info = new LocationInfo(fileName, className, methodName, 
-                        Integer.parseInt(lineNumber));
+            if ((fileName != null) || (className != null) || (methodName != null) || (lineNumber != null)) {
+                info = new LocationInfo(fileName, className, methodName, Integer.parseInt(lineNumber));
             } else {
                 info = null;
             }
-//            ThrowableInformation throwableInfo = null;
-//            if (exception != null) {
-//                throwableInfo = new ThrowableInformation(exception);
-//            }
+            //            ThrowableInformation throwableInfo = null;
+            //            if (exception != null) {
+            //                throwableInfo = new ThrowableInformation(exception);
+            //            }
 
             builder.clear();
             builder.setLogger(logger)
@@ -458,7 +446,6 @@
                     .setNDC(ndc)
                     .setLocationInfo(info);
 
-
             events.add(builder.create());
 
             message = null;
@@ -487,9 +474,7 @@
         for (int x = 0; x < nl.getLength(); x++) {
             Node innerNode = nl.item(x);
 
-            if (
-                (innerNode.getNodeType() == Node.TEXT_NODE)
-                    || (innerNode.getNodeType() == Node.CDATA_SECTION_NODE)) {
+            if ((innerNode.getNodeType() == Node.TEXT_NODE) || (innerNode.getNodeType() == Node.CDATA_SECTION_NODE)) {
                 buf.append(innerNode.getNodeValue());
             }
         }
diff --git a/src/main/resources/org/apache/log4j/chainsaw/prefs/default.properties b/src/main/resources/org/apache/log4j/chainsaw/prefs/default.properties
index 36e9353..b23d00c 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/prefs/default.properties
+++ b/src/main/resources/org/apache/log4j/chainsaw/prefs/default.properties
@@ -1,7 +1,8 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
+# The ASF licenses this file to you under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
 #
@@ -12,6 +13,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+#
 
 # ====================================
 # The Default Settings for Chainsaw
@@ -37,4 +39,3 @@
 confirmExit=true
 showSplash=true
 bypassSearchColors=false
-
diff --git a/src/main/resources/org/apache/log4j/chainsaw/prefs/logpanel.properties b/src/main/resources/org/apache/log4j/chainsaw/prefs/logpanel.properties
index 41163ea..ab0351e 100644
--- a/src/main/resources/org/apache/log4j/chainsaw/prefs/logpanel.properties
+++ b/src/main/resources/org/apache/log4j/chainsaw/prefs/logpanel.properties
@@ -1,7 +1,8 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one or more
 # contributor license agreements.  See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
+# The ASF licenses this file to you under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
 #
@@ -12,6 +13,7 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
+#
 
 # ====================================
 # The Default Settings for a log panel within Chainsaw
diff --git a/src/site/site.xml b/src/site/site.xml
index 50a34b6..f1efb46 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -1,21 +1,20 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <project name="Apache Chainsaw">
   <bannerLeft>
     <name>Logging Services</name>
@@ -61,7 +60,7 @@
 		<item name="Mailing Lists" href="/mail-lists.html"/>
 		<item name="Issue Tracking" href="/issue-tracking.html"/>
 	</menu>
-	
+
 	<menu name="Development">
 		<item name="Repository" href="/source-repository.html"/>
 		<item name="Cross Reference" href="/xref/index.html"/>
@@ -70,15 +69,15 @@
 		<item name="Duplication" href="/cpd.html"/>
 		<item name="PMD" href="/pmd.html"/>
 	</menu>
-	
+
 	<menu name="Apache">
-		<item name="Home" href="http://www.apache.org"/>	
+		<item name="Home" href="http://www.apache.org"/>
 		<item name="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html"/>
 		<item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
                 <item name="Security" href="https://www.apache.org/security/"/>
 		<item name="Conferences" href="http://www.apachecon.com"/>
 	</menu>
-	
+
   </body>
   <skin>
     <groupId>org.apache.maven.skins</groupId>
diff --git a/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java b/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
index eacd1a3..7d59aae 100644
--- a/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
+++ b/src/test/java/org/apache/log4j/xml/XMLDecoderTest.java
@@ -2,7 +2,7 @@
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
+ * The ASF licenses this file to you under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
  *
@@ -16,29 +16,25 @@
  */
 package org.apache.log4j.xml;
 
-import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
 
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.URL;
 import java.nio.CharBuffer;
 import java.util.Vector;
-import java.net.URL;
-
 import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent;
 import org.junit.Ignore;
 import org.junit.Test;
 
-import static junit.framework.TestCase.assertEquals;
-
 /**
  * Tests for XMLDecoder.
  */
 @Ignore
 public class XMLDecoderTest {
 
-    public String getStringFromResource(final String resourceName,
-                                        final int maxSize) throws Exception {
+    public String getStringFromResource(final String resourceName, final int maxSize) throws Exception {
         InputStream is = XMLDecoderTest.class.getResourceAsStream(resourceName);
         if (is == null) {
             throw new FileNotFoundException(resourceName);
@@ -46,7 +42,8 @@
         InputStreamReader reader = new InputStreamReader(is, "UTF-8");
         CharBuffer cb = CharBuffer.allocate(maxSize);
 
-        while (reader.read(cb) != -1) ;
+        while (reader.read(cb) != -1)
+            ;
 
         cb.flip();
         return cb.toString();
diff --git a/src/test/resources/org/apache/log4j/db/append-with-drivermanager1.xml b/src/test/resources/org/apache/log4j/db/append-with-drivermanager1.xml
index 04d02bd..f0eeb67 100644
--- a/src/test/resources/org/apache/log4j/db/append-with-drivermanager1.xml
+++ b/src/test/resources/org/apache/log4j/db/append-with-drivermanager1.xml
@@ -1,25 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <!DOCTYPE log4j:configuration SYSTEM 'http://logging.apache.org/log4j/1.2/log4j.dtd'>
-	  
+
 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true">
-	  
+
   <appender name="DB" class="org.apache.log4j.db.DBAppender">
      <param name="locationInfo" value="true"/>
      <connectionSource class="org.apache.log4j.db.DriverManagerConnectionSource">
@@ -32,17 +31,15 @@
 
   <appender name="VECTOR" class="org.apache.log4j.VectorAppender">
   </appender>
-  
+
   <!-- Prevent internal log4j DEBUG messages from polluting the output. -->
   <logger name="org.apache.log4j.joran"><level value="INFO" /></logger>
   <logger name="org.apache.log4j.config"><level value="INFO" /></logger>
   <logger name="org.apache.log4j.db.DBAppender"><level value="INFO" /></logger>
-  
+
   <root>
     <level value ="debug"/>
     <appender-ref ref="DB" />
     <appender-ref ref="VECTOR" />
-  </root>  
+  </root>
 </log4j:configuration>
-
-
diff --git a/src/test/resources/org/apache/log4j/db/read-with-drivermanager1.xml b/src/test/resources/org/apache/log4j/db/read-with-drivermanager1.xml
index 3e77c49..eebbf05 100644
--- a/src/test/resources/org/apache/log4j/db/read-with-drivermanager1.xml
+++ b/src/test/resources/org/apache/log4j/db/read-with-drivermanager1.xml
@@ -1,34 +1,33 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <!DOCTYPE log4j:configuration SYSTEM 'http://logging.apache.org/log4j/1.2/log4j.dtd'>
 
 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true">
-	  
+
   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="READING %relative %level %logger - %message%n"/>
      </layout>
   </appender>
-  
+
   <appender name="VECTOR" class="org.apache.log4j.VectorAppender">
   </appender>
-  
+
   <plugin name="DB" class="org.apache.log4j.db.DBReceiver">
      <connectionSource class="org.apache.log4j.db.DriverManagerConnectionSource">
        <param name="driverClass" value="org.hsqldb.jdbcDriver"/>
@@ -37,19 +36,16 @@
        <param name="password" value=""/>
      </connectionSource>
   </plugin>
-  
+
 
   <!-- Prevent internal log4j DEBUG messages from polluting the output. -->
   <logger name="org.apache.log4j.joran"><level value="INFO" /></logger>
   <logger name="org.apache.log4j.config"><level value="INFO" /></logger>
   <logger name="org.apache.log4j.db"><level value="INFO" /></logger>
-    
+
   <root>
     <level value="debug"/>
     <appender-ref ref="VECTOR" />
     <appender-ref ref="CONSOLE" />
-  </root>  
+  </root>
 </log4j:configuration>
-
-
-
diff --git a/src/test/resources/org/apache/log4j/rewrite/map.xml b/src/test/resources/org/apache/log4j/rewrite/map.xml
index 7cb60b7..503a548 100644
--- a/src/test/resources/org/apache/log4j/rewrite/map.xml
+++ b/src/test/resources/org/apache/log4j/rewrite/map.xml
@@ -1,20 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
     <appender name="F1" class="org.apache.log4j.FileAppender">
         <param name="file"   value="temp"/>
diff --git a/src/test/resources/org/apache/log4j/rewrite/property.xml b/src/test/resources/org/apache/log4j/rewrite/property.xml
index 13a04f8..62f8720 100644
--- a/src/test/resources/org/apache/log4j/rewrite/property.xml
+++ b/src/test/resources/org/apache/log4j/rewrite/property.xml
@@ -1,20 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
     <appender name="F1" class="org.apache.log4j.FileAppender">
         <param name="file"   value="temp"/>
diff --git a/src/test/resources/org/apache/log4j/rewrite/reflection.xml b/src/test/resources/org/apache/log4j/rewrite/reflection.xml
index 643850b..7a96f18 100644
--- a/src/test/resources/org/apache/log4j/rewrite/reflection.xml
+++ b/src/test/resources/org/apache/log4j/rewrite/reflection.xml
@@ -1,20 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements.  See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
     <appender name="F1" class="org.apache.log4j.FileAppender">
         <param name="file"   value="temp"/>
diff --git a/src/test/resources/org/apache/log4j/xml/xmlLayout.1.xml b/src/test/resources/org/apache/log4j/xml/xmlLayout.1.xml
index 06dc106..acb5339 100644
--- a/src/test/resources/org/apache/log4j/xml/xmlLayout.1.xml
+++ b/src/test/resources/org/apache/log4j/xml/xmlLayout.1.xml
@@ -1,19 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
- 
-       http://www.apache.org/licenses/LICENSE-2.0
- 
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <log4j:event logger="org.apache.log4j.xml.XMLLayoutTestCase$X" timestamp="1187196936354" level="INFO" thread="main">
 <log4j:message><![CDATA[in X() constructor]]></log4j:message>
 </log4j:event>
@@ -159,4 +160,3 @@
 	at junit.textui.TestRunner.doRun(TestRunner.java:116)
 ]]></log4j:throwable>
 </log4j:event>
-
diff --git a/src/test/resources/org/apache/log4j/xml/xsltLayout.1.xml b/src/test/resources/org/apache/log4j/xml/xsltLayout.1.xml
index 596e84d..57570b2 100644
--- a/src/test/resources/org/apache/log4j/xml/xsltLayout.1.xml
+++ b/src/test/resources/org/apache/log4j/xml/xsltLayout.1.xml
@@ -1,19 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
- 
-       http://www.apache.org/licenses/LICENSE-2.0
- 
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <log4j:event xmlns:log4j="http://jakarta.apache.org/log4j/" logger="org.apache.log4j.xml.XSLTLayoutTestCase$X" time="2007-08-15T16:42:31.821Z" timestamp="1187196151821" level="INFO" thread="main">
 <log4j:message>in X() constructor</log4j:message>
 </log4j:event>