diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
index 70004a0..8f1186b 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
@@ -48,9 +48,13 @@
 
     private final String hostname;
 
+    private final int reconnectDelay;
+
+    private final int retries;
+
     private FlumeAvroAppender(String name, Filters filters, Layout layout, boolean handleException,
                               String hostname, String includes, String excludes, String required, String mdcPrefix,
-                              String eventPrefix, boolean compress, FlumeAvroManager manager) {
+                              String eventPrefix, boolean compress, int delay, int retries, FlumeAvroManager manager) {
         super(name, filters, layout, handleException);
         this.manager = manager;
         this.mdcIncludes = includes;
@@ -60,6 +64,8 @@
         this.mdcPrefix = mdcPrefix;
         this.compressBody = compress;
         this.hostname = hostname;
+        this.reconnectDelay = delay;
+        this.retries = retries;
     }
 
     public void append(LogEvent event) {
@@ -67,7 +73,7 @@
         FlumeEvent flumeEvent = new FlumeEvent(event, hostname, mdcIncludes, mdcExcludes, mdcRequired, mdcPrefix,
             eventPrefix, compressBody);
         flumeEvent.setBody(getLayout().format(flumeEvent));
-        manager.send(flumeEvent);
+        manager.send(flumeEvent, reconnectDelay, retries);
     }
 
     @Override
@@ -119,11 +125,11 @@
             return null;
         }
 
-        FlumeAvroManager manager = FlumeAvroManager.getManager(agents, reconnectDelay, retries);
+        FlumeAvroManager manager = FlumeAvroManager.getManager(agents);
         if (manager == null) {
             return null;
         }
         return new FlumeAvroAppender(name, filters, layout,  handleExceptions, hostname, includes,
-            excludes, required, mdcPrefix, eventPrefix, compress, manager);
+            excludes, required, mdcPrefix, eventPrefix, compress, reconnectDelay, retries, manager);
     }
 }
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
index 98d93c3..7089405 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
@@ -37,14 +37,10 @@
  */
 public class FlumeAvroManager extends AbstractManager {
 
-    private final int reconnectionDelay;
-
     private FlumeEventAvroServer client;
 
     private final Agent[] agents;
 
-    private final int retries;
-
     private static final int DEFAULT_RECONNECTS = 3;
 
     private int current = 0;
@@ -58,16 +54,11 @@
 
     private static Logger logger = StatusLogger.getLogger();
 
-    public static FlumeAvroManager getManager(Agent[] agents, int delay, int retries) {
+    public static FlumeAvroManager getManager(Agent[] agents) {
         if (agents == null || agents.length == 0) {
             throw new IllegalArgumentException("At least one agent is required");
         }
-        if (delay == 0) {
-            delay = DEFAULT_RECONNECTION_DELAY;
-        }
-        if (retries == 0) {
-            retries = DEFAULT_RECONNECTS;
-        }
+
         StringBuilder sb = new StringBuilder("FlumeAvro[");
         boolean first = true;
         for (Agent agent : agents) {
@@ -78,19 +69,23 @@
             first = false;
         }
         sb.append("]");
-        return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents, delay, retries));
+        return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents));
     }
 
 
-    public FlumeAvroManager(String name, Agent[] agents, int delay, int retries) {
+    public FlumeAvroManager(String name, Agent[] agents) {
         super(name);
         this.agents = agents;
         this.client = connect(agents);
-        this.reconnectionDelay = delay;
-        this.retries = retries;
     }
 
-    protected synchronized void send(FlumeEvent event)  {
+    protected synchronized void send(FlumeEvent event, int delay, int retries)  {
+        if (delay == 0) {
+            delay = DEFAULT_RECONNECTION_DELAY;
+        }
+        if (retries == 0) {
+            retries = DEFAULT_RECONNECTS;
+        }
         AvroFlumeEvent avroEvent = AvroEventConvertUtil.toAvroEvent(event);
         int i = 0;
 
@@ -106,7 +101,7 @@
                     logger.warn(msg, ex);
                     break;
                 }
-                sleep();
+                sleep(delay);
             }
         } while (++i < retries);
 
@@ -131,7 +126,7 @@
                         logger.warn(warnMsg, ex);
                         break;
                     }
-                    sleep();
+                    sleep(delay);
                 }
             } while (++i < retries);
         }
@@ -140,9 +135,9 @@
 
     }
 
-    private void sleep() {
+    private void sleep(int delay) {
         try {
-            Thread.sleep(reconnectionDelay);
+            Thread.sleep(delay);
         } catch (InterruptedException ex) {
             Thread.currentThread().interrupt();
         }
@@ -189,13 +184,9 @@
 
     private static class FactoryData {
         Agent[] agents;
-        int delay;
-        int retries;
 
-        public FactoryData(Agent[] agents, int delay, int retries) {
+        public FactoryData(Agent[] agents) {
             this.agents = agents;
-            this.delay = delay;
-            this.retries = retries;
         }
     }
 
@@ -204,7 +195,7 @@
         public FlumeAvroManager createManager(String name, FactoryData data) {
             try {
 
-                return new FlumeAvroManager(name, data.agents, data.delay, data.retries);
+                return new FlumeAvroManager(name, data.agents);
             } catch (Exception ex) {
                 logger.error("Could not create FlumeAvroManager", ex);
             }
