diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 4f6b8454bf..a3483eaab6 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -415,6 +415,8 @@ set( COMMON_DLG_SRCS
     dialogs/panel_setup_severities.cpp
     dialogs/panel_text_variables.cpp
     dialogs/panel_text_variables_base.cpp
+    dialogs/panel_toolbar_customization.cpp
+    dialogs/panel_toolbar_customization_base.cpp
     )
 
 if( KICAD_USE_SENTRY )
diff --git a/common/dialogs/panel_toolbar_customization.cpp b/common/dialogs/panel_toolbar_customization.cpp
new file mode 100644
index 0000000000..e5c6f5b880
--- /dev/null
+++ b/common/dialogs/panel_toolbar_customization.cpp
@@ -0,0 +1,388 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+#include <dialogs/panel_toolbar_customization.h>
+
+#include <bitmaps.h>
+#include <settings/app_settings.h>
+#include <tool/ui/toolbar_configuration.h>
+#include <widgets/split_button.h>
+#include <widgets/std_bitmap_button.h>
+
+#include <wx/listctrl.h>
+#include <wx/menu.h>
+
+// Simple IDs for the split button menu
+enum
+{
+    ID_SEPARATOR_MENU = ( wxID_HIGHEST + 5 ),
+    ID_SPACER_MENU,
+    ID_GROUP_MENU
+};
+
+
+enum class TOOLBAR_TREE_ITEM_TYPE
+{
+    TOOL,
+    GROUP,
+    SPACER,
+    SEPARATOR
+};
+
+class TOOLBAR_TREE_ITEM_DATA : public wxTreeItemData
+{
+public:
+    TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE aType ) :
+        wxTreeItemData(),
+        m_name( "" ),
+        m_action( nullptr ),
+        m_type( aType )
+    {
+        // Hard-code the name for the separator
+        if( aType == TOOLBAR_TREE_ITEM_TYPE::SEPARATOR )
+            m_name = "separator";
+    }
+
+    void SetAction( TOOL_ACTION* aAction ) { m_action = aAction; }
+    TOOL_ACTION* GetAction() const         { return m_action; }
+
+    void SetName( std::string aName )  { m_name = aName; }
+    std::string GetName() const        { return m_name; }
+
+    TOOLBAR_TREE_ITEM_TYPE GetType() const { return m_type; }
+
+private:
+    std::string  m_name;
+    TOOL_ACTION* m_action;
+
+    TOOLBAR_TREE_ITEM_TYPE m_type;
+};
+
+
+PANEL_TOOLBAR_CUSTOMIZATION::PANEL_TOOLBAR_CUSTOMIZATION( wxWindow* aParent, APP_SETTINGS_BASE* aCfg,
+                                                          TOOLBAR_SETTINGS* aTbSettings,
+                                                          std::vector<TOOL_ACTION*> aTools,
+                                                          std::vector<ACTION_TOOLBAR_CONTROL*> aControls ) :
+        PANEL_TOOLBAR_CUSTOMIZATION_BASE( aParent ),
+        m_actionImageList( nullptr ),
+        m_appSettings( aCfg ),
+        m_tbSettings( aTbSettings )
+{
+    // Copy the tools and controls into the internal maps
+    for( auto& tool : aTools )
+        m_availableTools.emplace( tool->GetName(), tool );
+
+    for( auto& control : aControls )
+        m_availableControls.emplace( control->GetName(), control );
+
+    // Configure the Ui elements
+    m_btnToolDelete->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
+    m_btnToolMoveUp->SetBitmap( KiBitmapBundle( BITMAPS::small_up ) );
+    m_btnToolMoveDown->SetBitmap( KiBitmapBundle( BITMAPS::small_down ) );
+    m_btnAddTool->SetBitmap( KiBitmapBundle( BITMAPS::left ) );
+
+    m_insertButton->SetLabel( _( "Insert separator" ) );
+    //m_insertButton->SetWidthPadding( 4 );
+
+    // Populate the browse library options
+    wxMenu* insertMenu = m_insertButton->GetSplitButtonMenu();
+
+    insertMenu->Append( ID_SPACER_MENU, _( "Insert spacer" ) );
+    insertMenu->Append( ID_GROUP_MENU, _( "Insert group" ) );
+
+    insertMenu->Bind( wxEVT_COMMAND_MENU_SELECTED, &PANEL_TOOLBAR_CUSTOMIZATION::onSpacerPress,
+                      this, ID_SPACER_MENU );
+    insertMenu->Bind( wxEVT_COMMAND_MENU_SELECTED, &PANEL_TOOLBAR_CUSTOMIZATION::onGroupPress,
+                      this, ID_GROUP_MENU );
+
+    // This is the button only press for the browse button instead of the menu
+    m_insertButton->Bind( wxEVT_BUTTON, &PANEL_TOOLBAR_CUSTOMIZATION::onSeparatorPress, this );
+}
+
+
+PANEL_TOOLBAR_CUSTOMIZATION::~PANEL_TOOLBAR_CUSTOMIZATION()
+{
+    delete m_actionImageList;
+}
+
+void PANEL_TOOLBAR_CUSTOMIZATION::ResetPanel()
+{
+
+}
+
+
+bool PANEL_TOOLBAR_CUSTOMIZATION::TransferDataToWindow()
+{
+    auto tb = m_tbSettings->GetToolbarConfig( TOOLBAR_LOC::RIGHT, false );
+
+    // Always populate the actions before the toolbars, that way the icons are available
+    populateActions( m_availableTools, m_availableControls );
+
+    // Populate the choicebox to select the toolbar to edit
+
+
+    if( tb.has_value() )
+        populateToolbarTree( tb.value() );
+
+    // Sync the enable/disable control
+    enableCustomControls( m_appSettings->m_CustomToolbars );
+    m_customToolbars->SetValue( m_appSettings->m_CustomToolbars );
+
+    return true;
+}
+
+
+bool PANEL_TOOLBAR_CUSTOMIZATION::TransferDataFromWindow()
+{
+    return true;
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::populateToolbarTree( const TOOLBAR_CONFIGURATION& aToolbar )
+{
+    m_toolbarTree->DeleteAllItems();
+    m_toolbarTree->SetImageList( m_actionImageList );
+
+    wxTreeItemId root = m_toolbarTree->AddRoot( "Toolbar" );
+
+    for( auto& item : aToolbar.GetToolbarItems() )
+    {
+        if( item == "separator" )
+        {
+            // Add a separator
+            TOOLBAR_TREE_ITEM_DATA* sepTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::SEPARATOR );
+            m_toolbarTree->AppendItem( root, "Separator", -1, -1, sepTreeItem );
+        }
+        else if( item.starts_with( "group" ) )
+        {
+            // Add a group of items to the toolbar
+            const TOOLBAR_GROUP_CONFIG* groupConfig = aToolbar.GetGroup( item );
+
+            if( !groupConfig )
+            {
+                wxASSERT_MSG( false, wxString::Format( "Unable to find group %s", item ) );
+                continue;
+            }
+
+            TOOLBAR_TREE_ITEM_DATA* groupTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::GROUP );
+            groupTreeItem->SetName( item );
+
+            wxTreeItemId groupId = m_toolbarTree->AppendItem( root, item, -1, -1, groupTreeItem );
+
+            // Add the elements below the group
+            for( auto& groupItem : groupConfig->GetGroupItems() )
+            {
+                auto toolMap = m_availableTools.find( groupItem );
+
+                if( toolMap == m_availableTools.end() )
+                {
+                    wxASSERT_MSG( false, wxString::Format( "Unable to find group tool %s", groupItem ) );
+                    continue;
+                }
+
+                TOOLBAR_TREE_ITEM_DATA* toolTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::TOOL );
+                toolTreeItem->SetName( groupItem );
+                toolTreeItem->SetAction( toolMap->second );
+
+                int  imgIdx = -1;
+                auto imgMap = m_actionImageListMap.find( groupItem );
+
+                if( imgMap != m_actionImageListMap.end() )
+                    imgIdx = imgMap->second;
+
+                m_toolbarTree->AppendItem( groupId, toolMap->second->GetFriendlyName(),
+                                           imgIdx, -1, toolTreeItem );
+            }
+        }
+        else if( item.starts_with( "control" ) )
+        {
+            // Add a custom control to the toolbar
+
+        }
+        else if( item.starts_with( "spacer" ) )
+        {
+
+        }
+        else
+        {
+            // Add a tool
+            auto toolMap = m_availableTools.find( item );
+
+            if( toolMap == m_availableTools.end() )
+            {
+                wxASSERT_MSG( false, wxString::Format( "Unable to find tool %s", item ) );
+                continue;
+            }
+
+            TOOLBAR_TREE_ITEM_DATA* toolTreeItem = new TOOLBAR_TREE_ITEM_DATA( TOOLBAR_TREE_ITEM_TYPE::TOOL );
+            toolTreeItem->SetName( item );
+            toolTreeItem->SetAction( toolMap->second );
+
+            int  imgIdx = -1;
+            auto imgMap = m_actionImageListMap.find( item );
+
+            if( imgMap != m_actionImageListMap.end() )
+                imgIdx = imgMap->second;
+
+            m_toolbarTree->AppendItem( root, toolMap->second->GetFriendlyName(),
+                                       imgIdx, -1, toolTreeItem );
+        }
+    }
+
+    m_toolbarTree->ExpandAll();
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::populateActions( const std::map<std::string, TOOL_ACTION*>& aTools,
+                                                   const std::map<std::string, ACTION_TOOLBAR_CONTROL*>& aControls )
+{
+    // Clear all existing information for the actions
+    delete m_actionImageList;
+    m_actionImageListMap.clear();
+    m_actionImageBundleVector.clear();
+
+    // Prep the control
+    m_actionsList->DeleteAllItems();
+    m_actionsList->DeleteAllColumns();
+    m_actionsList->InsertColumn( 0, "", wxLIST_FORMAT_LEFT, wxLIST_AUTOSIZE );
+
+    // Prepare the image list (taken from project_tree.cpp)
+    int logicSize = 24 * GetDPIScaleFactor() / GetContentScaleFactor(); // Cross-platform way
+    int physSize = ToPhys( logicSize ); // aka *GetContentScaleFactor()
+
+    if( physSize >= 64 )
+        physSize = 64;
+    else if( physSize >= 48 )
+        physSize = 48;
+    else if( physSize >= 32 )
+        physSize = 32;
+    else
+        physSize = 24;
+
+    logicSize = std::min( logicSize, physSize );
+    int bmpsf = std::max( 1, physSize / logicSize );
+
+    logicSize = physSize / bmpsf;
+
+    auto toBitmap = [&]( BITMAPS aBmps )
+    {
+        wxBitmap bmp = KiBitmap( aBmps, physSize );
+        bmp.SetScaleFactor( bmpsf );
+        wxASSERT(bmp.IsOk());
+        return bmp;
+    };
+
+    m_actionImageList = new wxImageList( logicSize, logicSize, true,
+                                         static_cast<int>( aTools.size() ) );
+
+    // Populate the various image lists for the action icons, and the actual control
+    int itemIdx = 0;
+
+    for( auto [k, tool] : aTools )
+    {
+        if( tool->CheckToolbarState( TOOLBAR_STATE::HIDDEN ) )
+            continue;
+
+        wxListItem item;
+        item.SetText( tool->GetFriendlyName() );
+        item.SetData( static_cast<void*>( tool ) );
+        item.SetId( itemIdx++ );
+
+        if( tool->GetIcon() != BITMAPS::INVALID_BITMAP )
+        {
+            int idx = m_actionImageList->Add( toBitmap( tool->GetIcon() ) );
+
+            // If the image list throws away the image, then we shouldn't show the image anywhere.
+            // TODO: Make sure all images have all possible sizes so the image list doesn't get grumpy.
+            if( idx != -1 )
+            {
+                m_actionImageBundleVector.push_back( KiBitmapBundle( tool->GetIcon() ) );
+                m_actionImageListMap.emplace( tool->GetName(), idx );
+
+                item.SetImage( idx );
+            }
+        }
+
+        m_actionsList->InsertItem( item );
+    }
+
+    m_actionsList->SetSmallImages( m_actionImageBundleVector );
+
+    // This must be done after adding everything to the list to make the columns wide enough
+    m_actionsList->SetColumnWidth( 0, wxLIST_AUTOSIZE );
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::onGroupPress( wxCommandEvent& aEvent )
+{
+
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::onSpacerPress( wxCommandEvent& aEvent )
+{
+
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::onSeparatorPress( wxCommandEvent& aEvent )
+{
+
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::onCustomizeTbCb( wxCommandEvent& event )
+{
+    enableCustomControls( event.IsChecked() );
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::enableCustomControls( bool enable )
+{
+    m_tbChoice->Enable( enable );
+    m_toolbarTree->Enable( enable );
+    m_btnAddTool->Enable( enable );
+    m_btnToolDelete->Enable( enable );
+    m_btnToolMoveDown->Enable( enable );
+    m_btnToolMoveUp->Enable( enable );
+    m_actionsList->Enable( enable );
+    m_insertButton->Enable( enable );
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::OnToolDelete( wxCommandEvent& event )
+{
+
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::OnToolMoveUp( wxCommandEvent& event )
+{
+
+}
+
+
+void PANEL_TOOLBAR_CUSTOMIZATION::OnToolMoveDown( wxCommandEvent& event )
+{
+
+}
diff --git a/common/dialogs/panel_toolbar_customization.fbp b/common/dialogs/panel_toolbar_customization.fbp
new file mode 100644
index 0000000000..ed371812dd
--- /dev/null
+++ b/common/dialogs/panel_toolbar_customization.fbp
@@ -0,0 +1,856 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<wxFormBuilder_Project>
+  <FileVersion major="1" minor="18"/>
+  <object class="Project" expanded="true">
+    <property name="code_generation">C++</property>
+    <property name="cpp_class_decoration"></property>
+    <property name="cpp_disconnect_events">1</property>
+    <property name="cpp_event_generation">connect</property>
+    <property name="cpp_help_provider">none</property>
+    <property name="cpp_namespace"></property>
+    <property name="cpp_precompiled_header"></property>
+    <property name="cpp_use_array_enum">0</property>
+    <property name="cpp_use_enum">1</property>
+    <property name="embedded_files_path">res</property>
+    <property name="encoding">UTF-8</property>
+    <property name="file">panel_toolbar_customization_base</property>
+    <property name="first_id">1000</property>
+    <property name="internationalize">1</property>
+    <property name="lua_skip_events">1</property>
+    <property name="lua_ui_table">UI</property>
+    <property name="name">PanelToolbarCustomization</property>
+    <property name="path">.</property>
+    <property name="php_disconnect_events">0</property>
+    <property name="php_disconnect_mode">source_name</property>
+    <property name="php_skip_events">1</property>
+    <property name="python_disconnect_events">0</property>
+    <property name="python_disconnect_mode">source_name</property>
+    <property name="python_image_path_wrapper_function_name"></property>
+    <property name="python_indent_with_spaces"></property>
+    <property name="python_skip_events">1</property>
+    <property name="relative_path">1</property>
+    <property name="use_microsoft_bom">0</property>
+    <property name="use_native_eol">0</property>
+    <object class="Panel" expanded="true">
+      <property name="aui_managed">0</property>
+      <property name="aui_manager_style"></property>
+      <property name="bg"></property>
+      <property name="context_help"></property>
+      <property name="context_menu">1</property>
+      <property name="drag_accept_files">0</property>
+      <property name="enabled">1</property>
+      <property name="event_handler">impl_virtual</property>
+      <property name="fg"></property>
+      <property name="font"></property>
+      <property name="hidden">0</property>
+      <property name="id">wxID_ANY</property>
+      <property name="maximum_size"></property>
+      <property name="minimum_size"></property>
+      <property name="name">PANEL_TOOLBAR_CUSTOMIZATION_BASE</property>
+      <property name="pos"></property>
+      <property name="size">-1,-1</property>
+      <property name="subclass">RESETTABLE_PANEL; widgets/resettable_panel.h; forward_declare</property>
+      <property name="tooltip"></property>
+      <property name="two_step_creation">0</property>
+      <property name="window_extra_style"></property>
+      <property name="window_name"></property>
+      <property name="window_style">wxTAB_TRAVERSAL</property>
+      <event name="OnUpdateUI">OnUpdateUI</event>
+      <object class="wxBoxSizer" expanded="true">
+        <property name="minimum_size"></property>
+        <property name="name">bPanelSizer</property>
+        <property name="orient">wxVERTICAL</property>
+        <property name="permission">none</property>
+        <object class="sizeritem" expanded="false">
+          <property name="border">5</property>
+          <property name="flag">wxALL</property>
+          <property name="proportion">0</property>
+          <object class="wxCheckBox" expanded="false">
+            <property name="BottomDockable">1</property>
+            <property name="LeftDockable">1</property>
+            <property name="RightDockable">1</property>
+            <property name="TopDockable">1</property>
+            <property name="aui_layer">0</property>
+            <property name="aui_name"></property>
+            <property name="aui_position">0</property>
+            <property name="aui_row">0</property>
+            <property name="best_size"></property>
+            <property name="bg"></property>
+            <property name="caption"></property>
+            <property name="caption_visible">1</property>
+            <property name="center_pane">0</property>
+            <property name="checked">0</property>
+            <property name="close_button">1</property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="default_pane">0</property>
+            <property name="dock">Dock</property>
+            <property name="dock_fixed">0</property>
+            <property name="docking">Left</property>
+            <property name="drag_accept_files">0</property>
+            <property name="enabled">1</property>
+            <property name="fg"></property>
+            <property name="floatable">1</property>
+            <property name="font"></property>
+            <property name="gripper">0</property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="label">Customize toolbars</property>
+            <property name="max_size"></property>
+            <property name="maximize_button">0</property>
+            <property name="maximum_size"></property>
+            <property name="min_size"></property>
+            <property name="minimize_button">0</property>
+            <property name="minimum_size"></property>
+            <property name="moveable">1</property>
+            <property name="name">m_customToolbars</property>
+            <property name="pane_border">1</property>
+            <property name="pane_position"></property>
+            <property name="pane_size"></property>
+            <property name="permission">protected</property>
+            <property name="pin_button">1</property>
+            <property name="pos"></property>
+            <property name="resize">Resizable</property>
+            <property name="show">1</property>
+            <property name="size"></property>
+            <property name="style"></property>
+            <property name="subclass">; ; forward_declare</property>
+            <property name="toolbar_pane">0</property>
+            <property name="tooltip"></property>
+            <property name="validator_data_type"></property>
+            <property name="validator_style">wxFILTER_NONE</property>
+            <property name="validator_type">wxDefaultValidator</property>
+            <property name="validator_variable"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style"></property>
+            <event name="OnCheckBox">onCustomizeTbCb</event>
+          </object>
+        </object>
+        <object class="sizeritem" expanded="false">
+          <property name="border">5</property>
+          <property name="flag">wxEXPAND | wxALL</property>
+          <property name="proportion">0</property>
+          <object class="wxStaticLine" expanded="false">
+            <property name="BottomDockable">1</property>
+            <property name="LeftDockable">1</property>
+            <property name="RightDockable">1</property>
+            <property name="TopDockable">1</property>
+            <property name="aui_layer">0</property>
+            <property name="aui_name"></property>
+            <property name="aui_position">0</property>
+            <property name="aui_row">0</property>
+            <property name="best_size"></property>
+            <property name="bg"></property>
+            <property name="caption"></property>
+            <property name="caption_visible">1</property>
+            <property name="center_pane">0</property>
+            <property name="close_button">1</property>
+            <property name="context_help"></property>
+            <property name="context_menu">1</property>
+            <property name="default_pane">0</property>
+            <property name="dock">Dock</property>
+            <property name="dock_fixed">0</property>
+            <property name="docking">Left</property>
+            <property name="drag_accept_files">0</property>
+            <property name="enabled">1</property>
+            <property name="fg"></property>
+            <property name="floatable">1</property>
+            <property name="font"></property>
+            <property name="gripper">0</property>
+            <property name="hidden">0</property>
+            <property name="id">wxID_ANY</property>
+            <property name="max_size"></property>
+            <property name="maximize_button">0</property>
+            <property name="maximum_size"></property>
+            <property name="min_size"></property>
+            <property name="minimize_button">0</property>
+            <property name="minimum_size"></property>
+            <property name="moveable">1</property>
+            <property name="name">m_staticline1</property>
+            <property name="pane_border">1</property>
+            <property name="pane_position"></property>
+            <property name="pane_size"></property>
+            <property name="permission">protected</property>
+            <property name="pin_button">1</property>
+            <property name="pos"></property>
+            <property name="resize">Resizable</property>
+            <property name="show">1</property>
+            <property name="size"></property>
+            <property name="style">wxLI_HORIZONTAL</property>
+            <property name="subclass">; ; forward_declare</property>
+            <property name="toolbar_pane">0</property>
+            <property name="tooltip"></property>
+            <property name="window_extra_style"></property>
+            <property name="window_name"></property>
+            <property name="window_style"></property>
+          </object>
+        </object>
+        <object class="sizeritem" expanded="true">
+          <property name="border">5</property>
+          <property name="flag">wxEXPAND</property>
+          <property name="proportion">1</property>
+          <object class="wxFlexGridSizer" expanded="true">
+            <property name="cols">3</property>
+            <property name="flexible_direction">wxHORIZONTAL</property>
+            <property name="growablecols"></property>
+            <property name="growablerows"></property>
+            <property name="hgap">0</property>
+            <property name="minimum_size"></property>
+            <property name="name">m_customizeControls</property>
+            <property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
+            <property name="permission">none</property>
+            <property name="rows">1</property>
+            <property name="vgap">0</property>
+            <object class="sizeritem" expanded="true">
+              <property name="border">5</property>
+              <property name="flag">wxEXPAND</property>
+              <property name="proportion">1</property>
+              <object class="wxBoxSizer" expanded="true">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer8</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="false">
+                  <property name="border">5</property>
+                  <property name="flag">wxALL|wxEXPAND</property>
+                  <property name="proportion">0</property>
+                  <object class="wxChoice" expanded="false">
+                    <property name="BottomDockable">1</property>
+                    <property name="LeftDockable">1</property>
+                    <property name="RightDockable">1</property>
+                    <property name="TopDockable">1</property>
+                    <property name="aui_layer">0</property>
+                    <property name="aui_name"></property>
+                    <property name="aui_position">0</property>
+                    <property name="aui_row">0</property>
+                    <property name="best_size"></property>
+                    <property name="bg"></property>
+                    <property name="caption"></property>
+                    <property name="caption_visible">1</property>
+                    <property name="center_pane">0</property>
+                    <property name="choices"></property>
+                    <property name="close_button">1</property>
+                    <property name="context_help"></property>
+                    <property name="context_menu">1</property>
+                    <property name="default_pane">0</property>
+                    <property name="dock">Dock</property>
+                    <property name="dock_fixed">0</property>
+                    <property name="docking">Left</property>
+                    <property name="drag_accept_files">0</property>
+                    <property name="enabled">1</property>
+                    <property name="fg"></property>
+                    <property name="floatable">1</property>
+                    <property name="font"></property>
+                    <property name="gripper">0</property>
+                    <property name="hidden">0</property>
+                    <property name="id">wxID_ANY</property>
+                    <property name="max_size"></property>
+                    <property name="maximize_button">0</property>
+                    <property name="maximum_size"></property>
+                    <property name="min_size"></property>
+                    <property name="minimize_button">0</property>
+                    <property name="minimum_size"></property>
+                    <property name="moveable">1</property>
+                    <property name="name">m_tbChoice</property>
+                    <property name="pane_border">1</property>
+                    <property name="pane_position"></property>
+                    <property name="pane_size"></property>
+                    <property name="permission">protected</property>
+                    <property name="pin_button">1</property>
+                    <property name="pos"></property>
+                    <property name="resize">Resizable</property>
+                    <property name="selection">0</property>
+                    <property name="show">1</property>
+                    <property name="size"></property>
+                    <property name="style"></property>
+                    <property name="subclass">; ; forward_declare</property>
+                    <property name="toolbar_pane">0</property>
+                    <property name="tooltip"></property>
+                    <property name="validator_data_type"></property>
+                    <property name="validator_style">wxFILTER_NONE</property>
+                    <property name="validator_type">wxDefaultValidator</property>
+                    <property name="validator_variable"></property>
+                    <property name="window_extra_style"></property>
+                    <property name="window_name"></property>
+                    <property name="window_style"></property>
+                  </object>
+                </object>
+                <object class="sizeritem" expanded="true">
+                  <property name="border">5</property>
+                  <property name="flag">wxEXPAND</property>
+                  <property name="proportion">1</property>
+                  <object class="wxBoxSizer" expanded="true">
+                    <property name="minimum_size"></property>
+                    <property name="name">bSizer10</property>
+                    <property name="orient">wxHORIZONTAL</property>
+                    <property name="permission">none</property>
+                    <object class="sizeritem" expanded="true">
+                      <property name="border">5</property>
+                      <property name="flag">wxEXPAND</property>
+                      <property name="proportion">1</property>
+                      <object class="wxBoxSizer" expanded="true">
+                        <property name="minimum_size"></property>
+                        <property name="name">bSizer11</property>
+                        <property name="orient">wxVERTICAL</property>
+                        <property name="permission">none</property>
+                        <object class="sizeritem" expanded="false">
+                          <property name="border">5</property>
+                          <property name="flag">wxALL|wxEXPAND</property>
+                          <property name="proportion">0</property>
+                          <object class="wxTreeCtrl" expanded="false">
+                            <property name="BottomDockable">1</property>
+                            <property name="LeftDockable">1</property>
+                            <property name="RightDockable">1</property>
+                            <property name="TopDockable">1</property>
+                            <property name="aui_layer">0</property>
+                            <property name="aui_name"></property>
+                            <property name="aui_position">0</property>
+                            <property name="aui_row">0</property>
+                            <property name="best_size"></property>
+                            <property name="bg"></property>
+                            <property name="caption"></property>
+                            <property name="caption_visible">1</property>
+                            <property name="center_pane">0</property>
+                            <property name="close_button">1</property>
+                            <property name="context_help"></property>
+                            <property name="context_menu">1</property>
+                            <property name="default_pane">0</property>
+                            <property name="dock">Dock</property>
+                            <property name="dock_fixed">0</property>
+                            <property name="docking">Left</property>
+                            <property name="drag_accept_files">0</property>
+                            <property name="enabled">1</property>
+                            <property name="fg"></property>
+                            <property name="floatable">1</property>
+                            <property name="font"></property>
+                            <property name="gripper">0</property>
+                            <property name="hidden">0</property>
+                            <property name="id">wxID_ANY</property>
+                            <property name="max_size"></property>
+                            <property name="maximize_button">0</property>
+                            <property name="maximum_size"></property>
+                            <property name="min_size"></property>
+                            <property name="minimize_button">0</property>
+                            <property name="minimum_size"></property>
+                            <property name="moveable">1</property>
+                            <property name="name">m_toolbarTree</property>
+                            <property name="pane_border">1</property>
+                            <property name="pane_position"></property>
+                            <property name="pane_size"></property>
+                            <property name="permission">protected</property>
+                            <property name="pin_button">1</property>
+                            <property name="pos"></property>
+                            <property name="resize">Resizable</property>
+                            <property name="show">1</property>
+                            <property name="size"></property>
+                            <property name="style">wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT|wxTR_NO_LINES</property>
+                            <property name="subclass">; ; forward_declare</property>
+                            <property name="toolbar_pane">0</property>
+                            <property name="tooltip"></property>
+                            <property name="window_extra_style"></property>
+                            <property name="window_name"></property>
+                            <property name="window_style"></property>
+                          </object>
+                        </object>
+                      </object>
+                    </object>
+                  </object>
+                </object>
+                <object class="sizeritem" expanded="true">
+                  <property name="border">5</property>
+                  <property name="flag">wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP</property>
+                  <property name="proportion">0</property>
+                  <object class="wxBoxSizer" expanded="true">
+                    <property name="minimum_size"></property>
+                    <property name="name">bSizerToolbarBtns</property>
+                    <property name="orient">wxHORIZONTAL</property>
+                    <property name="permission">none</property>
+                    <object class="sizeritem" expanded="false">
+                      <property name="border">5</property>
+                      <property name="flag">wxALL</property>
+                      <property name="proportion">0</property>
+                      <object class="wxBitmapButton" expanded="false">
+                        <property name="BottomDockable">1</property>
+                        <property name="LeftDockable">1</property>
+                        <property name="RightDockable">1</property>
+                        <property name="TopDockable">1</property>
+                        <property name="aui_layer">0</property>
+                        <property name="aui_name"></property>
+                        <property name="aui_position">0</property>
+                        <property name="aui_row">0</property>
+                        <property name="auth_needed">0</property>
+                        <property name="best_size"></property>
+                        <property name="bg"></property>
+                        <property name="bitmap"></property>
+                        <property name="caption"></property>
+                        <property name="caption_visible">1</property>
+                        <property name="center_pane">0</property>
+                        <property name="close_button">1</property>
+                        <property name="context_help"></property>
+                        <property name="context_menu">1</property>
+                        <property name="current"></property>
+                        <property name="default">0</property>
+                        <property name="default_pane">0</property>
+                        <property name="disabled"></property>
+                        <property name="dock">Dock</property>
+                        <property name="dock_fixed">0</property>
+                        <property name="docking">Left</property>
+                        <property name="drag_accept_files">0</property>
+                        <property name="enabled">1</property>
+                        <property name="fg"></property>
+                        <property name="floatable">1</property>
+                        <property name="focus"></property>
+                        <property name="font"></property>
+                        <property name="gripper">0</property>
+                        <property name="hidden">0</property>
+                        <property name="id">wxID_ANY</property>
+                        <property name="label">Delete Text Variable</property>
+                        <property name="margins"></property>
+                        <property name="markup">0</property>
+                        <property name="max_size"></property>
+                        <property name="maximize_button">0</property>
+                        <property name="maximum_size"></property>
+                        <property name="min_size"></property>
+                        <property name="minimize_button">0</property>
+                        <property name="minimum_size">-1,-1</property>
+                        <property name="moveable">1</property>
+                        <property name="name">m_btnToolDelete</property>
+                        <property name="pane_border">1</property>
+                        <property name="pane_position"></property>
+                        <property name="pane_size"></property>
+                        <property name="permission">protected</property>
+                        <property name="pin_button">1</property>
+                        <property name="pos"></property>
+                        <property name="position"></property>
+                        <property name="pressed"></property>
+                        <property name="resize">Resizable</property>
+                        <property name="show">1</property>
+                        <property name="size"></property>
+                        <property name="style"></property>
+                        <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
+                        <property name="toolbar_pane">0</property>
+                        <property name="tooltip"></property>
+                        <property name="validator_data_type"></property>
+                        <property name="validator_style">wxFILTER_NONE</property>
+                        <property name="validator_type">wxDefaultValidator</property>
+                        <property name="validator_variable"></property>
+                        <property name="window_extra_style"></property>
+                        <property name="window_name"></property>
+                        <property name="window_style"></property>
+                        <event name="OnButtonClick">OnToolDelete</event>
+                      </object>
+                    </object>
+                    <object class="sizeritem" expanded="false">
+                      <property name="border">5</property>
+                      <property name="flag">wxBOTTOM|wxLEFT|wxTOP</property>
+                      <property name="proportion">0</property>
+                      <object class="wxBitmapButton" expanded="false">
+                        <property name="BottomDockable">1</property>
+                        <property name="LeftDockable">1</property>
+                        <property name="RightDockable">1</property>
+                        <property name="TopDockable">1</property>
+                        <property name="aui_layer">0</property>
+                        <property name="aui_name"></property>
+                        <property name="aui_position">0</property>
+                        <property name="aui_row">0</property>
+                        <property name="auth_needed">0</property>
+                        <property name="best_size"></property>
+                        <property name="bg"></property>
+                        <property name="bitmap"></property>
+                        <property name="caption"></property>
+                        <property name="caption_visible">1</property>
+                        <property name="center_pane">0</property>
+                        <property name="close_button">1</property>
+                        <property name="context_help"></property>
+                        <property name="context_menu">1</property>
+                        <property name="current"></property>
+                        <property name="default">0</property>
+                        <property name="default_pane">0</property>
+                        <property name="disabled"></property>
+                        <property name="dock">Dock</property>
+                        <property name="dock_fixed">0</property>
+                        <property name="docking">Left</property>
+                        <property name="drag_accept_files">0</property>
+                        <property name="enabled">1</property>
+                        <property name="fg"></property>
+                        <property name="floatable">1</property>
+                        <property name="focus"></property>
+                        <property name="font"></property>
+                        <property name="gripper">0</property>
+                        <property name="hidden">0</property>
+                        <property name="id">wxID_ANY</property>
+                        <property name="label">Delete Text Variable</property>
+                        <property name="margins"></property>
+                        <property name="markup">0</property>
+                        <property name="max_size"></property>
+                        <property name="maximize_button">0</property>
+                        <property name="maximum_size"></property>
+                        <property name="min_size"></property>
+                        <property name="minimize_button">0</property>
+                        <property name="minimum_size">-1,-1</property>
+                        <property name="moveable">1</property>
+                        <property name="name">m_btnToolMoveUp</property>
+                        <property name="pane_border">1</property>
+                        <property name="pane_position"></property>
+                        <property name="pane_size"></property>
+                        <property name="permission">protected</property>
+                        <property name="pin_button">1</property>
+                        <property name="pos"></property>
+                        <property name="position"></property>
+                        <property name="pressed"></property>
+                        <property name="resize">Resizable</property>
+                        <property name="show">1</property>
+                        <property name="size"></property>
+                        <property name="style"></property>
+                        <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
+                        <property name="toolbar_pane">0</property>
+                        <property name="tooltip"></property>
+                        <property name="validator_data_type"></property>
+                        <property name="validator_style">wxFILTER_NONE</property>
+                        <property name="validator_type">wxDefaultValidator</property>
+                        <property name="validator_variable"></property>
+                        <property name="window_extra_style"></property>
+                        <property name="window_name"></property>
+                        <property name="window_style"></property>
+                        <event name="OnButtonClick">OnToolMoveUp</event>
+                      </object>
+                    </object>
+                    <object class="sizeritem" expanded="false">
+                      <property name="border">5</property>
+                      <property name="flag">wxALL</property>
+                      <property name="proportion">0</property>
+                      <object class="wxBitmapButton" expanded="false">
+                        <property name="BottomDockable">1</property>
+                        <property name="LeftDockable">1</property>
+                        <property name="RightDockable">1</property>
+                        <property name="TopDockable">1</property>
+                        <property name="aui_layer">0</property>
+                        <property name="aui_name"></property>
+                        <property name="aui_position">0</property>
+                        <property name="aui_row">0</property>
+                        <property name="auth_needed">0</property>
+                        <property name="best_size"></property>
+                        <property name="bg"></property>
+                        <property name="bitmap"></property>
+                        <property name="caption"></property>
+                        <property name="caption_visible">1</property>
+                        <property name="center_pane">0</property>
+                        <property name="close_button">1</property>
+                        <property name="context_help"></property>
+                        <property name="context_menu">1</property>
+                        <property name="current"></property>
+                        <property name="default">0</property>
+                        <property name="default_pane">0</property>
+                        <property name="disabled"></property>
+                        <property name="dock">Dock</property>
+                        <property name="dock_fixed">0</property>
+                        <property name="docking">Left</property>
+                        <property name="drag_accept_files">0</property>
+                        <property name="enabled">1</property>
+                        <property name="fg"></property>
+                        <property name="floatable">1</property>
+                        <property name="focus"></property>
+                        <property name="font"></property>
+                        <property name="gripper">0</property>
+                        <property name="hidden">0</property>
+                        <property name="id">wxID_ANY</property>
+                        <property name="label">Delete Text Variable</property>
+                        <property name="margins"></property>
+                        <property name="markup">0</property>
+                        <property name="max_size"></property>
+                        <property name="maximize_button">0</property>
+                        <property name="maximum_size"></property>
+                        <property name="min_size"></property>
+                        <property name="minimize_button">0</property>
+                        <property name="minimum_size">-1,-1</property>
+                        <property name="moveable">1</property>
+                        <property name="name">m_btnToolMoveDown</property>
+                        <property name="pane_border">1</property>
+                        <property name="pane_position"></property>
+                        <property name="pane_size"></property>
+                        <property name="permission">protected</property>
+                        <property name="pin_button">1</property>
+                        <property name="pos"></property>
+                        <property name="position"></property>
+                        <property name="pressed"></property>
+                        <property name="resize">Resizable</property>
+                        <property name="show">1</property>
+                        <property name="size"></property>
+                        <property name="style"></property>
+                        <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
+                        <property name="toolbar_pane">0</property>
+                        <property name="tooltip"></property>
+                        <property name="validator_data_type"></property>
+                        <property name="validator_style">wxFILTER_NONE</property>
+                        <property name="validator_type">wxDefaultValidator</property>
+                        <property name="validator_variable"></property>
+                        <property name="window_extra_style"></property>
+                        <property name="window_name"></property>
+                        <property name="window_style"></property>
+                        <event name="OnButtonClick">OnToolMoveDown</event>
+                      </object>
+                    </object>
+                    <object class="sizeritem" expanded="false">
+                      <property name="border">5</property>
+                      <property name="flag">wxEXPAND</property>
+                      <property name="proportion">0</property>
+                      <object class="spacer" expanded="false">
+                        <property name="height">0</property>
+                        <property name="permission">protected</property>
+                        <property name="width">20</property>
+                      </object>
+                    </object>
+                    <object class="sizeritem" expanded="false">
+                      <property name="border">5</property>
+                      <property name="flag">wxALL</property>
+                      <property name="proportion">0</property>
+                      <object class="CustomControl" expanded="false">
+                        <property name="BottomDockable">1</property>
+                        <property name="LeftDockable">1</property>
+                        <property name="RightDockable">1</property>
+                        <property name="TopDockable">1</property>
+                        <property name="aui_layer">0</property>
+                        <property name="aui_name"></property>
+                        <property name="aui_position">0</property>
+                        <property name="aui_row">0</property>
+                        <property name="best_size"></property>
+                        <property name="bg"></property>
+                        <property name="caption"></property>
+                        <property name="caption_visible">1</property>
+                        <property name="center_pane">0</property>
+                        <property name="class">SPLIT_BUTTON</property>
+                        <property name="close_button">1</property>
+                        <property name="construction">m_insertButton = new SPLIT_BUTTON( this, wxID_ANY, _( &quot;Insert separator&quot; ), wxDefaultPosition );</property>
+                        <property name="context_help"></property>
+                        <property name="context_menu">1</property>
+                        <property name="declaration"></property>
+                        <property name="default_pane">0</property>
+                        <property name="dock">Dock</property>
+                        <property name="dock_fixed">0</property>
+                        <property name="docking">Left</property>
+                        <property name="drag_accept_files">0</property>
+                        <property name="enabled">1</property>
+                        <property name="fg"></property>
+                        <property name="floatable">1</property>
+                        <property name="font"></property>
+                        <property name="gripper">0</property>
+                        <property name="hidden">0</property>
+                        <property name="id">wxID_ANY</property>
+                        <property name="include">#include &lt;widgets/split_button.h&gt;</property>
+                        <property name="max_size"></property>
+                        <property name="maximize_button">0</property>
+                        <property name="maximum_size"></property>
+                        <property name="min_size"></property>
+                        <property name="minimize_button">0</property>
+                        <property name="minimum_size"></property>
+                        <property name="moveable">1</property>
+                        <property name="name">m_insertButton</property>
+                        <property name="pane_border">1</property>
+                        <property name="pane_position"></property>
+                        <property name="pane_size"></property>
+                        <property name="permission">protected</property>
+                        <property name="pin_button">1</property>
+                        <property name="pos"></property>
+                        <property name="resize">Resizable</property>
+                        <property name="settings"></property>
+                        <property name="show">1</property>
+                        <property name="size"></property>
+                        <property name="subclass"></property>
+                        <property name="toolbar_pane">0</property>
+                        <property name="tooltip"></property>
+                        <property name="window_extra_style"></property>
+                        <property name="window_name"></property>
+                        <property name="window_style"></property>
+                      </object>
+                    </object>
+                  </object>
+                </object>
+              </object>
+            </object>
+            <object class="sizeritem" expanded="true">
+              <property name="border">5</property>
+              <property name="flag">wxEXPAND</property>
+              <property name="proportion">1</property>
+              <object class="wxBoxSizer" expanded="true">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer6</property>
+                <property name="orient">wxVERTICAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="false">
+                  <property name="border">5</property>
+                  <property name="flag">wxEXPAND</property>
+                  <property name="proportion">1</property>
+                  <object class="spacer" expanded="false">
+                    <property name="height">0</property>
+                    <property name="permission">protected</property>
+                    <property name="width">0</property>
+                  </object>
+                </object>
+                <object class="sizeritem" expanded="false">
+                  <property name="border">5</property>
+                  <property name="flag">wxALL</property>
+                  <property name="proportion">0</property>
+                  <object class="wxBitmapButton" expanded="false">
+                    <property name="BottomDockable">1</property>
+                    <property name="LeftDockable">1</property>
+                    <property name="RightDockable">1</property>
+                    <property name="TopDockable">1</property>
+                    <property name="aui_layer">0</property>
+                    <property name="aui_name"></property>
+                    <property name="aui_position">0</property>
+                    <property name="aui_row">0</property>
+                    <property name="auth_needed">0</property>
+                    <property name="best_size"></property>
+                    <property name="bg"></property>
+                    <property name="bitmap"></property>
+                    <property name="caption"></property>
+                    <property name="caption_visible">1</property>
+                    <property name="center_pane">0</property>
+                    <property name="close_button">1</property>
+                    <property name="context_help"></property>
+                    <property name="context_menu">1</property>
+                    <property name="current"></property>
+                    <property name="default">0</property>
+                    <property name="default_pane">0</property>
+                    <property name="disabled"></property>
+                    <property name="dock">Dock</property>
+                    <property name="dock_fixed">0</property>
+                    <property name="docking">Left</property>
+                    <property name="drag_accept_files">0</property>
+                    <property name="enabled">1</property>
+                    <property name="fg"></property>
+                    <property name="floatable">1</property>
+                    <property name="focus"></property>
+                    <property name="font"></property>
+                    <property name="gripper">0</property>
+                    <property name="hidden">0</property>
+                    <property name="id">wxID_ANY</property>
+                    <property name="label">Add Text Variable</property>
+                    <property name="margins"></property>
+                    <property name="markup">0</property>
+                    <property name="max_size"></property>
+                    <property name="maximize_button">0</property>
+                    <property name="maximum_size"></property>
+                    <property name="min_size"></property>
+                    <property name="minimize_button">0</property>
+                    <property name="minimum_size">-1,-1</property>
+                    <property name="moveable">1</property>
+                    <property name="name">m_btnAddTool</property>
+                    <property name="pane_border">1</property>
+                    <property name="pane_position"></property>
+                    <property name="pane_size"></property>
+                    <property name="permission">protected</property>
+                    <property name="pin_button">1</property>
+                    <property name="pos"></property>
+                    <property name="position"></property>
+                    <property name="pressed"></property>
+                    <property name="resize">Resizable</property>
+                    <property name="show">1</property>
+                    <property name="size"></property>
+                    <property name="style"></property>
+                    <property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
+                    <property name="toolbar_pane">0</property>
+                    <property name="tooltip"></property>
+                    <property name="validator_data_type"></property>
+                    <property name="validator_style">wxFILTER_NONE</property>
+                    <property name="validator_type">wxDefaultValidator</property>
+                    <property name="validator_variable"></property>
+                    <property name="window_extra_style"></property>
+                    <property name="window_name"></property>
+                    <property name="window_style"></property>
+                    <event name="OnButtonClick">OnAddTextVar</event>
+                  </object>
+                </object>
+                <object class="sizeritem" expanded="false">
+                  <property name="border">5</property>
+                  <property name="flag">wxEXPAND</property>
+                  <property name="proportion">1</property>
+                  <object class="spacer" expanded="false">
+                    <property name="height">0</property>
+                    <property name="permission">protected</property>
+                    <property name="width">0</property>
+                  </object>
+                </object>
+              </object>
+            </object>
+            <object class="sizeritem" expanded="true">
+              <property name="border">5</property>
+              <property name="flag">wxEXPAND</property>
+              <property name="proportion">1</property>
+              <object class="wxBoxSizer" expanded="true">
+                <property name="minimum_size"></property>
+                <property name="name">bSizer9</property>
+                <property name="orient">wxHORIZONTAL</property>
+                <property name="permission">none</property>
+                <object class="sizeritem" expanded="false">
+                  <property name="border">5</property>
+                  <property name="flag">wxALL|wxEXPAND</property>
+                  <property name="proportion">0</property>
+                  <object class="wxListCtrl" expanded="false">
+                    <property name="BottomDockable">1</property>
+                    <property name="LeftDockable">1</property>
+                    <property name="RightDockable">1</property>
+                    <property name="TopDockable">1</property>
+                    <property name="aui_layer">0</property>
+                    <property name="aui_name"></property>
+                    <property name="aui_position">0</property>
+                    <property name="aui_row">0</property>
+                    <property name="best_size"></property>
+                    <property name="bg"></property>
+                    <property name="caption"></property>
+                    <property name="caption_visible">1</property>
+                    <property name="center_pane">0</property>
+                    <property name="close_button">1</property>
+                    <property name="context_help"></property>
+                    <property name="context_menu">1</property>
+                    <property name="default_pane">0</property>
+                    <property name="dock">Dock</property>
+                    <property name="dock_fixed">0</property>
+                    <property name="docking">Left</property>
+                    <property name="drag_accept_files">0</property>
+                    <property name="enabled">1</property>
+                    <property name="fg"></property>
+                    <property name="floatable">1</property>
+                    <property name="font"></property>
+                    <property name="gripper">0</property>
+                    <property name="hidden">0</property>
+                    <property name="id">wxID_ANY</property>
+                    <property name="max_size"></property>
+                    <property name="maximize_button">0</property>
+                    <property name="maximum_size"></property>
+                    <property name="min_size"></property>
+                    <property name="minimize_button">0</property>
+                    <property name="minimum_size"></property>
+                    <property name="moveable">1</property>
+                    <property name="name">m_actionsList</property>
+                    <property name="pane_border">1</property>
+                    <property name="pane_position"></property>
+                    <property name="pane_size"></property>
+                    <property name="permission">protected</property>
+                    <property name="pin_button">1</property>
+                    <property name="pos"></property>
+                    <property name="resize">Resizable</property>
+                    <property name="show">1</property>
+                    <property name="size"></property>
+                    <property name="style">wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL</property>
+                    <property name="subclass">; ; forward_declare</property>
+                    <property name="toolbar_pane">0</property>
+                    <property name="tooltip"></property>
+                    <property name="validator_data_type"></property>
+                    <property name="validator_style">wxFILTER_NONE</property>
+                    <property name="validator_type">wxDefaultValidator</property>
+                    <property name="validator_variable"></property>
+                    <property name="window_extra_style"></property>
+                    <property name="window_name"></property>
+                    <property name="window_style"></property>
+                  </object>
+                </object>
+              </object>
+            </object>
+          </object>
+        </object>
+      </object>
+    </object>
+  </object>
+</wxFormBuilder_Project>
diff --git a/common/dialogs/panel_toolbar_customization_base.cpp b/common/dialogs/panel_toolbar_customization_base.cpp
new file mode 100644
index 0000000000..c31fea1156
--- /dev/null
+++ b/common/dialogs/panel_toolbar_customization_base.cpp
@@ -0,0 +1,128 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#include "widgets/std_bitmap_button.h"
+
+#include "panel_toolbar_customization_base.h"
+
+///////////////////////////////////////////////////////////////////////////
+
+PANEL_TOOLBAR_CUSTOMIZATION_BASE::PANEL_TOOLBAR_CUSTOMIZATION_BASE( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : RESETTABLE_PANEL( parent, id, pos, size, style, name )
+{
+	wxBoxSizer* bPanelSizer;
+	bPanelSizer = new wxBoxSizer( wxVERTICAL );
+
+	m_customToolbars = new wxCheckBox( this, wxID_ANY, _("Customize toolbars"), wxDefaultPosition, wxDefaultSize, 0 );
+	bPanelSizer->Add( m_customToolbars, 0, wxALL, 5 );
+
+	m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
+	bPanelSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
+
+	wxFlexGridSizer* m_customizeControls;
+	m_customizeControls = new wxFlexGridSizer( 1, 3, 0, 0 );
+	m_customizeControls->SetFlexibleDirection( wxHORIZONTAL );
+	m_customizeControls->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
+
+	wxBoxSizer* bSizer8;
+	bSizer8 = new wxBoxSizer( wxVERTICAL );
+
+	wxArrayString m_tbChoiceChoices;
+	m_tbChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_tbChoiceChoices, 0 );
+	m_tbChoice->SetSelection( 0 );
+	bSizer8->Add( m_tbChoice, 0, wxALL|wxEXPAND, 5 );
+
+	wxBoxSizer* bSizer10;
+	bSizer10 = new wxBoxSizer( wxHORIZONTAL );
+
+	wxBoxSizer* bSizer11;
+	bSizer11 = new wxBoxSizer( wxVERTICAL );
+
+	m_toolbarTree = new wxTreeCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT|wxTR_NO_LINES );
+	bSizer11->Add( m_toolbarTree, 0, wxALL|wxEXPAND, 5 );
+
+
+	bSizer10->Add( bSizer11, 1, wxEXPAND, 5 );
+
+
+	bSizer8->Add( bSizer10, 1, wxEXPAND, 5 );
+
+	wxBoxSizer* bSizerToolbarBtns;
+	bSizerToolbarBtns = new wxBoxSizer( wxHORIZONTAL );
+
+	m_btnToolDelete = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
+	bSizerToolbarBtns->Add( m_btnToolDelete, 0, wxALL, 5 );
+
+	m_btnToolMoveUp = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
+	bSizerToolbarBtns->Add( m_btnToolMoveUp, 0, wxBOTTOM|wxLEFT|wxTOP, 5 );
+
+	m_btnToolMoveDown = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
+	bSizerToolbarBtns->Add( m_btnToolMoveDown, 0, wxALL, 5 );
+
+
+	bSizerToolbarBtns->Add( 20, 0, 0, wxEXPAND, 5 );
+
+	m_insertButton = new SPLIT_BUTTON( this, wxID_ANY, _( "Insert separator" ), wxDefaultPosition );
+	bSizerToolbarBtns->Add( m_insertButton, 0, wxALL, 5 );
+
+
+	bSizer8->Add( bSizerToolbarBtns, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT|wxTOP, 5 );
+
+
+	m_customizeControls->Add( bSizer8, 1, wxEXPAND, 5 );
+
+	wxBoxSizer* bSizer6;
+	bSizer6 = new wxBoxSizer( wxVERTICAL );
+
+
+	bSizer6->Add( 0, 0, 1, wxEXPAND, 5 );
+
+	m_btnAddTool = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
+	bSizer6->Add( m_btnAddTool, 0, wxALL, 5 );
+
+
+	bSizer6->Add( 0, 0, 1, wxEXPAND, 5 );
+
+
+	m_customizeControls->Add( bSizer6, 1, wxEXPAND, 5 );
+
+	wxBoxSizer* bSizer9;
+	bSizer9 = new wxBoxSizer( wxHORIZONTAL );
+
+	m_actionsList = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_ICON|wxLC_NO_HEADER|wxLC_REPORT|wxLC_SINGLE_SEL );
+	bSizer9->Add( m_actionsList, 0, wxALL|wxEXPAND, 5 );
+
+
+	m_customizeControls->Add( bSizer9, 1, wxEXPAND, 5 );
+
+
+	bPanelSizer->Add( m_customizeControls, 1, wxEXPAND, 5 );
+
+
+	this->SetSizer( bPanelSizer );
+	this->Layout();
+	bPanelSizer->Fit( this );
+
+	// Connect Events
+	this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnUpdateUI ) );
+	m_customToolbars->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::onCustomizeTbCb ), NULL, this );
+	m_btnToolDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolDelete ), NULL, this );
+	m_btnToolMoveUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveUp ), NULL, this );
+	m_btnToolMoveDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveDown ), NULL, this );
+	m_btnAddTool->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnAddTextVar ), NULL, this );
+}
+
+PANEL_TOOLBAR_CUSTOMIZATION_BASE::~PANEL_TOOLBAR_CUSTOMIZATION_BASE()
+{
+	// Disconnect Events
+	this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnUpdateUI ) );
+	m_customToolbars->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::onCustomizeTbCb ), NULL, this );
+	m_btnToolDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolDelete ), NULL, this );
+	m_btnToolMoveUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveUp ), NULL, this );
+	m_btnToolMoveDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnToolMoveDown ), NULL, this );
+	m_btnAddTool->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_TOOLBAR_CUSTOMIZATION_BASE::OnAddTextVar ), NULL, this );
+
+}
diff --git a/common/dialogs/panel_toolbar_customization_base.h b/common/dialogs/panel_toolbar_customization_base.h
new file mode 100644
index 0000000000..432f6e7fdb
--- /dev/null
+++ b/common/dialogs/panel_toolbar_customization_base.h
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////////////////
+// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6-dirty)
+// http://www.wxformbuilder.org/
+//
+// PLEASE DO *NOT* EDIT THIS FILE!
+///////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+#include <wx/artprov.h>
+#include <wx/xrc/xmlres.h>
+#include <wx/intl.h>
+class STD_BITMAP_BUTTON;
+
+#include "widgets/resettable_panel.h"
+#include <wx/string.h>
+#include <wx/checkbox.h>
+#include <wx/gdicmn.h>
+#include <wx/font.h>
+#include <wx/colour.h>
+#include <wx/settings.h>
+#include <wx/statline.h>
+#include <wx/choice.h>
+#include <wx/treectrl.h>
+#include <wx/sizer.h>
+#include <wx/bmpbuttn.h>
+#include <wx/bitmap.h>
+#include <wx/image.h>
+#include <wx/icon.h>
+#include <wx/button.h>
+#include <widgets/split_button.h>
+#include <wx/listctrl.h>
+#include <wx/panel.h>
+
+///////////////////////////////////////////////////////////////////////////
+
+///////////////////////////////////////////////////////////////////////////////
+/// Class PANEL_TOOLBAR_CUSTOMIZATION_BASE
+///////////////////////////////////////////////////////////////////////////////
+class PANEL_TOOLBAR_CUSTOMIZATION_BASE : public RESETTABLE_PANEL
+{
+	private:
+
+	protected:
+		wxCheckBox* m_customToolbars;
+		wxStaticLine* m_staticline1;
+		wxChoice* m_tbChoice;
+		wxTreeCtrl* m_toolbarTree;
+		STD_BITMAP_BUTTON* m_btnToolDelete;
+		STD_BITMAP_BUTTON* m_btnToolMoveUp;
+		STD_BITMAP_BUTTON* m_btnToolMoveDown;
+		SPLIT_BUTTON* m_insertButton;
+		STD_BITMAP_BUTTON* m_btnAddTool;
+		wxListCtrl* m_actionsList;
+
+		// Virtual event handlers, override them in your derived class
+		virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); }
+		virtual void onCustomizeTbCb( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnToolDelete( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnToolMoveUp( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnToolMoveDown( wxCommandEvent& event ) { event.Skip(); }
+		virtual void OnAddTextVar( wxCommandEvent& event ) { event.Skip(); }
+
+
+	public:
+
+		PANEL_TOOLBAR_CUSTOMIZATION_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
+
+		~PANEL_TOOLBAR_CUSTOMIZATION_BASE();
+
+};
+
diff --git a/common/eda_base_frame.cpp b/common/eda_base_frame.cpp
index 8c23641812..64cad956a1 100644
--- a/common/eda_base_frame.cpp
+++ b/common/eda_base_frame.cpp
@@ -1309,6 +1309,7 @@ void EDA_BASE_FRAME::ShowPreferences( wxString aStartPage, wxString aStartParent
             book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_EDIT_OPTIONS ), _( "Editing Options" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_ANNO_OPTIONS ), _( "Annotation Options" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_COLORS ), _( "Colors" ) );
+            book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_TOOLBARS ), _( "Toolbars" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_FIELD_NAME_TEMPLATES ),
                                   _( "Field Name Templates" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_SCH_SIMULATOR ), _( "Simulator" ) );
@@ -1348,6 +1349,7 @@ void EDA_BASE_FRAME::ShowPreferences( wxString aStartPage, wxString aStartParent
             book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ORIGINS_AXES ), _( "Origins & Axes" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_EDIT_OPTIONS ), _( "Editing Options" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_COLORS ), _( "Colors" ) );
+            book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_TOOLBARS ), _( "Toolbars" ) );
             book->AddLazySubPage( LAZY_CTOR( PANEL_PCB_ACTION_PLUGINS ), _( "Plugins" ) );
 
             if( GetFrameType() == FRAME_PCB_DISPLAY3D )
diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp
index f5154d9e08..fc6992e012 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -306,7 +306,15 @@ static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
 
             return new PANEL_EESCHEMA_ANNOTATION_OPTIONS( aParent, schSettingsProvider );
         }
+/*
+        case PANEL_SCH_TOOLBARS:
+        {
+            SETTINGS_MANAGER&  mgr = Pgm().GetSettingsManager();
+            EESCHEMA_SETTINGS* cfg = mgr.GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" );
 
+            return new PANEL_TOOLBAR_CUSTOMIZATION( aParent, cfg );
+        }
+*/
         case PANEL_SCH_COLORS:
             return new PANEL_EESCHEMA_COLOR_SETTINGS( aParent );
 
diff --git a/include/dialogs/panel_toolbar_customization.h b/include/dialogs/panel_toolbar_customization.h
new file mode 100644
index 0000000000..775378b1b2
--- /dev/null
+++ b/include/dialogs/panel_toolbar_customization.h
@@ -0,0 +1,83 @@
+/*
+ * This program source code file is part of KICAD, a free EDA CAD application.
+ *
+ * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ */
+
+ #ifndef PANEL_TOOLBAR_CUSTOMIZATION_H_
+ #define PANEL_TOOLBAR_CUSTOMIZATION_H_
+
+#include <dialogs/panel_toolbar_customization_base.h>
+
+#include <tool/action_toolbar.h>
+
+#include <wx/bmpbndl.h>
+
+class wxImageList;
+
+class APP_SETTINGS_BASE;
+class TOOL_ACTION;
+class TOOLBAR_SETTINGS;
+
+class PANEL_TOOLBAR_CUSTOMIZATION : public PANEL_TOOLBAR_CUSTOMIZATION_BASE
+{
+public:
+    PANEL_TOOLBAR_CUSTOMIZATION( wxWindow* aParent, APP_SETTINGS_BASE* aCfg, TOOLBAR_SETTINGS* aTbSettings,
+                                 std::vector<TOOL_ACTION*> aTools,
+                                 std::vector<ACTION_TOOLBAR_CONTROL*> aControls );
+
+    ~PANEL_TOOLBAR_CUSTOMIZATION();
+
+    void ResetPanel() override;
+
+    bool TransferDataFromWindow() override;
+    bool TransferDataToWindow() override;
+
+protected:
+    void populateToolbarTree( const TOOLBAR_CONFIGURATION& aToolbar );
+
+    void populateActions( const std::map<std::string, TOOL_ACTION*>& aTools,
+                          const std::map<std::string, ACTION_TOOLBAR_CONTROL*>& aControls );
+
+    void enableCustomControls( bool enable );
+
+    void onGroupPress( wxCommandEvent& aEvent );
+    void onSpacerPress( wxCommandEvent& aEvent );
+    void onSeparatorPress( wxCommandEvent& aEvent );
+
+    // From the base class
+    void onCustomizeTbCb( wxCommandEvent& event ) override;
+    void OnToolDelete( wxCommandEvent& event ) override;
+    void OnToolMoveUp( wxCommandEvent& event ) override;
+    void OnToolMoveDown( wxCommandEvent& event ) override;
+
+protected:
+    wxImageList*               m_actionImageList;
+    wxVector<wxBitmapBundle>   m_actionImageBundleVector;
+    std::map<std::string, int> m_actionImageListMap;
+
+    APP_SETTINGS_BASE* m_appSettings;
+    TOOLBAR_SETTINGS*  m_tbSettings;
+
+    std::map<std::string, TOOL_ACTION*>               m_availableTools;
+    std::map<std::string, ACTION_TOOLBAR_CONTROL*>    m_availableControls;
+};
+
+ #endif /* PANEL_TOOLBAR_CUSTOMIZATION_H_ */
diff --git a/include/frame_type.h b/include/frame_type.h
index 7ea7042e03..bc360b1929 100644
--- a/include/frame_type.h
+++ b/include/frame_type.h
@@ -73,12 +73,14 @@ enum FRAME_T
     PANEL_SYM_EDIT_GRIDS,
     PANEL_SYM_EDIT_OPTIONS,
     PANEL_SYM_COLORS,
+    PANEL_SYM_TOOLBARS,
 
     PANEL_SCH_DISP_OPTIONS,
     PANEL_SCH_GRIDS,
     PANEL_SCH_EDIT_OPTIONS,
     PANEL_SCH_ANNO_OPTIONS,
     PANEL_SCH_COLORS,
+    PANEL_SCH_TOOLBARS,
     PANEL_SCH_FIELD_NAME_TEMPLATES,
     PANEL_SCH_SIMULATOR,
 
@@ -86,6 +88,7 @@ enum FRAME_T
     PANEL_FP_GRIDS,
     PANEL_FP_EDIT_OPTIONS,
     PANEL_FP_COLORS,
+    PANEL_FP_TOOLBARS,
     PANEL_FP_DEFAULT_FIELDS,
     PANEL_FP_DEFAULT_GRAPHICS_VALUES,
     PANEL_FP_ORIGINS_AXES,
@@ -94,22 +97,26 @@ enum FRAME_T
     PANEL_PCB_GRIDS,
     PANEL_PCB_EDIT_OPTIONS,
     PANEL_PCB_COLORS,
+    PANEL_PCB_TOOLBARS,
     PANEL_PCB_ACTION_PLUGINS,
     PANEL_PCB_ORIGINS_AXES,
 
     PANEL_3DV_DISPLAY_OPTIONS,
     PANEL_3DV_OPENGL,
     PANEL_3DV_RAYTRACING,
+    PANEL_3DV_TOOLBARS,
 
     PANEL_GBR_DISPLAY_OPTIONS,
     PANEL_GBR_EDIT_OPTIONS,
     PANEL_GBR_EXCELLON_OPTIONS,
     PANEL_GBR_GRIDS,
     PANEL_GBR_COLORS,
+    PANEL_GBR_TOOLBARS,
 
     PANEL_DS_DISPLAY_OPTIONS,
     PANEL_DS_GRIDS,
     PANEL_DS_COLORS,
+    PANEL_DS_TOOLBARS,
 
     // Library table dialogs are transient and are never returned
     DIALOG_CONFIGUREPATHS,
diff --git a/include/widgets/split_button.h b/include/widgets/split_button.h
index f2d82484b1..e43c0c6142 100644
--- a/include/widgets/split_button.h
+++ b/include/widgets/split_button.h
@@ -44,6 +44,7 @@ public:
     void    SetMinSize( const wxSize& aSize ) override;
     void    SetWidthPadding( int aPadding );
     void    SetLabel( const wxString& aLabel ) override;
+    bool    Enable( bool aEnable = true ) override;
 
 protected:
     void OnKillFocus( wxFocusEvent& aEvent );
@@ -54,8 +55,6 @@ protected:
     void OnPaint( wxPaintEvent& WXUNUSED( aEvent ) );
     void onThemeChanged( wxSysColourChangedEvent &aEvent );
 
-    bool Enable( bool aEnable = true ) override;
-
 private:
     int       m_stateButton = 0;
     int       m_stateMenu   = 0;