diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index f8ebe806b7..dcb77f1105 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -358,6 +358,8 @@ set( COMMON_DLG_SRCS
     dialogs/panel_color_settings.cpp
     dialogs/panel_common_settings.cpp
     dialogs/panel_common_settings_base.cpp
+    dialogs/panel_design_block_lib_table_base.cpp
+    dialogs/panel_design_block_lib_table.cpp
     dialogs/panel_embedded_files.cpp
     dialogs/panel_embedded_files_base.cpp
     dialogs/panel_gal_display_options.cpp
diff --git a/kicad/dialogs/panel_design_block_lib_table.cpp b/common/dialogs/panel_design_block_lib_table.cpp
similarity index 95%
rename from kicad/dialogs/panel_design_block_lib_table.cpp
rename to common/dialogs/panel_design_block_lib_table.cpp
index e149d365e3..600cc07a81 100644
--- a/kicad/dialogs/panel_design_block_lib_table.cpp
+++ b/common/dialogs/panel_design_block_lib_table.cpp
@@ -1153,3 +1153,57 @@ void PANEL_DESIGN_BLOCK_LIB_TABLE::populateEnvironReadOnlyTable()
 
 
 size_t PANEL_DESIGN_BLOCK_LIB_TABLE::m_pageNdx = 0;
+
+
+void InvokeEditDesignBlockLibTable( KIWAY* aKiway, wxWindow *aParent )
+{
+    DESIGN_BLOCK_LIB_TABLE* globalTable = &GDesignBlockTable;
+    wxString                globalTablePath = DESIGN_BLOCK_LIB_TABLE::GetGlobalTableFileName();
+    DESIGN_BLOCK_LIB_TABLE* projectTable = aKiway->Prj().DesignBlockLibs();
+    wxString                projectTablePath = aKiway->Prj().DesignBlockLibTblName();
+    wxString                msg;
+
+    DIALOG_EDIT_LIBRARY_TABLES dlg( aParent, _( "Design Block Libraries" ) );
+
+    if( aKiway->Prj().IsNullProject() )
+        projectTable = nullptr;
+
+    dlg.InstallPanel( new PANEL_DESIGN_BLOCK_LIB_TABLE( &dlg, &aKiway->Prj(), globalTable, globalTablePath,
+                                                        projectTable, projectTablePath,
+                                                        aKiway->Prj().GetProjectPath() ) );
+
+    if( dlg.ShowModal() == wxID_CANCEL )
+        return;
+
+    if( dlg.m_GlobalTableChanged )
+    {
+        try
+        {
+            globalTable->Save( globalTablePath );
+        }
+        catch( const IO_ERROR& ioe )
+        {
+            msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
+            wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
+        }
+    }
+
+    if( projectTable && dlg.m_ProjectTableChanged )
+    {
+        try
+        {
+            projectTable->Save( projectTablePath );
+        }
+        catch( const IO_ERROR& ioe )
+        {
+            msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
+            wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
+        }
+    }
+
+    std::string payload = "";
+    aKiway->ExpressMail( FRAME_SCH, MAIL_RELOAD_LIB, payload );
+    aKiway->ExpressMail( FRAME_SCH_VIEWER, MAIL_RELOAD_LIB, payload );
+
+    return;
+}
diff --git a/kicad/dialogs/panel_design_block_lib_table.h b/common/dialogs/panel_design_block_lib_table.h
similarity index 98%
rename from kicad/dialogs/panel_design_block_lib_table.h
rename to common/dialogs/panel_design_block_lib_table.h
index ded14ccea8..ef2ececc92 100644
--- a/kicad/dialogs/panel_design_block_lib_table.h
+++ b/common/dialogs/panel_design_block_lib_table.h
@@ -103,4 +103,7 @@ private:
             m_supportedDesignBlockFiles;
 };
 
+
+void InvokeEditDesignBlockLibTable( KIWAY* aKiway, wxWindow *aParent );
+
 #endif // PANEL_DESIGN_BLOCK_LIB_TABLE_H
diff --git a/kicad/dialogs/panel_design_block_lib_table_base.cpp b/common/dialogs/panel_design_block_lib_table_base.cpp
similarity index 100%
rename from kicad/dialogs/panel_design_block_lib_table_base.cpp
rename to common/dialogs/panel_design_block_lib_table_base.cpp
diff --git a/kicad/dialogs/panel_design_block_lib_table_base.fbp b/common/dialogs/panel_design_block_lib_table_base.fbp
similarity index 100%
rename from kicad/dialogs/panel_design_block_lib_table_base.fbp
rename to common/dialogs/panel_design_block_lib_table_base.fbp
diff --git a/kicad/dialogs/panel_design_block_lib_table_base.h b/common/dialogs/panel_design_block_lib_table_base.h
similarity index 100%
rename from kicad/dialogs/panel_design_block_lib_table_base.h
rename to common/dialogs/panel_design_block_lib_table_base.h
diff --git a/common/tool/common_control.cpp b/common/tool/common_control.cpp
index 35e6faec71..f9d0717f92 100644
--- a/common/tool/common_control.cpp
+++ b/common/tool/common_control.cpp
@@ -123,7 +123,6 @@ int COMMON_CONTROL::ShowLibraryTable( const TOOL_EVENT& aEvent )
     }
     else if( aEvent.IsAction( &ACTIONS::showFootprintLibTable ) )
     {
-
         try     // Pcb frame was not available, try to start it
         {
             KIFACE* kiface = m_frame->Kiway().KiFACE( KIWAY::FACE_PCB );
@@ -138,6 +137,22 @@ int COMMON_CONTROL::ShowLibraryTable( const TOOL_EVENT& aEvent )
             // A error message is displayed after trying to load _pcbnew.kiface.
         }
     }
+    else if( aEvent.IsAction( &ACTIONS::showDesignBlockLibTable ) )
+    {
+        try     // Kicad frame was not available, try to start it
+        {
+            KIFACE* kiface = m_frame->Kiway().KiFACE( KIWAY::FACE_SCH );
+
+            if( kiface )
+                kiface->CreateKiWindow( m_frame, DIALOG_DESIGN_BLOCK_LIBRARY_TABLE, &m_frame->Kiway() );
+        }
+        catch( ... )
+        {
+            // _eeschema.kiface is not available: it contains the library table dialog.
+            // Do nothing here.
+            // A error message is displayed after trying to load _eeschema.kiface.
+        }
+    }
 
     return 0;
 }
@@ -342,6 +357,7 @@ void COMMON_CONTROL::setTransitions()
     Go( &COMMON_CONTROL::ConfigurePaths,     ACTIONS::configurePaths.MakeEvent() );
     Go( &COMMON_CONTROL::ShowLibraryTable,   ACTIONS::showSymbolLibTable.MakeEvent() );
     Go( &COMMON_CONTROL::ShowLibraryTable,   ACTIONS::showFootprintLibTable.MakeEvent() );
+    Go( &COMMON_CONTROL::ShowLibraryTable,   ACTIONS::showDesignBlockLibTable.MakeEvent() );
     Go( &COMMON_CONTROL::ShowPlayer,         ACTIONS::showSymbolBrowser.MakeEvent() );
     Go( &COMMON_CONTROL::ShowPlayer,         ACTIONS::showSymbolEditor.MakeEvent() );
     Go( &COMMON_CONTROL::ShowPlayer,         ACTIONS::showFootprintBrowser.MakeEvent() );
diff --git a/eeschema/eeschema.cpp b/eeschema/eeschema.cpp
index e1cca84ef9..3d6980963c 100644
--- a/eeschema/eeschema.cpp
+++ b/eeschema/eeschema.cpp
@@ -40,6 +40,7 @@
 #include <dialogs/dialog_global_sym_lib_table_config.h>
 #include <dialogs/panel_grid_settings.h>
 #include <dialogs/panel_simulator_preferences.h>
+#include <dialogs/panel_design_block_lib_table.h>
 #include <dialogs/panel_sym_lib_table.h>
 #include <kiway.h>
 #include <settings/settings_manager.h>
@@ -197,6 +198,11 @@ static struct IFACE : public KIFACE_BASE, public UNITS_PROVIDER
             // Dialog has completed; nothing to return.
             return nullptr;
 
+        case DIALOG_DESIGN_BLOCK_LIBRARY_TABLE:
+            InvokeEditDesignBlockLibTable( aKiway, aParent );
+            // Dialog has completed; nothing to return.
+            return nullptr;
+
         case PANEL_SYM_DISP_OPTIONS:
         {
             SETTINGS_MANAGER&  mgr = Pgm().GetSettingsManager();
diff --git a/eeschema/menubar.cpp b/eeschema/menubar.cpp
index f86e7beb51..b36e6bfa86 100644
--- a/eeschema/menubar.cpp
+++ b/eeschema/menubar.cpp
@@ -337,6 +337,8 @@ void SCH_EDIT_FRAME::doReCreateMenuBar()
 
     prefsMenu->Add( ACTIONS::configurePaths );
     prefsMenu->Add( ACTIONS::showSymbolLibTable );
+    if( ADVANCED_CFG::GetCfg().m_EnableDesignBlocks )
+        prefsMenu->Add( ACTIONS::showDesignBlockLibTable );
     prefsMenu->Add( ACTIONS::openPreferences );
 
     prefsMenu->AppendSeparator();
diff --git a/kicad/CMakeLists.txt b/kicad/CMakeLists.txt
index 9833eed72f..d9e463eae4 100644
--- a/kicad/CMakeLists.txt
+++ b/kicad/CMakeLists.txt
@@ -25,8 +25,6 @@ set( KICAD_SRCS
     dialogs/dialog_template_selector.cpp
     dialogs/panel_kicad_launcher_base.cpp
     dialogs/panel_kicad_launcher.cpp
-    dialogs/panel_design_block_lib_table_base.cpp
-    dialogs/panel_design_block_lib_table.cpp
     files-io.cpp
     import_proj.cpp
     import_project.cpp
diff --git a/kicad/tools/kicad_manager_control.cpp b/kicad/tools/kicad_manager_control.cpp
index 3e96f2aacb..385cf5f9a8 100644
--- a/kicad/tools/kicad_manager_control.cpp
+++ b/kicad/tools/kicad_manager_control.cpp
@@ -890,65 +890,6 @@ int KICAD_MANAGER_CONTROL::Execute( const TOOL_EVENT& aEvent )
 }
 
 
-int KICAD_MANAGER_CONTROL::ShowDesignBlockLibTable( const TOOL_EVENT& aEvent )
-{
-    // For some reason, after a click or a double click the bitmap button calling
-    // PCM keeps the focus althougt the focus was not set to this button.
-    // This hack force removing the focus from this button
-    m_frame->SetFocus();
-    wxSafeYield();
-
-    DESIGN_BLOCK_LIB_TABLE* globalTable = &GDesignBlockTable;
-    wxString                globalTablePath = DESIGN_BLOCK_LIB_TABLE::GetGlobalTableFileName();
-    DESIGN_BLOCK_LIB_TABLE* projectTable = Prj().DesignBlockLibs();
-    wxString                projectTablePath = Prj().DesignBlockLibTblName();
-    wxString                msg;
-
-    DIALOG_EDIT_LIBRARY_TABLES dlg( m_frame, _( "Design Block Libraries" ) );
-
-    if( Prj().IsNullProject() )
-        projectTable = nullptr;
-
-    dlg.InstallPanel( new PANEL_DESIGN_BLOCK_LIB_TABLE( &dlg, &Prj(), globalTable, globalTablePath,
-                                                        projectTable, projectTablePath,
-                                                        Prj().GetProjectPath() ) );
-
-    if( dlg.ShowModal() == wxID_CANCEL )
-        return 0;
-
-    if( dlg.m_GlobalTableChanged )
-    {
-        try
-        {
-            globalTable->Save( globalTablePath );
-        }
-        catch( const IO_ERROR& ioe )
-        {
-            msg.Printf( _( "Error saving global library table:\n\n%s" ), ioe.What() );
-            wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
-        }
-    }
-
-    if( projectTable && dlg.m_ProjectTableChanged )
-    {
-        try
-        {
-            projectTable->Save( projectTablePath );
-        }
-        catch( const IO_ERROR& ioe )
-        {
-            msg.Printf( _( "Error saving project-specific library table:\n\n%s" ), ioe.What() );
-            wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
-        }
-    }
-
-    std::string payload = "";
-    Kiway.ExpressMail( FRAME_SCH, MAIL_RELOAD_LIB, payload );
-    Kiway.ExpressMail( FRAME_SCH_VIEWER, MAIL_RELOAD_LIB, payload );
-
-    return 0;
-}
-
 int KICAD_MANAGER_CONTROL::ShowPluginManager( const TOOL_EVENT& aEvent )
 {
     if( KIPLATFORM::POLICY::GetPolicyBool( POLICY_KEY_PCM )
@@ -1042,7 +983,5 @@ void KICAD_MANAGER_CONTROL::setTransitions()
     Go( &KICAD_MANAGER_CONTROL::Execute,         KICAD_MANAGER_ACTIONS::editOtherSch.MakeEvent() );
     Go( &KICAD_MANAGER_CONTROL::Execute,         KICAD_MANAGER_ACTIONS::editOtherPCB.MakeEvent() );
 
-    Go( &KICAD_MANAGER_CONTROL::ShowDesignBlockLibTable,
-                                                   ACTIONS::showDesignBlockLibTable.MakeEvent() );
     Go( &KICAD_MANAGER_CONTROL::ShowPluginManager, KICAD_MANAGER_ACTIONS::showPluginManager.MakeEvent() );
 }