diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 78fa999..56fa4df 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -33,6 +33,9 @@
 o LOG4J2-402:  Configure RandomAccessFileAppender buffer size. 
 
 Fixed Bugs:
+o LOG4J2-500:  (JMX - ObjectNames changed!) Unloading one web application unloads JMX MBeans for all web applications. 
+o LOG4J2-531:  Fixed bugs where rolled log files were overwritten by RollingFile appender with 
+        composite time and size based policies. Thanks to Geoff Ballinger. 
 o LOG4J2-475:  Changed the MongoDBConnection to add a MongoDB encoding hook instead of a decoding hook. Thanks to Matt Sicker. 
 o LOG4J2-489:  Fixed the JPAAppender's overuse of transactions by connecting (borrowing from pool) on new write internal or on
         flush. 
@@ -43,7 +46,6 @@
 o LOG4J2-438:  Ensured the JDBCAppender commits transactions after a single write or a flush of multiple writes. 
 o LOG4J2-407:  Fixed inability to recover from lost database connection in database appenders by connecting (borrowing from
         pool) on new write internal or on flush. 
-o LOG4J2-500:  (JMX) Unloading one webapp unloads JMX MBeans for all webapps. 
 o LOG4J2-511:  Stop AsyncLoggerConfig Disruptor thread(s), then AsyncAppender thread(s) first
         before stopping other appenders. Thanks to James Pretorius. 
 o LOG4J2-392:  Stop AsyncLoggerConfig Disruptor thread(s), then AsyncAppender thread(s) first
@@ -102,8 +104,8 @@
         org.apache.logging.log4j.core.appender.db.nosql.mongodb. 
 o Renamed the org.apache.logging.log4j.core.appender.db.nosql.couch package to
         org.apache.logging.log4j.core.appender.db.nosql.couchdb. 
-o LOG4J2-41:  Add support for custom logging levels. Thanks to Nick Williams. 
 o LOG4J2-507:  Space Level numbers by 100 instead of 1. 
+o LOG4J2-41:  Add support for custom logging levels. Thanks to Nick Williams. 
 o LOG4J2-490:  Update EasyMock to version 3.2. Thanks to Matt Sicker. 
 o LOG4J2-453:  Update Flume Appender to use Flume 1.4.0. 
 o LOG4J2-528:  Rename package org.apache.logging.log4j.core.appender.rolling.helper to org.apache.logging.log4j.core.appender.rolling.action. 
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java b/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
index ee13715..0fe1fe0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/PropertyConfigurator.java
@@ -63,7 +63,7 @@
      * @param configURL The configuration URL
      * @param hierarchy The hierarchy
      */
-    public void doConfigure(final java.net.URL configURL, final LoggerRepository hierarchy) {
+    public void doConfigure(final URL configURL, final LoggerRepository hierarchy) {
     }
 
     /**
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
index 9fd0efd..04a4555 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/xml/DOMConfigurator.java
@@ -72,7 +72,8 @@
 
     }
 
-    public static Object parseElement(final Element element, final Properties props, @SuppressWarnings("rawtypes") final Class expectedClass)
+    public static Object parseElement(final Element element, final Properties props,
+                                      @SuppressWarnings("rawtypes") final Class expectedClass)
         throws Exception {
         return null;
     }
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/Level.java b/log4j-api/src/main/java/org/apache/logging/log4j/Level.java
index ac094b7..48d1f04 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/Level.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/Level.java
@@ -16,15 +16,14 @@
  */
 package org.apache.logging.log4j;
 
-import org.apache.logging.log4j.spi.StandardLevel;
-
-import java.io.ObjectStreamException;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Locale;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.logging.log4j.spi.StandardLevel;
+
 /**
  * Levels used for identifying the severity of an event. Levels are organized from most specific to least:
  * <ul>
@@ -288,7 +287,7 @@
     }
 
     // for deserialization
-    protected Object readResolve() throws ObjectStreamException {
+    protected Object readResolve() {
         return Level.valueOf(this.name);
     }
 }
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataId.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataId.java
index 12a6308..193700d 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataId.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataId.java
@@ -23,16 +23,20 @@
  */
 public class StructuredDataId implements Serializable {
 
+    private static final String AT = "@";
+
     /**
      * RFC 5424 Time Quality.
      */
     public static final StructuredDataId TIME_QUALITY = new StructuredDataId("timeQuality", null,
         new String[]{"tzKnown", "isSynced", "syncAccuracy"});
+    
     /**
      * RFC 5424 Origin.
      */
     public static final StructuredDataId ORIGIN = new StructuredDataId("origin", null,
         new String[]{"ip", "enterpriseId", "software", "swVersion"});
+    
     /**
      * RFC 5424 Meta.
      */
@@ -60,7 +64,7 @@
                 throw new IllegalArgumentException(String.format("Length of id %s exceeds maximum of %d characters",
                         name, MAX_LENGTH));
             }
-            index = name.indexOf("@");
+            index = name.indexOf(AT);
         }
 
         if (index > 0) {
@@ -87,15 +91,15 @@
         if (name == null) {
             throw new IllegalArgumentException("No structured id name was supplied");
         }
-        if (name.contains("@")) {
-            throw new IllegalArgumentException("Structured id name cannot contain an '@");
+        if (name.contains(AT)) {
+            throw new IllegalArgumentException("Structured id name cannot contain an '" + AT + "'");
         }
         if (enterpriseNumber <= 0) {
             throw new IllegalArgumentException("No enterprise number was supplied");
         }
         this.name = name;
         this.enterpriseNumber = enterpriseNumber;
-        final String id = enterpriseNumber < 0 ? name : name + "@" + enterpriseNumber;
+        final String id = enterpriseNumber < 0 ? name : name + AT + enterpriseNumber;
         if (id.length() > MAX_LENGTH) {
             throw new IllegalArgumentException("Length of id exceeds maximum of 32 characters: " + id);
         }
@@ -183,6 +187,6 @@
 
     @Override
     public String toString() {
-        return isReserved() ? name : name + "@" + enterpriseNumber;
+        return isReserved() ? name : name + AT + enterpriseNumber;
     }
 }
diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml
index 91e91fb..7094ebc 100644
--- a/log4j-core/pom.xml
+++ b/log4j-core/pom.xml
@@ -167,7 +167,6 @@
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
-      <version>3.2.4.RELEASE</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TLSSyslogFrame.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TLSSyslogFrame.java
index d3e32cb..c649a9e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TLSSyslogFrame.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TLSSyslogFrame.java
@@ -16,6 +16,8 @@
 */
 package org.apache.logging.log4j.core.appender;
 
+import java.nio.charset.Charset;
+
 /**
  * Wrapper for messages that are formatted according to RFC 5425.
  */
@@ -44,7 +46,7 @@
 
     public byte[] getBytes() {
         String frame = toString();
-        return frame.getBytes();
+        return frame.getBytes(Charset.defaultCharset());
     }
 
     @Override
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
index 0273ca5..7a37371 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/DefaultRolloverStrategy.java
@@ -179,7 +179,9 @@
 
         final List<FileRenameAction> renames = new ArrayList<FileRenameAction>();
         final StringBuilder buf = new StringBuilder();
-        manager.getPatternProcessor().formatFileName(buf, highIndex);
+        
+        // LOG4J2-531: directory scan & rollover must use same format
+        manager.getPatternProcessor().formatFileName(subst, buf, highIndex);
 
         String highFilename = subst.replace(buf);
 
@@ -208,6 +210,8 @@
 
                 if (toRename.exists()) {
                     if (toRenameBase.exists()) {
+                        LOGGER.debug("DefaultRolloverStrategy.purgeAscending deleting {} base of {}.", //
+                                toRenameBase, toRename);
                         toRenameBase.delete();
                     }
                 } else {
@@ -222,6 +226,8 @@
                 //        attempt to delete last file
                 //        if that fails then abandon purge
                 if (i == lowIndex) {
+                    LOGGER.debug("DefaultRolloverStrategy.purgeAscending deleting {} at low index {}: all slots full.", //
+                            toRename, i);
                     if (!toRename.delete()) {
                         return -1;
                     }
@@ -233,7 +239,8 @@
                 //   if intermediate index
                 //     add a rename action to the list
                 buf.setLength(0);
-                manager.getPatternProcessor().formatFileName(buf, i - 1);
+                // LOG4J2-531: directory scan & rollover must use same format
+                manager.getPatternProcessor().formatFileName(subst, buf, i - 1);
 
                 final String lowFilename = subst.replace(buf);
                 String renameTo = lowFilename;
@@ -246,7 +253,8 @@
                 highFilename = lowFilename;
             } else {
                 buf.setLength(0);
-                manager.getPatternProcessor().formatFileName(buf, i - 1);
+                // LOG4J2-531: directory scan & rollover must use same format
+                manager.getPatternProcessor().formatFileName(subst, buf, i - 1);
 
                 highFilename = subst.replace(buf);
             }
@@ -260,8 +268,9 @@
         //
         for (int i = renames.size() - 1; i >= 0; i--) {
             final Action action = renames.get(i);
-
             try {
+                LOGGER.debug("DefaultRolloverStrategy.purgeAscending executing {} of {}: {}", //
+                        i, renames.size(), action);
                 if (!action.execute()) {
                     return -1;
                 }
@@ -287,7 +296,9 @@
 
         final List<FileRenameAction> renames = new ArrayList<FileRenameAction>();
         final StringBuilder buf = new StringBuilder();
-        manager.getPatternProcessor().formatFileName(buf, lowIndex);
+
+        // LOG4J2-531: directory scan & rollover must use same format
+        manager.getPatternProcessor().formatFileName(subst, buf, lowIndex);
 
         String lowFilename = subst.replace(buf);
 
@@ -307,6 +318,8 @@
 
                 if (toRename.exists()) {
                     if (toRenameBase.exists()) {
+                        LOGGER.debug("DefaultRolloverStrategy.purgeDescending deleting {} base of {}.", //
+                                toRenameBase, toRename);
                         toRenameBase.delete();
                     }
                 } else {
@@ -321,6 +334,8 @@
                 //        attempt to delete last file
                 //        if that fails then abandon purge
                 if (i == highIndex) {
+                    LOGGER.debug("DefaultRolloverStrategy.purgeDescending deleting {} at high index {}: all slots full.", //
+                            toRename, i);
                     if (!toRename.delete()) {
                         return -1;
                     }
@@ -332,7 +347,8 @@
                 //   if intermediate index
                 //     add a rename action to the list
                 buf.setLength(0);
-                manager.getPatternProcessor().formatFileName(buf, i + 1);
+                // LOG4J2-531: directory scan & rollover must use same format
+                manager.getPatternProcessor().formatFileName(subst, buf, i + 1);
 
                 final String highFilename = subst.replace(buf);
                 String renameTo = highFilename;
@@ -353,8 +369,9 @@
         //
         for (int i = renames.size() - 1; i >= 0; i--) {
             final Action action = renames.get(i);
-
             try {
+                LOGGER.debug("DefaultRolloverStrategy.purgeDescending executing {} of {}: {}", //
+                        i, renames.size(), action);
                 if (!action.execute()) {
                     return -1;
                 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
index 82fc0ca..de5822c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
@@ -16,11 +16,13 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
+import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.lookup.StrSubstitutor;
@@ -29,12 +31,14 @@
 import org.apache.logging.log4j.core.pattern.FormattingInfo;
 import org.apache.logging.log4j.core.pattern.PatternConverter;
 import org.apache.logging.log4j.core.pattern.PatternParser;
+import org.apache.logging.log4j.status.StatusLogger;
 
 /**
  * Parse the rollover pattern.
  */
 public class PatternProcessor {
 
+    protected static final Logger LOGGER = StatusLogger.getLogger();
     private static final String KEY = "FileConverter";
 
     private static final char YEAR_CHAR = 'y';
@@ -100,7 +104,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.YEAR, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.MONTH, currentCal.get(Calendar.MONTH));
         if (frequency == RolloverFrequency.MONTHLY) {
@@ -108,7 +112,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.MONTH, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         if (frequency == RolloverFrequency.WEEKLY) {
             cal.set(Calendar.WEEK_OF_YEAR, currentCal.get(Calendar.WEEK_OF_YEAR));
@@ -117,7 +121,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.WEEK_OF_YEAR, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.DAY_OF_YEAR, currentCal.get(Calendar.DAY_OF_YEAR));
         if (frequency == RolloverFrequency.DAILY) {
@@ -125,7 +129,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.DAY_OF_YEAR, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.HOUR_OF_DAY, currentCal.get(Calendar.HOUR_OF_DAY));
         if (frequency == RolloverFrequency.HOURLY) {
@@ -133,7 +137,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.HOUR_OF_DAY, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.MINUTE, currentCal.get(Calendar.MINUTE));
         if (frequency == RolloverFrequency.EVERY_MINUTE) {
@@ -141,7 +145,7 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.MINUTE, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.SECOND, currentCal.get(Calendar.SECOND));
         if (frequency == RolloverFrequency.EVERY_SECOND) {
@@ -149,16 +153,28 @@
             nextTime = cal.getTimeInMillis();
             cal.add(Calendar.SECOND, -1);
             nextFileTime = cal.getTimeInMillis();
-            return nextTime;
+            return debugGetNextTime(nextTime);
         }
         cal.set(Calendar.MILLISECOND, currentCal.get(Calendar.MILLISECOND));
         increment(cal, Calendar.MILLISECOND, increment, modulus);
         nextTime = cal.getTimeInMillis();
         cal.add(Calendar.MILLISECOND, -1);
         nextFileTime = cal.getTimeInMillis();
+        return debugGetNextTime(nextTime);
+    }
+
+    private long debugGetNextTime(long nextTime) {
+        if (LOGGER.isTraceEnabled()) {
+            LOGGER.trace("PatternProcessor.getNextTime returning {}, nextFileTime={}, prevFileTime={}, freq={}", //
+                    format(nextTime), format(nextFileTime), format(prevFileTime), frequency);
+        }
         return nextTime;
     }
 
+    private String format(long time) {
+        return new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss.SSS").format(new Date(time));
+    }
+
     private void increment(final Calendar cal, final int type, final int increment, final boolean modulate) {
         final int interval =  modulate ? increment - (cal.get(type) % increment) : increment;
         cal.add(type, interval);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index a158625..ac7746a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -161,13 +161,10 @@
 
         try {
             final RolloverDescription descriptor = strategy.rollover(this);
-
             if (descriptor != null) {
-
                 close();
-
                 if (descriptor.getSynchronous() != null) {
-
+                    LOGGER.debug("RollingFileManager executing synchronous {}", descriptor.getSynchronous());
                     try {
                         success = descriptor.getSynchronous().execute();
                     } catch (final Exception ex) {
@@ -176,6 +173,7 @@
                 }
 
                 if (success && descriptor.getAsynchronous() != null) {
+                    LOGGER.debug("RollingFileManager executing async {}", descriptor.getAsynchronous());
                     thread = new Thread(new AsyncAction(descriptor.getAsynchronous(), this));
                     thread.start();
                 }
@@ -302,7 +300,6 @@
                 return null;
             }
             final long size = data.append ? file.length() : 0;
-            final long time = file.lastModified();
 
             OutputStream os;
             try {
@@ -310,6 +307,7 @@
                 if (data.bufferedIO) {
                     os = new BufferedOutputStream(os);
                 }
+                final long time = file.lastModified(); // LOG4J2-531 create file first so time has valid value
                 return new RollingFileManager(name, data.pattern, os, data.append, size, time, data.policy,
                     data.strategy, data.advertiseURI, data.layout);
             } catch (final FileNotFoundException ex) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
index 0726263..4de9ec4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/TimeBasedTriggeringPolicy.java
@@ -46,6 +46,10 @@
     @Override
     public void initialize(final RollingFileManager manager) {
         this.manager = manager;
+        
+        // LOG4J2-531: call getNextTime twice to force initialization of both prevFileTime and nextFileTime
+        manager.getPatternProcessor().getNextTime(manager.getFileTime(), interval, modulate);
+        
         nextRollover = manager.getPatternProcessor().getNextTime(manager.getFileTime(), interval, modulate);
     }
 
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java
index f451c55..9312d2d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/CompositeAction.java
@@ -17,6 +17,7 @@
 package org.apache.logging.log4j.core.appender.rolling.action;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.List;
 
 
@@ -97,4 +98,9 @@
 
         return status;
     }
+    
+    @Override
+    public String toString() {
+        return CompositeAction.class.getSimpleName() + Arrays.toString(actions);
+    }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
index c9ea48a..9fed741 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameAction.java
@@ -143,4 +143,10 @@
             }
         }
     }
+    
+    @Override
+    public String toString() {
+        return FileRenameAction.class.getSimpleName() + "[" + source + " to " + destination //
+                + ", renameEmptyFiles=" + renameEmptyFiles + "]";
+    }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GZCompressAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GZCompressAction.java
index 84d50e1..dfd968f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GZCompressAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/GZCompressAction.java
@@ -125,5 +125,10 @@
     protected void reportException(final Exception ex) {
         LOGGER.warn("Exception during compression of '" + source.toString() + "'.", ex);
     }
-
+    
+    @Override
+    public String toString() {
+        return GZCompressAction.class.getSimpleName() + "[" + source + " to " + destination //
+                + ", deleteSource=" + deleteSource + "]";
+    }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java
index b4c1163..e11257d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/ZipCompressAction.java
@@ -137,4 +137,10 @@
     protected void reportException(final Exception ex) {
         LOGGER.warn("Exception during compression of '" + source.toString() + "'.", ex);
     }
+    
+    @Override
+    public String toString() {
+        return ZipCompressAction.class.getSimpleName() + "[" + source + " to " + destination //
+                + ", level=" + level + ", deleteSource=" + deleteSource + "]";
+    }
 }
diff --git a/log4j-distribution/pom.xml b/log4j-distribution/pom.xml
index 754fc5c..805b796 100644
--- a/log4j-distribution/pom.xml
+++ b/log4j-distribution/pom.xml
@@ -272,6 +272,15 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-site-plugin</artifactId>
+        <version>3.0</version>
+        <configuration>
+          <skip>true</skip>
+          <skipDeploy>true</skipDeploy>
+        </configuration>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
index 3c3ec4b..d41245f 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAppender.java
@@ -216,7 +216,7 @@
         final int reqTimeout = Integers.parseInt(requestTimeout, 0);
         final int retries = Integers.parseInt(agentRetries, 0);
         final int lockTimeoutRetryCount = Integers.parseInt(lockTimeoutRetries, DEFAULT_LOCK_TIMEOUT_RETRY_COUNT);
-        final int delay = Integers.parseInt(maxDelay, DEFAULT_MAX_DELAY );
+        final int delay = Integers.parseInt(maxDelay, DEFAULT_MAX_DELAY);
 
         if (layout == null) {
             layout = RFC5424Layout.createLayout(null, null, null, "True", null, mdcPrefix, eventPrefix,
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
index ea5b5e6..62e8812 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEmbeddedManager.java
@@ -187,7 +187,7 @@
                 throw new ConfigurationException("No Flume configuration provided");
             }
 
-            if ((agents != null && agents.length > 0 && properties != null && properties.length > 0)) {
+            if (agents != null && agents.length > 0 && properties != null && properties.length > 0) {
                 LOGGER.error("Agents and Flume configuration cannot both be specified");
                 throw new ConfigurationException("Agents and Flume configuration cannot both be specified");
             }
@@ -215,7 +215,7 @@
                 final StringBuilder sb = new StringBuilder();
                 String leading = "";
                 int priority = agents.length;
-                for (int i = 0; i < agents.length; ++i) {
+                for (int i = 0; i < priority; ++i) {
                     sb.append(leading).append("agent").append(i);
                     leading = " ";
                     final String prefix = "agent" + i;
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
index 3955205..a8a8b9b 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumePersistentManager.java
@@ -35,7 +35,6 @@
 import javax.crypto.Cipher;
 import javax.crypto.SecretKey;
 
-import com.sleepycat.je.LockConflictException;
 import org.apache.flume.Event;
 import org.apache.flume.event.SimpleEvent;
 import org.apache.logging.log4j.LoggingException;
@@ -54,6 +53,7 @@
 import com.sleepycat.je.DatabaseEntry;
 import com.sleepycat.je.Environment;
 import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.je.LockConflictException;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.StatsConfig;
@@ -141,6 +141,7 @@
      * @param connectionTimeout The amount of time to wait to establish a connection.
      * @param requestTimeout The amount of time to wait for a response to a request.
      * @param delay Amount of time to delay before delivering a batch.
+     * @param lockTimeoutRetryCount The number of times to retry after a lock timeout.
      * @param dataDir The location of the Berkeley database.
      * @return A FlumeAvroManager.
      */
@@ -221,7 +222,7 @@
         worker.shutdown();
         try {
             worker.join(SHUTDOWN_WAIT * MILLIS_PER_SECOND);
-        } catch(InterruptedException ie) {
+        } catch (InterruptedException ie) {
             // Ignore the exception and shutdown.
         }
         threadPool.shutdown();
@@ -320,7 +321,7 @@
                             txn.abort();
                             txn = null;
                         } catch (Exception ex) {
-                            // Ignore exception
+                            LOGGER.trace("Ignoring exception while aborting transaction during lock conflict.");
                         }
                     }
 
@@ -519,7 +520,7 @@
                 long now = System.currentTimeMillis();
                 long dbCount = database.count();
                 dbCounter.set(dbCount);
-                if (dbCount >= batchSize || (dbCount > 0 && nextBatch <= now)) {
+                if (dbCount >= batchSize || dbCount > 0 && nextBatch <= now) {
                     nextBatch = now + manager.delay;
                     try {
                         boolean errors = false;
@@ -596,7 +597,7 @@
                                             cursor.close();
                                             cursor = null;
                                         } catch (Exception ex) {
-                                            // Ignore exception
+                                            LOGGER.trace("Ignored exception closing cursor during lock conflict.");
                                         }
                                     }
                                     if (txn != null) {
@@ -604,7 +605,7 @@
                                             txn.abort();
                                             txn = null;
                                         } catch (Exception ex) {
-                                            // Ignore exception
+                                            LOGGER.trace("Ignored exception aborting tx during lock conflict.");
                                         }
                                     }
                                 }
@@ -706,7 +707,7 @@
                                         cursor.close();
                                         cursor = null;
                                     } catch (Exception ex) {
-                                        // Ignore exception
+                                        LOGGER.trace("Ignored exception closing cursor during lock conflict.");
                                     }
                                 }
                                 if (txn != null) {
@@ -714,7 +715,7 @@
                                         txn.abort();
                                         txn = null;
                                     } catch (Exception ex) {
-                                        // Ignore exception
+                                        LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
                                     }
                                 }
                             } catch (final Exception ex) {
@@ -730,7 +731,7 @@
                                     cursor.close();
                                     cursor = null;
                                 } catch (Exception ex) {
-                                    // Ignore exception
+                                    LOGGER.trace("Ignored exception closing cursor during lock conflict.");
                                 }
                             }
                             if (txn != null) {
@@ -738,7 +739,7 @@
                                     txn.abort();
                                     txn = null;
                                 } catch (Exception ex) {
-                                    // Ignore exception
+                                    LOGGER.trace("Ignored exception aborting transaction during lock conflict.");
                                 }
                             }
                         } finally {
@@ -823,7 +824,7 @@
         }
 
         @Override
-	    public Thread newThread(final Runnable r) {
+        public Thread newThread(final Runnable r) {
             final Thread thread = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
             thread.setDaemon(true);
             if (thread.getPriority() != Thread.NORM_PRIORITY) {
@@ -833,6 +834,9 @@
         }
     }
 
+    /**
+     * An internal class.
+     */
     private static class Gate {
 
         private boolean isOpen = false;
diff --git a/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/Log4jLog.java b/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/Log4jLog.java
index 000aa11..20a5704 100644
--- a/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/Log4jLog.java
+++ b/log4j-jcl/src/main/java/org/apache/logging/log4j/jcl/Log4jLog.java
@@ -27,7 +27,7 @@
 
     private static final long serialVersionUID = 1L;
 
-	public Log4jLog(final AbstractLogger logger, final String name) {
+    public Log4jLog(final AbstractLogger logger, final String name) {
         super(logger, name, null);
     }
 }
diff --git a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/Client.java b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/Client.java
index eb6c720..5025a20 100644
--- a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/Client.java
+++ b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/Client.java
@@ -51,7 +51,7 @@
      *             one of the remote mbeans
      * @throws IOException if the connection failed
      */
-    public Client(final JMXConnector connector) throws JMException, IOException {
+    public Client(final JMXConnector connector) throws MalformedObjectNameException, IOException {
         this.connector = Assert.isNotNull(connector, "JMXConnector");
         this.connector.connect();
         this.connection = connector.getMBeanServerConnection();
@@ -68,12 +68,12 @@
      *             one of the remote mbeans
      * @throws IOException if the connection failed
      */
-    public Client(final MBeanServerConnection mBeanServerConnection) throws JMException, IOException {
+    public Client(final MBeanServerConnection mBeanServerConnection) throws MalformedObjectNameException, IOException {
         this.connection = mBeanServerConnection;
         init();
     }
 
-    private void init() throws JMException, IOException {
+    private void init() throws MalformedObjectNameException, IOException {
     }
 
     private Set<ObjectName> find(String pattern) throws JMException, IOException {
@@ -87,8 +87,8 @@
      * remote {@code LoggerContextAdminMBean}s.
      * 
      * @return a list of proxies to the remote {@code LoggerContextAdminMBean}s
-     * @throws IOException
-     * @throws JMException
+     * @throws IOException If an I/O error occurred
+     * @throws JMException If a management error occurred
      */
     public List<LoggerContextAdminMBean> getLoggerContextAdmins() throws JMException, IOException {
         List<LoggerContextAdminMBean> result = new ArrayList<LoggerContextAdminMBean>();
@@ -134,11 +134,11 @@
      * 
      * @param contextName search key
      * @return StatusLoggerAdminMBean or null
-     * @throws MalformedObjectNameException
-     * @throws IOException
+     * @throws MalformedObjectNameException If an object name is malformed
+     * @throws IOException If an I/O error occurred
      */
-    public StatusLoggerAdminMBean getStatusLoggerAdmin(String contextName) throws MalformedObjectNameException,
-            IOException {
+    public StatusLoggerAdminMBean getStatusLoggerAdmin(String contextName)
+            throws MalformedObjectNameException, IOException {
         final String pattern = StatusLoggerAdminMBean.PATTERN;
         final String mbean = String.format(pattern, Server.escape(contextName));
         final ObjectName search = new ObjectName(mbean);
diff --git a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGUI.java b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGUI.java
index cca488e..6ba4c29 100644
--- a/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGUI.java
+++ b/log4j-jmx-gui/src/main/java/org/apache/logging/log4j/jmx/gui/ClientGUI.java
@@ -69,6 +69,7 @@
  */
 public class ClientGUI extends JPanel implements NotificationListener {
     private static final long serialVersionUID = -253621277232291174L;
+    private static final int INITIAL_STRING_WRITER_SIZE = 1024;
     private final Client client;
     private Map<ObjectName, Component> contextObjNameToTabbedPaneMap = new HashMap<ObjectName, Component>();
     private Map<ObjectName, JTextArea> statusLogTextAreaMap = new HashMap<ObjectName, JTextArea>();
@@ -229,7 +230,7 @@
         System.err.println(msg);
         ex.printStackTrace();
 
-        StringWriter sw = new StringWriter(1024);
+        StringWriter sw = new StringWriter(INITIAL_STRING_WRITER_SIZE);
         ex.printStackTrace(new PrintWriter(sw));
         JOptionPane.showMessageDialog(this, sw.toString(), msg, JOptionPane.ERROR_MESSAGE);
     }
diff --git a/log4j-samples/pom.xml b/log4j-samples/pom.xml
index 35c56a7..42de9ad 100644
--- a/log4j-samples/pom.xml
+++ b/log4j-samples/pom.xml
@@ -30,7 +30,6 @@
   <url>http://maven.apache.org</url>
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <spring.version>3.1.2.RELEASE</spring.version>
   </properties>
   <dependencyManagement>
     <dependencies>
@@ -62,7 +61,7 @@
       <dependency>
         <groupId>org.springframework.ws</groupId>
         <artifactId>spring-ws-core</artifactId>
-        <version>2.1.3.RELEASE</version>
+        <version>2.1.4.RELEASE</version>
       </dependency>
       <dependency>
         <groupId>javax.servlet</groupId>
@@ -73,7 +72,7 @@
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
-        <version>4.7</version>
+        <version>4.11</version>
         <scope>test</scope>
       </dependency>
     </dependencies>
@@ -88,7 +87,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-site-plugin</artifactId>
-        <version>3.1</version>
+        <version>3.0</version>
         <configuration>
           <skip>true</skip>
           <skipDeploy>true</skipDeploy>
diff --git a/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/EventDataConverter.java b/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/EventDataConverter.java
index 4e42560..6557fb8 100644
--- a/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/EventDataConverter.java
+++ b/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/EventDataConverter.java
@@ -30,10 +30,10 @@
 
     public Message convertEvent(final String message, final Object[] objects, final Throwable throwable) {
         try {
-            final EventData data = (objects != null && objects[0] instanceof EventData) ? (EventData) objects[0]
-                    : new EventData(message);
-            final StructuredDataMessage msg = new StructuredDataMessage(data.getEventId(), data.getMessage(),
-                    data.getEventType());
+            final EventData data = objects != null && objects[0] instanceof EventData ?
+                    (EventData) objects[0] : new EventData(message);
+            final StructuredDataMessage msg =
+                    new StructuredDataMessage(data.getEventId(), data.getMessage(), data.getEventType());
             for (final Map.Entry<String, Object> entry : data.getEventMap().entrySet()) {
                 final String key = entry.getKey();
                 if (EventData.EVENT_TYPE.equals(key) || EventData.EVENT_ID.equals(key)
diff --git a/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/MarkerWrapper.java b/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/MarkerWrapper.java
index 3647b54..306bb20 100644
--- a/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/MarkerWrapper.java
+++ b/log4j-slf4j-impl/src/main/java/org/slf4j/helpers/MarkerWrapper.java
@@ -41,12 +41,12 @@
     }
 
     @Override
-    public org.apache.logging.log4j.Marker getParent() {
+    public Marker getParent() {
         return this.parent;
     }
 
     @Override
-    public boolean isInstanceOf(final org.apache.logging.log4j.Marker marker) {
+    public boolean isInstanceOf(final Marker marker) {
         if (marker == null) {
             throw new IllegalArgumentException("A marker parameter is required");
         }
diff --git a/log4j-taglib/pom.xml b/log4j-taglib/pom.xml
index 50aea72..9ecefc0 100644
--- a/log4j-taglib/pom.xml
+++ b/log4j-taglib/pom.xml
@@ -31,7 +31,6 @@
     <log4jParentDir>${basedir}/..</log4jParentDir>
     <docLabel>Log4j Tag Library Documentation</docLabel>
     <projectDir>/taglib</projectDir>
-    <spring.version>3.1.2.RELEASE</spring.version>
   </properties>
   <dependencies>
     <dependency>
@@ -69,13 +68,11 @@
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
-      <version>${spring.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
-      <version>${spring.version}</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/log4j-taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLogger.java b/log4j-taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLogger.java
index af8882a..b51c8d9 100644
--- a/log4j-taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLogger.java
+++ b/log4j-taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLogger.java
@@ -30,7 +30,7 @@
 class Log4jTaglibLogger extends AbstractLoggerWrapper {
     private static final long serialVersionUID = 1L;
 
-	public Log4jTaglibLogger(final AbstractLogger logger, final String name, final MessageFactory messageFactory) {
+    public Log4jTaglibLogger(final AbstractLogger logger, final String name, final MessageFactory messageFactory) {
         super(logger, name, messageFactory);
     }
 
diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
index f28a2e1..e63a57b 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
@@ -31,7 +31,7 @@
 public class SLF4JLogger extends AbstractLogger {
 
     private static final long serialVersionUID = 1L;
-	private final org.slf4j.Logger logger;
+    private final org.slf4j.Logger logger;
     private final LocationAwareLogger locationAwareLogger;
 
     public SLF4JLogger(final String name, final org.slf4j.Logger logger) {
diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLoggerContextFactory.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLoggerContextFactory.java
index cd84cdc..4cae70f 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLoggerContextFactory.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLoggerContextFactory.java
@@ -20,11 +20,13 @@
 
 import org.apache.logging.log4j.spi.LoggerContext;
 import org.apache.logging.log4j.spi.LoggerContextFactory;
+import org.apache.logging.log4j.status.StatusLogger;
 
 /**
  *
  */
 public class SLF4JLoggerContextFactory implements LoggerContextFactory {
+    private static final StatusLogger LOGGER = StatusLogger.getLogger();
     private static LoggerContext context = new SLF4JLoggerContext();
 
     public SLF4JLoggerContextFactory() {
@@ -34,7 +36,7 @@
             Class.forName("org.slf4j.helpers.Log4jLoggerFactory");
             misconfigured = true;
         } catch (final ClassNotFoundException classNotFoundIsGood) {
-            // org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good!
+            LOGGER.debug("org.slf4j.helpers.Log4jLoggerFactory is not on classpath. Good!");
         }
         if (misconfigured) {
             throw new IllegalStateException("slf4j-impl jar is mutually exclusive with log4j-to-slf4j jar "
diff --git a/pom.xml b/pom.xml
index 7437305..c1868a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,6 +138,7 @@
     <Log4jReleaseCount>eleventh</Log4jReleaseCount>
     <jackson1.version>1.9.13</jackson1.version>
     <jackson2.version>2.2.2</jackson2.version>
+    <spring.version>3.2.7.RELEASE</spring.version>
     <flumeVersion>1.4.0</flumeVersion>
     <disruptor.version>3.2.0</disruptor.version>
     <!-- Configuration properties for the OSGi maven-bundle-plugin -->
@@ -461,6 +462,51 @@
         <version>3.2</version>
       </dependency>
       <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-aop</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-beans</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-context</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-core</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-expression</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-oxm</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-test</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-web</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-webmvc</artifactId>
+        <version>${spring.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.hsqldb</groupId>
         <artifactId>hsqldb</artifactId>
         <version>2.3.0</version>
@@ -623,8 +669,8 @@
           </dependency>
         </dependencies>
         <configuration>
-         <!-- only build English site even on other language OS -->
-         <locales>en</locales>
+          <!-- only build English site even on other language OS -->
+          <locales>en</locales>
           <!-- Exclude the navigation file for Maven 1 sites
                and the changes file used by the changes-plugin,
                as they interfere with the site generation. -->
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index e0c0ffc..71d0958 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -20,7 +20,11 @@
     <title>Changes</title>
   </properties>
   <body>
-    <release version="2.0-rc1" date="2014-02-08" description="Bug fixes and enhancements">
+    <release version="2.0-rc1" date="2014-MM-DD" description="Bug fixes and enhancements">
+      <action dev="nickwilliams" type="delete">
+        Removed the DataSourceConnectionSource and the &lt;DriverManager&gt; plugin for the JDBC Appender. It is not
+        safe to use. Please use the DataSource or factory connection sources backed by a connection pool.
+      </action>
       <action dev="nickwilliams" type="update">
         Renamed the org.apache.logging.log4j.core.appender.db.nosql.mongo package to
         org.apache.logging.log4j.core.appender.db.nosql.mongodb.
@@ -29,6 +33,16 @@
         Renamed the org.apache.logging.log4j.core.appender.db.nosql.couch package to
         org.apache.logging.log4j.core.appender.db.nosql.couchdb.
       </action>
+      <action issue="LOG4J2-500" dev="rpopma" type="fix">
+        (JMX - ObjectNames changed!) Unloading one web application unloads JMX MBeans for all web applications.
+      </action>
+      <action issue="LOG4J2-507" dev="ggregory" type="update">
+        Space Level numbers by 100 instead of 1.
+      </action>
+      <action issue="LOG4J2-531" dev="rpopma" type="fix" due-to="Geoff Ballinger">
+        Fixed bugs where rolled log files were overwritten by RollingFile appender with 
+        composite time and size based policies.
+      </action>
       <action issue="LOG4J2-475" dev="nickwilliams" type="fix" due-to="Matt Sicker">
         Changed the MongoDBConnection to add a MongoDB encoding hook instead of a decoding hook.
       </action>
@@ -51,17 +65,10 @@
         Fixed inability to recover from lost database connection in database appenders by connecting (borrowing from
         pool) on new write internal or on flush.
       </action>
-      <action dev="nickwilliams" type="delete">
-        Removed the DataSourceConnectionSource and the &lt;DriverManager&gt; plugin for the JDBC Appender. It is not
-        safe to use. Please use the DataSource or factory connection sources backed by a connection pool.
-      </action>
       <action issue="LOG4J2-530" dev="rpopma" type="add">
         (JMX) JMX Client GUI should dynamically update when LoggerContext MBeans are registered/unregistered in MBean
         server.
       </action>
-      <action issue="LOG4J2-500" dev="rpopma" type="fix">
-        (JMX) Unloading one webapp unloads JMX MBeans for all webapps.
-      </action>
       <action issue="LOG4J2-511" dev="rpopma" type="fix" due-to="James Pretorius">
         Stop AsyncLoggerConfig Disruptor thread(s), then AsyncAppender thread(s) first
         before stopping other appenders.
@@ -106,9 +113,6 @@
       <action issue="LOG4J2-41" dev="rgoers" type="update" due-to="Nick Williams">
         Add support for custom logging levels.
       </action>
-      <action issue="LOG4J2-507" dev="ggregory" type="update">
-        Space Level numbers by 100 instead of 1.
-      </action>
       <action issue="LOG4J2-406" dev="rpopma" type="fix" due-to="Kerrigan Joseph">
         (JMX) Unregister all log4j JMX MBeans when the LoggerContext is stopped
         to allow web application classes to be GC-ed on undeploy.
diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml
index 103e3dd..3776f2e 100644
--- a/src/site/xdoc/manual/appenders.xml
+++ b/src/site/xdoc/manual/appenders.xml
@@ -2145,7 +2145,7 @@
             A RollingFileAppender requires a <a href="#TriggeringPolicies">TriggeringPolicy</a> and a
             <a href="#RolloverStrategies">RolloverStrategy</a>. The triggering policy determines if a rollover should
             be performed while the RolloverStrategy defines how the rollover should be done. If no RolloverStrategy
-            is configured, RollingFileAppender will use the <a href="DefaultRolloverStrategy">DefaultRolloverStrategy</a>.
+            is configured, RollingFileAppender will use the <a href="#DefaultRolloverStrategy">DefaultRolloverStrategy</a>.
           </p>
           <p>
             File locking is not supported by the RollingFileAppender.
