diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index f220390..9365cc8 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -34,7 +34,6 @@
 import org.apache.log4j.chainsaw.prefs.SettingsManager;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiver;
 import org.apache.log4j.chainsaw.receiver.ChainsawReceiverFactory;
-import org.apache.log4j.chainsaw.receivers.ReceiversPanel;
 import org.apache.log4j.chainsaw.zeroconf.ZeroConfPlugin;
 import org.apache.log4j.rule.ExpressionRule;
 import org.apache.log4j.rule.Rule;
@@ -90,7 +89,6 @@
     private ChainsawAbout aboutBox;
     public TutorialFrame tutorialFrame;
     private final List<LogPanel> identifierPanels = new ArrayList<>();
-    private LogUiReceiversPanel logUiReceiversPanel;
 
     private JToolBar toolbar;
     private ChainsawToolBarAndMenus chainsawToolBarAndMenus;
@@ -327,8 +325,7 @@
         getContentPane().add(toolbar, BorderLayout.NORTH);
         getContentPane().add(statusBar, BorderLayout.SOUTH);
 
-        logUiReceiversPanel = new LogUiReceiversPanel(settingsManager, receivers, this, statusBar, panePanel);
-        getContentPane().add(logUiReceiversPanel.getMainReceiverSplitPane(), BorderLayout.CENTER);
+        createReceiversPanel(panePanel);
 
         addWindowListener(
             new WindowAdapter() {
@@ -368,11 +365,6 @@
         initPrefModelListeners();
         setVisible(true);
 
-        if (configuration.getBoolean("showReceivers", false)) {
-            logUiReceiversPanel.showReceiverPanel();
-        } else {
-            logUiReceiversPanel.hideReceiverPanel();
-        }
 
         /*
          * loads the saved tab settings and if there are hidden tabs,
@@ -388,6 +380,11 @@
         chainsawToolBarAndMenus.stateChange();
     }
 
+    private void createReceiversPanel(JPanel panePanel) {
+        LogUiReceiversPanel logUiReceiversPanel = new LogUiReceiversPanel(settingsManager, receivers, this, statusBar, panePanel);
+        getContentPane().add(logUiReceiversPanel.getMainReceiverSplitPane(), BorderLayout.CENTER);
+    }
+
     private MouseAdapter createMouseAdapter() {
         MouseAdapter mouseAdapter = new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
@@ -511,25 +508,6 @@
 
         configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
             evt -> {
-                if (evt.getPropertyName().equals("showReceivers")) {
-                    boolean value = (Boolean) evt.getPropertyValue();
-                    if (value) {
-                        logUiReceiversPanel.showReceiverPanel();
-                    } else {
-                        logUiReceiversPanel.hideReceiverPanel();
-                    }
-                }
-            });
-        boolean showReceivers = configuration.getBoolean("showReceivers", false);
-        setStatusBarVisible(showStatusBar);
-        if (showReceivers) {
-            logUiReceiversPanel.showReceiverPanel();
-        } else {
-            logUiReceiversPanel.hideReceiverPanel();
-        }
-
-        configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
-            evt -> {
                 if (evt.getPropertyName().equals("toolbar")) {
                     boolean value = (Boolean) evt.getPropertyValue();
                     toolbar.setVisible(value);
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUiReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogUiReceiversPanel.java
index 82cd97c..b0cc555 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUiReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUiReceiversPanel.java
@@ -1,11 +1,12 @@
 package org.apache.log4j.chainsaw;
 
+import org.apache.commons.configuration2.AbstractConfiguration;
+import org.apache.commons.configuration2.event.ConfigurationEvent;
 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.awt.*;
 import java.util.List;
 
 public class LogUiReceiversPanel {
@@ -22,8 +23,28 @@
         mainReceiverSplitPane.setContinuousLayout(true);
         dividerSize = mainReceiverSplitPane.getDividerSize();
         mainReceiverSplitPane.setDividerLocation(-1);
-
         mainReceiverSplitPane.setResizeWeight(1.0);
+
+        AbstractConfiguration configuration = settingsManager.getGlobalConfiguration();
+        boolean showReceivers = configuration.getBoolean("showReceivers", false);
+
+        configuration.addEventListener(ConfigurationEvent.SET_PROPERTY,
+            evt -> {
+                if (evt.getPropertyName().equals("showReceivers")) {
+                    boolean value = (Boolean) evt.getPropertyValue();
+                    if (value) {
+                        showReceiverPanel();
+                    } else {
+                        hideReceiverPanel();
+                    }
+                }
+            });
+
+        if (showReceivers) {
+            showReceiverPanel();
+        } else {
+            hideReceiverPanel();
+        }
     }
 
 
