diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java
index 980944e..4cf2875 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java
@@ -63,7 +63,27 @@ public class StatusLoggerAdmin extends NotificationBroadcasterSupport implements
         } catch (final Exception e) {
             throw new IllegalStateException(e);
         }
-        StatusLogger.getLogger().registerListener(this);
+        replaceOrAddLoggerListener(contextName);
+    }
+
+    /**
+     * Add listener to StatusLogger for this context, or replace it if it already exists.
+     *
+     * @param contextName
+     */
+    private void replaceOrAddLoggerListener(final String contextName) {
+        StatusLogger logger = StatusLogger.getLogger();
+        Iterable<StatusListener> listeners = logger.getListeners();
+        // Remove any StatusLoggerAdmin listeners already registered for this context
+        for (StatusListener statusListener : listeners) {
+            if (statusListener instanceof StatusLoggerAdmin) {
+                StatusLoggerAdmin adminListener = (StatusLoggerAdmin) statusListener;
+                if (contextName!=null && contextName.equals(adminListener.contextName)) {
+                    logger.removeListener(adminListener);
+                }
+            }
+        }
+        logger.registerListener(this);
     }
 
     private static MBeanNotificationInfo createNotificationInfo() {
