diff --git a/eeschema/tools/sch_edit_tool.cpp b/eeschema/tools/sch_edit_tool.cpp
index cff2585e18..d6b287e487 100644
--- a/eeschema/tools/sch_edit_tool.cpp
+++ b/eeschema/tools/sch_edit_tool.cpp
@@ -272,7 +272,6 @@ bool SCH_EDIT_TOOL::Init()
         moveMenu.AddItem( EE_ACTIONS::rotateCW,        orientCondition );
         moveMenu.AddItem( EE_ACTIONS::mirrorX,         orientCondition );
         moveMenu.AddItem( EE_ACTIONS::mirrorY,         orientCondition );
-        moveMenu.AddItem( ACTIONS::doDelete,           E_C::NotEmpty );
 
         moveMenu.AddItem( EE_ACTIONS::properties,      propertiesCondition );
         moveMenu.AddItem( EE_ACTIONS::editReference,   singleSymbolCondition );
@@ -288,6 +287,7 @@ bool SCH_EDIT_TOOL::Init()
         moveMenu.AddSeparator();
         moveMenu.AddItem( ACTIONS::cut,                E_C::IdleSelection );
         moveMenu.AddItem( ACTIONS::copy,               E_C::IdleSelection );
+        moveMenu.AddItem( ACTIONS::doDelete,           E_C::NotEmpty );
         moveMenu.AddItem( ACTIONS::duplicate,          duplicateCondition );
 
         moveMenu.AddSeparator();
@@ -333,7 +333,6 @@ bool SCH_EDIT_TOOL::Init()
     selToolMenu.AddItem( EE_ACTIONS::rotateCW,         orientCondition, 200 );
     selToolMenu.AddItem( EE_ACTIONS::mirrorX,          orientCondition, 200 );
     selToolMenu.AddItem( EE_ACTIONS::mirrorY,          orientCondition, 200 );
-    selToolMenu.AddItem( ACTIONS::doDelete,            E_C::NotEmpty, 200 );
 
     selToolMenu.AddItem( EE_ACTIONS::properties,       propertiesCondition, 200 );
     selToolMenu.AddItem( EE_ACTIONS::editReference,    E_C::SingleSymbol, 200 );
@@ -362,6 +361,7 @@ bool SCH_EDIT_TOOL::Init()
     selToolMenu.AddItem( ACTIONS::copy,                E_C::IdleSelection, 300 );
     selToolMenu.AddItem( ACTIONS::paste,               E_C::Idle, 300 );
     selToolMenu.AddItem( ACTIONS::pasteSpecial,        E_C::Idle, 300 );
+    selToolMenu.AddItem( ACTIONS::doDelete,            E_C::NotEmpty, 300 );
     selToolMenu.AddItem( ACTIONS::duplicate,           duplicateCondition, 300 );
 
     selToolMenu.AddSeparator( 400 );
diff --git a/eeschema/tools/symbol_editor_control.cpp b/eeschema/tools/symbol_editor_control.cpp
index 5bb88d6f62..cd98cc1d91 100644
--- a/eeschema/tools/symbol_editor_control.cpp
+++ b/eeschema/tools/symbol_editor_control.cpp
@@ -73,8 +73,10 @@ bool SYMBOL_EDITOR_CONTROL::Init()
 
         ctxMenu.AddItem( ACTIONS::pinLibrary,            unpinnedLibSelectedCondition );
         ctxMenu.AddItem( ACTIONS::unpinLibrary,          pinnedLibSelectedCondition );
-        ctxMenu.AddSeparator();
 
+        ctxMenu.AddSeparator();
+        ctxMenu.AddItem( ACTIONS::newLibrary,            SELECTION_CONDITIONS::ShowAlways );
+        ctxMenu.AddItem( ACTIONS::addLibrary,            SELECTION_CONDITIONS::ShowAlways );
         ctxMenu.AddItem( ACTIONS::save,                  libSelectedCondition );
         ctxMenu.AddItem( EE_ACTIONS::saveLibraryAs,      libSelectedCondition );
         ctxMenu.AddItem( ACTIONS::revert,                libSelectedCondition );
@@ -86,14 +88,14 @@ bool SYMBOL_EDITOR_CONTROL::Init()
         ctxMenu.AddSeparator();
         ctxMenu.AddItem( ACTIONS::save,                  symbolSelectedCondition );
         ctxMenu.AddItem( EE_ACTIONS::saveSymbolAs,       symbolSelectedCondition );
-        ctxMenu.AddItem( EE_ACTIONS::duplicateSymbol,    symbolSelectedCondition );
-        ctxMenu.AddItem( EE_ACTIONS::deleteSymbol,       symbolSelectedCondition );
         ctxMenu.AddItem( ACTIONS::revert,                symbolSelectedCondition );
 
         ctxMenu.AddSeparator();
         ctxMenu.AddItem( EE_ACTIONS::cutSymbol,          symbolSelectedCondition );
         ctxMenu.AddItem( EE_ACTIONS::copySymbol,         symbolSelectedCondition );
-        ctxMenu.AddItem( EE_ACTIONS::pasteSymbol,        libSelectedCondition );
+        ctxMenu.AddItem( EE_ACTIONS::pasteSymbol,        SELECTION_CONDITIONS::ShowAlways );
+        ctxMenu.AddItem( EE_ACTIONS::duplicateSymbol,    symbolSelectedCondition );
+        ctxMenu.AddItem( EE_ACTIONS::deleteSymbol,       symbolSelectedCondition );
 
         ctxMenu.AddSeparator();
         ctxMenu.AddItem( EE_ACTIONS::importSymbol,       libSelectedCondition );
diff --git a/eeschema/tools/symbol_editor_edit_tool.cpp b/eeschema/tools/symbol_editor_edit_tool.cpp
index 4d54880eb1..272ec75c24 100644
--- a/eeschema/tools/symbol_editor_edit_tool.cpp
+++ b/eeschema/tools/symbol_editor_edit_tool.cpp
@@ -84,7 +84,6 @@ bool SYMBOL_EDITOR_EDIT_TOOL::Init()
         moveMenu.AddItem( EE_ACTIONS::rotateCW,     canEdit && EE_CONDITIONS::NotEmpty, 200 );
         moveMenu.AddItem( EE_ACTIONS::mirrorX,      canEdit && EE_CONDITIONS::NotEmpty, 200 );
         moveMenu.AddItem( EE_ACTIONS::mirrorY,      canEdit && EE_CONDITIONS::NotEmpty, 200 );
-        moveMenu.AddItem( ACTIONS::doDelete,        canEdit && EE_CONDITIONS::NotEmpty, 200 );
 
         moveMenu.AddItem( EE_ACTIONS::properties,   canEdit && EE_CONDITIONS::Count( 1 ), 200 );
 
@@ -92,6 +91,7 @@ bool SYMBOL_EDITOR_EDIT_TOOL::Init()
         moveMenu.AddItem( ACTIONS::cut,             EE_CONDITIONS::IdleSelection, 300 );
         moveMenu.AddItem( ACTIONS::copy,            EE_CONDITIONS::IdleSelection, 300 );
         moveMenu.AddItem( ACTIONS::duplicate,       canEdit && EE_CONDITIONS::NotEmpty, 300 );
+        moveMenu.AddItem( ACTIONS::doDelete,        canEdit && EE_CONDITIONS::NotEmpty, 200 );
 
         moveMenu.AddSeparator( 400 );
         moveMenu.AddItem( ACTIONS::selectAll,       havePartCondition, 400 );
@@ -115,7 +115,6 @@ bool SYMBOL_EDITOR_EDIT_TOOL::Init()
     selToolMenu.AddItem( EE_ACTIONS::rotateCW,      canEdit && EE_CONDITIONS::NotEmpty, 200 );
     selToolMenu.AddItem( EE_ACTIONS::mirrorX,       canEdit && EE_CONDITIONS::NotEmpty, 200 );
     selToolMenu.AddItem( EE_ACTIONS::mirrorY,       canEdit && EE_CONDITIONS::NotEmpty, 200 );
-    selToolMenu.AddItem( ACTIONS::doDelete,         canEdit && EE_CONDITIONS::NotEmpty, 200 );
 
     selToolMenu.AddItem( EE_ACTIONS::properties,    canEdit && EE_CONDITIONS::Count( 1 ), 200 );
 
@@ -124,6 +123,7 @@ bool SYMBOL_EDITOR_EDIT_TOOL::Init()
     selToolMenu.AddItem( ACTIONS::copy,             EE_CONDITIONS::IdleSelection, 300 );
     selToolMenu.AddItem( ACTIONS::paste,            canEdit && EE_CONDITIONS::Idle, 300 );
     selToolMenu.AddItem( ACTIONS::duplicate,        canEdit && EE_CONDITIONS::NotEmpty, 300 );
+    selToolMenu.AddItem( ACTIONS::doDelete,         canEdit && EE_CONDITIONS::NotEmpty, 300 );
 
     selToolMenu.AddSeparator( 400 );
     selToolMenu.AddItem( ACTIONS::selectAll,        havePartCondition, 400 );
diff --git a/eeschema/tools/symbol_editor_pin_tool.cpp b/eeschema/tools/symbol_editor_pin_tool.cpp
index 6cbe5d3180..541b43a0e2 100644
--- a/eeschema/tools/symbol_editor_pin_tool.cpp
+++ b/eeschema/tools/symbol_editor_pin_tool.cpp
@@ -106,10 +106,10 @@ bool SYMBOL_EDITOR_PIN_TOOL::Init()
 
     CONDITIONAL_MENU& selToolMenu = m_selectionTool->GetToolMenu().GetMenu();
 
-    selToolMenu.AddSeparator( 400 );
-    selToolMenu.AddItem( EE_ACTIONS::pushPinLength,    canEdit && singlePinCondition, 400 );
-    selToolMenu.AddItem( EE_ACTIONS::pushPinNameSize,  canEdit && singlePinCondition, 400 );
-    selToolMenu.AddItem( EE_ACTIONS::pushPinNumSize,   canEdit && singlePinCondition, 400 );
+    selToolMenu.AddSeparator( 250 );
+    selToolMenu.AddItem( EE_ACTIONS::pushPinLength,    canEdit && singlePinCondition, 250 );
+    selToolMenu.AddItem( EE_ACTIONS::pushPinNameSize,  canEdit && singlePinCondition, 250 );
+    selToolMenu.AddItem( EE_ACTIONS::pushPinNumSize,   canEdit && singlePinCondition, 250 );
 
     return true;
 }
@@ -451,4 +451,3 @@ void SYMBOL_EDITOR_PIN_TOOL::setTransitions()
     Go( &SYMBOL_EDITOR_PIN_TOOL::PushPinProperties,    EE_ACTIONS::pushPinNameSize.MakeEvent() );
     Go( &SYMBOL_EDITOR_PIN_TOOL::PushPinProperties,    EE_ACTIONS::pushPinNumSize.MakeEvent() );
 }
-
diff --git a/pagelayout_editor/tools/pl_edit_tool.cpp b/pagelayout_editor/tools/pl_edit_tool.cpp
index a933a45eb9..bbd1ca53c2 100644
--- a/pagelayout_editor/tools/pl_edit_tool.cpp
+++ b/pagelayout_editor/tools/pl_edit_tool.cpp
@@ -75,11 +75,13 @@ bool PL_EDIT_TOOL::Init()
     //
     CONDITIONAL_MENU& selToolMenu = m_selectionTool->GetToolMenu().GetMenu();
 
-    selToolMenu.AddItem( ACTIONS::cut,               SELECTION_CONDITIONS::NotEmpty, 200 );
-    selToolMenu.AddItem( ACTIONS::copy,              SELECTION_CONDITIONS::NotEmpty, 200 );
-    selToolMenu.AddItem( ACTIONS::paste,             SELECTION_CONDITIONS::ShowAlways, 200 );
-    selToolMenu.AddItem( PL_ACTIONS::move,           SELECTION_CONDITIONS::NotEmpty, 200 );
-    selToolMenu.AddItem( ACTIONS::doDelete,          SELECTION_CONDITIONS::NotEmpty, 200 );
+    selToolMenu.AddItem( PL_ACTIONS::move,           SELECTION_CONDITIONS::NotEmpty, 250 );
+
+    selToolMenu.AddSeparator( 250 );
+    selToolMenu.AddItem( ACTIONS::cut,               SELECTION_CONDITIONS::NotEmpty, 250 );
+    selToolMenu.AddItem( ACTIONS::copy,              SELECTION_CONDITIONS::NotEmpty, 250 );
+    selToolMenu.AddItem( ACTIONS::paste,             SELECTION_CONDITIONS::ShowAlways, 250 );
+    selToolMenu.AddItem( ACTIONS::doDelete,          SELECTION_CONDITIONS::NotEmpty, 250 );
 
     return true;
 }
diff --git a/pagelayout_editor/tools/pl_selection_tool.cpp b/pagelayout_editor/tools/pl_selection_tool.cpp
index a39f083a13..e5b12d8448 100644
--- a/pagelayout_editor/tools/pl_selection_tool.cpp
+++ b/pagelayout_editor/tools/pl_selection_tool.cpp
@@ -45,14 +45,6 @@
  * setting of 40 is arbitrary.
  */
 #define MAX_SELECT_ITEM_IDS 40
-
-
-SELECTION_CONDITION PL_CONDITIONS::Idle = [] (const SELECTION& aSelection )
-{
-    return ( !aSelection.Front() || aSelection.Front()->GetEditFlags() == 0 );
-};
-
-
 #define HITTEST_THRESHOLD_PIXELS 3
 
 
@@ -75,11 +67,10 @@ bool PL_SELECTION_TOOL::Init()
     auto& menu = m_menu.GetMenu();
 
     menu.AddSeparator( 200 );
-    menu.AddItem( PL_ACTIONS::drawLine,                PL_CONDITIONS::Idle, 250 );
-    menu.AddItem( PL_ACTIONS::drawRectangle,           PL_CONDITIONS::Idle, 250 );
-    menu.AddItem( PL_ACTIONS::placeText,               PL_CONDITIONS::Idle, 250 );
-    menu.AddItem( PL_ACTIONS::placeImage,              PL_CONDITIONS::Idle, 250 );
-    menu.AddItem( PL_ACTIONS::appendImportedWorksheet, PL_CONDITIONS::Idle, 250 );
+    menu.AddItem( PL_ACTIONS::drawLine,      SELECTION_CONDITIONS::Empty, 200 );
+    menu.AddItem( PL_ACTIONS::drawRectangle, SELECTION_CONDITIONS::Empty, 200 );
+    menu.AddItem( PL_ACTIONS::placeText,     SELECTION_CONDITIONS::Empty, 200 );
+    menu.AddItem( PL_ACTIONS::placeImage,    SELECTION_CONDITIONS::Empty, 200 );
 
     menu.AddSeparator( 1000 );
     m_frame->AddStandardSubMenus( m_menu );
@@ -795,5 +786,3 @@ void PL_SELECTION_TOOL::setTransitions()
     Go( &PL_SELECTION_TOOL::RemoveItemsFromSel,    PL_ACTIONS::removeItemsFromSel.MakeEvent() );
     Go( &PL_SELECTION_TOOL::SelectionMenu,         PL_ACTIONS::selectionMenu.MakeEvent() );
 }
-
-
diff --git a/pagelayout_editor/tools/pl_selection_tool.h b/pagelayout_editor/tools/pl_selection_tool.h
index 1c969b626d..10b25a5f24 100644
--- a/pagelayout_editor/tools/pl_selection_tool.h
+++ b/pagelayout_editor/tools/pl_selection_tool.h
@@ -39,13 +39,6 @@ namespace KIGFX
 }
 
 
-class PL_CONDITIONS : public SELECTION_CONDITIONS
-{
-public:
-    static SELECTION_CONDITION Idle;
-};
-
-
 class PL_SELECTION_TOOL : public TOOL_INTERACTIVE
 {
 public:
diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp
index 386b2c8725..f4f2060919 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -143,11 +143,14 @@ bool EDIT_TOOL::Init()
     menu.AddItem( PCB_ACTIONS::flip, SELECTION_CONDITIONS::NotEmpty );
     menu.AddItem( PCB_ACTIONS::mirror, inFootprintEditor && SELECTION_CONDITIONS::NotEmpty );
 
-    menu.AddItem( ACTIONS::doDelete, SELECTION_CONDITIONS::NotEmpty );
     menu.AddItem( PCB_ACTIONS::properties, SELECTION_CONDITIONS::Count( 1 )
                       || SELECTION_CONDITIONS::OnlyTypes( GENERAL_COLLECTOR::Tracks ) );
 
-    menu.AddItem( ACTIONS::duplicate, SELECTION_CONDITIONS::NotEmpty );
+    // Footprint actions
+    menu.AddSeparator();
+    menu.AddItem( PCB_ACTIONS::editFpInFpEditor, singleFootprintCondition );
+    menu.AddItem( PCB_ACTIONS::updateFootprint, singleFootprintCondition );
+    menu.AddItem( PCB_ACTIONS::changeFootprint, singleFootprintCondition );
 
     // Add the submenu for create array and special move
     auto specialToolsSubMenu = std::make_shared<SPECIAL_TOOLS_CONTEXT_MENU>( this );
@@ -161,13 +164,11 @@ bool EDIT_TOOL::Init()
     // Selection tool handles the context menu for some other tools, such as the Picker.
     // Don't add things like Paste when another tool is active.
     menu.AddItem( ACTIONS::paste, noActiveToolCondition, 150 );
-    menu.AddItem( ACTIONS::selectAll, noItemsCondition, 150 );
+    menu.AddItem( ACTIONS::duplicate, SELECTION_CONDITIONS::NotEmpty, 150 );
+    menu.AddItem( ACTIONS::doDelete, SELECTION_CONDITIONS::NotEmpty, 150 );
 
-    // Footprint actions
     menu.AddSeparator( 150 );
-    menu.AddItem( PCB_ACTIONS::editFpInFpEditor, singleFootprintCondition, 150 );
-    menu.AddItem( PCB_ACTIONS::updateFootprint, singleFootprintCondition, 150 );
-    menu.AddItem( PCB_ACTIONS::changeFootprint, singleFootprintCondition, 150 );
+    menu.AddItem( ACTIONS::selectAll, noItemsCondition, 150 );
 
     return true;
 }
@@ -2036,5 +2037,3 @@ void EDIT_TOOL::setTransitions()
     Go( &EDIT_TOOL::copyToClipboard,     PCB_ACTIONS::copyWithReference.MakeEvent() );
     Go( &EDIT_TOOL::cutToClipboard,      ACTIONS::cut.MakeEvent() );
 }
-
-
diff --git a/pcbnew/tools/footprint_editor_control.cpp b/pcbnew/tools/footprint_editor_control.cpp
index 1bc62a6fd6..21ff5c52ab 100644
--- a/pcbnew/tools/footprint_editor_control.cpp
+++ b/pcbnew/tools/footprint_editor_control.cpp
@@ -97,8 +97,8 @@ bool FOOTPRINT_EDITOR_CONTROL::Init()
 
     ctxMenu.AddItem( ACTIONS::pinLibrary,            unpinnedLibSelectedCondition );
     ctxMenu.AddItem( ACTIONS::unpinLibrary,          pinnedLibSelectedCondition );
-    ctxMenu.AddSeparator();
 
+    ctxMenu.AddSeparator();
     ctxMenu.AddItem( ACTIONS::newLibrary,            SELECTION_CONDITIONS::ShowAlways );
     ctxMenu.AddItem( ACTIONS::addLibrary,            SELECTION_CONDITIONS::ShowAlways );
     ctxMenu.AddItem( ACTIONS::save,                  libSelectedCondition );
@@ -106,25 +106,25 @@ bool FOOTPRINT_EDITOR_CONTROL::Init()
     ctxMenu.AddItem( ACTIONS::revert,                libSelectedCondition );
 
     ctxMenu.AddSeparator();
-    ctxMenu.AddItem( PCB_ACTIONS::newFootprint,      SELECTION_CONDITIONS::ShowAlways );
+    ctxMenu.AddItem( PCB_ACTIONS::newFootprint,      libSelectedCondition );
 #ifdef KICAD_SCRIPTING
-    ctxMenu.AddItem( PCB_ACTIONS::createFootprint,   SELECTION_CONDITIONS::ShowAlways );
+    ctxMenu.AddItem( PCB_ACTIONS::createFootprint,   libSelectedCondition );
 #endif
     ctxMenu.AddItem( PCB_ACTIONS::editFootprint,     fpSelectedCondition );
 
     ctxMenu.AddSeparator();
     ctxMenu.AddItem( ACTIONS::save,                  fpSelectedCondition );
     ctxMenu.AddItem( ACTIONS::saveCopyAs,            fpSelectedCondition );
-    ctxMenu.AddItem( PCB_ACTIONS::deleteFootprint,   fpSelectedCondition );
     ctxMenu.AddItem( ACTIONS::revert,                fpSelectedCondition );
 
     ctxMenu.AddSeparator();
     ctxMenu.AddItem( PCB_ACTIONS::cutFootprint,      fpSelectedCondition );
     ctxMenu.AddItem( PCB_ACTIONS::copyFootprint,     fpSelectedCondition );
     ctxMenu.AddItem( PCB_ACTIONS::pasteFootprint,    SELECTION_CONDITIONS::ShowAlways );
+    ctxMenu.AddItem( PCB_ACTIONS::deleteFootprint,   fpSelectedCondition );
 
     ctxMenu.AddSeparator();
-    ctxMenu.AddItem( PCB_ACTIONS::importFootprint,   SELECTION_CONDITIONS::ShowAlways );
+    ctxMenu.AddItem( PCB_ACTIONS::importFootprint,   libSelectedCondition );
     ctxMenu.AddItem( PCB_ACTIONS::exportFootprint,   fpSelectedCondition );
 
     return true;