diff --git a/common/tool/conditional_menu.cpp b/common/tool/conditional_menu.cpp
index 15135b2faf..671ddf1eb9 100644
--- a/common/tool/conditional_menu.cpp
+++ b/common/tool/conditional_menu.cpp
@@ -69,12 +69,6 @@ void CONDITIONAL_MENU::AddItem( int aId, const wxString& aText, const wxString&
         AddBitmapToMenuItem( item, KiBitmap( aIcon ) );
 
     addEntry( ENTRY( item, aIcon, aCondition, aOrder, false ) );
-
-#ifdef __WXMAC__
-    // Make sure the Mac-specific preference-menu handling code can find it
-    if( aId == wxID_PREFERENCES )
-        Append( new wxMenuItem( this, aId, aText, aTooltip, wxITEM_NORMAL ) );
-#endif
 }
 
 
@@ -104,6 +98,14 @@ void CONDITIONAL_MENU::AddSeparator( const SELECTION_CONDITION& aCondition, int
 }
 
 
+SELECTION g_resolveDummySelection;
+
+void CONDITIONAL_MENU::Resolve()
+{
+    Evaluate( g_resolveDummySelection );
+}
+
+
 void CONDITIONAL_MENU::Evaluate( SELECTION& aSelection )
 {
     Clear();
@@ -143,9 +145,13 @@ void CONDITIONAL_MENU::Evaluate( SELECTION& aSelection )
 
             case ENTRY::WXITEM:
 #ifdef __WXMAC__
-                // wxWidgets moved the Preferences... item to the Apple menu
+                // Instantiate the Preferences item only on the first Resolve(); after that
+                // wxWidgets will have moved it to the Application menu
                 if( entry.wxItem()->GetId() == wxID_PREFERENCES )
-                    continue;
+                {
+                    if( &aSelection != &g_resolveDummySelection )
+                        continue;
+                }
 #endif
                 menuItem = new wxMenuItem( this,
                                            entry.wxItem()->GetId(),
diff --git a/eeschema/libedit/menubar_libedit.cpp b/eeschema/libedit/menubar_libedit.cpp
index e34b693b57..5eee6de2ca 100644
--- a/eeschema/libedit/menubar_libedit.cpp
+++ b/eeschema/libedit/menubar_libedit.cpp
@@ -108,6 +108,8 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, EE_CONDITIONS::ShowAlways );
 
+    fileMenu->Resolve();
+
     //-- Edit menu -----------------------------------------------
     //
     CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
@@ -135,6 +137,8 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
     editMenu->AddItem( EE_ACTIONS::symbolProperties, havePartCondition );
     editMenu->AddItem( EE_ACTIONS::pinTable,         havePartCondition );
 
+    editMenu->Resolve();
+
     //-- View menu -----------------------------------------------
     //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
@@ -181,6 +185,8 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
     viewMenu->AddSeparator();
     viewMenu->AddCheckItem( EE_ACTIONS::showComponentTree, compTreeShownCondition );
 
+    viewMenu->Resolve();
+
     //-- Place menu -----------------------------------------------
     //
     CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
@@ -192,6 +198,8 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
     placeMenu->AddItem( EE_ACTIONS::drawSymbolArc,         EE_CONDITIONS::ShowAlways );
     placeMenu->AddItem( EE_ACTIONS::drawSymbolLines,       EE_CONDITIONS::ShowAlways );
 
+    placeMenu->Resolve();
+
     //-- Inspect menu -----------------------------------------------
     //
     CONDITIONAL_MENU* inspectMenu = new CONDITIONAL_MENU( false, selTool );
@@ -208,6 +216,8 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
                  _( "Check for duplicate and off-grid pins" ),
                  KiBitmap( erc_xpm ) );
 
+    inspectMenu->Resolve();
+
     //-- Preferences menu -----------------------------------------------
     //
     CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool );
@@ -239,8 +249,9 @@ void LIB_EDIT_FRAME::ReCreateMenuBar()
     prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
     prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition );
 
-    //
-    // Create the menubar and append all submenus
+    prefsMenu->Resolve();
+
+    //-- Menubar -------------------------------------------------------------
     //
     menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( editMenu, _( "&Edit" ) );
diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp
index 4716f2efb7..06e5229167 100644
--- a/eeschema/menubar.cpp
+++ b/eeschema/menubar.cpp
@@ -131,6 +131,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, EE_CONDITIONS::ShowAlways );
 
+    fileMenu->Resolve();
+
     //-- Edit menu -----------------------------------------------------------
     //
     CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
@@ -165,6 +167,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
                        _( "Sets symbol fields to original library values" ),
                        update_fields_xpm,            EE_CONDITIONS::ShowAlways );
 
+    editMenu->Resolve();
+
     //-- View menu -----------------------------------------------------------
     //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
@@ -217,9 +221,11 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     viewMenu->AddCheckItem( EE_ACTIONS::toggleHiddenPins, hiddenPinsCondition );
 
 #ifdef __APPLE__
-    viewMenu->AppendSeparator();
+    viewMenu->AddSeparator();
 #endif
 
+    viewMenu->Resolve();
+
     //-- Place menu -----------------------------------------------------------
     //
     CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
@@ -246,6 +252,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     placeMenu->AddItem( EE_ACTIONS::placeSchematicText,     EE_CONDITIONS::ShowAlways );
     placeMenu->AddItem( EE_ACTIONS::placeImage,             EE_CONDITIONS::ShowAlways );
 
+    placeMenu->Resolve();
+
     //-- Inspect menu -----------------------------------------------
     //
     CONDITIONAL_MENU* inspectMenu = new CONDITIONAL_MENU( false, selTool );
@@ -255,6 +263,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     inspectMenu->AddItem( EE_ACTIONS::runSimulation,        EE_CONDITIONS::ShowAlways );
 #endif
 
+    inspectMenu->Resolve();
+
     //-- Tools menu -----------------------------------------------
     //
     CONDITIONAL_MENU* toolsMenu = new CONDITIONAL_MENU( false, selTool );
@@ -291,6 +301,8 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     toolsMenu->AddItem( EE_ACTIONS::assignFootprints,       EE_CONDITIONS::ShowAlways );
     toolsMenu->AddItem( EE_ACTIONS::generateBOM,            EE_CONDITIONS::ShowAlways );
 
+    toolsMenu->Resolve();
+
     //-- Preferences menu -----------------------------------------------
     //
     CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool );
@@ -322,7 +334,9 @@ void SCH_EDIT_FRAME::ReCreateMenuBar()
     prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
     prefsMenu->AddCheckItem( ACTIONS::standardGraphics,    standardGraphicsCondition );
 
-    //-- Menubar -----------------------------------------------
+    prefsMenu->Resolve();
+
+    //-- Menubar -------------------------------------------------------------
     //
     menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( editMenu, _( "&Edit" ) );
diff --git a/eeschema/toolbars_viewlib.cpp b/eeschema/toolbars_viewlib.cpp
index d5f8a51871..109eba4e7c 100644
--- a/eeschema/toolbars_viewlib.cpp
+++ b/eeschema/toolbars_viewlib.cpp
@@ -96,19 +96,16 @@ void LIB_VIEW_FRAME::ReCreateVToolbar()
 }
 
 
-// Virtual function
 void LIB_VIEW_FRAME::ReCreateMenuBar()
 {
     LIB_CONTROL* libControl = m_toolManager->GetTool<LIB_CONTROL>();
-    // wxWidgets handles the Mac Application menu behind the scenes, but that means
+    // wxWidgets handles the OSX Application menu behind the scenes, but that means
     // we always have to start from scratch with a new wxMenuBar.
     wxMenuBar* oldMenuBar = GetMenuBar();
     wxMenuBar* menuBar = new wxMenuBar();
-    wxString   text;
 
-    // Recreate all menus:
-
-    // Menu File:
+    //-- File menu -----------------------------------------------------------
+    //
     wxMenu* fileMenu = new wxMenu;
 
     AddMenuItem( fileMenu, wxID_EXIT,
@@ -116,13 +113,13 @@ void LIB_VIEW_FRAME::ReCreateMenuBar()
                  _( "Close schematic symbol viewer" ),
                  KiBitmap( exit_xpm ) );
 
-    // View menu
+    //-- View menu -----------------------------------------------------------
+    //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, libControl );
 
     auto gridShownCondition = [ this ] ( const SELECTION& aSel ) {
         return IsGridVisible();
     };
-
     auto electricalTypesShownCondition = [ this ] ( const SELECTION& aSel ) {
         return GetShowElectricalType();
     };
@@ -139,9 +136,11 @@ void LIB_VIEW_FRAME::ReCreateMenuBar()
     viewMenu->AddSeparator();
     viewMenu->AddCheckItem( EE_ACTIONS::showElectricalTypes, electricalTypesShownCondition );
 
-    // Append menus to the menubar
-    menuBar->Append( fileMenu, _( "&File" ) );
+    viewMenu->Resolve();
 
+    //-- Menubar -------------------------------------------------------------
+    //
+    menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( viewMenu, _( "&View" ) );
     AddStandardHelpMenu( menuBar );
 
diff --git a/gerbview/menubar.cpp b/gerbview/menubar.cpp
index 82c6d4905d..082c2916c1 100644
--- a/gerbview/menubar.cpp
+++ b/gerbview/menubar.cpp
@@ -44,7 +44,7 @@ void GERBVIEW_FRAME::ReCreateMenuBar()
     wxMenuBar* oldMenuBar = GetMenuBar();
     wxMenuBar* menuBar = new wxMenuBar();
 
-    //-- File menu -----------------------------------------------
+    //-- File menu -------------------------------------------------------
     //
     CONDITIONAL_MENU*   fileMenu = new CONDITIONAL_MENU( false, selTool );
     static ACTION_MENU* openRecentGbrMenu;
@@ -142,7 +142,9 @@ void GERBVIEW_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, SELECTION_CONDITIONS::ShowAlways );
 
-    //-- View menu -----------------------------------------------
+    fileMenu->Resolve();
+
+    //-- View menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -226,7 +228,9 @@ void GERBVIEW_FRAME::ReCreateMenuBar()
                             _( "Show in high contrast mode" ),
                             contrast_mode_xpm,                         contrastModeCondition );
 
-    //-- Tools menu -----------------------------------------------
+    viewMenu->Resolve();
+
+    //-- Tools menu -------------------------------------------------------
     //
     wxMenu* toolsMenu = new wxMenu;
 
@@ -270,9 +274,9 @@ void GERBVIEW_FRAME::ReCreateMenuBar()
     preferencesMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
     preferencesMenu->AddCheckItem( ACTIONS::standardGraphics,    standardGraphicsCondition );
 
-    preferencesMenu->AppendSeparator();
+    preferencesMenu->Resolve();
 
-    //-- Menubar -----------------------------------------------
+    //-- Menubar -------------------------------------------------------------
     //
     menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( viewMenu, _( "&View" ) );
diff --git a/include/tool/conditional_menu.h b/include/tool/conditional_menu.h
index 6ccc749f86..f15ea6b052 100644
--- a/include/tool/conditional_menu.h
+++ b/include/tool/conditional_menu.h
@@ -110,6 +110,15 @@ public:
      */
     void Evaluate( SELECTION& aSelection );
 
+    /**
+     * Function Resolve()
+     *
+     * Updates the initial contents so that wxWidgets doesn't get its knickers tied in a knot
+     * over the menu being empty (mainly an issue on GTK, but also on OSX with the preferences
+     * and quit menu items).
+     */
+     void Resolve();
+
 private:
     ///> Helper class to organize menu entries.
     class ENTRY
diff --git a/pagelayout_editor/menubar.cpp b/pagelayout_editor/menubar.cpp
index 15c0e79b6a..7f31fe6100 100644
--- a/pagelayout_editor/menubar.cpp
+++ b/pagelayout_editor/menubar.cpp
@@ -57,8 +57,7 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     if( openRecentMenu )
         Kiface().GetFileHistory().RemoveMenu( openRecentMenu );
 
-    //
-    // File Menu:
+    //-- File menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -86,8 +85,9 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, SELECTION_CONDITIONS::ShowAlways );
 
-    //
-    // Edit Menu:
+    fileMenu->Resolve();
+
+    //-- Edit menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -110,8 +110,9 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     editMenu->AddItem( ACTIONS::paste,        idleCondition );
     editMenu->AddItem( ACTIONS::doDelete,     SELECTION_CONDITIONS::MoreThan( 0 ) );
 
-    //
-    // View Menu:
+    editMenu->Resolve();
+
+    //-- View menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -137,8 +138,9 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     viewMenu->AddCheckItem( ACTIONS::toggleGrid,             gridShownCondition );
     viewMenu->AddCheckItem( ACTIONS::toggleCursorStyle,      fullCrosshairCondition );
 
-    //
-    // Place Menu:
+    viewMenu->Resolve();
+
+    //-- Place menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -150,8 +152,9 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     placeMenu->AddSeparator();
     placeMenu->AddItem( PL_ACTIONS::appendImportedWorksheet, SELECTION_CONDITIONS::ShowAlways );
 
-    //
-    // Menu for preferences
+    placeMenu->Resolve();
+
+    //-- Preferences menu --------------------------------------------------
     //
     wxMenu* preferencesMenu = new wxMenu;
 
@@ -163,7 +166,8 @@ void PL_EDITOR_FRAME::ReCreateMenuBar()
     // Language submenu
     Pgm().AddMenuLanguageList( preferencesMenu );
 
-    // Append menus to the menubar
+    //-- Menubar -----------------------------------------------------------
+    //
     menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( editMenu, _( "&Edit" ) );
     menuBar->Append( viewMenu, _( "&View" ) );
diff --git a/pcbnew/menubar_footprint_editor.cpp b/pcbnew/menubar_footprint_editor.cpp
index 7bcf3f8995..d096a10b14 100644
--- a/pcbnew/menubar_footprint_editor.cpp
+++ b/pcbnew/menubar_footprint_editor.cpp
@@ -59,7 +59,7 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
        return( !libName.IsEmpty() || !partName.IsEmpty() );
     };
 
-            //-- File menu -----------------------------------------------
+    //-- File menu ----------------------------------------------------------
     //
     CONDITIONAL_MENU* fileMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -131,7 +131,9 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, SELECTION_CONDITIONS::ShowAlways );
 
-    //-- Edit menu -----------------------------------------------
+    fileMenu->Resolve();
+
+    //-- Edit menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -171,7 +173,9 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
                  _( "Delete the current footprint" ),
                  KiBitmap( delete_xpm ) );
 
-    //-- View menu -----------------------------------------------
+    editMenu->Resolve();
+
+    //-- View menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -260,7 +264,9 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
                             _( "&Search Tree" ), _( "Toggles the search tree visibility" ),
                             search_tree_xpm, searchTreeShownCondition );
 
-    //-- Place menu -----------------------------------------------
+    viewMenu->Resolve();
+
+    //-- Place menu -------------------------------------------------------
     //
     CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -277,8 +283,9 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
     placeMenu->AddItem( PCB_ACTIONS::setAnchor,   SELECTION_CONDITIONS::ShowAlways );
     placeMenu->AddItem( ACTIONS::gridSetOrigin,   SELECTION_CONDITIONS::ShowAlways );
 
+    placeMenu->Resolve();
 
-    //-- Inspect menu -----------------------------------------------
+    //-- Inspect menu -------------------------------------------------------
     //
     wxMenu* inspectMenu = new wxMenu;
 
@@ -287,7 +294,7 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
                  _( "Measure distance" ),
                  KiBitmap( measurement_xpm ) );
 
-    //-- Tools menu -----------------------------------------------
+    //-- Tools menu -------------------------------------------------------
     //
     wxMenu* toolsMenu = new wxMenu;
 
@@ -302,7 +309,7 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
                  KiBitmap( insert_module_board_xpm ) );
 
 
-    //-- Preferences menu -----------------------------------------------
+    //-- Preferences menu -------------------------------------------------
     //
     CONDITIONAL_MENU* prefsMenu = new CONDITIONAL_MENU( false, selTool );
 
@@ -333,6 +340,8 @@ void FOOTPRINT_EDIT_FRAME::ReCreateMenuBar()
     prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
     prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition );
 
+    prefsMenu->Resolve();
+
     //--MenuBar -----------------------------------------------------------
     //
     menuBar->Append( fileMenu, _( "&File" ) );
diff --git a/pcbnew/menubar_pcb_editor.cpp b/pcbnew/menubar_pcb_editor.cpp
index 8457190a22..e03a39c89e 100644
--- a/pcbnew/menubar_pcb_editor.cpp
+++ b/pcbnew/menubar_pcb_editor.cpp
@@ -201,7 +201,6 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
     fileMenu->AddItem( ACTIONS::print,             SELECTION_CONDITIONS::ShowAlways );
     fileMenu->AddItem( ACTIONS::plot,              SELECTION_CONDITIONS::ShowAlways );
 
-
     // Archive submenu
     ACTION_MENU* submenuArchive = new ACTION_MENU();
     submenuArchive->SetTool( selTool );
@@ -225,6 +224,8 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
     // Don't use ACTIONS::quit; wxWidgets moves this on OSX and expects to find it via wxID_EXIT
     fileMenu->AddItem( wxID_EXIT, _( "Quit" ), "", exit_xpm, SELECTION_CONDITIONS::ShowAlways );
 
+    fileMenu->Resolve();
+
     //-- Edit menu -----------------------------------------------------------
     //
     CONDITIONAL_MENU* editMenu = new CONDITIONAL_MENU( false, selTool );
@@ -280,7 +281,10 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
                        _( "Clean stubs, vias, delete break points or unconnected tracks" ),
                        delete_xpm,                     SELECTION_CONDITIONS::ShowAlways );
 
+    editMenu->Resolve();
+
     //----- View menu -----------------------------------------------------------
+    //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
 
     auto layersPaletteShownCondition = [ this ] ( const SELECTION& aSel ) {
@@ -412,6 +416,8 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
     viewMenu->AppendSeparator();
 #endif
 
+    viewMenu->Resolve();
+
     //-- Place Menu ----------------------------------------------------------
     //
     CONDITIONAL_MENU* placeMenu = new CONDITIONAL_MENU( false, selTool );
@@ -448,6 +454,8 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
 
     placeMenu->AddMenu( autoplaceSubmenu );
 
+    placeMenu->Resolve();
+
     //-- Route Menu ----------------------------------------------------------
     //
     wxMenu* routeMenu = new wxMenu;
@@ -514,6 +522,8 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
     prefsMenu->AddCheckItem( ACTIONS::acceleratedGraphics, acceleratedGraphicsCondition );
     prefsMenu->AddCheckItem( ACTIONS::standardGraphics, standardGraphicsCondition );
 
+    prefsMenu->Resolve();
+
     //--MenuBar -----------------------------------------------------------
     //
     menuBar->Append( fileMenu, _( "&File" ) );
diff --git a/pcbnew/toolbars_footprint_viewer.cpp b/pcbnew/toolbars_footprint_viewer.cpp
index 8ec40d1bb6..59f5cb5efb 100644
--- a/pcbnew/toolbars_footprint_viewer.cpp
+++ b/pcbnew/toolbars_footprint_viewer.cpp
@@ -115,7 +115,6 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateVToolbar()
 }
 
 
-// Virtual function
 void FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar()
 {
     SELECTION_TOOL* selTool = m_toolManager->GetTool<SELECTION_TOOL>();
@@ -123,11 +122,9 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar()
     // we always have to start from scratch with a new wxMenuBar.
     wxMenuBar* oldMenuBar = GetMenuBar();
     wxMenuBar* menuBar = new wxMenuBar();
-    wxString   text;
 
-    // Recreate all menus:
-
-    // Menu File:
+    //----- File menu -----------------------------------------------------------
+    //
     wxMenu* fileMenu = new wxMenu;
 
     // Close viewer
@@ -136,7 +133,8 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar()
                  _( "Close footprint viewer" ),
                  KiBitmap( exit_xpm ) );
 
-    // View menu
+    //----- View menu -----------------------------------------------------------
+    //
     CONDITIONAL_MENU* viewMenu = new CONDITIONAL_MENU( false, selTool );
 
     viewMenu->AddSeparator();
@@ -145,14 +143,16 @@ void FOOTPRINT_VIEWER_FRAME::ReCreateMenuBar()
     viewMenu->AddItem( ACTIONS::zoomFitScreen,   SELECTION_CONDITIONS::ShowAlways );
     viewMenu->AddItem( ACTIONS::zoomRedraw,      SELECTION_CONDITIONS::ShowAlways );
 
-    viewMenu->AppendSeparator();
+    viewMenu->AddSeparator();
+    viewMenu->AddItem( ID_MODVIEW_SHOW_3D_VIEW,
+                       AddHotkeyName( _( "3D Viewer" ), g_Module_Viewer_Hotkeys_Descr, HK_3D_VIEWER ),
+                       _( "Show footprint in 3D viewer" ),
+                       three_d_xpm,              SELECTION_CONDITIONS::ShowAlways );
 
-    // 3D view
-    text = AddHotkeyName( _( "3&D Viewer" ), g_Module_Viewer_Hotkeys_Descr, HK_3D_VIEWER );
-    AddMenuItem( viewMenu, ID_MODVIEW_SHOW_3D_VIEW, text, _( "Show footprint in 3D viewer" ),
-                 KiBitmap( three_d_xpm ) );
+    viewMenu->Resolve();
 
-    // Append menus to the menubar
+    //----- Menubar -------------------------------------------------------------
+    //
     menuBar->Append( fileMenu, _( "&File" ) );
     menuBar->Append( viewMenu, _( "&View" ) );
     AddStandardHelpMenu( menuBar );