Index: trunk/test/unit/org/openstreetmap/josm/actions/ExpertToggleActionTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/actions/ExpertToggleActionTest.java	(revision 11224)
+++ trunk/test/unit/org/openstreetmap/josm/actions/ExpertToggleActionTest.java	(revision 11224)
@@ -0,0 +1,87 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.swing.JPanel;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Test {@link ExpertToggleAction}
+ * @author Michael Zangl
+ * @since 11224
+ */
+public class ExpertToggleActionTest {
+    /**
+     * We need prefs to store expert mode state.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules().preferences().platform();
+
+    /**
+     * Test {@link ExpertToggleAction#addVisibilitySwitcher(java.awt.Component)}
+     * and {@link ExpertToggleAction#removeVisibilitySwitcher(java.awt.Component)}
+     */
+    @Test
+    public void testVisibilitySwitcher() {
+        ExpertToggleAction.getInstance().setExpert(false);
+        JPanel c = new JPanel();
+
+        ExpertToggleAction.addVisibilitySwitcher(c);
+        assertFalse(c.isVisible());
+
+        ExpertToggleAction.getInstance().setExpert(true);
+        assertTrue(c.isVisible());
+
+        ExpertToggleAction.removeVisibilitySwitcher(c);
+        ExpertToggleAction.getInstance().setExpert(false);
+        assertTrue(c.isVisible());
+
+        // null should not be a problem
+        ExpertToggleAction.addVisibilitySwitcher(null);
+        ExpertToggleAction.removeVisibilitySwitcher(null);
+    }
+
+    /**
+     * Test {@link ExpertToggleAction#addExpertModeChangeListener(ExpertModeChangeListener)}
+     * and {@link ExpertToggleAction#removeExpertModeChangeListener(ExpertModeChangeListener)}
+     */
+    @Test
+    public void testExpertModeListener() {
+        AtomicBoolean value = new AtomicBoolean(false);
+        ExpertToggleAction.getInstance().setExpert(true);
+        ExpertModeChangeListener listener = value::set;
+
+        ExpertToggleAction.addExpertModeChangeListener(listener);
+        assertFalse(value.get());
+
+        ExpertToggleAction.getInstance().setExpert(false);
+        ExpertToggleAction.getInstance().setExpert(true);
+        assertTrue(value.get());
+
+        ExpertToggleAction.getInstance().setExpert(false);
+        assertFalse(value.get());
+
+        ExpertToggleAction.removeExpertModeChangeListener(listener);
+        ExpertToggleAction.getInstance().setExpert(true);
+        assertFalse(value.get());
+
+        ExpertToggleAction.addExpertModeChangeListener(listener, true);
+        assertTrue(value.get());
+
+        // null should not be a problem
+        ExpertToggleAction.addExpertModeChangeListener(null);
+        ExpertToggleAction.removeExpertModeChangeListener(null);
+    }
+
+}
Index: trunk/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java	(revision 11220)
+++ trunk/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java	(revision 11224)
@@ -4,5 +4,4 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -192,11 +191,9 @@
     public void testGetMenuEntries() {
         OsmDataLayer layer = new OsmDataLayer(new DataSet(), "", null);
-        boolean mode = ExpertToggleAction.isExpert();
-        ExpertToggleAction.getInstance().actionPerformed(null);
-        assertNotEquals(mode, ExpertToggleAction.isExpert());
-        assertEquals(ExpertToggleAction.isExpert() ? 16 : 13, layer.getMenuEntries().length);
-        ExpertToggleAction.getInstance().actionPerformed(null);
-        assertEquals(mode, ExpertToggleAction.isExpert());
-        assertEquals(ExpertToggleAction.isExpert() ? 16 : 13, layer.getMenuEntries().length);
+        ExpertToggleAction.getInstance().setExpert(true);
+        assertEquals(16, layer.getMenuEntries().length);
+
+        ExpertToggleAction.getInstance().setExpert(false);
+        assertEquals(13, layer.getMenuEntries().length);
     }
 
