diff --git a/3d-viewer/3d_navlib/nl_3d_viewer_plugin_impl.cpp b/3d-viewer/3d_navlib/nl_3d_viewer_plugin_impl.cpp
index 51816af0c3..1c4d1b6f42 100644
--- a/3d-viewer/3d_navlib/nl_3d_viewer_plugin_impl.cpp
+++ b/3d-viewer/3d_navlib/nl_3d_viewer_plugin_impl.cpp
@@ -591,7 +591,7 @@ long NL_3D_VIEWER_PLUGIN_IMPL::SetActiveCommand( std::string commandId )
 
             if( runAction )
             {
-                tool_manager->RunAction( *context, true );
+                tool_manager->RunAction( *context );
                 m_canvas->Request_refresh();
             }
         }
diff --git a/common/dialog_about/dialog_about.cpp b/common/dialog_about/dialog_about.cpp
index 4a7fbcd902..1ddb1090c9 100644
--- a/common/dialog_about/dialog_about.cpp
+++ b/common/dialog_about/dialog_about.cpp
@@ -478,14 +478,14 @@ void DIALOG_ABOUT::onCopyVersionInfo( wxCommandEvent& event )
 void DIALOG_ABOUT::onDonateClick( wxCommandEvent& event )
 {
     if( TOOL_MANAGER* mgr = static_cast<EDA_BASE_FRAME*>( GetParent() )->GetToolManager() )
-        mgr->RunAction( "common.SuiteControl.donate", true );
+        mgr->RunAction( "common.SuiteControl.donate" );
 }
 
 
 void DIALOG_ABOUT::onReportBug( wxCommandEvent& event )
 {
     if( TOOL_MANAGER* mgr = static_cast<EDA_BASE_FRAME*>( GetParent() )->GetToolManager() )
-        mgr->RunAction( "common.SuiteControl.reportBug", true );
+        mgr->RunAction( "common.SuiteControl.reportBug" );
 }
 
 
diff --git a/common/dialogs/dialog_grid_settings.cpp b/common/dialogs/dialog_grid_settings.cpp
index d2da138c97..724fa303c3 100644
--- a/common/dialogs/dialog_grid_settings.cpp
+++ b/common/dialogs/dialog_grid_settings.cpp
@@ -130,8 +130,8 @@ bool DIALOG_GRID_SETTINGS::TransferDataFromWindow()
     mgr->ResetTools( TOOL_BASE::REDRAW );
 
     // Notify GAL
-    mgr->RunAction( ACTIONS::gridPreset, true, gridCfg.last_size_idx );
-    mgr->RunAction( ACTIONS::gridSetOrigin, true, new VECTOR2D( m_parent->GetGridOrigin() ) );
+    mgr->RunAction( ACTIONS::gridPreset, gridCfg.last_size_idx );
+    mgr->RunAction( ACTIONS::gridSetOrigin, new VECTOR2D( m_parent->GetGridOrigin() ) );
 
     m_parent->UpdateGridSelectBox();
 
diff --git a/common/eda_base_frame.cpp b/common/eda_base_frame.cpp
index e510cfb323..a2c0540abe 100644
--- a/common/eda_base_frame.cpp
+++ b/common/eda_base_frame.cpp
@@ -1260,7 +1260,7 @@ void EDA_BASE_FRAME::DoWithAcceptedFiles()
     for( const wxFileName& file : m_AcceptedFiles )
     {
         wxString fn = file.GetFullPath();
-        m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( file.GetExt() ), true, &fn );
+        m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( file.GetExt() ), &fn );
     }
 }
 
diff --git a/common/eda_draw_frame.cpp b/common/eda_draw_frame.cpp
index 1db8d61cd3..b012776c55 100644
--- a/common/eda_draw_frame.cpp
+++ b/common/eda_draw_frame.cpp
@@ -276,7 +276,7 @@ void EDA_DRAW_FRAME::unitsChangeRefresh()
 {
     // Notify all tools the units have changed
     if( m_toolManager )
-        m_toolManager->RunAction( ACTIONS::updateUnits, true );
+        m_toolManager->RunAction( ACTIONS::updateUnits );
 
     UpdateStatusBar();
     UpdateMsgPanel();
@@ -347,7 +347,7 @@ void EDA_DRAW_FRAME::CommonSettingsChanged( bool aEnvVarsChanged, bool aTextVars
 
     // Notify all tools the preferences have changed
     if( m_toolManager )
-        m_toolManager->RunAction( ACTIONS::updatePreferences, true );
+        m_toolManager->RunAction( ACTIONS::updatePreferences );
 }
 
 
@@ -465,11 +465,11 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
         // (Only matters on some versions of GTK.)
         wxSafeYield();
 
-        m_toolManager->RunAction( ACTIONS::gridProperties, true );
+        m_toolManager->RunAction( ACTIONS::gridProperties );
     }
     else
     {
-        m_toolManager->RunAction( ACTIONS::gridPreset, true, idx );
+        m_toolManager->RunAction( ACTIONS::gridPreset, idx );
     }
 
     UpdateStatusBar();
@@ -556,7 +556,7 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event )
     if( id < 0 || !( id < (int)m_zoomSelectBox->GetCount() ) )
         return;
 
-    m_toolManager->RunAction( ACTIONS::zoomPreset, true, id );
+    m_toolManager->RunAction( ACTIONS::zoomPreset, id );
     UpdateStatusBar();
     m_canvas->Refresh();
     // Needed on Windows because clicking on m_zoomSelectBox remove the focus from m_canvas
@@ -913,7 +913,7 @@ void EDA_DRAW_FRAME::HardRedraw()
 
 void EDA_DRAW_FRAME::Zoom_Automatique( bool aWarpPointer )
 {
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 }
 
 
diff --git a/common/tool/action_manager.cpp b/common/tool/action_manager.cpp
index 22b6c76684..9092bc28f9 100644
--- a/common/tool/action_manager.cpp
+++ b/common/tool/action_manager.cpp
@@ -205,7 +205,7 @@ bool ACTION_MANAGER::RunHotKey( int aHotKey ) const
                     KeyNameFromKeyCode( aHotKey ) );
 
         if( runAction )
-            return m_toolMgr->RunAction( *context, true );
+            return m_toolMgr->RunAction( *context );
     }
     else if( !global.empty() )
     {
@@ -222,7 +222,7 @@ bool ACTION_MANAGER::RunHotKey( int aHotKey ) const
                         act->GetName(),
                         KeyNameFromKeyCode( aHotKey ) );
 
-            if( runAction && m_toolMgr->RunAction( *act, true ) )
+            if( runAction && m_toolMgr->RunAction( *act ) )
                 return true;
         }
     }
diff --git a/common/tool/action_menu.cpp b/common/tool/action_menu.cpp
index 5245a53b5a..20ee35d807 100644
--- a/common/tool/action_menu.cpp
+++ b/common/tool/action_menu.cpp
@@ -405,7 +405,7 @@ void ACTION_MENU::OnMenuEvent( wxMenuEvent& aEvent )
     if( type == wxEVT_MENU_OPEN )
     {
         if( m_dirty && m_tool )
-            getToolManager()->RunAction<ACTION_MENU*>( ACTIONS::updateMenu, true, this );
+            getToolManager()->RunAction<ACTION_MENU*>( ACTIONS::updateMenu, this );
 
         wxMenu* parent = dynamic_cast<wxMenu*>( GetParent() );
 
diff --git a/common/tool/common_tools.cpp b/common/tool/common_tools.cpp
index 5f73cf044d..5cb3ec82f2 100644
--- a/common/tool/common_tools.cpp
+++ b/common/tool/common_tools.cpp
@@ -163,7 +163,7 @@ int COMMON_TOOLS::CursorControl( const TOOL_EVENT& aEvent )
     }
 
     getViewControls()->SetCursorPosition( cursor, true, true, type );
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     return 0;
 }
diff --git a/cvpcb/cvpcb_mainframe.cpp b/cvpcb/cvpcb_mainframe.cpp
index d0b7ae1a66..6981b2e176 100644
--- a/cvpcb/cvpcb_mainframe.cpp
+++ b/cvpcb/cvpcb_mainframe.cpp
@@ -328,7 +328,7 @@ void CVPCB_MAINFRAME::setupEventHandlers()
             [this]( wxCommandEvent& )
             {
                 // saveAssociations must be run immediately
-                GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociationsToFile, true );
+                GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociationsToFile );
             } );
 
     // Connect the handlers for the ok/cancel buttons
@@ -336,7 +336,7 @@ void CVPCB_MAINFRAME::setupEventHandlers()
             [this]( wxCommandEvent& )
             {
                 // saveAssociations must be run immediately, before running Close( true )
-                GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociationsToSchematic, true );
+                GetToolManager()->RunAction( CVPCB_ACTIONS::saveAssociationsToSchematic );
                 Close( true );
             }, wxID_OK );
     Bind( wxEVT_BUTTON,
@@ -503,7 +503,7 @@ void CVPCB_MAINFRAME::updateFootprintViewerOnIdle( wxIdleEvent& aEvent )
 
     // If the footprint view window is displayed, update the footprint.
     if( GetFootprintViewerFrame() )
-        GetToolManager()->RunAction( CVPCB_ACTIONS::showFootprintViewer, true );
+        GetToolManager()->RunAction( CVPCB_ACTIONS::showFootprintViewer );
 
     DisplayStatus();
 
diff --git a/cvpcb/display_footprints_frame.cpp b/cvpcb/display_footprints_frame.cpp
index d764e950dc..621c5dfb16 100644
--- a/cvpcb/display_footprints_frame.cpp
+++ b/cvpcb/display_footprints_frame.cpp
@@ -572,9 +572,9 @@ void DISPLAY_FOOTPRINTS_FRAME::updateView()
     wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_CVPCB_FPVIEWER_AUTOZOOM_TOOL );
 
     if( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED )
-        m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+        m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     else
-        m_toolManager->RunAction( ACTIONS::centerContents, true );
+        m_toolManager->RunAction( ACTIONS::centerContents );
 
     UpdateMsgPanel();
 }
diff --git a/cvpcb/footprints_listbox.cpp b/cvpcb/footprints_listbox.cpp
index 8a865f39d3..3dbd0b81dd 100644
--- a/cvpcb/footprints_listbox.cpp
+++ b/cvpcb/footprints_listbox.cpp
@@ -205,7 +205,7 @@ void FOOTPRINTS_LISTBOX::OnLeftClick( wxListEvent& event )
 
 void FOOTPRINTS_LISTBOX::OnLeftDClick( wxListEvent& event )
 {
-    GetParent()->GetToolManager()->RunAction( CVPCB_ACTIONS::associate, true );
+    GetParent()->GetToolManager()->RunAction( CVPCB_ACTIONS::associate );
 }
 
 
diff --git a/cvpcb/tools/cvpcb_association_tool.cpp b/cvpcb/tools/cvpcb_association_tool.cpp
index 28e1ef678e..9c08e1d2d7 100644
--- a/cvpcb/tools/cvpcb_association_tool.cpp
+++ b/cvpcb/tools/cvpcb_association_tool.cpp
@@ -221,7 +221,7 @@ int CVPCB_ASSOCIATION_TOOL::Associate( const TOOL_EVENT& aEvent )
     }
 
     // Move to the next not associated component
-    m_toolMgr->RunAction( CVPCB_ACTIONS::gotoNextNA );
+    m_toolMgr->PostAction( CVPCB_ACTIONS::gotoNextNA );
 
     return 0;
 }
diff --git a/cvpcb/tools/cvpcb_control.cpp b/cvpcb/tools/cvpcb_control.cpp
index 2353074612..da0938e857 100644
--- a/cvpcb/tools/cvpcb_control.cpp
+++ b/cvpcb/tools/cvpcb_control.cpp
@@ -70,13 +70,13 @@ int CVPCB_CONTROL::Main( const TOOL_EVENT& aEvent )
             {
             // The right arrow moves focus to the focusable object to the right
             case WXK_RIGHT:
-                m_toolMgr->RunAction( CVPCB_ACTIONS::changeFocusRight );
+                m_toolMgr->PostAction( CVPCB_ACTIONS::changeFocusRight );
                 handled = true;
                 break;
 
             // The left arrow moves focus to the focusable object to the left
             case WXK_LEFT:
-                m_toolMgr->RunAction( CVPCB_ACTIONS::changeFocusLeft );
+                m_toolMgr->PostAction( CVPCB_ACTIONS::changeFocusLeft );
                 handled = true;
                 break;
 
diff --git a/cvpcb/tools/cvpcb_fpviewer_selection_tool.cpp b/cvpcb/tools/cvpcb_fpviewer_selection_tool.cpp
index 72f8051039..7404175d45 100644
--- a/cvpcb/tools/cvpcb_fpviewer_selection_tool.cpp
+++ b/cvpcb/tools/cvpcb_fpviewer_selection_tool.cpp
@@ -64,7 +64,7 @@ int CVPCB_FOOTPRINT_VIEWER_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsDblClick( BUT_MIDDLE ) )
         {
-            m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
         }
         else if( evt->IsCancel() || evt->Action() == TA_UNDO_REDO_PRE )
         {
diff --git a/eeschema/cross-probing.cpp b/eeschema/cross-probing.cpp
index 91a58e5735..451cf3e027 100644
--- a/eeschema/cross-probing.cpp
+++ b/eeschema/cross-probing.cpp
@@ -215,12 +215,12 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
 
     if( strcmp( idcmd, "$CONFIG" ) == 0 )
     {
-        GetToolManager()->RunAction( ACTIONS::showSymbolLibTable, true );
+        GetToolManager()->RunAction( ACTIONS::showSymbolLibTable );
         return;
     }
     else if( strcmp( idcmd, "$ERC" ) == 0 )
     {
-        GetToolManager()->RunAction( EE_ACTIONS::runERC, true );
+        GetToolManager()->RunAction( EE_ACTIONS::runERC );
         return;
     }
     else if( strcmp( idcmd, "$NET:" ) == 0 )
@@ -235,7 +235,7 @@ void SCH_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
         else
             m_highlightedConn = wxEmptyString;
 
-        GetToolManager()->RunAction( EE_ACTIONS::updateNetHighlighting, true );
+        GetToolManager()->RunAction( EE_ACTIONS::updateNetHighlighting );
 
         SetStatusText( _( "Selected net:" ) + wxS( " " ) + UnescapeString( netName ) );
         return;
@@ -970,7 +970,7 @@ void SCH_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
         break;
 
     case MAIL_SCH_UPDATE:
-        m_toolManager->RunAction( ACTIONS::updateSchematicFromPcb, true );
+        m_toolManager->RunAction( ACTIONS::updateSchematicFromPcb );
         break;
 
     case MAIL_RELOAD_LIB:
diff --git a/eeschema/dialogs/dialog_erc.cpp b/eeschema/dialogs/dialog_erc.cpp
index 0e9a3e4ee6..8b8d51019b 100644
--- a/eeschema/dialogs/dialog_erc.cpp
+++ b/eeschema/dialogs/dialog_erc.cpp
@@ -276,7 +276,7 @@ void DIALOG_ERC::OnDeleteOneClick( wxCommandEvent& aEvent )
     if( m_notebook->GetSelection() == 0 )
     {
         // Clear the selection.  It may be the selected ERC marker.
-        m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+        m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
         m_markerTreeModel->DeleteCurrentItem( true );
 
@@ -632,8 +632,8 @@ void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent )
 
         if( !sheet.empty() && sheet != m_parent->GetCurrentSheet() )
         {
-            m_parent->GetToolManager()->RunAction( ACTIONS::cancelInteractive, true );
-            m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+            m_parent->GetToolManager()->RunAction( ACTIONS::cancelInteractive );
+            m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
             m_parent->SetCurrentSheet( sheet );
             m_parent->DisplayCurrentSheet();
@@ -951,7 +951,7 @@ void DIALOG_ERC::OnSeverity( wxCommandEvent& aEvent )
 void DIALOG_ERC::deleteAllMarkers( bool aIncludeExclusions )
 {
     // Clear current selection list to avoid selection of deleted items
-    m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+    m_parent->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
     m_markerTreeModel->DeleteItems( false, aIncludeExclusions, false );
 
diff --git a/eeschema/dialogs/dialog_migrate_buses.cpp b/eeschema/dialogs/dialog_migrate_buses.cpp
index b27cdf9a80..712576cb28 100644
--- a/eeschema/dialogs/dialog_migrate_buses.cpp
+++ b/eeschema/dialogs/dialog_migrate_buses.cpp
@@ -68,7 +68,7 @@ DIALOG_MIGRATE_BUSES::DIALOG_MIGRATE_BUSES( SCH_EDIT_FRAME* aParent )
     loadGraphData();
     updateUi();
 
-    aParent->GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+    aParent->GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
 }
 
 
diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp
index 622f705201..6f7dd6ab95 100644
--- a/eeschema/files-io.cpp
+++ b/eeschema/files-io.cpp
@@ -286,7 +286,7 @@ bool SCH_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
             // Do not leave g_RootSheet == NULL because it is expected to be
             // a valid sheet. Therefore create a dummy empty root sheet and screen.
             CreateScreens();
-            m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
             msg.Printf( _( "Failed to load '%s'." ), fullFileName );
             SetMsgPanel( wxEmptyString, msg );
@@ -1287,7 +1287,7 @@ void SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
             // Do not leave g_RootSheet == NULL because it is expected to be
             // a valid sheet. Therefore create a dummy empty root sheet and screen.
             CreateScreens();
-            m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
             wxString msg = wxString::Format( _( "Error loading schematic '%s'." ), aFileName );
             DisplayErrorMessage( this, msg, ioe.What() );
@@ -1298,7 +1298,7 @@ void SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
         catch( const std::exception& exc )
         {
             CreateScreens();
-            m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
             wxString msg = wxString::Format( _( "Unhandled exception occurred loading schematic "
                                                 "'%s'." ), aFileName );
diff --git a/eeschema/navlib/nl_schematic_plugin_impl.cpp b/eeschema/navlib/nl_schematic_plugin_impl.cpp
index c661c778d2..56284b76e4 100644
--- a/eeschema/navlib/nl_schematic_plugin_impl.cpp
+++ b/eeschema/navlib/nl_schematic_plugin_impl.cpp
@@ -478,7 +478,7 @@ long NL_SCHEMATIC_PLUGIN_IMPL::SetActiveCommand( std::string commandId )
 
             if( runAction )
             {
-                tool_manager->RunAction( *context, true );
+                tool_manager->RunAction( *context );
             }
         }
         else
diff --git a/eeschema/picksymbol.cpp b/eeschema/picksymbol.cpp
index d64031266d..b6532962d0 100644
--- a/eeschema/picksymbol.cpp
+++ b/eeschema/picksymbol.cpp
@@ -305,7 +305,7 @@ void SCH_EDIT_FRAME::ConvertPart( SCH_SYMBOL* aSymbol )
 
     // If selected make sure all the now-included pins are selected
     if( aSymbol->IsSelected() )
-        m_toolManager->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, true, aSymbol );
+        m_toolManager->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, aSymbol );
 
     UpdateItem( aSymbol, false, true );
     commit.Push( _( "Convert Symbol" ) );
diff --git a/eeschema/sch_edit_frame.cpp b/eeschema/sch_edit_frame.cpp
index db318c192d..8d78980ef4 100644
--- a/eeschema/sch_edit_frame.cpp
+++ b/eeschema/sch_edit_frame.cpp
@@ -479,7 +479,7 @@ void SCH_EDIT_FRAME::setupTools()
     m_toolManager->InitTools();
 
     // Run the selection tool, it is supposed to be always active
-    m_toolManager->RunAction( EE_ACTIONS::selectionActivate );
+    m_toolManager->PostAction( EE_ACTIONS::selectionActivate );
 
     GetCanvas()->SetEventDispatcher( m_toolDispatcher );
 }
@@ -885,7 +885,7 @@ bool SCH_EDIT_FRAME::canCloseWindow( wxCloseEvent& aEvent )
     // Note this this will commit *some* pending changes.  For instance, the EE_POINT_EDITOR
     // will cancel any drag currently in progress, but commit all changes from previous drags.
     if( m_toolManager )
-        m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
+        m_toolManager->RunAction( ACTIONS::cancelInteractive );
 
     // Shutdown blocks must be determined and vetoed as early as possible
     if( KIPLATFORM::APP::SupportsShutdownBlockReason() && aEvent.GetId() == wxEVT_QUERY_END_SESSION
@@ -1256,7 +1256,7 @@ void SCH_EDIT_FRAME::OnFindDialogClose()
     m_findReplaceDialog->Destroy();
     m_findReplaceDialog = nullptr;
 
-    m_toolManager->RunAction( ACTIONS::updateFind, true );
+    m_toolManager->RunAction( ACTIONS::updateFind );
 }
 
 
@@ -1664,7 +1664,7 @@ void SCH_EDIT_FRAME::updateTitle()
 
 void SCH_EDIT_FRAME::initScreenZoom()
 {
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     GetScreen()->m_zoomInitialized = true;
 }
 
@@ -1965,7 +1965,7 @@ void SCH_EDIT_FRAME::UpdateNetHighlightStatus()
 void SCH_EDIT_FRAME::SetScreen( BASE_SCREEN* aScreen )
 {
     if( m_toolManager )
-        m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     SCH_BASE_FRAME::SetScreen( aScreen );
     GetCanvas()->DisplaySheet( static_cast<SCH_SCREEN*>( aScreen ) );
@@ -2067,7 +2067,7 @@ void SCH_EDIT_FRAME::onSize( wxSizeEvent& aEvent )
         // We only need this until the frame is done resizing and the final client size is
         // established.
         Unbind( wxEVT_SIZE, &SCH_EDIT_FRAME::onSize, this );
-        GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+        GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
     }
 
     // Skip() is called in the base class.
@@ -2149,13 +2149,13 @@ void SCH_EDIT_FRAME::DisplayCurrentSheet()
 {
     wxCHECK( m_toolManager, /* void */ );
 
-    m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( ACTIONS::cancelInteractive );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
     SCH_SCREEN* screen = GetCurrentSheet().LastScreen();
 
     wxCHECK( screen, /* void */ );
 
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     SCH_BASE_FRAME::SetScreen( screen );
 
diff --git a/eeschema/schematic_undo_redo.cpp b/eeschema/schematic_undo_redo.cpp
index 5f868858c4..8d21cef6ce 100644
--- a/eeschema/schematic_undo_redo.cpp
+++ b/eeschema/schematic_undo_redo.cpp
@@ -287,7 +287,7 @@ void SCH_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
             if( eda_item->Type() == SCH_SHEET_T )
             {
                 if( static_cast<SCH_SHEET*>( eda_item )->GetScreen() == GetScreen() )
-                    GetToolManager()->RunAction( EE_ACTIONS::leaveSheet );
+                    GetToolManager()->PostAction( EE_ACTIONS::leaveSheet );
             }
 
             SCH_ITEM* schItem = static_cast<SCH_ITEM*>( eda_item );
diff --git a/eeschema/sim/simulator_frame.cpp b/eeschema/sim/simulator_frame.cpp
index 513b60e9d6..38f607b71a 100644
--- a/eeschema/sim/simulator_frame.cpp
+++ b/eeschema/sim/simulator_frame.cpp
@@ -613,7 +613,7 @@ void SIMULATOR_FRAME::doCloseWindow()
     m_simulator->Clean();
 
     // Cancel a running simProbe or simTune tool
-    m_schematicFrame->GetToolManager()->RunAction( ACTIONS::cancelInteractive );
+    m_schematicFrame->GetToolManager()->PostAction( ACTIONS::cancelInteractive );
 
     SaveSettings( config() );
 
diff --git a/eeschema/symbol_editor/symbol_edit_frame.cpp b/eeschema/symbol_editor/symbol_edit_frame.cpp
index ad9d45a7e2..226beaa23f 100644
--- a/eeschema/symbol_editor/symbol_edit_frame.cpp
+++ b/eeschema/symbol_editor/symbol_edit_frame.cpp
@@ -223,7 +223,7 @@ SYMBOL_EDIT_FRAME::SYMBOL_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
     bbox.SetSize( max_size_x, max_size_y );
     GetCanvas()->GetView()->SetBoundary( bbox );
 
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
     m_acceptedExts.emplace( KiCadSymbolLibFileExtension, &ACTIONS::ddAddLibrary );
     DragAcceptFiles( true );
@@ -660,8 +660,8 @@ void SYMBOL_EDIT_FRAME::OnSelectUnit( wxCommandEvent& event )
     if( ( i == wxNOT_FOUND ) || ( ( i + 1 ) == m_unit ) )
         return;
 
-    m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( ACTIONS::cancelInteractive );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     m_unit = i + 1;
 
@@ -717,7 +717,7 @@ wxString SYMBOL_EDIT_FRAME::SetCurLib( const wxString& aLibNickname )
 
 void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom )
 {
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
     GetCanvas()->GetView()->Clear();
     delete m_symbol;
 
@@ -748,7 +748,7 @@ void SYMBOL_EDIT_FRAME::SetCurSymbol( LIB_SYMBOL* aSymbol, bool aUpdateZoom )
     GetCanvas()->GetView()->ClearHiddenFlags();
 
     if( aUpdateZoom )
-        m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+        m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
     GetCanvas()->Refresh();
 
@@ -1152,7 +1152,7 @@ void SYMBOL_EDIT_FRAME::emptyScreen()
     SetCurSymbol( nullptr, false );
     SetScreen( m_dummyScreen );
     ClearUndoRedoList();
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     Refresh();
 }
 
diff --git a/eeschema/symbol_editor/symbol_editor.cpp b/eeschema/symbol_editor/symbol_editor.cpp
index e55540e094..217d200e0e 100644
--- a/eeschema/symbol_editor/symbol_editor.cpp
+++ b/eeschema/symbol_editor/symbol_editor.cpp
@@ -241,7 +241,7 @@ bool SYMBOL_EDIT_FRAME::LoadSymbolFromCurrentLib( const wxString& aAliasName, in
     m_SyncPinEdit = GetCurSymbol()->IsMulti() && !GetCurSymbol()->UnitsLocked();
 
     ClearUndoRedoList();
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     SetShowDeMorgan( GetCurSymbol()->Flatten()->HasConversion() );
 
     if( aUnit > 0 )
@@ -265,7 +265,7 @@ bool SYMBOL_EDIT_FRAME::LoadOneLibrarySymbolAux( LIB_SYMBOL* aEntry, const wxStr
         return false;
     }
 
-    m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
+    m_toolManager->RunAction( ACTIONS::cancelInteractive );
 
     // Symbols from the schematic are edited in place and not managed by the library manager.
     if( IsSymbolFromSchematic() )
@@ -336,7 +336,7 @@ void SYMBOL_EDIT_FRAME::SaveAll()
 
 void SYMBOL_EDIT_FRAME::CreateNewSymbol( const wxString& inheritFromSymbolName )
 {
-    m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
+    m_toolManager->RunAction( ACTIONS::cancelInteractive );
 
     wxArrayString rootSymbols;
     wxString lib = getTargetLib();
@@ -1032,7 +1032,7 @@ bool SYMBOL_EDIT_FRAME::saveLibrary( const wxString& aLibrary, bool aNewFile )
     SCH_IO_MGR::SCH_FILE_T fileType = SCH_IO_MGR::SCH_FILE_T::SCH_KICAD;
     PROJECT&   prj = Prj();
 
-    m_toolManager->RunAction( ACTIONS::cancelInteractive, true );
+    m_toolManager->RunAction( ACTIONS::cancelInteractive );
 
     if( !aNewFile && ( aLibrary.empty() || !prj.SchSymbolLibTable()->HasLibrary( aLibrary ) ) )
     {
diff --git a/eeschema/symbol_editor/symbol_editor_undo_redo.cpp b/eeschema/symbol_editor/symbol_editor_undo_redo.cpp
index 4ac0a12e58..ca517040bb 100644
--- a/eeschema/symbol_editor/symbol_editor_undo_redo.cpp
+++ b/eeschema/symbol_editor/symbol_editor_undo_redo.cpp
@@ -62,7 +62,7 @@ void SYMBOL_EDIT_FRAME::GetSymbolFromRedoList()
     if( GetRedoCommandCount() <= 0 )
         return;
 
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     // Load the last redo entry
     PICKED_ITEMS_LIST* redoCommand = PopCommandFromRedoList();
@@ -115,7 +115,7 @@ void SYMBOL_EDIT_FRAME::GetSymbolFromUndoList()
     if( GetUndoCommandCount() <= 0 )
         return;
 
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     // Load the last undo entry
     PICKED_ITEMS_LIST* undoCommand = PopCommandFromUndoList();
@@ -165,7 +165,7 @@ void SYMBOL_EDIT_FRAME::GetSymbolFromUndoList()
 
 void SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo()
 {
-    m_toolManager->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolManager->RunAction( EE_ACTIONS::clearSelection );
 
     // Load the last undo entry
     PICKED_ITEMS_LIST* undoCommand = PopCommandFromUndoList();
diff --git a/eeschema/symbol_viewer_frame.cpp b/eeschema/symbol_viewer_frame.cpp
index 1f56a0c1e9..2043ed3313 100644
--- a/eeschema/symbol_viewer_frame.cpp
+++ b/eeschema/symbol_viewer_frame.cpp
@@ -266,7 +266,7 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAM
     bbox.SetOrigin( -max_size_x / 2, -max_size_y / 2 );
     bbox.SetSize( max_size_x, max_size_y );
     GetCanvas()->GetView()->SetBoundary( bbox );
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+    GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
 
     // If a symbol was previously selected in m_symbolList from a previous run, show it
     wxString symbName = m_symbolList->GetStringSelection();
@@ -492,7 +492,7 @@ void SYMBOL_VIEWER_FRAME::updatePreviewSymbol()
         AppendMsgPanel( _( "Keywords" ), m_previewItem->GetKeyWords() );
     }
 
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     GetCanvas()->Refresh();
 }
 
@@ -921,7 +921,7 @@ void SYMBOL_VIEWER_FRAME::SetSelectedSymbol( const wxString& aSymbolName )
 
 void SYMBOL_VIEWER_FRAME::DClickOnSymbolList( wxCommandEvent& event )
 {
-    m_toolManager->RunAction( EE_ACTIONS::addSymbolToSchematic, true );
+    m_toolManager->RunAction( EE_ACTIONS::addSymbolToSchematic );
 }
 
 
diff --git a/eeschema/tools/ee_selection_tool.cpp b/eeschema/tools/ee_selection_tool.cpp
index 73566099eb..14df6aafb9 100644
--- a/eeschema/tools/ee_selection_tool.cpp
+++ b/eeschema/tools/ee_selection_tool.cpp
@@ -483,9 +483,9 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
             EDA_ITEM* item = m_selection.Front();
 
             if( item && item->Type() == SCH_SHEET_T )
-                m_toolMgr->RunAction( EE_ACTIONS::enterSheet );
+                m_toolMgr->PostAction( EE_ACTIONS::enterSheet );
             else
-                m_toolMgr->RunAction( EE_ACTIONS::properties );
+                m_toolMgr->PostAction( EE_ACTIONS::properties );
         }
         else if( evt->IsDblClick( BUT_MIDDLE ) )
         {
@@ -493,9 +493,9 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
 
             // Middle double click?  Do zoom to fit or zoom to objects
             if( evt->Modifier( MD_CTRL ) ) // Is CTRL key down?
-                m_toolMgr->RunAction( ACTIONS::zoomFitObjects, true );
+                m_toolMgr->RunAction( ACTIONS::zoomFitObjects );
             else
-                m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+                m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
         }
         else if( evt->IsDrag( BUT_LEFT ) )
         {
@@ -561,11 +561,11 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsMouseDown( BUT_AUX1 ) )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::navigateBack, true );
+            m_toolMgr->RunAction( EE_ACTIONS::navigateBack );
         }
         else if( evt->IsMouseDown( BUT_AUX2 ) )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::navigateForward, true );
+            m_toolMgr->RunAction( EE_ACTIONS::navigateForward );
         }
         else if( evt->Category() == TC_COMMAND && evt->Action() == TA_CHOICE_MENU_CHOICE )
         {
@@ -585,7 +585,7 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
                      && *evt->GetCommandId() <= ID_POPUP_SCH_UNFOLD_BUS_END )
             {
                 wxString* net = new wxString( *evt->Parameter<wxString*>() );
-                m_toolMgr->RunAction<wxString*>( EE_ACTIONS::unfoldBus, true, net );
+                m_toolMgr->RunAction<wxString*>( EE_ACTIONS::unfoldBus, net );
             }
         }
         else if( evt->IsCancelInteractive() )
@@ -907,7 +907,7 @@ bool EE_SELECTION_TOOL::selectPoint( EE_COLLECTOR& aCollector, const VECTOR2I& a
         // Try to call selectionMenu via RunAction() to avoid event-loop contention
         // But it we cannot handle the event, then we don't have an active tool loop, so
         // handle it directly.
-        if( !m_toolMgr->RunAction<COLLECTOR*>( EE_ACTIONS::selectionMenu, true, &aCollector ) )
+        if( !m_toolMgr->RunAction<COLLECTOR*>( EE_ACTIONS::selectionMenu, &aCollector ) )
         {
             if( !doSelectionMenu( &aCollector ) )
                 aCollector.m_MenuCancelled = true;
diff --git a/eeschema/tools/sch_drawing_tools.cpp b/eeschema/tools/sch_drawing_tools.cpp
index 33cf35b0c3..9fd35c5f1b 100644
--- a/eeschema/tools/sch_drawing_tools.cpp
+++ b/eeschema/tools/sch_drawing_tools.cpp
@@ -153,7 +153,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
             {
                 m_frame->SaveCopyForRepeatItem( aSymbol );
 
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_selectionTool->AddItemToSel( aSymbol );
 
                 aSymbol->SetFlags( IS_NEW | IS_MOVING );
@@ -163,7 +163,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
 
                 // Set IS_MOVING again, as AddItemToCommitAndScreen() will have cleared it.
                 aSymbol->SetFlags( IS_MOVING );
-                m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                m_toolMgr->PostAction( ACTIONS::refreshPreview );
             };
 
     auto setCursor =
@@ -176,7 +176,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&]()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete symbol;
                 symbol = nullptr;
@@ -299,7 +299,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
         {
             if( !symbol )
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
                 // Pick the symbol to be placed
                 bool footprintPreviews = m_frame->eeconfig()->m_Appearance.footprint_preview;
@@ -422,7 +422,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
                 if( symbol )
                 {
                     m_frame->SelectUnit( symbol, unit );
-                    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                    m_toolMgr->PostAction( ACTIONS::refreshPreview );
                 }
             }
         }
@@ -486,7 +486,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
 
     REENTRANCY_GUARD guard( &m_inPlaceImage );
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     // Add all the drawable symbols to preview
     if( image )
@@ -510,7 +510,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 m_view->RecacheAllItems();
                 delete image;
@@ -528,7 +528,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
     // Prime the pump
     if( image )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else if( aEvent.HasPosition() )
     {
@@ -601,7 +601,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
         {
             if( !image )
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
                 wxFileDialog dlg( m_frame, _( "Choose Image" ), m_mruPath, wxEmptyString,
                                   _( "Image Files" ) + wxS( " " ) + wxImage::GetImageExtWildcard(),
@@ -658,7 +658,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
                 commit.Push( _( "Add Image" ) );
 
                 image = nullptr;
-                m_toolMgr->RunAction( ACTIONS::activatePointEditor );
+                m_toolMgr->PostAction( ACTIONS::activatePointEditor );
 
                 m_view->ClearPreview();
 
@@ -766,7 +766,7 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
         return 0;
     }
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     cursorPos = aEvent.HasPosition() ? aEvent.Position() : controls->GetMousePosition();
 
@@ -793,7 +793,7 @@ int SCH_DRAWING_TOOLS::SingleClickPlace( const TOOL_EVENT& aEvent )
     if( aEvent.HasPosition() && type != SCH_SHEET_PIN_T )
         m_toolMgr->PrimeTool( aEvent.Position() );
     else
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     // Main loop: keep receiving events
     while( TOOL_EVENT* evt = Wait() )
@@ -1161,7 +1161,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
     if( isSheetPin )
         sheet = dynamic_cast<SCH_SHEET*>( m_selectionTool->GetSelection().Front() );
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -1199,7 +1199,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&]()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete item;
                 item = nullptr;
@@ -1289,7 +1289,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
             // First click creates...
             if( !item )
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
                 if( isText )
                 {
@@ -1380,7 +1380,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
                     if( item->Type() != SCH_SHEET_PIN_T )
                         m_selectionTool->AddItemToSel( item );
 
-                    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
                     // update the cursor so it looks correct before another event
                     setCursor();
@@ -1509,7 +1509,7 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
     // gets whacked.
     m_toolMgr->DeactivateTool();
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -1522,7 +1522,7 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete item;
                 item = nullptr;
@@ -1591,7 +1591,7 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsClick( BUT_LEFT ) && !item )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
             if( isTextBox )
             {
@@ -1677,7 +1677,7 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
                 item = nullptr;
 
                 m_view->ClearPreview();
-                m_toolMgr->RunAction( ACTIONS::activatePointEditor );
+                m_toolMgr->PostAction( ACTIONS::activatePointEditor );
             }
         }
         else if( item && ( evt->IsAction( &ACTIONS::refreshPreview ) || evt->IsMotion() ) )
@@ -1689,7 +1689,7 @@ int SCH_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsDblClick( BUT_LEFT ) && !item )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::properties, true );
+            m_toolMgr->RunAction( EE_ACTIONS::properties );
         }
         else if( evt->IsClick( BUT_RIGHT ) )
         {
@@ -1729,7 +1729,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
 
     REENTRANCY_GUARD guard( &m_inDrawSheet );
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -1742,7 +1742,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete sheet;
                 sheet = nullptr;
@@ -1831,12 +1831,12 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
                 }
                 else if( evt->IsDblClick( BUT_LEFT ) )
                 {
-                    m_toolMgr->RunAction( EE_ACTIONS::enterSheet, false );
+                    m_toolMgr->PostAction( EE_ACTIONS::enterSheet );
                     break;
                 }
             }
 
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
             sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), cursorPos );
             sheet->SetFlags( IS_NEW | IS_MOVING );
diff --git a/eeschema/tools/sch_edit_tool.cpp b/eeschema/tools/sch_edit_tool.cpp
index fe809baf74..6494bdd40f 100644
--- a/eeschema/tools/sch_edit_tool.cpp
+++ b/eeschema/tools/sch_edit_tool.cpp
@@ -909,14 +909,14 @@ int SCH_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
 
     if( moving )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else
     {
         EE_SELECTION selectionCopy = selection;
 
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         SCH_LINE_WIRE_BUS_TOOL* lwbTool = m_toolMgr->GetTool<SCH_LINE_WIRE_BUS_TOOL>();
         lwbTool->TrimOverLappingWires( commit, &selectionCopy );
@@ -1111,7 +1111,7 @@ int SCH_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
         EE_SELECTION selectionCopy = selection;
 
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         if( connections )
         {
@@ -1213,12 +1213,12 @@ int SCH_EDIT_TOOL::Swap( const TOOL_EVENT& aEvent )
 
     if( isMoving )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else
     {
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         if( connections )
             m_frame->TestDanglingEnds();
@@ -1237,7 +1237,7 @@ int SCH_EDIT_TOOL::RepeatDrawItem( const TOOL_EVENT& aEvent )
     if( sourceItems.empty() )
         return 0;
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     SCH_COMMIT   commit( m_toolMgr );
     EE_SELECTION newItems;
@@ -1267,7 +1267,7 @@ int SCH_EDIT_TOOL::RepeatDrawItem( const TOOL_EVENT& aEvent )
                                      schIUScale.MilsToIU( cfg->m_Drawing.default_repeat_offset_y ) ) );
         }
 
-        m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, true, newItem );
+        m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, newItem );
         newItem->SetFlags( IS_NEW );
         m_frame->AddToScreen( newItem, m_frame->GetScreen() );
         commit.Added( newItem, m_frame->GetScreen() );
@@ -1288,7 +1288,7 @@ int SCH_EDIT_TOOL::RepeatDrawItem( const TOOL_EVENT& aEvent )
                                           annotateStartNum, false, false, reporter );
             }
 
-            m_toolMgr->RunAction( EE_ACTIONS::move, true, &commit );
+            m_toolMgr->RunAction( EE_ACTIONS::move, &commit );
 
             while( m_toolMgr->GetTool<SCH_MOVE_TOOL>()->IsToolActive() )
             {
@@ -1360,7 +1360,7 @@ int SCH_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
         return 0;
 
     // Don't leave a freed pointer in the selection
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     for( EDA_ITEM* item : items )
         item->ClearFlags( STRUCT_DELETED );
@@ -1439,7 +1439,7 @@ int SCH_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
 {
     PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
     m_pickerItem = nullptr;
 
     // Deactivate other tools; particularly important if another PICKER is currently running
@@ -1456,7 +1456,7 @@ int SCH_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                     EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
                     selectionTool->UnbrightenItem( m_pickerItem );
                     selectionTool->AddItemToSel( m_pickerItem, true /*quiet mode*/ );
-                    m_toolMgr->RunAction( ACTIONS::doDelete, true );
+                    m_toolMgr->RunAction( ACTIONS::doDelete );
                     m_pickerItem = nullptr;
                 }
 
@@ -1494,10 +1494,10 @@ int SCH_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                     m_toolMgr->GetTool<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
 
                 // Wake the selection tool after exiting to ensure the cursor gets updated
-                m_toolMgr->RunAction( EE_ACTIONS::selectionActivate, false );
+                m_toolMgr->PostAction( EE_ACTIONS::selectionActivate );
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -1587,7 +1587,7 @@ int SCH_EDIT_TOOL::EditField( const TOOL_EVENT& aEvent )
     }
 
     if( clearSelection )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
@@ -1627,7 +1627,7 @@ int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
 
     if( moving )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else
     {
@@ -1635,7 +1635,7 @@ int SCH_EDIT_TOOL::AutoplaceFields( const TOOL_EVENT& aEvent )
             commit.Push( _( "Autoplace Fields" ) );
 
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
     }
 
     return 0;
@@ -1693,10 +1693,10 @@ int SCH_EDIT_TOOL::ConvertDeMorgan( const TOOL_EVENT& aEvent )
     m_frame->ConvertPart( symbol );
 
     if( symbol->IsNew() )
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
@@ -1715,7 +1715,7 @@ int SCH_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
             VECTOR2D            cursorPos = getViewControls()->GetCursorPosition( false );
 
             if( ds && ds->HitTestDrawingSheetItems( getView(), cursorPos ) )
-                m_toolMgr->RunAction( ACTIONS::pageSettings );
+                m_toolMgr->PostAction( ACTIONS::pageSettings );
         }
 
         return 0;
@@ -2003,7 +2003,7 @@ int SCH_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
     updateItem( curr_item, true );
 
     if( clearSelection )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
@@ -2312,7 +2312,7 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
             }
 
             if( selected )
-                m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::removeItemFromSel, true, item );
+                m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::removeItemFromSel, item );
 
             SCH_COMMIT commit( m_toolMgr );
 
@@ -2328,7 +2328,7 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
             commit.Push( _( "Change Item Type" ) );
 
             if( selected )
-                m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, true, newtext );
+                m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, newtext );
 
             // Otherwise, pointer is owned by the undo stack
             if( item->IsNew() )
@@ -2349,7 +2349,7 @@ int SCH_EDIT_TOOL::ChangeTextType( const TOOL_EVENT& aEvent )
     }
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
@@ -2410,7 +2410,7 @@ int SCH_EDIT_TOOL::BreakWire( const TOOL_EVENT& aEvent )
         m_frame->TestDanglingEnds();
         m_frame->GetCanvas()->Refresh();
 
-        m_toolMgr->RunAction( EE_ACTIONS::drag, true, &commit );
+        m_toolMgr->RunAction( EE_ACTIONS::drag, &commit );
 
         while( m_toolMgr->GetTool<SCH_MOVE_TOOL>()->IsToolActive() )
         {
@@ -2445,7 +2445,7 @@ int SCH_EDIT_TOOL::CleanupSheetPins( const TOOL_EVENT& aEvent )
     m_frame->OnModify();
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
diff --git a/eeschema/tools/sch_editor_control.cpp b/eeschema/tools/sch_editor_control.cpp
index af9b5f9cf8..33d7842684 100644
--- a/eeschema/tools/sch_editor_control.cpp
+++ b/eeschema/tools/sch_editor_control.cpp
@@ -132,8 +132,8 @@ int SCH_EDITOR_CONTROL::Revert( const TOOL_EVENT& aEvent )
 
     if( m_frame->GetCurrentSheet().Last() != &root )
     {
-        m_toolMgr->RunAction( ACTIONS::cancelInteractive, true );
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( ACTIONS::cancelInteractive );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         // Store the current zoom level into the current screen before switching
         m_frame->GetScreen()->m_LastZoomLevel = m_frame->GetCanvas()->GetView()->GetScale();
@@ -656,10 +656,10 @@ int SCH_EDITOR_CONTROL::SimProbe( const TOOL_EVENT& aEvent )
                 }
 
                 // Wake the selection tool after exiting to ensure the cursor gets updated
-                m_toolMgr->RunAction( EE_ACTIONS::selectionActivate, false );
+                m_toolMgr->PostAction( EE_ACTIONS::selectionActivate );
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -746,10 +746,10 @@ int SCH_EDITOR_CONTROL::SimTune( const TOOL_EVENT& aEvent )
                 // ( avoid crash in some cases when the SimTune tool is deselected )
                 EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
                 selectionTool->ClearSelection();
-                m_toolMgr->RunAction( EE_ACTIONS::selectionActivate, false );
+                m_toolMgr->PostAction( EE_ACTIONS::selectionActivate );
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -1196,7 +1196,7 @@ int SCH_EDITOR_CONTROL::HighlightNetCursor( const TOOL_EVENT& aEvent )
             return highlightNet( m_toolMgr, aPos );
         } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -1301,7 +1301,7 @@ bool SCH_EDITOR_CONTROL::doCopy( bool aUseDuplicateClipboard )
     plugin.Format( &selection, &selPath, schematic, &formatter, true );
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     if( aUseDuplicateClipboard )
     {
@@ -1346,7 +1346,7 @@ int SCH_EDITOR_CONTROL::Cut( const TOOL_EVENT& aEvent )
     }
 
     if( doCopy() )
-        m_toolMgr->RunAction( ACTIONS::doDelete, true );
+        m_toolMgr->RunAction( ACTIONS::doDelete );
 
     return 0;
 }
@@ -1853,8 +1853,8 @@ int SCH_EDITOR_CONTROL::Paste( const TOOL_EVENT& aEvent )
     m_frame->GetCurrentSheet().UpdateAllScreenReferences();
 
     // Now clear the previous selection, select the pasted items, and fire up the "move" tool.
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
-    m_toolMgr->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, true, &loadedItems );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
+    m_toolMgr->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, &loadedItems );
 
     EE_SELECTION& selection = selTool->GetSelection();
 
@@ -1952,7 +1952,7 @@ int SCH_EDITOR_CONTROL::Paste( const TOOL_EVENT& aEvent )
             selection.SetReferencePoint( item->GetPosition() );
         }
 
-        m_toolMgr->RunAction( EE_ACTIONS::move, true, &commit );
+        m_toolMgr->RunAction( EE_ACTIONS::move, &commit );
 
         while( m_toolMgr->GetTool<SCH_MOVE_TOOL>()->IsToolActive() )
         {
@@ -1979,7 +1979,7 @@ int SCH_EDITOR_CONTROL::EditWithSymbolEditor( const TOOL_EVENT& aEvent )
         symbol = (SCH_SYMBOL*) selection.Front();
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     if( !symbol || symbol->GetEditFlags() != 0 )
         return 0;
@@ -1991,7 +1991,7 @@ int SCH_EDITOR_CONTROL::EditWithSymbolEditor( const TOOL_EVENT& aEvent )
         return 0;
     }
 
-    m_toolMgr->RunAction( ACTIONS::showSymbolEditor, true );
+    m_toolMgr->RunAction( ACTIONS::showSymbolEditor );
     symbolEditor = (SYMBOL_EDIT_FRAME*) m_frame->Kiway().Player( FRAME_SCH_SYMBOL_EDITOR, false );
 
     if( symbolEditor )
@@ -2232,7 +2232,7 @@ int SCH_EDITOR_CONTROL::ToggleOPCurrents( const TOOL_EVENT& aEvent )
 int SCH_EDITOR_CONTROL::ChangeLineMode( const TOOL_EVENT& aEvent )
 {
     m_frame->eeconfig()->m_Drawing.line_mode = aEvent.Parameter<LINE_MODE>();
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
     return 0;
 }
 
@@ -2241,7 +2241,7 @@ int SCH_EDITOR_CONTROL::NextLineMode( const TOOL_EVENT& aEvent )
 {
     m_frame->eeconfig()->m_Drawing.line_mode++;
     m_frame->eeconfig()->m_Drawing.line_mode %= LINE_MODE::LINE_MODE_COUNT;
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
     return 0;
 }
 
diff --git a/eeschema/tools/sch_line_wire_bus_tool.cpp b/eeschema/tools/sch_line_wire_bus_tool.cpp
index 6dc8833c95..0310b8267d 100644
--- a/eeschema/tools/sch_line_wire_bus_tool.cpp
+++ b/eeschema/tools/sch_line_wire_bus_tool.cpp
@@ -290,7 +290,7 @@ int SCH_LINE_WIRE_BUS_TOOL::DrawSegments( const TOOL_EVENT& aEvent )
     const DRAW_SEGMENT_EVENT_PARAMS* params = aEvent.Parameter<const DRAW_SEGMENT_EVENT_PARAMS*>();
 
     m_frame->PushTool( aEvent );
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     if( aEvent.HasPosition() )
     {
@@ -381,7 +381,7 @@ SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus( const wxString& aNet, const VECTO
     if( aPos == VECTOR2I( 0, 0 ) )
         pos = static_cast<VECTOR2I>( getViewControls()->GetCursorPosition() );
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_busUnfold.entry = new SCH_BUS_WIRE_ENTRY( pos );
     m_busUnfold.entry->SetParent( m_frame->GetScreen() );
@@ -584,7 +584,7 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( const TOOL_EVENT& aTool, int aType,
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
                 for( SCH_LINE* wire : m_wires )
                     delete wire;
@@ -962,7 +962,7 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( const TOOL_EVENT& aTool, int aType,
                 computeBreakPoint( { m_wires[m_wires.size() - 2], segment }, cursorPos, currentMode,
                                    posture );
 
-                m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                m_toolMgr->PostAction( ACTIONS::refreshPreview );
             }
         }
         //------------------------------------------------------------------------
@@ -997,7 +997,7 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( const TOOL_EVENT& aTool, int aType,
             if( m_busUnfold.in_progress )
             {
                 m_busUnfold.label->Rotate90( evt->IsAction( &EE_ACTIONS::rotateCW ) );
-                m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                m_toolMgr->PostAction( ACTIONS::refreshPreview );
             }
             else
             {
@@ -1121,7 +1121,7 @@ void SCH_LINE_WIRE_BUS_TOOL::finishSegments()
     // Clear selection when done so that a new wire can be started.
     // NOTE: this must be done before simplifyWireList is called or we might end up with
     // freed selected items.
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     SCH_SCREEN* screen = m_frame->GetScreen();
     SCH_COMMIT  commit( m_toolMgr );
diff --git a/eeschema/tools/sch_move_tool.cpp b/eeschema/tools/sch_move_tool.cpp
index a0d3201f05..2bb1a51399 100644
--- a/eeschema/tools/sch_move_tool.cpp
+++ b/eeschema/tools/sch_move_tool.cpp
@@ -414,13 +414,13 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
 
                 // And give it a kick so it doesn't have to wait for the first mouse movement
                 // to refresh.
-                m_toolMgr->RunAction( EE_ACTIONS::restartMove );
+                m_toolMgr->PostAction( EE_ACTIONS::restartMove );
             }
         }
         else
         {
             // The tool hotkey is interpreted as a click when already dragging/moving
-            m_toolMgr->RunAction( ACTIONS::cursorClick );
+            m_toolMgr->PostAction( ACTIONS::cursorClick );
         }
 
         return 0;
@@ -842,11 +842,11 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsAction( &EE_ACTIONS::rotateCW ) )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::rotateCW, true, &commit );
+            m_toolMgr->RunAction( EE_ACTIONS::rotateCW, &commit );
         }
         else if( evt->IsAction( &EE_ACTIONS::rotateCCW ) )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::rotateCCW, true, &commit );
+            m_toolMgr->RunAction( EE_ACTIONS::rotateCCW, &commit );
         }
         else if( evt->Action() == TA_CHOICE_MENU_CHOICE )
         {
@@ -859,7 +859,7 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
                 if( symbol )
                 {
                     m_frame->SelectUnit( symbol, unit );
-                    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                    m_toolMgr->PostAction( ACTIONS::refreshPreview );
                 }
             }
         }
@@ -982,7 +982,7 @@ int SCH_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
         item->ClearEditFlags();
 
     if( unselect )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
     else
         m_selectionTool->RebuildSelection();  // Schematic cleanup might have merged lines, etc.
 
diff --git a/eeschema/tools/sch_navigate_tool.cpp b/eeschema/tools/sch_navigate_tool.cpp
index f9dba7df30..5db86f1a22 100644
--- a/eeschema/tools/sch_navigate_tool.cpp
+++ b/eeschema/tools/sch_navigate_tool.cpp
@@ -106,8 +106,8 @@ int SCH_NAVIGATE_TOOL::Forward( const TOOL_EVENT& aEvent )
     {
         m_navIndex++;
 
-        m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive, true );
-        m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+        m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive );
+        m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
         m_frame->SetCurrentSheet( *m_navIndex );
         m_frame->DisplayCurrentSheet();
@@ -127,8 +127,8 @@ int SCH_NAVIGATE_TOOL::Back( const TOOL_EVENT& aEvent )
     {
         m_navIndex--;
 
-        m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive, true );
-        m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+        m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive );
+        m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
         m_frame->SetCurrentSheet( *m_navIndex );
         m_frame->DisplayCurrentSheet();
@@ -278,8 +278,8 @@ void SCH_NAVIGATE_TOOL::pushToHistory( SCH_SHEET_PATH aPath )
 
 void SCH_NAVIGATE_TOOL::changeSheet( SCH_SHEET_PATH aPath )
 {
-    m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive, true );
-    m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+    m_frame->GetToolManager()->RunAction( ACTIONS::cancelInteractive );
+    m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
     // Store the current zoom level into the current screen before switching
     m_frame->GetScreen()->m_LastZoomLevel = m_frame->GetCanvas()->GetView()->GetScale();
diff --git a/eeschema/tools/simulator_control.cpp b/eeschema/tools/simulator_control.cpp
index a0661751cc..47e12d8bfc 100644
--- a/eeschema/tools/simulator_control.cpp
+++ b/eeschema/tools/simulator_control.cpp
@@ -314,7 +314,7 @@ int SIMULATOR_CONTROL::Probe( const TOOL_EVENT& aEvent )
     if( blocking_dialog )
         blocking_dialog->Close( true );
 
-    m_schematicFrame->GetToolManager()->RunAction( EE_ACTIONS::simProbe );
+    m_schematicFrame->GetToolManager()->PostAction( EE_ACTIONS::simProbe );
     m_schematicFrame->Raise();
 
     return 0;
@@ -331,7 +331,7 @@ int SIMULATOR_CONTROL::Tune( const TOOL_EVENT& aEvent )
     if( blocking_dialog )
         blocking_dialog->Close( true );
 
-    m_schematicFrame->GetToolManager()->RunAction( EE_ACTIONS::simTune );
+    m_schematicFrame->GetToolManager()->PostAction( EE_ACTIONS::simTune );
     m_schematicFrame->Raise();
 
     return 0;
diff --git a/eeschema/tools/symbol_editor_control.cpp b/eeschema/tools/symbol_editor_control.cpp
index 1ffb6089a9..32a102f152 100644
--- a/eeschema/tools/symbol_editor_control.cpp
+++ b/eeschema/tools/symbol_editor_control.cpp
@@ -416,8 +416,8 @@ int SYMBOL_EDITOR_CONTROL::OnDeMorgan( const TOOL_EVENT& aEvent )
 
     if( m_frame->IsType( FRAME_SCH_SYMBOL_EDITOR ) )
     {
-        m_toolMgr->RunAction( ACTIONS::cancelInteractive, true );
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( ACTIONS::cancelInteractive );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         SYMBOL_EDIT_FRAME* symbolEditor = static_cast<SYMBOL_EDIT_FRAME*>( m_frame );
         symbolEditor->SetConvert( convert );
@@ -681,7 +681,7 @@ int SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic( const TOOL_EVENT& aEvent )
             symbol->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
 
         schframe->Raise();
-        schframe->GetToolManager()->RunAction( EE_ACTIONS::placeSymbol, false, symbol );
+        schframe->GetToolManager()->PostAction( EE_ACTIONS::placeSymbol, symbol );
     }
 
     return 0;
diff --git a/eeschema/tools/symbol_editor_drawing_tools.cpp b/eeschema/tools/symbol_editor_drawing_tools.cpp
index 3431f01f82..38a05683c2 100644
--- a/eeschema/tools/symbol_editor_drawing_tools.cpp
+++ b/eeschema/tools/symbol_editor_drawing_tools.cpp
@@ -95,7 +95,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
     COMMON_SETTINGS*      common_settings = Pgm().GetCommonSettings();
     wxString              description;
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -113,7 +113,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete item;
                 item = nullptr;
@@ -203,7 +203,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
             // First click creates...
             if( !item )
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
                 switch( type )
                 {
@@ -350,7 +350,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
     // gets whacked.
     m_toolMgr->DeactivateTool();
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -363,7 +363,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
                 m_view->ClearPreview();
                 delete item;
                 item = nullptr;
@@ -429,7 +429,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
             if( !symbol )
                 continue;
 
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
             int lineWidth = schIUScale.MilsToIU( settings->m_Defaults.line_width );
 
@@ -524,7 +524,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
 
                 commit.Push( description );
                 m_frame->RebuildView();
-                m_toolMgr->RunAction( ACTIONS::activatePointEditor );
+                m_toolMgr->PostAction( ACTIONS::activatePointEditor );
             }
         }
         else if( item && ( evt->IsAction( &ACTIONS::refreshPreview ) || evt->IsMotion() ) )
@@ -535,7 +535,7 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsDblClick( BUT_LEFT ) && !item )
         {
-            m_toolMgr->RunAction( EE_ACTIONS::properties, true );
+            m_toolMgr->RunAction( EE_ACTIONS::properties );
         }
         else if( evt->IsClick( BUT_RIGHT ) )
         {
@@ -654,10 +654,10 @@ int SYMBOL_EDITOR_DRAWING_TOOLS::RepeatDrawItem( const TOOL_EVENT& aEvent )
         LIB_PIN* pin = pinTool->RepeatPin( sourcePin );
         g_lastPinWeakPtr = pin;
 
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         if( pin )
-            m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, true, pin );
+            m_toolMgr->RunAction<EDA_ITEM*>( EE_ACTIONS::addItemToSel, pin );
     }
 
     return 0;
diff --git a/eeschema/tools/symbol_editor_edit_tool.cpp b/eeschema/tools/symbol_editor_edit_tool.cpp
index cd49161ca6..82284e4093 100644
--- a/eeschema/tools/symbol_editor_edit_tool.cpp
+++ b/eeschema/tools/symbol_editor_edit_tool.cpp
@@ -180,13 +180,13 @@ int SYMBOL_EDITOR_EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
 
     if( item->IsMoving() )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview, true );
+        m_toolMgr->RunAction( ACTIONS::refreshPreview );
     }
     else
     {
 
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         if( !localCommit.Empty() )
             localCommit.Push( _( "Rotate" ) );
@@ -229,12 +229,12 @@ int SYMBOL_EDITOR_EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
 
     if( item->IsMoving() )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview, true );
+        m_toolMgr->RunAction( ACTIONS::refreshPreview );
     }
     else
     {
         if( selection.IsHover() )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         m_frame->OnModify();
     }
@@ -263,7 +263,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
         return 0;
 
     // Don't leave a freed pointer in the selection
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     commit.Modify( symbol, m_frame->GetScreen() );
 
@@ -337,7 +337,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
 {
     PICKER_TOOL* picker = m_toolMgr->GetTool<PICKER_TOOL>();
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
     m_pickerItem = nullptr;
 
     // Deactivate other tools; particularly important if another PICKER is currently running
@@ -353,7 +353,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                     EE_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<EE_SELECTION_TOOL>();
                     selectionTool->UnbrightenItem( m_pickerItem );
                     selectionTool->AddItemToSel( m_pickerItem, true /*quiet mode*/ );
-                    m_toolMgr->RunAction( ACTIONS::doDelete, true );
+                    m_toolMgr->RunAction( ACTIONS::doDelete );
                     m_pickerItem = nullptr;
                 }
 
@@ -399,10 +399,10 @@ int SYMBOL_EDITOR_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                     m_toolMgr->GetTool<EE_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
 
                 // Wake the selection tool after exiting to ensure the cursor gets updated
-                m_toolMgr->RunAction( EE_ACTIONS::selectionActivate, false );
+                m_toolMgr->PostAction( EE_ACTIONS::selectionActivate );
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -459,7 +459,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
     }
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     return 0;
 }
@@ -558,8 +558,8 @@ void SYMBOL_EDITOR_EDIT_TOOL::editSymbolProperties()
     LIB_SYMBOL* symbol = m_frame->GetCurSymbol();
     bool        partLocked = symbol->UnitsLocked();
 
-    m_toolMgr->RunAction( ACTIONS::cancelInteractive, true );
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( ACTIONS::cancelInteractive );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     DIALOG_LIB_SYMBOL_PROPERTIES dlg( m_frame, symbol );
 
@@ -607,7 +607,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::PinTable( const TOOL_EVENT& aEvent )
     if( !symbol )
         return 0;
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     saveCopyInUndoList( symbol, UNDO_REDO::LIBEDIT );
 
@@ -817,7 +817,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::Paste( const TOOL_EVENT& aEvent )
     if( !selection.Empty() )
     {
         selection.SetReferencePoint( getViewControls()->GetCursorPosition( true ) );
-        m_toolMgr->RunAction( EE_ACTIONS::move, true, &commit );
+        m_toolMgr->RunAction( EE_ACTIONS::move, &commit );
         commit.Push( _( "Paste" ) );
     }
 
@@ -870,11 +870,11 @@ int SYMBOL_EDITOR_EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
         getView()->Add( newItem );
     }
 
-    m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
-    m_toolMgr->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, true, &newItems );
+    m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
+    m_toolMgr->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, &newItems );
 
     selection.SetReferencePoint( mapCoords( getViewControls()->GetCursorPosition( true ) ) );
-    m_toolMgr->RunAction( EE_ACTIONS::move, true, &commit );
+    m_toolMgr->RunAction( EE_ACTIONS::move, &commit );
     commit.Push( _( "Duplicate" ) );
 
     return 0;
diff --git a/eeschema/tools/symbol_editor_move_tool.cpp b/eeschema/tools/symbol_editor_move_tool.cpp
index d0ce3abf9e..da31f34850 100644
--- a/eeschema/tools/symbol_editor_move_tool.cpp
+++ b/eeschema/tools/symbol_editor_move_tool.cpp
@@ -363,14 +363,14 @@ int SYMBOL_EDITOR_MOVE_TOOL::Main( const TOOL_EVENT& aEvent )
         commit->Revert();
 
         if( unselect )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
         else
             m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
     }
     else
     {
         if( unselect )
-            m_toolMgr->RunAction( EE_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
         if( !localCommit.Empty() )
             localCommit.Push( _( "Move" ) );
diff --git a/eeschema/widgets/hierarchy_pane.cpp b/eeschema/widgets/hierarchy_pane.cpp
index 17852a3b4d..e034cc971d 100644
--- a/eeschema/widgets/hierarchy_pane.cpp
+++ b/eeschema/widgets/hierarchy_pane.cpp
@@ -253,7 +253,7 @@ void HIERARCHY_PANE::onSelectSheetPath( wxTreeEvent& aEvent )
     TREE_ITEM_DATA* itemData = static_cast<TREE_ITEM_DATA*>( m_tree->GetItemData( itemSel ) );
 
     SetCursor( wxCURSOR_ARROWWAIT );
-    m_frame->GetToolManager()->RunAction<SCH_SHEET_PATH*>( EE_ACTIONS::changeSheet, true,
+    m_frame->GetToolManager()->RunAction<SCH_SHEET_PATH*>( EE_ACTIONS::changeSheet,
                                                            &itemData->m_SheetPath );
     SetCursor( wxCURSOR_ARROW );
 }
diff --git a/eeschema/widgets/search_handlers.cpp b/eeschema/widgets/search_handlers.cpp
index 0e254355bf..0a540637ad 100644
--- a/eeschema/widgets/search_handlers.cpp
+++ b/eeschema/widgets/search_handlers.cpp
@@ -76,7 +76,7 @@ void SCH_SEARCH_HANDLER::SelectItems( std::vector<long>& aItemRows )
     EDA_ITEMS                   selectedItems;
     std::vector<SCH_SEARCH_HIT> selectedHits;
 
-    m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection, true );
+    m_frame->GetToolManager()->RunAction( EE_ACTIONS::clearSelection );
 
     for( long row : aItemRows )
     {
@@ -105,7 +105,7 @@ void SCH_SEARCH_HANDLER::SelectItems( std::vector<long>& aItemRows )
         }
 
         if( selectedItems.size() )
-            m_frame->GetToolManager()->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, true, &selectedItems );
+            m_frame->GetToolManager()->RunAction<EDA_ITEMS*>( EE_ACTIONS::addItemsToSel, &selectedItems );
 
         m_frame->GetCanvas()->Refresh( false );
     }
diff --git a/eeschema/widgets/symbol_tree_pane.cpp b/eeschema/widgets/symbol_tree_pane.cpp
index 873225e309..e8c024e5cd 100644
--- a/eeschema/widgets/symbol_tree_pane.cpp
+++ b/eeschema/widgets/symbol_tree_pane.cpp
@@ -64,7 +64,7 @@ SYMBOL_TREE_PANE::~SYMBOL_TREE_PANE()
 
 void SYMBOL_TREE_PANE::onSymbolSelected( wxCommandEvent& aEvent )
 {
-    m_symbolEditFrame->GetToolManager()->RunAction( EE_ACTIONS::editSymbol, true );
+    m_symbolEditFrame->GetToolManager()->RunAction( EE_ACTIONS::editSymbol );
 
     // Make sure current-part highlighting doesn't get lost in selection highlighting
     m_tree->Unselect();
diff --git a/gerbview/dialogs/dialog_print_gerbview.cpp b/gerbview/dialogs/dialog_print_gerbview.cpp
index 74a88c3222..71ed039923 100644
--- a/gerbview/dialogs/dialog_print_gerbview.cpp
+++ b/gerbview/dialogs/dialog_print_gerbview.cpp
@@ -308,7 +308,7 @@ void DIALOG_PRINT_GERBVIEW::saveSettings()
 int GERBVIEW_CONTROL::Print( const TOOL_EVENT& aEvent )
 {
     // Selection affects the original item visibility
-    m_toolMgr->RunAction( GERBVIEW_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( GERBVIEW_ACTIONS::selectionClear );
 
     BOARD_PRINTOUT_SETTINGS settings( m_frame->GetPageSettings() );
     settings.m_colorSettings = m_frame->GetColorSettings();
diff --git a/gerbview/files.cpp b/gerbview/files.cpp
index 340935dcfb..b6e89137e9 100644
--- a/gerbview/files.cpp
+++ b/gerbview/files.cpp
@@ -687,7 +687,7 @@ void GERBVIEW_FRAME::DoWithAcceptedFiles()
         {
             wxString fn = file.GetFullPath();
             // Open zip archive in editor
-            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( ArchiveFileExtension ), true, &fn );
+            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( ArchiveFileExtension ), &fn );
         }
         else
         {
@@ -698,5 +698,5 @@ void GERBVIEW_FRAME::DoWithAcceptedFiles()
 
     // Open files in editor
     if( !gerbFn.IsEmpty() )
-        m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( GerberFileExtension ), true, &gerbFn );
+        m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( GerberFileExtension ), &gerbFn );
 }
diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp
index 05e0d0073d..ac2225cb40 100644
--- a/gerbview/gerbview_frame.cpp
+++ b/gerbview/gerbview_frame.cpp
@@ -162,7 +162,7 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
     m_auimgr.Update();
 
     SetActiveLayer( 0, true );
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
+    GetToolManager()->PostAction( ACTIONS::zoomFitScreen );
 
     resolveCanvasType();
 
@@ -185,7 +185,7 @@ GERBVIEW_FRAME::GERBVIEW_FRAME( KIWAY* aKiway, wxWindow* aParent )
     m_acceptedExts.emplace( DrillFileExtension, &GERBVIEW_ACTIONS::loadGerbFiles );
     DragAcceptFiles( true );
 
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+    GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
 
     // Ensure the window is on top
     Raise();
@@ -808,7 +808,7 @@ void GERBVIEW_FRAME::SetActiveLayer( int aLayer, bool doLayerWidgetUpdate )
 
     UpdateTitleAndInfo();
 
-    m_toolManager->RunAction( GERBVIEW_ACTIONS::layerChanged );       // notify other tools
+    m_toolManager->PostAction( GERBVIEW_ACTIONS::layerChanged );       // notify other tools
     GetCanvas()->SetFocus();                 // otherwise hotkeys are stuck somewhere
 
     GetCanvas()->SetHighContrastLayer( GERBER_DRAW_LAYER( aLayer ) );
diff --git a/gerbview/tools/gerbview_control.cpp b/gerbview/tools/gerbview_control.cpp
index 52a273adf0..d37784c5b5 100644
--- a/gerbview/tools/gerbview_control.cpp
+++ b/gerbview/tools/gerbview_control.cpp
@@ -398,7 +398,7 @@ int GERBVIEW_CONTROL::ClearLayer( const TOOL_EVENT& aEvent )
 int GERBVIEW_CONTROL::ClearAllLayers( const TOOL_EVENT& aEvent )
 {
     m_frame->Clear_DrawLayers( false );
-    m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
     canvas()->Refresh();
     m_frame->ClearMsgPanel();
 
diff --git a/gerbview/tools/gerbview_selection_tool.cpp b/gerbview/tools/gerbview_selection_tool.cpp
index 632a1cd1bc..0c079d9c4c 100644
--- a/gerbview/tools/gerbview_selection_tool.cpp
+++ b/gerbview/tools/gerbview_selection_tool.cpp
@@ -193,7 +193,7 @@ int GERBVIEW_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
         else if( evt->IsDblClick( BUT_MIDDLE ) )
         {
             // Middle double click?  Do zoom to fit
-            m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
         }
         else if( evt->IsCancel() || evt->Action() == TA_UNDO_REDO_PRE )
         {
diff --git a/gerbview/widgets/gerbview_layer_widget.cpp b/gerbview/widgets/gerbview_layer_widget.cpp
index 6e8b1d4938..492a4c64f6 100644
--- a/gerbview/widgets/gerbview_layer_widget.cpp
+++ b/gerbview/widgets/gerbview_layer_widget.cpp
@@ -252,11 +252,11 @@ void GERBER_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event )
         break;
 
     case ID_LAYER_MOVE_UP:
-        m_frame->GetToolManager()->RunAction( GERBVIEW_ACTIONS::moveLayerUp, true );
+        m_frame->GetToolManager()->RunAction( GERBVIEW_ACTIONS::moveLayerUp );
         break;
 
     case ID_LAYER_MOVE_DOWN:
-        m_frame->GetToolManager()->RunAction( GERBVIEW_ACTIONS::moveLayerDown, true );
+        m_frame->GetToolManager()->RunAction( GERBVIEW_ACTIONS::moveLayerDown );
         break;
 
     case ID_LAYER_DELETE:
diff --git a/include/tool/tool_manager.h b/include/tool/tool_manager.h
index 7368432715..e04d074fa9 100644
--- a/include/tool/tool_manager.h
+++ b/include/tool/tool_manager.h
@@ -127,7 +127,7 @@ public:
     void ShutdownTool( const std::string& aToolName );
 
     /**
-     * Run the specified action.
+     * Run the specified action immediately, pausing the current action to run the new one.
      *
      * The common format for action names is "application.ToolName.Action".
      *
@@ -135,60 +135,110 @@ public:
      *       action is expecting, otherwise an assert will occur when reading the paramter.
      *
      * @param aActionName is the name of action to be invoked.
-     * @param aNow decides if the action has to be run immediately or after the current coroutine
-     *             is preemptied.
      * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
      *               depends on the action.
      * @return False if the action was not found.
      */
     template<typename T>
-    bool RunAction( const std::string& aActionName, bool aNow, T aParam )
+    bool RunAction( const std::string& aActionName, T aParam )
     {
         // Use a cast to ensure the proper type is stored inside the parameter
         std::any a( static_cast<T>( aParam ) );
 
-        return doRunAction( aActionName, aNow, a );
+        return doRunAction( aActionName, true, a );
     }
 
-    bool RunAction( const std::string& aActionName, bool aNow = false )
+    bool RunAction( const std::string& aActionName )
     {
         // Default initialize the parameter argument to an empty std::any
         std::any a;
 
-        return doRunAction( aActionName, aNow, a );
+        return doRunAction( aActionName, true, a );
     }
 
     /**
-     * Run the specified action.
-     *
-     * This function will only return if the action has been handled when the action is run
-     * immediately (aNow = true), otherwise it will always return false.
+     * Run the specified action immediately, pausing the current action to run the new one.
      *
      * Note: The type of the optional parameter must match exactly with the type the consuming
      *       action is expecting, otherwise an assert will occur when reading the paramter.
      *
      * @param aAction is the action to be invoked.
-     * @param aNow decides if the action has to be run immediately or after the current coroutine
-     *             is preemptied.
      * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
      *               depends on the action.
      * @return True if the action was handled immediately
      */
     template<typename T>
-    bool RunAction( const TOOL_ACTION& aAction, bool aNow, T aParam )
+    bool RunAction( const TOOL_ACTION& aAction, T aParam )
     {
         // Use a cast to ensure the proper type is stored inside the parameter
         std::any a( static_cast<T>( aParam ) );
 
-        return doRunAction( aAction, aNow, a );
+        return doRunAction( aAction, true, a );
     }
 
-    bool RunAction( const TOOL_ACTION& aAction, bool aNow = false )
+    bool RunAction( const TOOL_ACTION& aAction )
     {
         // Default initialize the parameter argument to an empty std::any
         std::any a;
 
-        return doRunAction( aAction, aNow, a );
+        return doRunAction( aAction, true, a );
+    }
+
+    /**
+     * Run the specified action after the current action (coroutine) ends.
+     *
+     * The common format for action names is "application.ToolName.Action".
+     *
+     * Note: The type of the optional parameter must match exactly with the type the consuming
+     *       action is expecting, otherwise an assert will occur when reading the paramter.
+     *
+     * @param aActionName is the name of action to be invoked.
+     * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
+     *               depends on the action.
+     * @return False if the action was not found.
+     */
+    template<typename T>
+    bool PostAction( const std::string& aActionName, T aParam )
+    {
+        // Use a cast to ensure the proper type is stored inside the parameter
+        std::any a( static_cast<T>( aParam ) );
+
+        return doRunAction( aActionName, false, a );
+    }
+
+    bool PostAction( const std::string& aActionName )
+    {
+        // Default initialize the parameter argument to an empty std::any
+        std::any a;
+
+        return doRunAction( aActionName, false, a );
+    }
+
+    /**
+     * Run the specified action after the current action (coroutine) ends.
+     *
+     * Note: The type of the optional parameter must match exactly with the type the consuming
+     *       action is expecting, otherwise an assert will occur when reading the paramter.
+     *
+     * @param aAction is the action to be invoked.
+     * @param aParam is an optional parameter that might be used by the invoked action. Its meaning
+     *               depends on the action.
+     */
+    template<typename T>
+    bool PostAction( const TOOL_ACTION& aAction, T aParam )
+    {
+        // Use a cast to ensure the proper type is stored inside the parameter
+        std::any a( static_cast<T>( aParam ) );
+
+        return doRunAction( aAction, false, a );
+    }
+
+    void PostAction( const TOOL_ACTION& aAction )
+    {
+        // Default initialize the parameter argument to an empty std::any
+        std::any a;
+
+        doRunAction( aAction, false, a );
     }
 
     /**
diff --git a/kicad/kicad_manager_frame.cpp b/kicad/kicad_manager_frame.cpp
index 11dd20d000..92684beb85 100644
--- a/kicad/kicad_manager_frame.cpp
+++ b/kicad/kicad_manager_frame.cpp
@@ -440,7 +440,7 @@ void KICAD_MANAGER_FRAME::DoWithAcceptedFiles()
         if( ext == ProjectFileExtension || ext == LegacyProjectFileExtension )
         {
             wxString fn = fileName.GetFullPath();
-            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( fileName.GetExt() ), true, &fn );
+            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( fileName.GetExt() ), &fn );
 
             return;
         }
@@ -464,7 +464,7 @@ void KICAD_MANAGER_FRAME::DoWithAcceptedFiles()
         else
         {
             wxString fn = fileName.GetFullPath();
-            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( fileName.GetExt() ), true, &fn );
+            m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( fileName.GetExt() ), &fn );
         }
     }
 
@@ -477,7 +477,7 @@ void KICAD_MANAGER_FRAME::DoWithAcceptedFiles()
         {
             wxString command = fullEditorName + " " + gerberFiles;
             m_toolManager->RunAction<wxString*>( *m_acceptedExts.at( GerberFileExtension ),
-                                      true, &command );
+                                                 &command );
         }
     }
 }
@@ -713,7 +713,7 @@ void KICAD_MANAGER_FRAME::OnOpenFileInTextEditor( wxCommandEvent& event )
     wxString filename = dlg.GetPath();
 
     if( !dlg.GetPath().IsEmpty() && !Pgm().GetTextEditor().IsEmpty() )
-        m_toolManager->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::openTextEditor, true, &filename );
+        m_toolManager->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::openTextEditor, &filename );
 }
 
 
@@ -882,12 +882,12 @@ void KICAD_MANAGER_FRAME::OnIdle( wxIdleEvent& aEvent )
                     if( fn.GetExt() == LegacySchematicFileExtension
                             || fn.GetExt() == KiCadSchematicFileExtension )
                     {
-                        GetToolManager()->RunAction( KICAD_MANAGER_ACTIONS::editSchematic, true );
+                        GetToolManager()->RunAction( KICAD_MANAGER_ACTIONS::editSchematic );
                     }
                     else if( fn.GetExt() == LegacyPcbFileExtension
                              || fn.GetExt() == KiCadPcbFileExtension )
                     {
-                        GetToolManager()->RunAction( KICAD_MANAGER_ACTIONS::editPCB, true );
+                        GetToolManager()->RunAction( KICAD_MANAGER_ACTIONS::editPCB );
                     }
                 }
 
diff --git a/kicad/project_tree_item.cpp b/kicad/project_tree_item.cpp
index c9db4ea734..bd605601bd 100644
--- a/kicad/project_tree_item.cpp
+++ b/kicad/project_tree_item.cpp
@@ -200,9 +200,9 @@ void PROJECT_TREE_ITEM::Activate( PROJECT_TREE_PANE* aTreePrjFrame )
     case TREE_FILE_TYPE::SEXPR_SCHEMATIC:
         // Schematics not part of the project are opened in a separate process.
         if( fullFileName == frame->SchFileName() || fullFileName == frame->SchLegacyFileName() )
-            toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editSchematic, true );
+            toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editSchematic );
         else
-            toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editOtherSch, true, &fullFileName );
+            toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editOtherSch, &fullFileName );
 
         break;
 
@@ -210,9 +210,9 @@ void PROJECT_TREE_ITEM::Activate( PROJECT_TREE_PANE* aTreePrjFrame )
     case TREE_FILE_TYPE::SEXPR_PCB:
         // Boards not part of the project are opened in a separate process.
         if( fullFileName == frame->PcbFileName() || fullFileName == frame->PcbLegacyFileName() )
-            toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editPCB, true );
+            toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editPCB );
         else
-            toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editOtherPCB, true, &fullFileName );
+            toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editOtherPCB, &fullFileName );
 
         break;
 
@@ -221,7 +221,7 @@ void PROJECT_TREE_ITEM::Activate( PROJECT_TREE_PANE* aTreePrjFrame )
     case TREE_FILE_TYPE::DRILL:
     case TREE_FILE_TYPE::DRILL_NC:
     case TREE_FILE_TYPE::DRILL_XNC:
-        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::viewGerbers, true, &fullFileName );
+        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::viewGerbers, &fullFileName );
         break;
 
     case TREE_FILE_TYPE::HTML:
@@ -236,22 +236,22 @@ void PROJECT_TREE_ITEM::Activate( PROJECT_TREE_PANE* aTreePrjFrame )
     case TREE_FILE_TYPE::TXT:
     case TREE_FILE_TYPE::MD:
     case TREE_FILE_TYPE::REPORT:
-        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::openTextEditor, true, &fullFileName );
+        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::openTextEditor, &fullFileName );
         break;
 
     case TREE_FILE_TYPE::DRAWING_SHEET:
-        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editDrawingSheet, true, &fullFileName );
+        toolMgr->RunAction<wxString*>( KICAD_MANAGER_ACTIONS::editDrawingSheet, &fullFileName );
         break;
 
     case TREE_FILE_TYPE::FOOTPRINT_FILE:
-        toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editFootprints, true );
+        toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editFootprints );
         packet = fullFileName.ToStdString();
         kiway.ExpressMail( FRAME_FOOTPRINT_EDITOR, MAIL_FP_EDIT, packet );
         break;
 
     case TREE_FILE_TYPE::SCHEMATIC_LIBFILE:
     case TREE_FILE_TYPE::SEXPR_SYMBOL_LIB_FILE:
-        toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editSymbols, true );
+        toolMgr->RunAction( KICAD_MANAGER_ACTIONS::editSymbols );
         packet = fullFileName.ToStdString();
         kiway.ExpressMail( FRAME_SCH_SYMBOL_EDITOR, MAIL_LIB_EDIT, packet );
         break;
diff --git a/pagelayout_editor/pl_editor_frame.cpp b/pagelayout_editor/pl_editor_frame.cpp
index f405a2e353..b103b304da 100644
--- a/pagelayout_editor/pl_editor_frame.cpp
+++ b/pagelayout_editor/pl_editor_frame.cpp
@@ -912,7 +912,7 @@ void PL_EDITOR_FRAME::OnNewDrawingSheet()
 
     UpdateTitleAndInfo();
 
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
 
     if( GetCurrentFileName().IsEmpty() )
     {
@@ -970,4 +970,4 @@ void PL_EDITOR_FRAME::UpdateMsgPanelInfo()
 
     SetMsgPanel( msgItems );
 }
-#endif
\ No newline at end of file
+#endif
diff --git a/pagelayout_editor/pl_editor_undo_redo.cpp b/pagelayout_editor/pl_editor_undo_redo.cpp
index 592bf23900..3c54a46802 100644
--- a/pagelayout_editor/pl_editor_undo_redo.cpp
+++ b/pagelayout_editor/pl_editor_undo_redo.cpp
@@ -141,7 +141,7 @@ void PL_EDITOR_FRAME::RollbackFromUndo()
 
     if( pageSettingsAndTitleBlock )
     {
-        GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+        GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
         HardRedraw();   // items based off of corners will need re-calculating
     }
     else
diff --git a/pagelayout_editor/tools/pl_drawing_tools.cpp b/pagelayout_editor/tools/pl_drawing_tools.cpp
index 917dd76ee5..185b49cd51 100644
--- a/pagelayout_editor/tools/pl_drawing_tools.cpp
+++ b/pagelayout_editor/tools/pl_drawing_tools.cpp
@@ -76,7 +76,7 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
     DS_DRAW_ITEM_BASE*         item   = nullptr;
     bool                       isText = aEvent.IsAction( &PL_ACTIONS::placeText );
 
-    m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -92,7 +92,7 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
                 item = nullptr;
 
                 // There's nothing to roll-back, but we still need to pop the undo stack
@@ -152,7 +152,7 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
                 {
                     m_frame->SaveCopyInUndoList();
 
-                    m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+                    m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
 
                     item = dataItem->GetDrawItems()[0];
                     item->SetFlags( IS_NEW | IS_MOVING );
@@ -175,7 +175,7 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
 
                 // Now we re-select and inform other tools, so that the Properties panel
                 // is updated.
-                m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
                 m_selectionTool->AddItemToSel( item, false );
 
                 item = nullptr;
@@ -223,7 +223,7 @@ int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
     // gets whacked.
     m_toolMgr->DeactivateTool();
 
-    m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+    m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
 
     m_frame->PushTool( aEvent );
 
@@ -251,7 +251,7 @@ int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
 
         if( evt->IsCancelInteractive() || evt->IsActivate() )
         {
-            m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+            m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
 
             if( item )
             {
@@ -273,7 +273,7 @@ int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
             if( !item ) // start drawing
             {
                 m_frame->SaveCopyInUndoList();
-                m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
 
                 DS_DATA_ITEM* dataItem = m_frame->AddDrawingSheetItem( type );
                 dataItem->MoveToUi( cursorPos );
@@ -289,14 +289,14 @@ int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
             {
                 // Now we re-select and inform other tools, so that the Properties panel
                 // is updated.
-                m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+                m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
                 m_selectionTool->AddItemToSel( item, false );
 
                 item->ClearEditFlags();
                 item = nullptr;
 
                 // Activate point editor immediately to allow resizing of the item just created
-                m_toolMgr->RunAction( ACTIONS::activatePointEditor, true );
+                m_toolMgr->RunAction( ACTIONS::activatePointEditor );
 
                 m_frame->OnModify();
             }
diff --git a/pagelayout_editor/tools/pl_edit_tool.cpp b/pagelayout_editor/tools/pl_edit_tool.cpp
index 9b918df1f6..669d456997 100644
--- a/pagelayout_editor/tools/pl_edit_tool.cpp
+++ b/pagelayout_editor/tools/pl_edit_tool.cpp
@@ -310,7 +310,7 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
         m_frame->OnModify();
 
     if( unselect )
-        m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
+        m_toolMgr->RunAction( PL_ACTIONS::clearSelection );
     else
         m_toolMgr->PostEvent( EVENTS::SelectedEvent );
 
@@ -355,7 +355,7 @@ bool PL_EDIT_TOOL::updateModificationPoint( PL_SELECTION& aSelection )
 
 int PL_EDIT_TOOL::ImportDrawingSheetContent( const TOOL_EVENT& aEvent )
 {
-    m_toolMgr->RunAction( ACTIONS::cancelInteractive, true );
+    m_toolMgr->RunAction( ACTIONS::cancelInteractive );
 
     wxCommandEvent evt( wxEVT_NULL, ID_APPEND_DESCR_FILE );
     m_frame->Files_io( evt );
@@ -427,7 +427,7 @@ int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                 PL_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PL_SELECTION_TOOL>();
                 selectionTool->UnbrightenItem( m_pickerItem );
                 selectionTool->AddItemToSel( m_pickerItem, true /*quiet mode*/ );
-                m_toolMgr->RunAction( ACTIONS::doDelete, true );
+                m_toolMgr->RunAction( ACTIONS::doDelete );
                 m_pickerItem = nullptr;
             }
 
@@ -473,10 +473,10 @@ int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                 m_toolMgr->GetTool<PL_SELECTION_TOOL>()->UnbrightenItem( m_pickerItem );
 
             // Wake the selection tool after exiting to ensure the cursor gets updated
-            m_toolMgr->RunAction( PL_ACTIONS::selectionActivate, false );
+            m_toolMgr->PostAction( PL_ACTIONS::selectionActivate );
         } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -561,7 +561,7 @@ int PL_EDIT_TOOL::Paste( const TOOL_EVENT& aEvent )
     if( !selection.Empty() )
     {
         selection.SetReferencePoint( selection.GetTopLeftItem()->GetPosition() );
-        m_toolMgr->RunAction( PL_ACTIONS::move, false );
+        m_toolMgr->PostAction( PL_ACTIONS::move );
     }
 
     return 0;
diff --git a/pagelayout_editor/tools/pl_selection_tool.cpp b/pagelayout_editor/tools/pl_selection_tool.cpp
index 7883305671..010d7bfae6 100644
--- a/pagelayout_editor/tools/pl_selection_tool.cpp
+++ b/pagelayout_editor/tools/pl_selection_tool.cpp
@@ -152,7 +152,7 @@ int PL_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
                 if( selectionContains( evt->Position() ) )
                 {
                     // Yes -> run the move tool and wait till it finishes
-                    m_toolMgr->RunAction( "plEditor.InteractiveMove.move", true );
+                    m_toolMgr->RunAction( "plEditor.InteractiveMove.move" );
                 }
                 else
                 {
@@ -165,7 +165,7 @@ int PL_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
         // Middle double click?  Do zoom to fit or zoom to objects
         else if( evt->IsDblClick( BUT_MIDDLE ) )
         {
-            m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+            m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
         }
 
         else if( evt->IsCancelInteractive() )
diff --git a/pcbnew/array_creator.cpp b/pcbnew/array_creator.cpp
index 1f421c0f41..83177f4036 100644
--- a/pcbnew/array_creator.cpp
+++ b/pcbnew/array_creator.cpp
@@ -205,8 +205,8 @@ void ARRAY_CREATOR::Invoke()
             all_added_items.push_back( item );
     }
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
-    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &all_added_items );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
+    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &all_added_items );
 
     commit.Push( _( "Create an array" ) );
 }
diff --git a/pcbnew/board_commit.cpp b/pcbnew/board_commit.cpp
index e4ab0a67c8..0d97f30005 100644
--- a/pcbnew/board_commit.cpp
+++ b/pcbnew/board_commit.cpp
@@ -656,7 +656,7 @@ void BOARD_COMMIT::Push( const wxString& aMessage, int aCommitFlags )
         m_toolMgr->PostEvent( EVENTS::UnselectedEvent );
 
     if( autofillZones )
-        m_toolMgr->RunAction( PCB_ACTIONS::zoneFillDirty );
+        m_toolMgr->PostAction( PCB_ACTIONS::zoneFillDirty );
 
     if( selectedModified )
         m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
diff --git a/pcbnew/cross-probing.cpp b/pcbnew/cross-probing.cpp
index d9479097b9..48e2607486 100644
--- a/pcbnew/cross-probing.cpp
+++ b/pcbnew/cross-probing.cpp
@@ -96,7 +96,7 @@ void PCB_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
 
     if( strcmp( idcmd, "$CONFIG" ) == 0 )
         {
-            GetToolManager()->RunAction( ACTIONS::showSymbolLibTable, true );
+            GetToolManager()->RunAction( ACTIONS::showSymbolLibTable );
             return;
         }
     else if( strcmp( idcmd, "$CUSTOM_RULES" ) == 0 )
@@ -106,7 +106,7 @@ void PCB_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
     }
     else if( strcmp( idcmd, "$DRC" ) == 0 )
     {
-        GetToolManager()->RunAction( PCB_ACTIONS::runDRC, true );
+        GetToolManager()->RunAction( PCB_ACTIONS::runDRC );
         return;
     }
     else if( strcmp( idcmd, "$CLEAR" ) == 0 )
@@ -192,9 +192,9 @@ void PCB_EDIT_FRAME::ExecuteRemoteCommand( const char* cmdline )
         bbox = footprint->GetBoundingBox( true, false ); // No invisible text in bbox calc
 
         if( pad )
-            m_toolManager->RunAction<BOARD_ITEM*>( PCB_ACTIONS::highlightItem, true, pad );
+            m_toolManager->RunAction<BOARD_ITEM*>( PCB_ACTIONS::highlightItem, pad );
         else
-            m_toolManager->RunAction<BOARD_ITEM*>( PCB_ACTIONS::highlightItem, true, footprint );
+            m_toolManager->RunAction<BOARD_ITEM*>( PCB_ACTIONS::highlightItem, footprint );
     }
     else if( netcode > 0 || multiHighlight )
     {
@@ -645,11 +645,11 @@ void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
 
             if( selectConnections )
             {
-                GetToolManager()->RunAction( PCB_ACTIONS::syncSelectionWithNets, true, &items );
+                GetToolManager()->RunAction( PCB_ACTIONS::syncSelectionWithNets, &items );
             }
             else
             {
-                GetToolManager()->RunAction( PCB_ACTIONS::syncSelection, true, &items );
+                GetToolManager()->RunAction( PCB_ACTIONS::syncSelection, &items );
             }
 
             // Update 3D viewer highlighting
@@ -662,7 +662,7 @@ void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
     }
 
     case MAIL_PCB_UPDATE:
-        m_toolManager->RunAction( ACTIONS::updatePcbFromSchematic, true );
+        m_toolManager->RunAction( ACTIONS::updatePcbFromSchematic );
         break;
 
     case MAIL_IMPORT_FILE:
@@ -692,7 +692,7 @@ void PCB_EDIT_FRAME::KiwayMailIn( KIWAY_EXPRESS& mail )
     }
 
     case MAIL_RELOAD_PLUGINS:
-        GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload, true );
+        GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload );
         break;
 
     // many many others.
diff --git a/pcbnew/dialogs/dialog_cleanup_graphics.cpp b/pcbnew/dialogs/dialog_cleanup_graphics.cpp
index 97620089db..67206fbe55 100644
--- a/pcbnew/dialogs/dialog_cleanup_graphics.cpp
+++ b/pcbnew/dialogs/dialog_cleanup_graphics.cpp
@@ -98,7 +98,7 @@ void DIALOG_CLEANUP_GRAPHICS::doCleanup( bool aDryRun )
     if( !aDryRun )
     {
         // Clear current selection list to avoid selection of deleted items
-        m_parentFrame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_parentFrame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
         // ... and to keep the treeModel from trying to refresh a deleted item
         m_changesTreeModel->Update( nullptr, RPT_SEVERITY_ACTION );
diff --git a/pcbnew/dialogs/dialog_cleanup_tracks_and_vias.cpp b/pcbnew/dialogs/dialog_cleanup_tracks_and_vias.cpp
index 083c8adc07..f4c2e5c704 100644
--- a/pcbnew/dialogs/dialog_cleanup_tracks_and_vias.cpp
+++ b/pcbnew/dialogs/dialog_cleanup_tracks_and_vias.cpp
@@ -117,7 +117,7 @@ void DIALOG_CLEANUP_TRACKS_AND_VIAS::doCleanup( bool aDryRun )
     if( !aDryRun )
     {
         // Clear current selection list to avoid selection of deleted items
-        m_parentFrame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_parentFrame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
         // ... and to keep the treeModel from trying to refresh a deleted item
         m_changesTreeModel->Update( nullptr, RPT_SEVERITY_ACTION );
diff --git a/pcbnew/dialogs/dialog_drc.cpp b/pcbnew/dialogs/dialog_drc.cpp
index ceefcc7e81..eb776032b5 100644
--- a/pcbnew/dialogs/dialog_drc.cpp
+++ b/pcbnew/dialogs/dialog_drc.cpp
@@ -472,7 +472,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
     if( rc_item->GetErrorCode() == DRCE_UNCONNECTED_ITEMS )
     {
         if( !m_frame->GetPcbNewSettings()->m_Display.m_ShowGlobalRatsnest )
-            m_frame->GetToolManager()->RunAction( PCB_ACTIONS::showRatsnest, true );
+            m_frame->GetToolManager()->RunAction( PCB_ACTIONS::showRatsnest );
 
         if( item->Type() == PCB_ZONE_T )
         {
@@ -1016,7 +1016,7 @@ void DIALOG_DRC::ExcludeMarker()
 void DIALOG_DRC::deleteAllMarkers( bool aIncludeExclusions )
 {
     // Clear current selection list to avoid selection of deleted items
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     m_markersTreeModel->DeleteItems( false, aIncludeExclusions, false );
     m_unconnectedTreeModel->DeleteItems( false, aIncludeExclusions, false );
@@ -1099,7 +1099,7 @@ void DIALOG_DRC::OnDeleteOneClick( wxCommandEvent& aEvent )
     if( m_Notebook->GetSelection() == 0 )
     {
         // Clear the selection.  It may be the selected DRC marker.
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
         m_markersTreeModel->DeleteCurrentItem( true );
 
diff --git a/pcbnew/dialogs/dialog_find.cpp b/pcbnew/dialogs/dialog_find.cpp
index 02cae523c6..73c564cbb0 100644
--- a/pcbnew/dialogs/dialog_find.cpp
+++ b/pcbnew/dialogs/dialog_find.cpp
@@ -239,7 +239,7 @@ void DIALOG_FIND::search( bool aDirection )
     // Search parameters
     m_frame->GetFindReplaceData().findString = searchString;
 
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
     m_frame->GetCanvas()->GetViewStart( &screen->m_StartVisu.x, &screen->m_StartVisu.y );
 
     BOARD* board = m_frame->GetBoard();
@@ -393,7 +393,7 @@ void DIALOG_FIND::search( bool aDirection )
     }
     else
     {
-        m_frame->GetToolManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, *m_it );
+        m_frame->GetToolManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, *m_it );
 
         msg.Printf( _( "'%s' found" ), searchString );
         m_frame->SetStatusText( msg );
diff --git a/pcbnew/dialogs/dialog_footprint_checker.cpp b/pcbnew/dialogs/dialog_footprint_checker.cpp
index 293e7e79f4..7936c46d6a 100644
--- a/pcbnew/dialogs/dialog_footprint_checker.cpp
+++ b/pcbnew/dialogs/dialog_footprint_checker.cpp
@@ -376,7 +376,7 @@ void DIALOG_FOOTPRINT_CHECKER::refreshEditor()
 void DIALOG_FOOTPRINT_CHECKER::OnDeleteOneClick( wxCommandEvent& aEvent )
 {
     // Clear the selection.  It may be the selected DRC marker.
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     m_markersTreeModel->DeleteCurrentItem( true );
 
@@ -400,7 +400,7 @@ void DIALOG_FOOTPRINT_CHECKER::OnDeleteAllClick( wxCommandEvent& event )
 void DIALOG_FOOTPRINT_CHECKER::deleteAllMarkers()
 {
     // Clear current selection list to avoid selection of deleted items
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     m_markersTreeModel->DeleteItems( false, true, false );
     m_frame->GetBoard()->DeleteMARKERs( true, true );
diff --git a/pcbnew/dialogs/dialog_global_deletion.cpp b/pcbnew/dialogs/dialog_global_deletion.cpp
index 7b72b48598..e120c753b2 100644
--- a/pcbnew/dialogs/dialog_global_deletion.cpp
+++ b/pcbnew/dialogs/dialog_global_deletion.cpp
@@ -118,7 +118,7 @@ void DIALOG_GLOBAL_DELETION::DoGlobalDeletions()
     bool delete_all = m_delAll->GetValue();
 
     // Clear selection before removing any items
-    m_Parent->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_Parent->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     BOARD*       board = m_Parent->GetBoard();
     BOARD_COMMIT commit( m_Parent );
diff --git a/pcbnew/dialogs/dialog_group_properties.cpp b/pcbnew/dialogs/dialog_group_properties.cpp
index 9300026e6b..0ea96900bf 100644
--- a/pcbnew/dialogs/dialog_group_properties.cpp
+++ b/pcbnew/dialogs/dialog_group_properties.cpp
@@ -106,7 +106,7 @@ bool DIALOG_GROUP_PROPERTIES::TransferDataFromWindow()
     m_group->SetName( m_nameCtrl->GetValue() );
     m_group->SetLocked( m_locked->GetValue() );
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
     m_group->RemoveAll();
 
     for( size_t ii = 0; ii < m_membersList->GetCount(); ++ii )
@@ -115,7 +115,7 @@ bool DIALOG_GROUP_PROPERTIES::TransferDataFromWindow()
         m_group->AddItem( item );
     }
 
-    m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, m_group );
+    m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, m_group );
 
     commit.Push( _( "Modified group" ) );
     return true;
@@ -141,7 +141,7 @@ void DIALOG_GROUP_PROPERTIES::OnMemberSelected( wxCommandEvent& aEvent )
 
 void DIALOG_GROUP_PROPERTIES::OnAddMember( wxCommandEvent& event )
 {
-    m_toolMgr->RunAction( PCB_ACTIONS::pickNewGroupMember, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::pickNewGroupMember );
 }
 
 
diff --git a/pcbnew/dialogs/dialog_import_netlist.cpp b/pcbnew/dialogs/dialog_import_netlist.cpp
index 5163adb852..a91bd90d52 100644
--- a/pcbnew/dialogs/dialog_import_netlist.cpp
+++ b/pcbnew/dialogs/dialog_import_netlist.cpp
@@ -102,7 +102,7 @@ DIALOG_IMPORT_NETLIST::~DIALOG_IMPORT_NETLIST()
     {
         KIGFX::VIEW_CONTROLS* controls = m_parent->GetCanvas()->GetViewControls();
         controls->SetCursorPosition( controls->GetMousePosition() );
-        m_parent->GetToolManager()->RunAction( PCB_ACTIONS::move, true );
+        m_parent->GetToolManager()->RunAction( PCB_ACTIONS::move );
     }
 }
 
diff --git a/pcbnew/dialogs/dialog_position_relative.cpp b/pcbnew/dialogs/dialog_position_relative.cpp
index fa05ecc430..8512d4e009 100644
--- a/pcbnew/dialogs/dialog_position_relative.cpp
+++ b/pcbnew/dialogs/dialog_position_relative.cpp
@@ -215,7 +215,7 @@ void DIALOG_POSITION_RELATIVE::OnSelectItemClick( wxCommandEvent& event )
 
     POSITION_RELATIVE_TOOL* posrelTool = m_toolMgr->GetTool<POSITION_RELATIVE_TOOL>();
     wxASSERT( posrelTool );
-    m_toolMgr->RunAction( PCB_ACTIONS::selectpositionRelativeItem, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectpositionRelativeItem );
 
     Hide();
 }
diff --git a/pcbnew/dialogs/dialog_print_pcbnew.cpp b/pcbnew/dialogs/dialog_print_pcbnew.cpp
index c0893fc407..9ea832646b 100644
--- a/pcbnew/dialogs/dialog_print_pcbnew.cpp
+++ b/pcbnew/dialogs/dialog_print_pcbnew.cpp
@@ -465,7 +465,7 @@ void DIALOG_PRINT_PCBNEW::saveSettings()
 int PCB_CONTROL::Print( const TOOL_EVENT& aEvent )
 {
     // Selection affects the origin item visibility
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     PCBNEW_PRINTOUT_SETTINGS settings( m_frame->GetPageSettings() );
     DIALOG_PRINT_PCBNEW dlg( (PCB_BASE_EDIT_FRAME*) m_frame, &settings );
diff --git a/pcbnew/dialogs/dialog_update_pcb.cpp b/pcbnew/dialogs/dialog_update_pcb.cpp
index d626135241..7b031a3ff7 100644
--- a/pcbnew/dialogs/dialog_update_pcb.cpp
+++ b/pcbnew/dialogs/dialog_update_pcb.cpp
@@ -79,7 +79,7 @@ DIALOG_UPDATE_PCB::~DIALOG_UPDATE_PCB()
     {
         KIGFX::VIEW_CONTROLS* controls = m_frame->GetCanvas()->GetViewControls();
         controls->SetCursorPosition( controls->GetMousePosition() );
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::move, true );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::move );
     }
 }
 
@@ -98,7 +98,7 @@ void DIALOG_UPDATE_PCB::PerformUpdate( bool aDryRun )
     if( !aDryRun )
     {
         m_frame->GetToolManager()->DeactivateTool();
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
     }
 
     BOARD_NETLIST_UPDATER updater( m_frame, m_frame->GetBoard() );
diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp
index 429799ac9d..b46c2339e8 100644
--- a/pcbnew/edit.cpp
+++ b/pcbnew/edit.cpp
@@ -167,7 +167,7 @@ void PCB_EDIT_FRAME::OnEditItemRequest( BOARD_ITEM* aItem )
         break;
 
     case PCB_GROUP_T:
-        m_toolManager->RunAction<PCB_GROUP*>( PCB_ACTIONS::groupProperties, true,
+        m_toolManager->RunAction<PCB_GROUP*>( PCB_ACTIONS::groupProperties,
                                               static_cast<PCB_GROUP*>( aItem ) );
         break;
 
diff --git a/pcbnew/edit_track_width.cpp b/pcbnew/edit_track_width.cpp
index 281a0ef3fc..d2f0bb57f0 100644
--- a/pcbnew/edit_track_width.cpp
+++ b/pcbnew/edit_track_width.cpp
@@ -227,5 +227,5 @@ void PCB_EDIT_FRAME::Tracks_and_Vias_Size_Event( wxCommandEvent& event )
         break;
     }
 
-    m_toolManager->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+    m_toolManager->RunAction( PCB_ACTIONS::trackViaSizeChanged );
 }
diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp
index 6d21d608b0..b4f456c493 100644
--- a/pcbnew/files.cpp
+++ b/pcbnew/files.cpp
@@ -825,7 +825,7 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
         // we should not ask PLUGINs to do these items:
         loadedBoard->BuildListOfNets();
         ResolveDRCExclusions( true );
-        m_toolManager->RunAction( PCB_ACTIONS::repairBoard, true, true);
+        m_toolManager->RunAction( PCB_ACTIONS::repairBoard, true);
 
         if( loadedBoard->IsModified() )
             OnModify();
diff --git a/pcbnew/footprint_edit_frame.cpp b/pcbnew/footprint_edit_frame.cpp
index d0f370ba72..de7e157478 100644
--- a/pcbnew/footprint_edit_frame.cpp
+++ b/pcbnew/footprint_edit_frame.cpp
@@ -298,7 +298,7 @@ FOOTPRINT_EDIT_FRAME::FOOTPRINT_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
     m_appearancePanel->ApplyLayerPreset( cfg->m_ActiveLayerPreset );
     m_appearancePanel->SetTabIndex( cfg->m_AuiPanels.appearance_panel_tab );
 
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
+    GetToolManager()->PostAction( ACTIONS::zoomFitScreen );
     UpdateTitle();
     setupUnits( GetSettings() );
 
@@ -1140,9 +1140,9 @@ void FOOTPRINT_EDIT_FRAME::setupTools()
     PCB_EDIT_FRAME* pcbframe = static_cast<PCB_EDIT_FRAME*>( Kiway().Player( FRAME_PCB_EDITOR, false ) );
 
     if( pcbframe )
-        pcbframe->GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload, true );
+        pcbframe->GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload );
     else
-        m_toolManager->RunAction( PCB_ACTIONS::pluginsReload, true );
+        m_toolManager->RunAction( PCB_ACTIONS::pluginsReload );
 }
 
 
diff --git a/pcbnew/footprint_editor_utils.cpp b/pcbnew/footprint_editor_utils.cpp
index ec82f9edf9..c23fad8c61 100644
--- a/pcbnew/footprint_editor_utils.cpp
+++ b/pcbnew/footprint_editor_utils.cpp
@@ -251,7 +251,7 @@ void FOOTPRINT_EDIT_FRAME::OnEditItemRequest( BOARD_ITEM* aItem )
     }
 
     case PCB_GROUP_T:
-        m_toolManager->RunAction<PCB_GROUP*>( PCB_ACTIONS::groupProperties, true,
+        m_toolManager->RunAction<PCB_GROUP*>( PCB_ACTIONS::groupProperties,
                                               static_cast<PCB_GROUP*>( aItem ) );
         break;
 
@@ -279,7 +279,7 @@ void FOOTPRINT_EDIT_FRAME::SetActiveLayer( PCB_LAYER_ID aLayer )
 
     m_appearancePanel->OnLayerChanged();
 
-    m_toolManager->RunAction( PCB_ACTIONS::layerChanged );  // notify other tools
+    m_toolManager->PostAction( PCB_ACTIONS::layerChanged );  // notify other tools
     GetCanvas()->SetFocus();                             // allow capture of hotkeys
     GetCanvas()->SetHighContrastLayer( aLayer );
     GetCanvas()->Refresh();
diff --git a/pcbnew/footprint_libraries_utils.cpp b/pcbnew/footprint_libraries_utils.cpp
index 6ce44fe712..6c0353d804 100644
--- a/pcbnew/footprint_libraries_utils.cpp
+++ b/pcbnew/footprint_libraries_utils.cpp
@@ -794,7 +794,7 @@ bool FOOTPRINT_EDIT_FRAME::SaveFootprint( FOOTPRINT* aFootprint )
     PAD_TOOL* padTool = m_toolManager->GetTool<PAD_TOOL>();
 
     if( padTool->InPadEditMode() )
-        m_toolManager->RunAction( PCB_ACTIONS::recombinePad, true );
+        m_toolManager->RunAction( PCB_ACTIONS::recombinePad );
 
     wxString libraryName = aFootprint->GetFPID().GetLibNickname();
     wxString footprintName = aFootprint->GetFPID().GetLibItemName();
@@ -968,7 +968,7 @@ bool FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard( bool aAddNew )
         return false;
     }
 
-    m_toolManager->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolManager->RunAction( PCB_ACTIONS::selectionClear );
     BOARD_COMMIT commit( pcbframe );
 
     // Create a copy for the board, first using Clone() to keep existing Uuids, and then either
@@ -1015,7 +1015,7 @@ bool FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard( bool aAddNew )
         commit.Push( wxT( "Insert footprint" ) );
 
         pcbframe->Raise();
-        pcb_ToolManager->RunAction( PCB_ACTIONS::placeFootprint, true, newFootprint );
+        pcb_ToolManager->RunAction( PCB_ACTIONS::placeFootprint, newFootprint );
     }
 
     newFootprint->ClearFlags();
diff --git a/pcbnew/footprint_viewer_frame.cpp b/pcbnew/footprint_viewer_frame.cpp
index 1dae3e2627..4902806f52 100644
--- a/pcbnew/footprint_viewer_frame.cpp
+++ b/pcbnew/footprint_viewer_frame.cpp
@@ -796,7 +796,7 @@ void FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB( wxCommandEvent& aEvent )
         if( blocking_dialog )
             blocking_dialog->Close( true );
 
-        toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        toolMgr->RunAction( PCB_ACTIONS::selectionClear );
         BOARD_COMMIT commit( pcbframe );
 
         // Create the "new" footprint
@@ -831,7 +831,7 @@ void FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB( wxCommandEvent& aEvent )
         commit.Push( wxT( "Insert footprint" ) );
 
         pcbframe->Raise();
-        toolMgr->RunAction( PCB_ACTIONS::placeFootprint, false, newFootprint );
+        toolMgr->PostAction( PCB_ACTIONS::placeFootprint, newFootprint );
 
         newFootprint->ClearFlags();
     }
@@ -1220,9 +1220,9 @@ void FOOTPRINT_VIEWER_FRAME::updateView()
     wxAuiToolBarItem* toolOpt = m_mainToolBar->FindTool( ID_FPVIEWER_AUTOZOOM_TOOL );
 
     if( toolOpt->GetState() & wxAUI_BUTTON_STATE_CHECKED )
-        m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+        m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     else
-        m_toolManager->RunAction( ACTIONS::centerContents, true );
+        m_toolManager->RunAction( ACTIONS::centerContents );
 
     UpdateMsgPanel();
 }
diff --git a/pcbnew/footprint_wizard_frame.cpp b/pcbnew/footprint_wizard_frame.cpp
index 2dd0735cba..753cf22d19 100644
--- a/pcbnew/footprint_wizard_frame.cpp
+++ b/pcbnew/footprint_wizard_frame.cpp
@@ -206,7 +206,7 @@ FOOTPRINT_WIZARD_FRAME::FOOTPRINT_WIZARD_FRAME( KIWAY* aKiway, wxWindow* aParent
     updateView();
 
     SetActiveLayer( F_Cu );
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
+    GetToolManager()->PostAction( ACTIONS::zoomFitScreen );
 
     // Do not Run a dialog here: on some Window Managers, it creates issues.
     // Reason: the FOOTPRINT_WIZARD_FRAME is run as modal;
@@ -291,7 +291,7 @@ void FOOTPRINT_WIZARD_FRAME::updateView()
     GetCanvas()->UpdateColors();
     GetCanvas()->DisplayBoard( GetBoard() );
     m_toolManager->ResetTools( TOOL_BASE::MODEL_RELOAD );
-    m_toolManager->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolManager->RunAction( ACTIONS::zoomFitScreen );
     UpdateMsgPanel();
 }
 
@@ -643,7 +643,7 @@ void FOOTPRINT_WIZARD_FRAME::PythonPluginsReload()
     PCB_EDIT_FRAME* pcbframe = static_cast<PCB_EDIT_FRAME*>( Kiway().Player( FRAME_PCB_EDITOR, false ) );
 
     if( pcbframe )
-        pcbframe->GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload, true );
+        pcbframe->GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload );
     else
-        GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload, true );
+        GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload );
 }
diff --git a/pcbnew/microwave/microwave_inductor.cpp b/pcbnew/microwave/microwave_inductor.cpp
index 57efb21f3e..f4208abb21 100644
--- a/pcbnew/microwave/microwave_inductor.cpp
+++ b/pcbnew/microwave/microwave_inductor.cpp
@@ -309,7 +309,7 @@ void MICROWAVE_TOOL::createInductorBetween( const VECTOR2I& aStart, const VECTOR
     else
     {
         // at this point, we can save the footprint
-        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, inductorFP.get() );
+        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, inductorFP.get() );
 
         BOARD_COMMIT commit( this );
         commit.Add( inductorFP.release() );
diff --git a/pcbnew/navlib/nl_pcbnew_plugin_impl.cpp b/pcbnew/navlib/nl_pcbnew_plugin_impl.cpp
index adf9c7ca05..e717e51fba 100644
--- a/pcbnew/navlib/nl_pcbnew_plugin_impl.cpp
+++ b/pcbnew/navlib/nl_pcbnew_plugin_impl.cpp
@@ -459,9 +459,7 @@ long NL_PCBNEW_PLUGIN_IMPL::SetActiveCommand( std::string commandId )
             }
 
             if( runAction )
-            {
-                tool_manager->RunAction( *context, true );
-            }
+                tool_manager->RunAction( *context );
         }
         else
         {
diff --git a/pcbnew/netlist_reader/netlist.cpp b/pcbnew/netlist_reader/netlist.cpp
index 9556e11680..5d02e419b8 100644
--- a/pcbnew/netlist_reader/netlist.cpp
+++ b/pcbnew/netlist_reader/netlist.cpp
@@ -120,7 +120,7 @@ void PCB_EDIT_FRAME::OnNetlistChanged( BOARD_NETLIST_UPDATER& aUpdater, bool* aR
     // Spread new footprints.
     std::vector<FOOTPRINT*> newFootprints = aUpdater.GetAddedFootprints();
 
-    GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     SpreadFootprints( &newFootprints, { 0, 0 }, true );
 
@@ -128,7 +128,7 @@ void PCB_EDIT_FRAME::OnNetlistChanged( BOARD_NETLIST_UPDATER& aUpdater, bool* aR
     if( !newFootprints.empty() )
     {
         for( FOOTPRINT* footprint : newFootprints )
-            GetToolManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, footprint );
+            GetToolManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, footprint );
 
         *aRunDragCommand = true;
     }
diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp
index ae7dc1d4a3..7e79a5c1dd 100644
--- a/pcbnew/pcb_edit_frame.cpp
+++ b/pcbnew/pcb_edit_frame.cpp
@@ -371,7 +371,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
         m_appearancePanel->SetTabIndex( settings->m_AuiPanels.appearance_panel_tab );
     }
 
-    GetToolManager()->RunAction( ACTIONS::zoomFitScreen, false );
+    GetToolManager()->PostAction( ACTIONS::zoomFitScreen );
 
     // This is used temporarily to fix a client size issue on GTK that causes zoom to fit
     // to calculate the wrong zoom size.  See PCB_EDIT_FRAME::onSize().
@@ -405,7 +405,7 @@ PCB_EDIT_FRAME::PCB_EDIT_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
     PythonSyncProjectName();
 
     // Sync action plugins in case they changed since the last time the frame opened
-    GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload, true );
+    GetToolManager()->RunAction( PCB_ACTIONS::pluginsReload );
 
     GetCanvas()->SwitchBackend( m_canvasType );
     ActivateGalCanvas();
@@ -1371,7 +1371,7 @@ void PCB_EDIT_FRAME::SetActiveLayer( PCB_LAYER_ID aLayer )
 
     m_appearancePanel->OnLayerChanged();
 
-    m_toolManager->RunAction( PCB_ACTIONS::layerChanged );  // notify other tools
+    m_toolManager->PostAction( PCB_ACTIONS::layerChanged );  // notify other tools
     GetCanvas()->SetFocus();                                // allow capture of hotkeys
     GetCanvas()->SetHighContrastLayer( aLayer );
 
@@ -2450,7 +2450,7 @@ void PCB_EDIT_FRAME::onSize( wxSizeEvent& aEvent )
         // We only need this until the frame is done resizing and the final client size is
         // established.
         Unbind( wxEVT_SIZE, &PCB_EDIT_FRAME::onSize, this );
-        GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
+        GetToolManager()->RunAction( ACTIONS::zoomFitScreen );
     }
 
     // Skip() is called in the base class.
diff --git a/pcbnew/router/length_tuner_tool.cpp b/pcbnew/router/length_tuner_tool.cpp
index f0d4edfa19..0ba154b932 100644
--- a/pcbnew/router/length_tuner_tool.cpp
+++ b/pcbnew/router/length_tuner_tool.cpp
@@ -279,7 +279,7 @@ void LENGTH_TUNER_TOOL::setTransitions()
 int LENGTH_TUNER_TOOL::MainLoop( const TOOL_EVENT& aEvent )
 {
     // Deselect all items
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     frame()->PushTool( aEvent );
 
diff --git a/pcbnew/router/router_tool.cpp b/pcbnew/router/router_tool.cpp
index 4e85367cef..387ae0851d 100644
--- a/pcbnew/router/router_tool.cpp
+++ b/pcbnew/router/router_tool.cpp
@@ -312,7 +312,7 @@ protected:
         {
             bds.UseCustomTrackViaSize( true );
             bds.m_TempOverrideTrackWidth = true;
-            m_frame.GetToolManager()->RunAction( ACT_CustomTrackWidth, true );
+            m_frame.GetToolManager()->RunAction( ACT_CustomTrackWidth );
         }
         else if( id == ID_POPUP_PCB_SELECT_AUTO_WIDTH )
         {
@@ -438,7 +438,7 @@ protected:
         {
             bds.UseCustomDiffPairDimensions( true );
             TOOL_MANAGER* toolManager = m_frame.GetToolManager();
-            toolManager->RunAction( PCB_ACTIONS::routerDiffPairDialog, true );
+            toolManager->RunAction( PCB_ACTIONS::routerDiffPairDialog );
         }
         else if( id == ID_POPUP_PCB_SELECT_USE_NETCLASS_DIFFPAIR )
         {
@@ -1485,7 +1485,7 @@ void ROUTER_TOOL::performRouting()
             frame()->GetCanvas()->SetCurrentCursor( KICURSOR::ARROW );
             controls()->SetAutoPan( false );
             {
-                m_toolMgr->RunAction( ACT_CustomTrackWidth, true );
+                m_toolMgr->RunAction( ACT_CustomTrackWidth );
             }
             controls()->SetAutoPan( true );
             setCursor();
@@ -1636,7 +1636,7 @@ int ROUTER_TOOL::RouteSelected( const TOOL_EVENT& aEvent )
     if( selection.Size() == 0 )
         return 0;
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     frame->PushTool( aEvent );
 
@@ -1714,9 +1714,9 @@ int ROUTER_TOOL::RouteSelected( const TOOL_EVENT& aEvent )
             bool autoRouted = false;
 
             if( autoRoute )
-                m_toolMgr->RunAction( PCB_ACTIONS::routerAttemptFinish, false, &autoRouted );
+                m_toolMgr->PostAction( PCB_ACTIONS::routerAttemptFinish, &autoRouted );
             else if( otherEnd )
-                m_toolMgr->RunAction( PCB_ACTIONS::routerContinueFromEnd, false );
+                m_toolMgr->PostAction( PCB_ACTIONS::routerContinueFromEnd );
 
             // We want autorouted tracks to all be in one undo group except for
             // any tracks that need to be manually finished.
@@ -1762,7 +1762,7 @@ int ROUTER_TOOL::MainLoop( const TOOL_EVENT& aEvent )
     }
 
     // Deselect all items
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     frame->PushTool( aEvent );
 
@@ -1853,7 +1853,7 @@ int ROUTER_TOOL::MainLoop( const TOOL_EVENT& aEvent )
         }
         else if( evt->IsAction( &ACT_PlaceThroughVia ) )
         {
-            m_toolMgr->RunAction( PCB_ACTIONS::layerToggle, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::layerToggle );
         }
         else if( evt->IsAction( &PCB_ACTIONS::layerChanged ) )
         {
@@ -1923,7 +1923,7 @@ void ROUTER_TOOL::performDragging( int aMode )
 
         m_cancelled = true;
 
-        m_toolMgr->RunAction( PCB_ACTIONS::drag45Degree, false );
+        m_toolMgr->PostAction( PCB_ACTIONS::drag45Degree );
 
         return;
     }
@@ -2078,7 +2078,7 @@ void ROUTER_TOOL::NeighboringSegmentFilter( const VECTOR2I& aPt, GENERAL_COLLECT
 
 bool ROUTER_TOOL::CanInlineDrag( int aDragMode )
 {
-    m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor, true,
+    m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor,
                                                    NeighboringSegmentFilter );
     const PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
 
@@ -2108,7 +2108,7 @@ int ROUTER_TOOL::InlineDrag( const TOOL_EVENT& aEvent )
 
     if( selection.Empty() )
     {
-        m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor, true,
+        m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor,
                                                        NeighboringSegmentFilter );
     }
 
@@ -2137,7 +2137,7 @@ int ROUTER_TOOL::InlineDrag( const TOOL_EVENT& aEvent )
         item->SetLocked( false );
     }
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     frame()->PushTool( aEvent );
     Activate();
@@ -2444,7 +2444,7 @@ int ROUTER_TOOL::InlineBreakTrack( const TOOL_EVENT& aEvent )
     if( item->Type() != PCB_TRACE_T )
         return 0;
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     Activate();
 
diff --git a/pcbnew/tools/board_editor_control.cpp b/pcbnew/tools/board_editor_control.cpp
index b31acf1d2d..2b0bd81195 100644
--- a/pcbnew/tools/board_editor_control.cpp
+++ b/pcbnew/tools/board_editor_control.cpp
@@ -746,7 +746,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
         designSettings.SetDiffPairIndex( widthIndex );
         designSettings.UseCustomDiffPairDimensions( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
     else
     {
@@ -770,7 +770,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
         designSettings.SetTrackWidthIndex( widthIndex );
         designSettings.UseCustomTrackViaSize( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
 
     return 0;
@@ -826,7 +826,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
         designSettings.SetDiffPairIndex( widthIndex );
         designSettings.UseCustomDiffPairDimensions( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
     else
     {
@@ -850,7 +850,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
         designSettings.SetTrackWidthIndex( widthIndex );
         designSettings.UseCustomTrackViaSize( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
 
     return 0;
@@ -899,7 +899,7 @@ int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
         designSettings.SetViaSizeIndex( sizeIndex );
         designSettings.UseCustomTrackViaSize( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
 
     return 0;
@@ -956,7 +956,7 @@ int BOARD_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
         designSettings.SetViaSizeIndex( sizeIndex );
         designSettings.UseCustomTrackViaSize( false );
 
-        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged );
     }
 
     return 0;
@@ -977,7 +977,7 @@ int BOARD_EDITOR_CONTROL::PlaceFootprint( const TOOL_EVENT& aEvent )
     BOARD*                board = getModel<BOARD>();
     COMMON_SETTINGS*      common_settings = Pgm().GetCommonSettings();
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_frame->PushTool( aEvent );
 
@@ -990,7 +990,7 @@ int BOARD_EDITOR_CONTROL::PlaceFootprint( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
                 commit.Revert();
 
                 if( fromOtherCommand )
@@ -1024,8 +1024,8 @@ int BOARD_EDITOR_CONTROL::PlaceFootprint( const TOOL_EVENT& aEvent )
     {
         m_placingFootprint = true;
         fp->SetPosition( cursorPos );
-        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, fp );
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, fp );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else if( aEvent.HasPosition() )
     {
@@ -1044,7 +1044,7 @@ int BOARD_EDITOR_CONTROL::PlaceFootprint( const TOOL_EVENT& aEvent )
         cursorPos = controls->GetCursorPosition( !evt->DisableGridSnapping() );
 
         if( reselect && fp )
-            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, fp );
+            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, fp );
 
         if( evt->IsCancelInteractive() )
         {
@@ -1128,13 +1128,13 @@ int BOARD_EDITOR_CONTROL::PlaceFootprint( const TOOL_EVENT& aEvent )
                 fp->GetField( FOOTPRINT_FIELD )->SetText( UnescapeString( fp->GetFPIDAsString() ) );
 
                 commit.Add( fp );
-                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, fp );
+                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, fp );
 
-                m_toolMgr->RunAction( ACTIONS::refreshPreview );
+                m_toolMgr->PostAction( ACTIONS::refreshPreview );
             }
             else
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
                 commit.Push( _( "Place a footprint" ) );
                 fp = nullptr;  // to indicate that there is no footprint that we currently modify
                 m_placingFootprint = false;
@@ -1203,7 +1203,7 @@ int BOARD_EDITOR_CONTROL::modifyLockSelected( MODIFY_MODE aMode )
     BOARD_COMMIT         commit( m_frame );
 
     if( selection.Empty() )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor );
 
     // Resolve TOGGLE mode
     if( aMode == TOGGLE )
@@ -1361,7 +1361,7 @@ int BOARD_EDITOR_CONTROL::ZoneMerge( const TOOL_EVENT& aEvent )
         toMerge.push_back( curr_area );
     }
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     if( !toMerge.empty() )
     {
@@ -1370,7 +1370,7 @@ int BOARD_EDITOR_CONTROL::ZoneMerge( const TOOL_EVENT& aEvent )
             commit.Push( wxT( "Merge zones" ) );
 
             for( EDA_ITEM* item : merged )
-                m_toolMgr->RunAction( PCB_ACTIONS::selectItem, true, item );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectItem, item );
         }
     }
 
@@ -1503,7 +1503,7 @@ int BOARD_EDITOR_CONTROL::AssignNetclass( const TOOL_EVENT& aEvent )
     }
 
     selectionTool->ClearSelection();
-    m_toolMgr->RunAction( PCB_ACTIONS::selectNet, true, netCode );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectNet, netCode );
     canvas()->ForceRefresh();
 
     DIALOG_ASSIGN_NETCLASS dlg( m_frame, netName, board()->GetNetClassAssignmentCandidates(),
@@ -1561,7 +1561,7 @@ int BOARD_EDITOR_CONTROL::EditFpInFpEditor( const TOOL_EVENT& aEvent )
     editor->Raise();        // Iconize( false );
 
     if( selection.IsHover() )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     return 0;
 }
@@ -1592,7 +1592,7 @@ int BOARD_EDITOR_CONTROL::DrillOrigin( const TOOL_EVENT& aEvent )
             return false;   // drill origin is a one-shot; don't continue with tool
         } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
diff --git a/pcbnew/tools/board_inspection_tool.cpp b/pcbnew/tools/board_inspection_tool.cpp
index 1b3075a7d7..3393efd01e 100644
--- a/pcbnew/tools/board_inspection_tool.cpp
+++ b/pcbnew/tools/board_inspection_tool.cpp
@@ -1516,10 +1516,10 @@ int BOARD_INSPECTION_TOOL::HighlightItem( const TOOL_EVENT& aEvent )
 
     m_frame->m_probingSchToPcb = true; // recursion guard
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         if( item )
-            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, item );
+            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, item );
     }
     m_frame->m_probingSchToPcb = false;
 
@@ -1756,15 +1756,15 @@ int BOARD_INSPECTION_TOOL::LocalRatsnestTool( const TOOL_EVENT& aEvent )
             {
                 PCB_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PCB_SELECTION_TOOL>();
 
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
-                m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor, true,
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
+                m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor,
                                                                EDIT_TOOL::PadFilter );
 
                 PCB_SELECTION& selection = selectionTool->GetSelection();
 
                 if( selection.Empty() )
                 {
-                    m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor, true,
+                    m_toolMgr->RunAction<CLIENT_SELECTION_FILTER>( PCB_ACTIONS::selectionCursor,
                                                                    EDIT_TOOL::FootprintFilter );
                     selection = selectionTool->GetSelection();
                 }
@@ -1817,7 +1817,7 @@ int BOARD_INSPECTION_TOOL::LocalRatsnestTool( const TOOL_EVENT& aEvent )
                 }
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
diff --git a/pcbnew/tools/drawing_stackup_table_tool.cpp b/pcbnew/tools/drawing_stackup_table_tool.cpp
index f600ba009a..5efc0dc25b 100644
--- a/pcbnew/tools/drawing_stackup_table_tool.cpp
+++ b/pcbnew/tools/drawing_stackup_table_tool.cpp
@@ -549,7 +549,7 @@ int DRAWING_TOOL::InteractivePlaceWithPreview( const TOOL_EVENT& aEvent,
 
     BOARD_COMMIT commit( m_frame );
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     // do not capture or auto-pan until we start placing the table
     SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::TEXT );
diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp
index ec41852c2c..c730341bc3 100644
--- a/pcbnew/tools/drawing_tool.cpp
+++ b/pcbnew/tools/drawing_tool.cpp
@@ -410,7 +410,7 @@ int DRAWING_TOOL::DrawRectangle( const TOOL_EVENT& aEvent )
                 commit.Add( rect );
                 commit.Push( isTextBox ? _( "Draw a text box" ) : _( "Draw a rectangle" ) );
 
-                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, rect );
+                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, rect );
             }
         }
 
@@ -458,7 +458,7 @@ int DRAWING_TOOL::DrawCircle( const TOOL_EVENT& aEvent )
             commit.Add( circle );
             commit.Push( _( "Draw a circle" ) );
 
-            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, circle );
+            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, circle );
         }
 
         circle = new PCB_SHAPE( parent );
@@ -505,7 +505,7 @@ int DRAWING_TOOL::DrawArc( const TOOL_EVENT& aEvent )
             commit.Add( arc );
             commit.Push( _( "Draw an arc" ) );
 
-            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, arc );
+            m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, arc );
         }
 
         arc = new PCB_SHAPE( parent );
@@ -536,7 +536,7 @@ int DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
     PCB_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PCB_SELECTION_TOOL>();
     BOARD_COMMIT        commit( m_frame );
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     // Add all the drawable symbols to preview
     if( image )
@@ -559,7 +559,7 @@ int DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&] ()
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
                 m_view->ClearPreview();
                 m_view->RecacheAllItems();
                 delete image;
@@ -577,7 +577,7 @@ int DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
     // Prime the pump
     if( image )
     {
-        m_toolMgr->RunAction( ACTIONS::refreshPreview );
+        m_toolMgr->PostAction( ACTIONS::refreshPreview );
     }
     else if( aEvent.HasPosition() )
     {
@@ -650,7 +650,7 @@ int DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
         {
             if( !image )
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 wxFileDialog dlg( m_frame, _( "Choose Image" ), wxEmptyString, wxEmptyString,
                                   _( "Image Files" ) + wxS( " " ) + wxImage::GetImageExtWildcard(),
@@ -705,10 +705,10 @@ int DRAWING_TOOL::PlaceImage( const TOOL_EVENT& aEvent )
                 commit.Add( image );
                 commit.Push( _( "Place an image" ) );
 
-                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, image );
+                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, image );
 
                 image = nullptr;
-                m_toolMgr->RunAction( ACTIONS::activatePointEditor );
+                m_toolMgr->PostAction( ACTIONS::activatePointEditor );
 
                 m_view->ClearPreview();
 
@@ -785,7 +785,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
     auto cleanup =
             [&]()
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
                 m_controls->ForceCursorPosition( false );
                 m_controls->ShowCursor( true );
                 m_controls->SetAutoPan( false );
@@ -803,7 +803,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
                     m_frame->GetCanvas()->SetCurrentCursor( KICURSOR::TEXT );
             };
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_frame->PushTool( aEvent );
 
@@ -875,7 +875,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
 
             if( !text )
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 m_controls->ForceCursorPosition( true, m_controls->GetCursorPosition() );
 
@@ -934,7 +934,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
                         m_frame->GetCanvas()->Refresh();
                     }
 
-                    m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, text );
+                    m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, text );
                     m_view->Update( &selection() );
 
                     // update the cursor so it looks correct before another event
@@ -945,12 +945,12 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
             if( placing )
             {
                 text->ClearFlags();
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 commit.Add( text );
                 commit.Push( _( "Place a text" ) );
 
-                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, text );
+                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, text );
 
                 text = nullptr;
             }
@@ -971,7 +971,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
                 cursorPos = m_controls->GetMousePosition();
             }
 
-            m_toolMgr->RunAction( PCB_ACTIONS::refreshPreview );
+            m_toolMgr->PostAction( PCB_ACTIONS::refreshPreview );
 
             m_controls->ShowCursor( true );
             m_controls->CaptureCursor( text != nullptr );
@@ -1082,7 +1082,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
                 m_frame->GetCanvas()->SetCurrentCursor( KICURSOR::MEASURE );
             };
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_frame->PushTool( aEvent );
 
@@ -1093,7 +1093,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
     // Set initial cursor
     setCursor();
 
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     if( aEvent.HasPosition() )
         m_toolMgr->PrimeTool( aEvent.Position() );
@@ -1185,7 +1185,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
             {
             case SET_ORIGIN:
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 PCB_LAYER_ID layer = m_frame->GetActiveLayer();
 
@@ -1289,7 +1289,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
                 if( t == PCB_DIM_LEADER_T )
                     frame()->OnEditItemRequest( dimension );
 
-                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, dimension );
+                m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, dimension );
 
                 break;
             }
@@ -1303,7 +1303,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
             }
             else if( evt->IsDblClick( BUT_LEFT ) )
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::cursorClick, false );
+                m_toolMgr->PostAction( PCB_ACTIONS::cursorClick );
             }
         }
         else if( evt->IsMotion() )
@@ -1501,7 +1501,7 @@ int DRAWING_TOOL::PlaceImportedGraphics( const TOOL_EVENT& aEvent )
         return 0;
     }
 
-    m_toolMgr->RunAction( ACTIONS::cancelInteractive, true );
+    m_toolMgr->RunAction( ACTIONS::cancelInteractive );
 
     std::vector<BOARD_ITEM*> newItems;          // all new items, including group
     std::vector<BOARD_ITEM*> selectedItems;     // the group, or newItems if no group
@@ -1552,10 +1552,10 @@ int DRAWING_TOOL::PlaceImportedGraphics( const TOOL_EVENT& aEvent )
     m_view->Add( &preview );
 
     // Clear the current selection then select the drawings so that edit tools work on them
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
-    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &selItems );
+    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &selItems );
 
     m_frame->PushTool( aEvent );
 
@@ -1598,7 +1598,7 @@ int DRAWING_TOOL::PlaceImportedGraphics( const TOOL_EVENT& aEvent )
 
         if( evt->IsCancelInteractive() || evt->IsActivate() )
         {
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
             if( group )
             {
@@ -1672,7 +1672,7 @@ int DRAWING_TOOL::SetAnchor( const TOOL_EVENT& aEvent )
     SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ANCHOR );
     PCB_GRID_HELPER  grid( m_toolMgr, m_frame->GetMagneticItemsSettings() );
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_frame->PushTool( aEvent );
 
@@ -1845,7 +1845,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
     // Set initial cursor
     setCursor();
 
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     if( aStartingPoint )
         m_toolMgr->PrimeTool( *aStartingPoint );
@@ -1952,7 +1952,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
 
             if( !started )
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 if( aStartingPoint )
                 {
@@ -2020,7 +2020,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
                     {
                         commit.Add( graphic );
                         commit.Push( _( "Draw a line segment" ) );
-                        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, graphic );
+                        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, graphic );
                     }
                     else
                     {
@@ -2250,7 +2250,7 @@ bool DRAWING_TOOL::drawArc( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
     bool started = false;
     bool cancelled = false;
 
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     if( aStartingPoint )
         m_toolMgr->PrimeTool( *aStartingPoint );
@@ -2310,7 +2310,7 @@ bool DRAWING_TOOL::drawArc( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
         {
             if( !started )
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 m_controls->SetAutoPan( true );
                 m_controls->CaptureCursor( true );
@@ -2489,7 +2489,7 @@ bool DRAWING_TOOL::getSourceZoneForAction( ZONE_MODE aMode, ZONE** aZone )
     if( selection.Empty() )
     {
         clearSelection = true;
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor );
     }
 
     // we want a single zone
@@ -2500,7 +2500,7 @@ bool DRAWING_TOOL::getSourceZoneForAction( ZONE_MODE aMode, ZONE** aZone )
     if( !*aZone )
     {
         if( clearSelection )
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         return false;
     }
diff --git a/pcbnew/tools/drc_tool.cpp b/pcbnew/tools/drc_tool.cpp
index dd63dc8679..2e247d0610 100644
--- a/pcbnew/tools/drc_tool.cpp
+++ b/pcbnew/tools/drc_tool.cpp
@@ -82,7 +82,7 @@ void DRC_TOOL::ShowDRCDialog( wxWindow* aParent )
     }
 
     Activate();
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     if( !m_drcDialog )
     {
diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp
index 03c8ee83b0..8c3dea74f0 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -282,11 +282,11 @@ int EDIT_TOOL::GetAndPlace( const TOOL_EVENT& aEvent )
 
     if( fp )
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
-        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, fp );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
+        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, fp );
 
         selectionTool->GetSelection().SetReferencePoint( fp->GetPosition() );
-        m_toolMgr->RunAction( PCB_ACTIONS::move, false );
+        m_toolMgr->PostAction( PCB_ACTIONS::move );
     }
 
     return 0;
@@ -314,7 +314,7 @@ bool EDIT_TOOL::invokeInlineRouter( int aDragMode )
 
     if( theRouter->CanInlineDrag( aDragMode ) )
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::routerInlineDrag, true, aDragMode );
+        m_toolMgr->RunAction( PCB_ACTIONS::routerInlineDrag, aDragMode );
         return true;
     }
 
@@ -839,7 +839,7 @@ int EDIT_TOOL::ChangeTrackWidth( const TOOL_EVENT& aEvent )
 
     if( selection.IsHover() )
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         // Notify other tools of the changes -- This updates the visual ratsnest
         m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
@@ -1341,14 +1341,14 @@ int EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
         VECTOR2D            cursorPos = getViewControls()->GetCursorPosition( false );
 
         if( ds && ds->HitTestDrawingSheetItems( getView(), cursorPos ) )
-            m_toolMgr->RunAction( ACTIONS::pageSettings );
+            m_toolMgr->PostAction( ACTIONS::pageSettings );
         else
-            m_toolMgr->RunAction( PCB_ACTIONS::footprintProperties, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::footprintProperties );
     }
 
     if( selection.IsHover() )
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
     }
     else
     {
@@ -1475,12 +1475,12 @@ int EDIT_TOOL::Rotate( const TOOL_EVENT& aEvent )
             m_commit->Push( _( "Rotate" ) );
 
         if( is_hover && !m_dragging )
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
 
         if( m_dragging )
-            m_toolMgr->RunAction( PCB_ACTIONS::updateLocalRatsnest, false );
+            m_toolMgr->PostAction( PCB_ACTIONS::updateLocalRatsnest );
     }
 
     // Restore the old reference so any mouse dragging that occurs doesn't make the selection jump
@@ -1675,12 +1675,12 @@ int EDIT_TOOL::Mirror( const TOOL_EVENT& aEvent )
         m_commit->Push( _( "Mirror" ) );
 
     if( selection.IsHover() && !m_dragging )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
 
     if( m_dragging )
-        m_toolMgr->RunAction( PCB_ACTIONS::updateLocalRatsnest, false );
+        m_toolMgr->PostAction( PCB_ACTIONS::updateLocalRatsnest );
 
     return 0;
 }
@@ -1752,12 +1752,12 @@ int EDIT_TOOL::Flip( const TOOL_EVENT& aEvent )
         m_commit->Push( _( "Change Side / Flip" ) );
 
     if( selection.IsHover() && !m_dragging )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
 
     if( m_dragging )
-        m_toolMgr->RunAction( PCB_ACTIONS::updateLocalRatsnest, false );
+        m_toolMgr->PostAction( PCB_ACTIONS::updateLocalRatsnest );
 
     // Restore the old reference so any mouse dragging that occurs doesn't make the selection jump
     // to this now invalid reference
@@ -1773,7 +1773,7 @@ int EDIT_TOOL::Flip( const TOOL_EVENT& aEvent )
 void EDIT_TOOL::DeleteItems( const PCB_SELECTION& aItems, bool aIsCut )
 {
     // As we are about to remove items, they have to be removed from the selection first
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     for( EDA_ITEM* item : aItems )
     {
@@ -1856,7 +1856,7 @@ void EDIT_TOOL::DeleteItems( const PCB_SELECTION& aItems, bool aIsCut )
                         canvas()->Refresh();
 
                         // Restore the selection on the original zone
-                        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, zone );
+                        m_toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, zone );
 
                         break;
                     }
@@ -1985,7 +1985,7 @@ int EDIT_TOOL::Remove( const TOOL_EVENT& aEvent )
         // In "alternative" mode, we expand selected track items to their full connection.
         if( isAlt && ( selectionCopy.HasType( PCB_TRACE_T ) || selectionCopy.HasType( PCB_VIA_T ) ) )
         {
-            m_toolMgr->RunAction( PCB_ACTIONS::selectConnection, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectConnection );
         }
 
         // Finally run RequestSelection() one more time to find out what user wants to do about
@@ -2097,12 +2097,12 @@ int EDIT_TOOL::MoveExact( const TOOL_EVENT& aEvent )
         m_commit->Push( _( "Move exact" ) );
 
         if( selection.IsHover() )
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
 
         if( m_dragging )
-            m_toolMgr->RunAction( PCB_ACTIONS::updateLocalRatsnest, false );
+            m_toolMgr->PostAction( PCB_ACTIONS::updateLocalRatsnest );
     }
 
     return 0;
@@ -2225,11 +2225,11 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
     }
 
     // Clear the old selection first
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     // Select the new items
     EDA_ITEMS nItems( new_items.begin(), new_items.end() );
-    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &nItems );
+    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &nItems );
 
     // record the new items as added
     if( !selection.Empty() )
@@ -2239,7 +2239,7 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
 
         // TODO(ISM): This line can't be used to activate the tool until we allow multiple
         //            activations.
-        // m_toolMgr->RunAction( PCB_ACTIONS::move, true );
+        // m_toolMgr->RunAction( PCB_ACTIONS::move );
         // Instead we have to create the event and call the tool's function
         // directly
 
@@ -2250,7 +2250,7 @@ int EDIT_TOOL::Duplicate( const TOOL_EVENT& aEvent )
 
         // Deslect the duplicated item if we originally started as a hover selection
         if( is_hover )
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
     }
 
     return 0;
@@ -2398,7 +2398,7 @@ bool EDIT_TOOL::pickReferencePoint( const wxString& aTooltip, const wxString& aS
     m_statusPopup->Popup();
     canvas()->SetStatusPopup( m_statusPopup->GetPanel() );
 
-    m_toolMgr->RunAction( ACTIONS::pickerSubTool, true );
+    m_toolMgr->RunAction( ACTIONS::pickerSubTool );
 
     while( !done )
     {
diff --git a/pcbnew/tools/edit_tool_move_fct.cpp b/pcbnew/tools/edit_tool_move_fct.cpp
index 3a0bf8a8ae..f7b226faab 100644
--- a/pcbnew/tools/edit_tool_move_fct.cpp
+++ b/pcbnew/tools/edit_tool_move_fct.cpp
@@ -394,7 +394,7 @@ int EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, const wxString& aCommi
                                                   pickedReferencePoint ) )
     {
         if( is_hover )
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
         editFrame->PopTool( aEvent );
         return 0;
@@ -449,7 +449,7 @@ int EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, const wxString& aCommi
     displayConstraintsMessage( hv45Mode );
 
     // Prime the pump
-    m_toolMgr->RunAction( ACTIONS::refreshPreview );
+    m_toolMgr->PostAction( ACTIONS::refreshPreview );
 
     // Main loop: keep receiving events
     do
@@ -666,7 +666,7 @@ int EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, const wxString& aCommi
 
             statusPopup.Move( wxGetMousePosition() + wxPoint( 20, 20 ) );
 
-            m_toolMgr->RunAction( PCB_ACTIONS::updateLocalRatsnest, false, new VECTOR2I( movement ) );
+            m_toolMgr->PostAction( PCB_ACTIONS::updateLocalRatsnest, new VECTOR2I( movement ) );
         }
         else if( evt->IsCancelInteractive() || evt->IsActivate() )
         {
@@ -794,7 +794,7 @@ int EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, const wxString& aCommi
 
     // Unselect all items to clear selection flags and then re-select the originally selected
     // items (after the potential Revert()).
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     // TODO: there's an encapsulation leak here: this commit often has more than just the move
     // in it; for instance it might have a paste, append board, etc. as well.
@@ -818,12 +818,12 @@ int EDIT_TOOL::doMoveSelection( const TOOL_EVENT& aEvent, const wxString& aCommi
         m_commit->Push( aCommitMessage );
 
         EDA_ITEMS oItems( orig_items.begin(), orig_items.end() );
-        m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &oItems );
+        m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &oItems );
     }
 
     m_toolMgr->GetTool<DRAWING_TOOL>()->UpdateStatusBar();
     // Remove the dynamic ratsnest from the screen
-    m_toolMgr->RunAction( PCB_ACTIONS::hideLocalRatsnest, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::hideLocalRatsnest );
 
     editFrame->PopTool( aEvent );
     editFrame->GetCanvas()->SetCurrentCursor( KICURSOR::ARROW );
diff --git a/pcbnew/tools/footprint_editor_control.cpp b/pcbnew/tools/footprint_editor_control.cpp
index 77e65c9d9d..0fd77e1b02 100644
--- a/pcbnew/tools/footprint_editor_control.cpp
+++ b/pcbnew/tools/footprint_editor_control.cpp
@@ -524,7 +524,7 @@ int FOOTPRINT_EDITOR_CONTROL::ImportFootprint( const TOOL_EVENT& aEvent )
         m_frame->ReCreateHToolbar();
     }
 
-    m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+    m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
     m_frame->OnModify();
     return 0;
 }
diff --git a/pcbnew/tools/group_tool.cpp b/pcbnew/tools/group_tool.cpp
index 2bd225f346..d0629af32b 100644
--- a/pcbnew/tools/group_tool.cpp
+++ b/pcbnew/tools/group_tool.cpp
@@ -145,7 +145,7 @@ int GROUP_TOOL::PickNewMember( const TOOL_EVENT& aEvent  )
     picker->SetClickHandler(
             [&]( const VECTOR2D& aPoint ) -> bool
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
                 const PCB_SELECTION& sel = m_selectionTool->RequestSelection(
                         []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector,
@@ -200,7 +200,7 @@ int GROUP_TOOL::PickNewMember( const TOOL_EVENT& aEvent  )
     statusPopup.Popup();
     canvas()->SetStatusPopup( statusPopup.GetPanel() );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     while( !done )
     {
@@ -315,10 +315,10 @@ int GROUP_TOOL::Ungroup( const TOOL_EVENT& aEvent )
     std::vector<BOARD_ITEM*> members;
 
     if( selection.Empty() )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor );
 
     PCB_SELECTION selCopy = selection;
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     for( EDA_ITEM* item : selCopy )
     {
@@ -358,7 +358,7 @@ int GROUP_TOOL::Ungroup( const TOOL_EVENT& aEvent )
     }
 
     EDA_ITEMS mem( members.begin(), members.end() );
-    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &mem );
+    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &mem );
 
     m_toolMgr->PostEvent( EVENTS::SelectedItemsModified );
     m_frame->OnModify();
@@ -374,7 +374,7 @@ int GROUP_TOOL::RemoveFromGroup( const TOOL_EVENT& aEvent )
     BOARD_COMMIT         commit( m_frame );
 
     if( selection.Empty() )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor );
 
     std::map<PCB_GROUP*, std::vector<BOARD_ITEM*>> groupMap;
 
diff --git a/pcbnew/tools/pad_tool.cpp b/pcbnew/tools/pad_tool.cpp
index d11351e4fa..21466c948d 100644
--- a/pcbnew/tools/pad_tool.cpp
+++ b/pcbnew/tools/pad_tool.cpp
@@ -70,7 +70,7 @@ void PAD_TOOL::Reset( RESET_REASON aReason )
         bool highContrast = ( opts.m_ContrastModeDisplay != HIGH_CONTRAST_MODE::NORMAL );
 
         if( m_wasHighContrast != highContrast )
-            m_toolMgr->RunAction( ACTIONS::highContrastMode, true );
+            m_toolMgr->RunAction( ACTIONS::highContrastMode );
 
         frame()->GetInfoBar()->Dismiss();
 
@@ -300,7 +300,7 @@ int PAD_TOOL::EnumeratePads( const TOOL_EVENT& aEvent )
     std::deque<int> storedPadNumbers;
     std::map<wxString, std::pair<int, wxString>> oldNumbers;
 
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     frame()->PushTool( aEvent );
 
@@ -348,7 +348,7 @@ int PAD_TOOL::EnumeratePads( const TOOL_EVENT& aEvent )
 
         if( evt->IsCancelInteractive() )
         {
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
             commit.Revert();
 
             frame()->PopTool( aEvent );
@@ -611,7 +611,7 @@ int PAD_TOOL::EditPad( const TOOL_EVENT& aEvent )
                 } );
 
         if( !m_wasHighContrast )
-            m_toolMgr->RunAction( ACTIONS::highContrastMode, true );
+            m_toolMgr->RunAction( ACTIONS::highContrastMode );
 
         if( PCB_ACTIONS::explodePad.GetHotKey() == PCB_ACTIONS::recombinePad.GetHotKey() )
         {
@@ -635,7 +635,7 @@ int PAD_TOOL::EditPad( const TOOL_EVENT& aEvent )
         bool highContrast = ( opts.m_ContrastModeDisplay != HIGH_CONTRAST_MODE::NORMAL );
 
         if( m_wasHighContrast != highContrast )
-            m_toolMgr->RunAction( ACTIONS::highContrastMode, true );
+            m_toolMgr->RunAction( ACTIONS::highContrastMode );
 
         settings->m_PadEditModePad = nullptr;
 
@@ -727,7 +727,7 @@ PCB_LAYER_ID PAD_TOOL::explodePad( PAD* aPad )
     }
 
     commit.Push( _("Edit pad shapes") );
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
     return layer;
 }
 
@@ -739,7 +739,7 @@ std::vector<PCB_SHAPE*> PAD_TOOL::RecombinePad( PAD* aPad, bool aIsDryRun, BOARD
 
     // Don't leave an object in the point editor that might no longer exist after
     // recombining the pad.
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     for( BOARD_ITEM* item : footprint->GraphicalItems() )
         item->ClearFlags( SKIP_STRUCT );
diff --git a/pcbnew/tools/pcb_control.cpp b/pcbnew/tools/pcb_control.cpp
index 1bdc0ccc29..60e378cfa0 100644
--- a/pcbnew/tools/pcb_control.cpp
+++ b/pcbnew/tools/pcb_control.cpp
@@ -570,7 +570,7 @@ int PCB_CONTROL::GridSetOrigin( const TOOL_EVENT& aEvent )
                     return false;   // drill origin is a one-shot; don't continue with tool
                 } );
 
-        m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+        m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
     }
 
     return 0;
@@ -596,7 +596,7 @@ int PCB_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent )
     PCB_PICKER_TOOL* picker = m_toolMgr->GetTool<PCB_PICKER_TOOL>();
 
     m_pickerItem = nullptr;
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     // Deactivate other tools; particularly important if another PICKER is currently running
     Activate();
@@ -683,7 +683,7 @@ int PCB_CONTROL::DeleteItemCursor( const TOOL_EVENT& aEvent )
                 m_frame->GetCanvas()->Refresh();
             } );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     return 0;
 }
@@ -1103,7 +1103,7 @@ int PCB_CONTROL::placeBoardItems( BOARD* aBoard, bool aAnchorAtOrigin, bool aRea
 int PCB_CONTROL::placeBoardItems( std::vector<BOARD_ITEM*>& aItems, bool aIsNew,
                                   bool aAnchorAtOrigin, bool aReannotateDuplicates )
 {
-    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     PCB_SELECTION_TOOL* selectionTool = m_toolMgr->GetTool<PCB_SELECTION_TOOL>();
     EDIT_TOOL*          editTool = m_toolMgr->GetTool<EDIT_TOOL>();
@@ -1153,7 +1153,7 @@ int PCB_CONTROL::placeBoardItems( std::vector<BOARD_ITEM*>& aItems, bool aIsNew,
 
     // Select the items that should be selected
     EDA_ITEMS toSel( itemsToSel.begin(), itemsToSel.end() );
-    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, true, &toSel );
+    m_toolMgr->RunAction<EDA_ITEMS*>( PCB_ACTIONS::selectItems, &toSel );
 
     // Reannotate duplicate footprints (make sense only in board editor )
     if( aReannotateDuplicates && m_isBoardEditor )
@@ -1185,7 +1185,7 @@ int PCB_CONTROL::placeBoardItems( std::vector<BOARD_ITEM*>& aItems, bool aIsNew,
         getViewControls()->SetCursorPosition( getViewControls()->GetMousePosition(), false );
 
         m_toolMgr->ProcessEvent( EVENTS::SelectedEvent );
-        m_toolMgr->RunAction( PCB_ACTIONS::move, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::move );
     }
 
     return 0;
diff --git a/pcbnew/tools/pcb_point_editor.cpp b/pcbnew/tools/pcb_point_editor.cpp
index 53639adecc..0137024630 100644
--- a/pcbnew/tools/pcb_point_editor.cpp
+++ b/pcbnew/tools/pcb_point_editor.cpp
@@ -2323,7 +2323,7 @@ int PCB_POINT_EDITOR::removeCorner( const TOOL_EVENT& aEvent )
             }
             else
             {
-                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
                 commit.Remove( item );
             }
         }
diff --git a/pcbnew/tools/pcb_selection_tool.cpp b/pcbnew/tools/pcb_selection_tool.cpp
index e0cbe4cdf9..d67cdb5c31 100644
--- a/pcbnew/tools/pcb_selection_tool.cpp
+++ b/pcbnew/tools/pcb_selection_tool.cpp
@@ -298,7 +298,7 @@ int PCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
                 // Single click? Select single object
                 if( m_highlight_modifier && brd_editor )
                 {
-                    m_toolMgr->RunAction( PCB_ACTIONS::highlightNet, true );
+                    m_toolMgr->RunAction( PCB_ACTIONS::highlightNet );
                 }
                 else
                 {
@@ -338,15 +338,15 @@ int PCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
             if( m_selection.GetSize() == 1 && m_selection[0]->Type() == PCB_GROUP_T )
                 EnterGroup();
             else
-                m_toolMgr->RunAction( PCB_ACTIONS::properties, true );
+                m_toolMgr->RunAction( PCB_ACTIONS::properties );
         }
         else if( evt->IsDblClick( BUT_MIDDLE ) )
         {
             // Middle double click?  Do zoom to fit or zoom to objects
             if( evt->Modifier( MD_CTRL ) ) // Is CTRL key down?
-                m_toolMgr->RunAction( ACTIONS::zoomFitObjects, true );
+                m_toolMgr->RunAction( ACTIONS::zoomFitObjects );
             else
-                m_toolMgr->RunAction( ACTIONS::zoomFitScreen, true );
+                m_toolMgr->RunAction( ACTIONS::zoomFitScreen );
         }
         else if( evt->IsDrag( BUT_LEFT ) )
         {
@@ -424,11 +424,11 @@ int PCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
                                          && dynamic_cast<PCB_TRACK*>( m_selection.GetItem( 0 ) );
 
                     if( haveTrack && trackDragAction == TRACK_DRAG_ACTION::DRAG )
-                        m_toolMgr->RunAction( PCB_ACTIONS::drag45Degree, true );
+                        m_toolMgr->RunAction( PCB_ACTIONS::drag45Degree );
                     else if( haveTrack && trackDragAction == TRACK_DRAG_ACTION::DRAG_FREE_ANGLE )
-                        m_toolMgr->RunAction( PCB_ACTIONS::dragFreeAngle, true );
+                        m_toolMgr->RunAction( PCB_ACTIONS::dragFreeAngle );
                     else
-                        m_toolMgr->RunAction( PCB_ACTIONS::move, true );
+                        m_toolMgr->RunAction( PCB_ACTIONS::move );
                 }
                 else
                 {
@@ -554,7 +554,7 @@ PCB_SELECTION& PCB_SELECTION_TOOL::RequestSelection( CLIENT_SELECTION_FILTER aCl
 
     if( selectionEmpty )
     {
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, true, aClientFilter );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionCursor, aClientFilter );
         m_selection.ClearReferencePoint();
     }
 
@@ -1155,7 +1155,7 @@ int PCB_SELECTION_TOOL::unrouteSelected( const TOOL_EVENT& aEvent )
 
     // Get the tracks on our list of pads, then delete them
     selectAllConnectedTracks( toUnroute, STOP_CONDITION::STOP_AT_PAD );
-    m_toolMgr->RunAction( ACTIONS::doDelete, true );
+    m_toolMgr->RunAction( ACTIONS::doDelete );
 
     // Reselect our footprint/pads as they were in our original selection
     for( EDA_ITEM* item : selectedItems )
@@ -1544,7 +1544,7 @@ int PCB_SELECTION_TOOL::grabUnconnected( const TOOL_EVENT& aEvent )
             select( nearest );
     }
 
-    m_toolMgr->RunAction( PCB_ACTIONS::moveIndividually, true );
+    m_toolMgr->RunAction( PCB_ACTIONS::moveIndividually );
 
     return 0;
 }
@@ -2280,7 +2280,7 @@ void PCB_SELECTION_TOOL::ClearSelection( bool aQuietMode )
     if( !aQuietMode )
     {
         m_toolMgr->ProcessEvent( EVENTS::ClearedEvent );
-        m_toolMgr->RunAction( PCB_ACTIONS::hideLocalRatsnest, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::hideLocalRatsnest );
     }
 }
 
diff --git a/pcbnew/tools/pcb_tool_base.cpp b/pcbnew/tools/pcb_tool_base.cpp
index 599f6d98c0..831d335b49 100644
--- a/pcbnew/tools/pcb_tool_base.cpp
+++ b/pcbnew/tools/pcb_tool_base.cpp
@@ -49,7 +49,7 @@ void PCB_TOOL_BASE::doInteractiveItemPlacement( const TOOL_EVENT&        aTool,
 
     BOARD_COMMIT commit( frame() );
 
-    GetManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    GetManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     Activate();
     // Must be done after Activate() so that it gets set into the correct context
@@ -214,7 +214,7 @@ void PCB_TOOL_BASE::doInteractiveItemPlacement( const TOOL_EVENT&        aTool,
         }
         else if( evt->IsAction( &PCB_ACTIONS::trackViaSizeChanged ) )
         {
-            m_toolMgr->RunAction( ACTIONS::refreshPreview );
+            m_toolMgr->PostAction( ACTIONS::refreshPreview );
         }
         else if( newItem && evt->Category() == TC_COMMAND )
         {
diff --git a/pcbnew/tools/position_relative_tool.cpp b/pcbnew/tools/position_relative_tool.cpp
index ba4ee899b6..9f3bf89813 100644
--- a/pcbnew/tools/position_relative_tool.cpp
+++ b/pcbnew/tools/position_relative_tool.cpp
@@ -153,7 +153,7 @@ int POSITION_RELATIVE_TOOL::RelativeItemSelectionMove( const VECTOR2I& aPosAncho
     m_commit->Push( _( "Position Relative" ) );
 
     if( m_selection.IsHover() )
-        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+        m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     m_toolMgr->ProcessEvent( EVENTS::SelectedItemsModified );
 
@@ -175,7 +175,7 @@ int POSITION_RELATIVE_TOOL::SelectPositionRelativeItem( const TOOL_EVENT& aEvent
     picker->SetClickHandler(
         [&]( const VECTOR2D& aPoint ) -> bool
         {
-            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_toolMgr->RunAction( PCB_ACTIONS::selectionClear );
             const PCB_SELECTION& sel = m_selectionTool->RequestSelection(
                     []( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector,
                         PCB_SELECTION_TOOL* sTool )
@@ -219,7 +219,7 @@ int POSITION_RELATIVE_TOOL::SelectPositionRelativeItem( const TOOL_EVENT& aEvent
     statusPopup.Popup();
     canvas()->SetStatusPopup( statusPopup.GetPanel() );
 
-    m_toolMgr->RunAction( ACTIONS::pickerTool, true, &aEvent );
+    m_toolMgr->RunAction( ACTIONS::pickerTool, &aEvent );
 
     while( !done )
     {
diff --git a/pcbnew/tools/zone_create_helper.cpp b/pcbnew/tools/zone_create_helper.cpp
index 0da5a1eaaf..5c936efb61 100644
--- a/pcbnew/tools/zone_create_helper.cpp
+++ b/pcbnew/tools/zone_create_helper.cpp
@@ -172,7 +172,7 @@ void ZONE_CREATE_HELPER::performZoneCutout( ZONE& aZone, const ZONE& aCutout )
 
     // Clear the selection before removing the old zone
     auto toolMgr = m_tool.GetManager();
-    toolMgr->RunAction( PCB_ACTIONS::selectionClear, true );
+    toolMgr->RunAction( PCB_ACTIONS::selectionClear );
 
     SHAPE_POLY_SET originalOutline( *aZone.Outline() );
     originalOutline.BooleanSubtract( *aCutout.Outline(), SHAPE_POLY_SET::PM_FAST );
@@ -213,7 +213,7 @@ void ZONE_CREATE_HELPER::performZoneCutout( ZONE& aZone, const ZONE& aCutout )
     else
     {
         m_params.m_sourceZone = newZones[0];
-        toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, newZones[0] );
+        toolMgr->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, newZones[0] );
     }
 
 }
@@ -238,7 +238,7 @@ void ZONE_CREATE_HELPER::commitZone( std::unique_ptr<ZONE> aZone )
             commit.Add( aZone.get() );
             commit.Push( _( "Add a zone" ) );
 
-            m_tool.GetManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true,
+            m_tool.GetManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem,
                                                        aZone.release() );
             break;
         }
@@ -263,7 +263,7 @@ void ZONE_CREATE_HELPER::commitZone( std::unique_ptr<ZONE> aZone )
             poly->SetPolyShape( *aZone->Outline() );
 
             commit.Add( poly );
-            m_tool.GetManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, true, poly );
+            m_tool.GetManager()->RunAction<EDA_ITEM*>( PCB_ACTIONS::selectItem, poly );
 
             commit.Push( _( "Add a graphical polygon" ) );
 
@@ -286,7 +286,7 @@ bool ZONE_CREATE_HELPER::OnFirstPoint( POLYGON_GEOM_MANAGER& aMgr )
 
         if( m_zone )
         {
-            m_tool.GetManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+            m_tool.GetManager()->RunAction( PCB_ACTIONS::selectionClear );
 
             // set up properties from zone
             const auto& settings = *m_parentView.GetPainter()->GetSettings();
diff --git a/pcbnew/widgets/appearance_controls.cpp b/pcbnew/widgets/appearance_controls.cpp
index c55a46b67b..81521d289e 100644
--- a/pcbnew/widgets/appearance_controls.cpp
+++ b/pcbnew/widgets/appearance_controls.cpp
@@ -295,7 +295,7 @@ void NET_GRID_TABLE::updateNetVisibility( const NET_GRID_ENTRY& aNet )
     const TOOL_ACTION& action = aNet.visible ? PCB_ACTIONS::showNetInRatsnest
                                              : PCB_ACTIONS::hideNetInRatsnest;
 
-    m_frame->GetToolManager()->RunAction( action, true, aNet.code );
+    m_frame->GetToolManager()->RunAction( action, aNet.code );
 }
 
 
@@ -496,7 +496,7 @@ APPEARANCE_CONTROLS::APPEARANCE_CONTROLS( PCB_BASE_FRAME* aParent, wxWindow* aFo
     m_btnNetInspector->Bind( wxEVT_BUTTON,
             [&]( wxCommandEvent& aEvent )
             {
-                m_frame->GetToolManager()->RunAction( PCB_ACTIONS::listNets, true );
+                m_frame->GetToolManager()->RunAction( PCB_ACTIONS::listNets );
                 passOnFocus();
             } );
 
@@ -514,7 +514,7 @@ APPEARANCE_CONTROLS::APPEARANCE_CONTROLS( PCB_BASE_FRAME* aParent, wxWindow* aFo
     m_cbFlipBoard->Bind( wxEVT_CHECKBOX,
             [&]( wxCommandEvent& aEvent )
             {
-                m_frame->GetToolManager()->RunAction( PCB_ACTIONS::flipBoard, true );
+                m_frame->GetToolManager()->RunAction( PCB_ACTIONS::flipBoard );
             } );
 
     m_toggleGridRenderer = new GRID_BITMAP_TOGGLE_RENDERER( KiBitmap( BITMAPS::visibility ),
@@ -2966,17 +2966,17 @@ void APPEARANCE_CONTROLS::onNetContextMenu( wxCommandEvent& aEvent )
         break;
 
     case ID_HIGHLIGHT_NET:
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::highlightNet, true, net.code );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::highlightNet, net.code );
         m_frame->GetCanvas()->Refresh();
         break;
 
     case ID_SELECT_NET:
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectNet, true, net.code );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectNet, net.code );
         m_frame->GetCanvas()->Refresh();
         break;
 
     case ID_DESELECT_NET:
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::deselectNet, true, net.code );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::deselectNet, net.code );
         m_frame->GetCanvas()->Refresh();
         break;
 
@@ -3013,7 +3013,6 @@ void APPEARANCE_CONTROLS::showNetclass( const wxString& aClassName, bool aShow )
         {
             m_frame->GetToolManager()->RunAction( aShow ? PCB_ACTIONS::showNetInRatsnest
                                                         : PCB_ACTIONS::hideNetInRatsnest,
-                                                  true,
                                                   net->GetNetCode() );
 
             int row = m_netsTable->GetRowByNetcode( net->GetNetCode() );
@@ -3194,7 +3193,7 @@ void APPEARANCE_CONTROLS::onNetclassContextMenu( wxCommandEvent& aEvent )
                 runOnNetsOfClass( m_contextMenuNetclass,
                         [&]( NETINFO_ITEM* aItem )
                         {
-                            toolMgr->RunAction( action, true, aItem->GetNetCode() );
+                            toolMgr->RunAction( action, aItem->GetNetCode() );
                         } );
             }
             break;
diff --git a/pcbnew/widgets/search_handlers.cpp b/pcbnew/widgets/search_handlers.cpp
index 605dd401e5..b915f48877 100644
--- a/pcbnew/widgets/search_handlers.cpp
+++ b/pcbnew/widgets/search_handlers.cpp
@@ -41,7 +41,7 @@ void PCB_SEARCH_HANDLER::ActivateItem( long aItemRow )
     std::vector<long> item = { aItemRow };
     SelectItems( item );
 
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::properties, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::properties );
 }
 
 
@@ -113,12 +113,12 @@ void FOOTPRINT_SEARCH_HANDLER::SelectItems( std::vector<long>& aItemRows )
         }
     }
 
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     if( selectedItems.size() )
     {
         EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, true, &selItems );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, &selItems );
     }
 
     m_frame->GetCanvas()->Refresh( false );
@@ -202,12 +202,12 @@ void ZONE_SEARCH_HANDLER::SelectItems( std::vector<long>& aItemRows )
         }
     }
 
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     if( selectedItems.size() )
     {
         EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, true, &selItems );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, &selItems );
     }
 
     m_frame->GetCanvas()->Refresh( false );
@@ -293,12 +293,12 @@ void TEXT_SEARCH_HANDLER::SelectItems( std::vector<long>& aItemRows )
         }
     }
 
-    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true );
+    m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectionClear );
 
     if( selectedItems.size() )
     {
         EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
-        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, true, &selItems );
+        m_frame->GetToolManager()->RunAction( PCB_ACTIONS::selectItems, &selItems );
     }
 
     m_frame->GetCanvas()->Refresh( false );