diff --git a/.gitignore b/.gitignore
index d300eee2c5..1d34517579 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,7 +9,7 @@ common/drc_rules_lexer.h
 common/netlist_keywords.*
 common/netlist_lexer.h
 common/pcb_plot_params_lexer.h
-common/page_layout/page_layout_reader_keywords.cpp
+common/drawing_sheet/drawing_sheet_reader_keywords.cpp
 common/lib_table_keywords.*
 common/gal/opengl/shader_src.h
 include/fp_lib_table_lexer.h
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 527c49fdd5..278b99c68a 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -246,15 +246,15 @@ set( COMMON_WIDGET_SRCS
     widgets/wx_aui_dock_art.cpp
     )
 
-set( COMMON_PAGE_LAYOUT_SRCS
-    page_layout/ws_data_item.cpp
-    page_layout/ws_data_model.cpp
-    page_layout/ws_data_model_io.cpp
-    page_layout/page_layout_default_description.cpp
-    page_layout/ws_draw_item.cpp
-    page_layout/ws_proxy_undo_item.cpp
-    page_layout/ws_proxy_view_item.cpp
-    page_layout/page_layout_reader.cpp
+set( COMMON_DRAWING_SHEET_SRCS
+    drawing_sheet/ds_data_item.cpp
+    drawing_sheet/ds_data_model.cpp
+    drawing_sheet/ds_data_model_io.cpp
+    drawing_sheet/drawing_sheet_default_description.cpp
+    drawing_sheet/ds_draw_item.cpp
+    drawing_sheet/ds_proxy_undo_item.cpp
+    drawing_sheet/ds_proxy_view_item.cpp
+    drawing_sheet/drawing_sheet_reader.cpp
     )
 
 set( COMMON_PREVIEW_ITEMS_SRCS
@@ -300,7 +300,7 @@ set( COMMON_SRCS
     ${COMMON_ABOUT_DLG_SRCS}
     ${COMMON_DLG_SRCS}
     ${COMMON_WIDGET_SRCS}
-    ${COMMON_PAGE_LAYOUT_SRCS}
+    ${COMMON_DRAWING_SHEET_SRCS}
     ${COMMON_PREVIEW_ITEMS_SRCS}
     ${PLOTTERS_CONTROL_SRCS}
     ${PLUGINS_ALTIUM_SRCS}
@@ -392,7 +392,7 @@ set( COMMON_SRCS
     utf8.cpp
     validators.cpp
     wildcards_and_files_ext.cpp
-    page_layout/ws_painter.cpp
+    drawing_sheet/ds_painter.cpp
     wxdataviewctrl_helpers.cpp
     wx_filename.cpp
     xnode.cpp
@@ -559,7 +559,7 @@ set( PCB_COMMON_SRCS
     ${CMAKE_SOURCE_DIR}/pcbnew/pcbnew_settings.cpp
     ${CMAKE_SOURCE_DIR}/pcbnew/plugin.cpp
     ${CMAKE_SOURCE_DIR}/pcbnew/ratsnest/ratsnest_data.cpp
-    ${CMAKE_SOURCE_DIR}/pcbnew/ratsnest/ratsnest_viewitem.cpp
+    ${CMAKE_SOURCE_DIR}/pcbnew/ratsnest/ratsnest_view_item.cpp
     ${CMAKE_SOURCE_DIR}/pcbnew/sel_layer.cpp
     ${CMAKE_SOURCE_DIR}/pcbnew/zone_settings.cpp
 
@@ -667,9 +667,9 @@ make_lexer(
 # and title_block_reader_keywords.cpp.
 make_lexer(
     common
-    page_layout/page_layout_reader.keywords
-    page_layout/page_layout_reader_lexer.h
-    page_layout/page_layout_reader_keywords.cpp
+    drawing_sheet/drawing_sheet_reader.keywords
+    drawing_sheet/drawing_sheet_reader_lexer.h
+    drawing_sheet/drawing_sheet_reader_keywords.cpp
     TB_READER_T
     )
 
diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp
index 997f597aaf..46ba368da8 100644
--- a/common/dialogs/dialog_page_settings.cpp
+++ b/common/dialogs/dialog_page_settings.cpp
@@ -31,8 +31,8 @@
 #include <tool/actions.h>
 #include <tool/tool_manager.h>
 #include <wildcards_and_files_ext.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_painter.h>
 #include <wx/valgen.h>
 #include <wx/tokenzr.h>
 
@@ -83,10 +83,10 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aI
     m_customFmt = false;
     m_localPrjConfigChanged = false;
 
-    m_pagelayout = new WS_DATA_MODEL;
+    m_drawingSheet = new DS_DATA_MODEL;
     wxString serialization;
-    WS_DATA_MODEL::GetTheInstance().SaveInString( serialization );
-    m_pagelayout->SetPageLayout( TO_UTF8( serialization ) );
+    DS_DATA_MODEL::GetTheInstance().SaveInString( serialization );
+    m_drawingSheet->SetPageLayout(TO_UTF8( serialization ) );
 
     m_PickDate->SetValue( wxDateTime::Now() );
 
@@ -110,7 +110,7 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aI
 DIALOG_PAGES_SETTINGS::~DIALOG_PAGES_SETTINGS()
 {
     delete m_pageBitmap;
-    delete m_pagelayout;
+    delete m_drawingSheet;
 }
 
 
@@ -455,7 +455,7 @@ bool DIALOG_PAGES_SETTINGS::SavePageSettings()
 
     if( fileName != BASE_SCREEN::m_PageLayoutDescrFileName )
     {
-        wxString fullFileName = WS_DATA_MODEL::MakeFullFileName( fileName, m_projectPath );
+        wxString fullFileName = DS_DATA_MODEL::MakeFullFileName( fileName, m_projectPath );
 
         if( !fullFileName.IsEmpty() && !wxFileExists( fullFileName ) )
         {
@@ -466,8 +466,7 @@ bool DIALOG_PAGES_SETTINGS::SavePageSettings()
         }
 
         BASE_SCREEN::m_PageLayoutDescrFileName = fileName;
-        WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
-        pglayout.SetPageLayout( fullFileName );
+        DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( fullFileName );
         m_localPrjConfigChanged = true;
     }
 
@@ -641,12 +640,12 @@ void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample()
         }
 
         // Draw layout preview.
-        KIGFX::WS_RENDER_SETTINGS renderSettings;
+        KIGFX::DS_RENDER_SETTINGS renderSettings;
         COLOR_SETTINGS*           colorSettings = m_parent->GetColorSettings();
         COLOR4D                   bgColor = m_parent->GetDrawBgColor();
         wxString                  emptyString;
 
-        WS_DATA_MODEL::SetAltInstance( m_pagelayout );
+        DS_DATA_MODEL::SetAltInstance( m_drawingSheet );
         {
             GRResetPenAndBrush( &memDC );
             renderSettings.SetDefaultPenWidth( 1 );
@@ -664,14 +663,14 @@ void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample()
 
             GRFilledRect( NULL, &memDC, 0, 0, m_layout_size.x, m_layout_size.y, bgColor, bgColor );
 
-            PrintPageLayout( &renderSettings, pageDUMMY, emptyString, emptyString, m_tb,
-                             m_screen->GetPageCount(), m_screen->GetPageNumber(), 1, &Prj(),
-                             wxEmptyString, m_screen->GetVirtualPageNumber() ==  1 );
+            PrintDrawingSheet( &renderSettings, pageDUMMY, emptyString, emptyString, m_tb,
+                               m_screen->GetPageCount(), m_screen->GetPageNumber(), 1, &Prj(),
+                               wxEmptyString, m_screen->GetVirtualPageNumber() == 1 );
 
             memDC.SelectObject( wxNullBitmap );
             m_PageLayoutExampleBitmap->SetBitmap( *m_pageBitmap );
         }
-        WS_DATA_MODEL::SetAltInstance( NULL );
+        DS_DATA_MODEL::SetAltInstance( NULL );
 
         // Refresh the dialog.
         Layout();
@@ -787,7 +786,7 @@ void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event )
 
     // Try to remove the path, if the path is the current working dir,
     // or the dir of kicad.pro (template), and use a relative path
-    wxString shortFileName = WS_DATA_MODEL::MakeShortFileName( fileName, m_projectPath );
+    wxString shortFileName = DS_DATA_MODEL::MakeShortFileName( fileName, m_projectPath );
 
     // For Win/Linux/macOS compatibility, a relative path is a good idea
     if( shortFileName != GetWksFileName() && shortFileName != fileName )
@@ -806,10 +805,10 @@ void DIALOG_PAGES_SETTINGS::OnWksFileSelection( wxCommandEvent& event )
 
     SetWksFileName( shortFileName );
 
-    if( m_pagelayout == NULL )
-        m_pagelayout = new WS_DATA_MODEL;
+    if( m_drawingSheet == NULL )
+        m_drawingSheet = new DS_DATA_MODEL;
 
-    m_pagelayout->SetPageLayout( fileName );
+    m_drawingSheet->LoadDrawingSheet( fileName );
 
     GetPageLayoutInfoFromDialog();
     UpdatePageLayoutExample();
diff --git a/common/page_layout/page_layout_default_description.cpp b/common/drawing_sheet/drawing_sheet_default_description.cpp
similarity index 94%
rename from common/page_layout/page_layout_default_description.cpp
rename to common/drawing_sheet/drawing_sheet_default_description.cpp
index 7cf7fbb3a5..d188dad5a8 100644
--- a/common/page_layout/page_layout_default_description.cpp
+++ b/common/drawing_sheet/drawing_sheet_default_description.cpp
@@ -1,12 +1,8 @@
-/**
- * @file common/page_layout/page_layout_default_description.cpp
- */
-
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
- * Copyright (C) 1992-2013 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
  *
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +24,7 @@
  */
 
 /* keyword used in page layout description are listed
- * in page_layout_reader.keywords file
+ * in drawing_sheet_reader.keywords file
  */
 
 /*
@@ -116,15 +112,15 @@
  */
 
 
-// height of the band reference grid  2.0 mm
-// drawing sheet frame reference text size 1.3 mm
+// height of the coordinates band 2.0 mm
+// coordinates text size 1.3 mm
 // default text size 1.5 mm
 // default line width 0.15 mm
 // frame ref pitch 50 mm
 
 // Default page layout (sizes are in mm)
-extern const char defaultPageLayout[] =
-    "(page_layout\n"
+extern const char defaultDrawingSheet[] =
+    "(drawing_sheet\n"
     "(setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15)\n"
     "(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))\n"
     "(rect (comment \"rect around the title block\") (linewidth 0.15) (start 110 34) (end 2 2) )\n"
@@ -158,8 +154,8 @@ extern const char defaultPageLayout[] =
     "(line (start 26 8.5) (end 26 2) )\n"
     ")\n";
 
-extern const char emptyPageLayout[] =
-    "(page_layout\n"
+extern const char emptyDrawingSheet[] =
+    "(drawing_sheet\n"
     "(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)\n"
     "(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))\n"
     "(line (name segm1:Line) (start 0 0) (end 0 0))\n"
diff --git a/common/page_layout/page_layout_reader.cpp b/common/drawing_sheet/drawing_sheet_reader.cpp
similarity index 83%
rename from common/page_layout/page_layout_reader.cpp
rename to common/drawing_sheet/drawing_sheet_reader.cpp
index ea9cad2b5f..41b61712f0 100644
--- a/common/page_layout/page_layout_reader.cpp
+++ b/common/drawing_sheet/drawing_sheet_reader.cpp
@@ -1,14 +1,8 @@
-/**
- * @file common/page_layout/page_layout_reader.cpp
- * @brief read an S expression of description of graphic items and texts
- * to build a title block and page layout
- */
-
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
  * Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
- * Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
+ * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
  *
  *
  * This program is free software; you can redistribute it and/or
@@ -31,11 +25,11 @@
 
 #include <eda_item.h>
 #include <locale_io.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_painter.h>
-#include <page_layout/page_layout_reader_lexer.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_painter.h>
+#include <drawing_sheet/drawing_sheet_reader_lexer.h>
 #include <wx/ffile.h>
 
 #include <wx/file.h>
@@ -45,15 +39,15 @@
 using namespace TB_READER_T;
 
 /**
- * PAGE_LAYOUT_READER_PARSER
+ * DRAWING_SHEET_READER_PARSER
  * holds data and functions pertinent to parsing a S-expression file
- * for a WS_DATA_MODEL.
+ * for a DS_DATA_MODEL.
  */
-class PAGE_LAYOUT_READER_PARSER : public PAGE_LAYOUT_READER_LEXER
+class DRAWING_SHEET_READER_PARSER : public DRAWING_SHEET_READER_LEXER
 {
 public:
-    PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource );
-    void Parse( WS_DATA_MODEL* aLayout );
+    DRAWING_SHEET_READER_PARSER( const char* aLine, const wxString& aSource );
+    void Parse( DS_DATA_MODEL* aLayout );
 
 private:
 
@@ -73,44 +67,45 @@ private:
      */
     double parseDouble();
 
-    void parseSetup( WS_DATA_MODEL* aLayout );
+    void parseSetup( DS_DATA_MODEL* aLayout );
 
     /**
      * parse a graphic item starting by "(line" or "(rect" and read parameters.
      */
-    void parseGraphic( WS_DATA_ITEM * aItem );
+    void parseGraphic( DS_DATA_ITEM * aItem );
 
     /**
      * parse a text item starting by "(tbtext" and read parameters.
      */
-    void parseText( WS_DATA_ITEM_TEXT * aItem );
+    void parseText( DS_DATA_ITEM_TEXT * aItem );
 
     /**
      * parse a polygon item starting by "( polygon" and read parameters.
      * the list of corners included in this description is read by parsePolyOutline
      */
-    void parsePolygon( WS_DATA_ITEM_POLYGONS * aItem );
+    void parsePolygon( DS_DATA_ITEM_POLYGONS * aItem );
 
     /**
      * parse a list of corners starting by "( pts" and read coordinates.
      */
-    void parsePolyOutline( WS_DATA_ITEM_POLYGONS * aItem );
+    void parsePolyOutline( DS_DATA_ITEM_POLYGONS * aItem );
 
 
     /**
      * parse a bitmap item starting by "( bitmap" and read parameters.
      */
-    void parseBitmap( WS_DATA_ITEM_BITMAP * aItem );
+    void parseBitmap( DS_DATA_ITEM_BITMAP * aItem );
 
     void parseCoordinate( POINT_COORD& aCoord);
-    void readOption( WS_DATA_ITEM * aItem );
-    void readPngdata( WS_DATA_ITEM_BITMAP * aItem );
+    void readOption( DS_DATA_ITEM * aItem );
+    void readPngdata( DS_DATA_ITEM_BITMAP * aItem );
 };
 
 // PCB_PLOT_PARAMS_PARSER
 
-PAGE_LAYOUT_READER_PARSER::PAGE_LAYOUT_READER_PARSER( const char* aLine, const wxString& aSource ) :
-    PAGE_LAYOUT_READER_LEXER( aLine, aSource )
+DRAWING_SHEET_READER_PARSER::DRAWING_SHEET_READER_PARSER( const char* aLine,
+                                                          const wxString& aSource ) :
+        DRAWING_SHEET_READER_LEXER( aLine, aSource )
 {
 }
 
@@ -189,9 +184,9 @@ wxString convertLegacyVariableRefs( const wxString& aTextbase )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::Parse( WS_DATA_MODEL* aLayout )
+void DRAWING_SHEET_READER_PARSER::Parse( DS_DATA_MODEL* aLayout )
 {
-    WS_DATA_ITEM* item;
+    DS_DATA_ITEM* item;
     LOCALE_IO     toggle;
 
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
@@ -199,7 +194,7 @@ void PAGE_LAYOUT_READER_PARSER::Parse( WS_DATA_MODEL* aLayout )
         if( token == T_LEFT )
             token = NextTok();
 
-        if( token == T_page_layout )
+        if( token == T_page_layout || token == T_drawing_sheet )
             continue;
 
         switch( token )
@@ -209,33 +204,33 @@ void PAGE_LAYOUT_READER_PARSER::Parse( WS_DATA_MODEL* aLayout )
             break;
 
         case T_line:
-            item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_SEGMENT );
+            item = new DS_DATA_ITEM( DS_DATA_ITEM::DS_SEGMENT );
             parseGraphic( item );
             aLayout->Append( item );
             break;
 
         case T_rect:
-            item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_RECT );
+            item = new DS_DATA_ITEM( DS_DATA_ITEM::DS_RECT );
             parseGraphic( item );
             aLayout->Append( item );
             break;
 
         case T_polygon:
-            item = new WS_DATA_ITEM_POLYGONS();
-            parsePolygon(  (WS_DATA_ITEM_POLYGONS*) item );
+            item = new DS_DATA_ITEM_POLYGONS();
+            parsePolygon(  (DS_DATA_ITEM_POLYGONS*) item );
             aLayout->Append( item );
             break;
 
         case T_bitmap:
-            item = new WS_DATA_ITEM_BITMAP( NULL );
-            parseBitmap( (WS_DATA_ITEM_BITMAP*) item );
+            item = new DS_DATA_ITEM_BITMAP( NULL );
+            parseBitmap( (DS_DATA_ITEM_BITMAP*) item );
             aLayout->Append( item );
             break;
 
         case T_tbtext:
             NeedSYMBOLorNUMBER();
-            item = new WS_DATA_ITEM_TEXT( convertLegacyVariableRefs( FromUTF8() ) );
-            parseText( (WS_DATA_ITEM_TEXT*) item );
+            item = new DS_DATA_ITEM_TEXT( convertLegacyVariableRefs( FromUTF8() ) );
+            parseText( (DS_DATA_ITEM_TEXT*) item );
             aLayout->Append( item );
             break;
 
@@ -247,7 +242,7 @@ void PAGE_LAYOUT_READER_PARSER::Parse( WS_DATA_MODEL* aLayout )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::parseSetup( WS_DATA_MODEL* aLayout )
+void DRAWING_SHEET_READER_PARSER::parseSetup( DS_DATA_MODEL* aLayout )
 {
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
     {
@@ -304,7 +299,7 @@ void PAGE_LAYOUT_READER_PARSER::parseSetup( WS_DATA_MODEL* aLayout )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::parsePolygon( WS_DATA_ITEM_POLYGONS * aItem )
+void DRAWING_SHEET_READER_PARSER::parsePolygon( DS_DATA_ITEM_POLYGONS * aItem )
 {
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
     {
@@ -372,7 +367,7 @@ void PAGE_LAYOUT_READER_PARSER::parsePolygon( WS_DATA_ITEM_POLYGONS * aItem )
     aItem->SetBoundingBox();
 }
 
-void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WS_DATA_ITEM_POLYGONS * aItem )
+void DRAWING_SHEET_READER_PARSER::parsePolyOutline( DS_DATA_ITEM_POLYGONS * aItem )
 {
     DPOINT corner;
 
@@ -398,7 +393,7 @@ void PAGE_LAYOUT_READER_PARSER::parsePolyOutline( WS_DATA_ITEM_POLYGONS * aItem
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::parseBitmap( WS_DATA_ITEM_BITMAP * aItem )
+void DRAWING_SHEET_READER_PARSER::parseBitmap( DS_DATA_ITEM_BITMAP * aItem )
 {
     BITMAP_BASE* image = new BITMAP_BASE;
     aItem->m_ImageBitmap = image;
@@ -460,7 +455,7 @@ void PAGE_LAYOUT_READER_PARSER::parseBitmap( WS_DATA_ITEM_BITMAP * aItem )
     }
 }
 
-void PAGE_LAYOUT_READER_PARSER::readPngdata( WS_DATA_ITEM_BITMAP * aItem )
+void DRAWING_SHEET_READER_PARSER::readPngdata( DS_DATA_ITEM_BITMAP * aItem )
 {
     std::string tmp;
 
@@ -494,7 +489,7 @@ void PAGE_LAYOUT_READER_PARSER::readPngdata( WS_DATA_ITEM_BITMAP * aItem )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::readOption( WS_DATA_ITEM * aItem )
+void DRAWING_SHEET_READER_PARSER::readOption( DS_DATA_ITEM * aItem )
 {
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
     {
@@ -508,7 +503,7 @@ void PAGE_LAYOUT_READER_PARSER::readOption( WS_DATA_ITEM * aItem )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::parseGraphic( WS_DATA_ITEM * aItem )
+void DRAWING_SHEET_READER_PARSER::parseGraphic( DS_DATA_ITEM * aItem )
 {
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
     {
@@ -578,7 +573,7 @@ void PAGE_LAYOUT_READER_PARSER::parseGraphic( WS_DATA_ITEM * aItem )
 }
 
 
-void PAGE_LAYOUT_READER_PARSER::parseText( WS_DATA_ITEM_TEXT* aItem )
+void DRAWING_SHEET_READER_PARSER::parseText( DS_DATA_ITEM_TEXT* aItem )
 {
     for( T token = NextTok(); token != T_RIGHT && token != EOF; token = NextTok() )
     {
@@ -717,7 +712,7 @@ void PAGE_LAYOUT_READER_PARSER::parseText( WS_DATA_ITEM_TEXT* aItem )
 }
 
 // parse an expression like " 25 1 ltcorner)"
-void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
+void DRAWING_SHEET_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
 {
     aCoord.m_Pos.x = parseDouble();
     aCoord.m_Pos.y = parseDouble();
@@ -735,7 +730,7 @@ void PAGE_LAYOUT_READER_PARSER::parseCoordinate( POINT_COORD& aCoord)
     }
 }
 
-int PAGE_LAYOUT_READER_PARSER::parseInt( int aMin, int aMax )
+int DRAWING_SHEET_READER_PARSER::parseInt( int aMin, int aMax )
 {
     T token = NextTok();
 
@@ -753,7 +748,7 @@ int PAGE_LAYOUT_READER_PARSER::parseInt( int aMin, int aMax )
 }
 
 
-double PAGE_LAYOUT_READER_PARSER::parseDouble()
+double DRAWING_SHEET_READER_PARSER::parseDouble()
 {
     T token = NextTok();
 
@@ -765,46 +760,42 @@ double PAGE_LAYOUT_READER_PARSER::parseDouble()
     return val;
 }
 
-// defaultPageLayout is the default page layout description
-// using the S expr.
-// see page_layout_default_shape.cpp
-extern const char defaultPageLayout[];
+// defaultDrawingSheet is the default page layout description using the S expr.
+extern const char defaultDrawingSheet[];
 
-void WS_DATA_MODEL::SetDefaultLayout()
+void DS_DATA_MODEL::SetDefaultLayout()
 {
-    SetPageLayout( defaultPageLayout, false, wxT( "default page" ) );
+    SetPageLayout( defaultDrawingSheet, false, wxT( "default page" ) );
 }
 
-// Returns defaultPageLayout as a string;
-wxString WS_DATA_MODEL::DefaultLayout()
+// Returns defaultDrawingSheet as a string;
+wxString DS_DATA_MODEL::DefaultLayout()
 {
-    return wxString( defaultPageLayout );
+    return wxString( defaultDrawingSheet );
 }
 
-// emptyPageLayout is a "empty" page layout description
+// emptyDrawingSheet is a "empty" page layout description using the S expr.
 // there is a 0 length line to fool something somewhere.
-// using the S expr.
-// see page_layout_empty_description.cpp
-extern const char emptyPageLayout[];
+extern const char emptyDrawingSheet[];
 
-void WS_DATA_MODEL::SetEmptyLayout()
+void DS_DATA_MODEL::SetEmptyLayout()
 {
-    SetPageLayout( emptyPageLayout, false, wxT( "empty page" ) );
+    SetPageLayout( emptyDrawingSheet, false, wxT( "empty page" ) );
 }
 
 
-wxString WS_DATA_MODEL::EmptyLayout()
+wxString DS_DATA_MODEL::EmptyLayout()
 {
-    return wxString( emptyPageLayout );
+    return wxString( emptyDrawingSheet );
 }
 
 
-void WS_DATA_MODEL::SetPageLayout( const char* aPageLayout, bool Append, const wxString& aSource )
+void DS_DATA_MODEL::SetPageLayout( const char* aPageLayout, bool Append, const wxString& aSource )
 {
     if( ! Append )
         ClearList();
 
-    PAGE_LAYOUT_READER_PARSER lp_parser( aPageLayout, wxT( "Sexpr_string" ) );
+    DRAWING_SHEET_READER_PARSER lp_parser( aPageLayout, wxT( "Sexpr_string" ) );
 
     try
     {
@@ -817,7 +808,7 @@ void WS_DATA_MODEL::SetPageLayout( const char* aPageLayout, bool Append, const w
 }
 
 
-void WS_DATA_MODEL::SetPageLayout( const wxString& aFullFileName, bool Append )
+void DS_DATA_MODEL::LoadDrawingSheet( const wxString& aFullFileName, bool Append )
 {
     wxString fullFileName = aFullFileName;
 
@@ -830,7 +821,7 @@ void WS_DATA_MODEL::SetPageLayout( const wxString& aFullFileName, bool Append )
         {
             #if 0
             if( !fullFileName.IsEmpty() )
-                wxLogMessage( wxT( "Page layout file <%s> not found" ), fullFileName.GetData() );
+                wxLogMessage( wxT( "Drawing sheet file <%s> not found" ), fullFileName.GetData() );
             #endif
             SetDefaultLayout();
             return;
@@ -858,7 +849,7 @@ void WS_DATA_MODEL::SetPageLayout( const wxString& aFullFileName, bool Append )
         if( ! Append )
             ClearList();
 
-        PAGE_LAYOUT_READER_PARSER pl_parser( buffer, fullFileName );
+        DRAWING_SHEET_READER_PARSER pl_parser( buffer, fullFileName );
 
         try
         {
diff --git a/common/page_layout/page_layout_reader.keywords b/common/drawing_sheet/drawing_sheet_reader.keywords
similarity index 96%
rename from common/page_layout/page_layout_reader.keywords
rename to common/drawing_sheet/drawing_sheet_reader.keywords
index 625dd59ec7..26decf1db4 100644
--- a/common/page_layout/page_layout_reader.keywords
+++ b/common/drawing_sheet/drawing_sheet_reader.keywords
@@ -1,4 +1,5 @@
 page_layout
+drawing_sheet
 setup
 left_margin
 right_margin
diff --git a/common/page_layout/ws_data_item.cpp b/common/drawing_sheet/ds_data_item.cpp
similarity index 75%
rename from common/page_layout/ws_data_item.cpp
rename to common/drawing_sheet/ds_data_item.cpp
index f7cdd9d004..414273c067 100644
--- a/common/page_layout/ws_data_item.cpp
+++ b/common/drawing_sheet/ds_data_item.cpp
@@ -24,27 +24,27 @@
 
 
 /*
- * the class WS_DATA_ITEM (and derived) defines
+ * the class DS_DATA_ITEM (and derived) defines
  * a basic shape of a page layout ( frame references and title block )
  * Basic shapes are line, rect and texts
- * the WS_DATA_ITEM coordinates units is the mm, and are relative to
+ * the DS_DATA_ITEM coordinates units is the mm, and are relative to
  * one of 4 page corners.
  *
  * These items cannot be drawn or plot "as this". they should be converted
- * to a "draw list" (WS_DRAW_ITEM_BASE and derived items)
+ * to a "draw list" (DS_DRAW_ITEM_BASE and derived items)
 
- * The list of these items is stored in a WS_DATA_MODEL instance.
+ * The list of these items is stored in a DS_DATA_MODEL instance.
  *
  * When building the draw list:
- * the WS_DATA_MODEL is used to create a WS_DRAW_ITEM_LIST
+ * the DS_DATA_MODEL is used to create a DS_DRAW_ITEM_LIST
  *  coordinates are converted to draw/plot coordinates.
  *  texts are expanded if they contain format symbols.
  *  Items with m_RepeatCount > 1 are created m_RepeatCount times
  *
- * the WS_DATA_MODEL is created only once.
- * the WS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn
+ * the DS_DATA_MODEL is created only once.
+ * the DS_DRAW_ITEM_LIST is created each time the page layout is plot/drawn
  *
- * the WS_DATA_MODEL instance is created from a S expression which
+ * the DS_DATA_MODEL instance is created from a S expression which
  * describes the page layout (can be the default page layout or a custom file).
  */
 
@@ -53,17 +53,17 @@
 #include <math/util.h>      // for KiROUND
 #include <view/view.h>
 #include <title_block.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_painter.h>
 #include <trigo.h>
 
 using KIGFX::COLOR4D;
 
 
 // The constructor:
-WS_DATA_ITEM::WS_DATA_ITEM( WS_ITEM_TYPE aType )
+DS_DATA_ITEM::DS_DATA_ITEM( DS_ITEM_TYPE aType )
 {
     m_pageOption = ALL_PAGES;
     m_type = aType;
@@ -73,14 +73,14 @@ WS_DATA_ITEM::WS_DATA_ITEM( WS_ITEM_TYPE aType )
 }
 
 
-WS_DATA_ITEM::~WS_DATA_ITEM()
+DS_DATA_ITEM::~DS_DATA_ITEM()
 {
-    for( WS_DRAW_ITEM_BASE* item : m_drawItems )
+    for( DS_DRAW_ITEM_BASE* item : m_drawItems )
         delete item;
 }
 
 
-void WS_DATA_ITEM::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
+void DS_DATA_ITEM::SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
 {
     int pensize = GetPenSizeUi();
 
@@ -88,7 +88,7 @@ void WS_DATA_ITEM::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aV
         pensize = aCollector ? aCollector->GetDefaultPenSize() : 0;
 
     std::map<int, STATUS_FLAGS> itemFlags;
-    WS_DRAW_ITEM_BASE*          item = nullptr;
+    DS_DRAW_ITEM_BASE*          item = nullptr;
 
     for( size_t i = 0; i < m_drawItems.size(); ++i )
     {
@@ -111,10 +111,10 @@ void WS_DATA_ITEM::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aV
         if( j && ! IsInsidePage( j ) )
             continue;
 
-        if( m_type == WS_SEGMENT )
-            item = new WS_DRAW_ITEM_LINE( this, j, GetStartPosUi( j ), GetEndPosUi( j ), pensize );
-        else if( m_type == WS_RECT )
-            item = new WS_DRAW_ITEM_RECT( this, j, GetStartPosUi( j ), GetEndPosUi( j ), pensize );
+        if( m_type == DS_SEGMENT )
+            item = new DS_DRAW_ITEM_LINE( this, j, GetStartPosUi( j ), GetEndPosUi( j ), pensize );
+        else if( m_type == DS_RECT )
+            item = new DS_DRAW_ITEM_RECT( this, j, GetStartPosUi( j ), GetEndPosUi( j ), pensize );
         else
         {
             wxFAIL_MSG( "Unknown drawing sheet item type" );
@@ -133,9 +133,9 @@ void WS_DATA_ITEM::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aV
 }
 
 
-int WS_DATA_ITEM::GetPenSizeUi()
+int DS_DATA_ITEM::GetPenSizeUi()
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     if( m_LineWidth != 0 )
         return KiROUND( m_LineWidth * model.m_WSunits2Iu );
@@ -150,17 +150,17 @@ int WS_DATA_ITEM::GetPenSizeUi()
 // (if both coordinates have the same corner reference)
 // MoveToUi and MoveTo takes the graphic position (i.e relative to the left top
 // paper corner
-void WS_DATA_ITEM::MoveToUi( wxPoint aPosition )
+void DS_DATA_ITEM::MoveToUi( wxPoint aPosition )
 {
     DPOINT pos_mm;
-    pos_mm.x = aPosition.x / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
-    pos_mm.y = aPosition.y / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos_mm.x = aPosition.x / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos_mm.y = aPosition.y / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
 
     MoveTo( pos_mm );
 }
 
 
-void WS_DATA_ITEM::MoveTo( DPOINT aPosition )
+void DS_DATA_ITEM::MoveTo( DPOINT aPosition )
 {
     DPOINT vector = aPosition - GetStartPos();
     DPOINT endpos = vector + GetEndPos();
@@ -168,7 +168,7 @@ void WS_DATA_ITEM::MoveTo( DPOINT aPosition )
     MoveStartPointTo( aPosition );
     MoveEndPointTo( endpos );
 
-    for( WS_DRAW_ITEM_BASE* drawItem : m_drawItems )
+    for( DS_DRAW_ITEM_BASE* drawItem : m_drawItems )
     {
         drawItem->SetPosition( GetStartPosUi( drawItem->GetIndexInPeer() ) );
         drawItem->SetEnd( GetEndPosUi( drawItem->GetIndexInPeer() ) );
@@ -179,9 +179,9 @@ void WS_DATA_ITEM::MoveTo( DPOINT aPosition )
 /* move the starting point of the item to a new position
  * aPosition = the new position of the starting point, in mm
  */
-void WS_DATA_ITEM::MoveStartPointTo( DPOINT aPosition )
+void DS_DATA_ITEM::MoveStartPointTo( DPOINT aPosition )
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
     DPOINT         position;
 
     // Calculate the position of the starting point
@@ -215,10 +215,10 @@ void WS_DATA_ITEM::MoveStartPointTo( DPOINT aPosition )
 /* move the starting point of the item to a new position
  * aPosition = the new position of the starting point in graphic units
  */
-void WS_DATA_ITEM::MoveStartPointToUi( wxPoint aPosition )
+void DS_DATA_ITEM::MoveStartPointToUi( wxPoint aPosition )
 {
-    DPOINT pos_mm( aPosition.x / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu,
-                   aPosition.y / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
+    DPOINT pos_mm( aPosition.x / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu,
+                   aPosition.y / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
 
     MoveStartPointTo( pos_mm );
 }
@@ -230,9 +230,9 @@ void WS_DATA_ITEM::MoveStartPointToUi( wxPoint aPosition )
  * (segments and rectangles)
  * aPosition = the new position of the ending point, in mm
  */
-void WS_DATA_ITEM::MoveEndPointTo( DPOINT aPosition )
+void DS_DATA_ITEM::MoveEndPointTo( DPOINT aPosition )
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
     DPOINT         position;
 
     // Calculate the position of the starting point
@@ -262,8 +262,8 @@ void WS_DATA_ITEM::MoveEndPointTo( DPOINT aPosition )
     // Modify m_End only for items having 2 coordinates
     switch( GetType() )
     {
-    case WS_SEGMENT:
-    case WS_RECT:
+    case DS_SEGMENT:
+    case DS_RECT:
         m_End.m_Pos = position;
         break;
 
@@ -278,19 +278,19 @@ void WS_DATA_ITEM::MoveEndPointTo( DPOINT aPosition )
  * (segments and rectangles)
  * aPosition = the new position of the ending point in graphic units
  */
-void WS_DATA_ITEM::MoveEndPointToUi( wxPoint aPosition )
+void DS_DATA_ITEM::MoveEndPointToUi( wxPoint aPosition )
 {
     DPOINT pos_mm;
-    pos_mm.x = aPosition.x / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
-    pos_mm.y = aPosition.y / WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos_mm.x = aPosition.x / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos_mm.y = aPosition.y / DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
 
     MoveEndPointTo( pos_mm );
 }
 
 
-const DPOINT WS_DATA_ITEM::GetStartPos( int ii ) const
+const DPOINT DS_DATA_ITEM::GetStartPos( int ii ) const
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
     DPOINT         pos( m_Pos.m_Pos.x + ( m_IncrementVector.x * ii ),
                         m_Pos.m_Pos.y + ( m_IncrementVector.y * ii ) );
 
@@ -319,14 +319,14 @@ const DPOINT WS_DATA_ITEM::GetStartPos( int ii ) const
 }
 
 
-const wxPoint WS_DATA_ITEM::GetStartPosUi( int ii ) const
+const wxPoint DS_DATA_ITEM::GetStartPosUi( int ii ) const
 {
-    DPOINT pos = GetStartPos( ii ) * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    DPOINT pos = GetStartPos( ii ) * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
     return wxPoint( KiROUND( pos.x ), KiROUND( pos.y ) );
 }
 
 
-const DPOINT WS_DATA_ITEM::GetEndPos( int ii ) const
+const DPOINT DS_DATA_ITEM::GetEndPos( int ii ) const
 {
     DPOINT pos( m_End.m_Pos.x + ( m_IncrementVector.x * ii ),
                 m_End.m_Pos.y + ( m_IncrementVector.y * ii ) );
@@ -334,21 +334,21 @@ const DPOINT WS_DATA_ITEM::GetEndPos( int ii ) const
     switch( m_End.m_Anchor )
     {
     case RB_CORNER:      // right bottom corner
-        pos = WS_DATA_MODEL::GetTheInstance().m_RB_Corner - pos;
+        pos = DS_DATA_MODEL::GetTheInstance().m_RB_Corner - pos;
         break;
 
     case RT_CORNER:      // right top corner
-        pos.x = WS_DATA_MODEL::GetTheInstance().m_RB_Corner.x - pos.x;
-        pos.y = WS_DATA_MODEL::GetTheInstance().m_LT_Corner.y + pos.y;
+        pos.x = DS_DATA_MODEL::GetTheInstance().m_RB_Corner.x - pos.x;
+        pos.y = DS_DATA_MODEL::GetTheInstance().m_LT_Corner.y + pos.y;
         break;
 
     case LB_CORNER:      // left bottom corner
-        pos.x = WS_DATA_MODEL::GetTheInstance().m_LT_Corner.x + pos.x;
-        pos.y = WS_DATA_MODEL::GetTheInstance().m_RB_Corner.y - pos.y;
+        pos.x = DS_DATA_MODEL::GetTheInstance().m_LT_Corner.x + pos.x;
+        pos.y = DS_DATA_MODEL::GetTheInstance().m_RB_Corner.y - pos.y;
         break;
 
     case LT_CORNER:      // left top corner
-        pos = WS_DATA_MODEL::GetTheInstance().m_LT_Corner + pos;
+        pos = DS_DATA_MODEL::GetTheInstance().m_LT_Corner + pos;
         break;
     }
 
@@ -356,17 +356,17 @@ const DPOINT WS_DATA_ITEM::GetEndPos( int ii ) const
 }
 
 
-const wxPoint WS_DATA_ITEM::GetEndPosUi( int ii ) const
+const wxPoint DS_DATA_ITEM::GetEndPosUi( int ii ) const
 {
     DPOINT pos = GetEndPos( ii );
-    pos = pos * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos = pos * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
     return wxPoint( KiROUND( pos.x ), KiROUND( pos.y ) );
 }
 
 
-bool WS_DATA_ITEM::IsInsidePage( int ii ) const
+bool DS_DATA_ITEM::IsInsidePage( int ii ) const
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     DPOINT pos = GetStartPos( ii );
 
@@ -385,34 +385,34 @@ bool WS_DATA_ITEM::IsInsidePage( int ii ) const
 }
 
 
-const wxString WS_DATA_ITEM::GetClassName() const
+const wxString DS_DATA_ITEM::GetClassName() const
 {
     wxString name;
 
     switch( GetType() )
     {
-        case WS_TEXT:        name = wxT( "Text" );           break;
-        case WS_SEGMENT:     name = wxT( "Line" );           break;
-        case WS_RECT:        name = wxT( "Rectangle" );      break;
-        case WS_POLYPOLYGON: name = wxT( "Imported Shape" ); break;
-        case WS_BITMAP:      name = wxT( "Image" );          break;
+        case DS_TEXT:        name = wxT( "Text" );           break;
+        case DS_SEGMENT:     name = wxT( "Line" );           break;
+        case DS_RECT:        name = wxT( "Rectangle" );      break;
+        case DS_POLYPOLYGON: name = wxT( "Imported Shape" ); break;
+        case DS_BITMAP:      name = wxT( "Image" );          break;
     }
 
     return name;
 }
 
 
-WS_DATA_ITEM_POLYGONS::WS_DATA_ITEM_POLYGONS() :
-    WS_DATA_ITEM( WS_POLYPOLYGON )
+DS_DATA_ITEM_POLYGONS::DS_DATA_ITEM_POLYGONS() :
+        DS_DATA_ITEM( DS_POLYPOLYGON )
 {
     m_Orient = 0.0;
 }
 
 
-void WS_DATA_ITEM_POLYGONS::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
+void DS_DATA_ITEM_POLYGONS::SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
 {
     std::map<int, STATUS_FLAGS> itemFlags;
-    WS_DRAW_ITEM_BASE*          item = nullptr;
+    DS_DRAW_ITEM_BASE*          item = nullptr;
 
     for( size_t i = 0; i < m_drawItems.size(); ++i )
     {
@@ -436,7 +436,7 @@ void WS_DATA_ITEM_POLYGONS::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX:
             continue;
 
         int pensize = GetPenSizeUi();
-        auto poly_shape = new WS_DRAW_ITEM_POLYPOLYGONS( this, j, GetStartPosUi( j ), pensize );
+        auto poly_shape = new DS_DRAW_ITEM_POLYPOLYGONS( this, j, GetStartPosUi( j ), pensize );
         poly_shape->SetFlags( itemFlags[ j ] );
         m_drawItems.push_back( poly_shape );
 
@@ -463,13 +463,13 @@ void WS_DATA_ITEM_POLYGONS::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX:
 }
 
 
-int WS_DATA_ITEM_POLYGONS::GetPenSizeUi()
+int DS_DATA_ITEM_POLYGONS::GetPenSizeUi()
 {
-    return KiROUND( m_LineWidth * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
+    return KiROUND( m_LineWidth * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
 }
 
 
-const DPOINT WS_DATA_ITEM_POLYGONS::GetCornerPosition( unsigned aIdx, int aRepeat ) const
+const DPOINT DS_DATA_ITEM_POLYGONS::GetCornerPosition( unsigned aIdx, int aRepeat ) const
 {
     DPOINT pos = m_Corners[aIdx];
 
@@ -480,7 +480,7 @@ const DPOINT WS_DATA_ITEM_POLYGONS::GetCornerPosition( unsigned aIdx, int aRepea
 }
 
 
-void WS_DATA_ITEM_POLYGONS::SetBoundingBox()
+void DS_DATA_ITEM_POLYGONS::SetBoundingBox()
 {
     if( m_Corners.size() == 0 )
     {
@@ -514,9 +514,9 @@ void WS_DATA_ITEM_POLYGONS::SetBoundingBox()
 }
 
 
-bool WS_DATA_ITEM_POLYGONS::IsInsidePage( int ii ) const
+bool DS_DATA_ITEM_POLYGONS::IsInsidePage( int ii ) const
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     DPOINT pos = GetStartPos( ii );
     pos += m_minCoord;  // left top pos of bounding box
@@ -534,16 +534,16 @@ bool WS_DATA_ITEM_POLYGONS::IsInsidePage( int ii ) const
 }
 
 
-const wxPoint WS_DATA_ITEM_POLYGONS::GetCornerPositionUi( unsigned aIdx, int aRepeat ) const
+const wxPoint DS_DATA_ITEM_POLYGONS::GetCornerPositionUi( unsigned aIdx, int aRepeat ) const
 {
     DPOINT pos = GetCornerPosition( aIdx, aRepeat );
-    pos = pos * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
+    pos = pos * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu;
     return wxPoint( int(pos.x), int(pos.y) );
 }
 
 
-WS_DATA_ITEM_TEXT::WS_DATA_ITEM_TEXT( const wxString& aTextBase ) :
-        WS_DATA_ITEM( WS_TEXT )
+DS_DATA_ITEM_TEXT::DS_DATA_ITEM_TEXT( const wxString& aTextBase ) :
+        DS_DATA_ITEM( DS_TEXT )
 {
     m_TextBase = aTextBase;
     m_IncrementLabel = 1;
@@ -556,13 +556,15 @@ WS_DATA_ITEM_TEXT::WS_DATA_ITEM_TEXT( const wxString& aTextBase ) :
 }
 
 
-void WS_DATA_ITEM_TEXT::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
+void DS_DATA_ITEM_TEXT::SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
 {
     int   pensize = GetPenSizeUi();
     bool  multilines = false;
 
-    if( WS_DATA_MODEL::GetTheInstance().m_EditMode )
+    if( DS_DATA_MODEL::GetTheInstance().m_EditMode )
+    {
         m_FullText = m_TextBase;
+    }
     else
     {
         m_FullText = aCollector ? aCollector->BuildFullText( m_TextBase ) : wxString();
@@ -575,18 +577,18 @@ void WS_DATA_ITEM_TEXT::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIE
     SetConstrainedTextSize();
     wxSize textsize;
 
-    textsize.x = KiROUND( m_ConstrainedTextSize.x * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
-    textsize.y = KiROUND( m_ConstrainedTextSize.y * WS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
+    textsize.x = KiROUND( m_ConstrainedTextSize.x * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
+    textsize.y = KiROUND( m_ConstrainedTextSize.y * DS_DATA_MODEL::GetTheInstance().m_WSunits2Iu );
 
     if( m_Bold )
         pensize = GetPenSizeForBold( std::min( textsize.x, textsize.y ) );
 
     std::map<int, STATUS_FLAGS> itemFlags;
-    WS_DRAW_ITEM_TEXT*          text = nullptr;
+    DS_DRAW_ITEM_TEXT*          text = nullptr;
 
     for( size_t i = 0; i < m_drawItems.size(); ++i )
     {
-        text = (WS_DRAW_ITEM_TEXT*) m_drawItems[ i ];
+        text = (DS_DRAW_ITEM_TEXT*) m_drawItems[ i ];
         itemFlags[ i ] = text->GetFlags();
 
         if( aCollector )
@@ -605,7 +607,7 @@ void WS_DATA_ITEM_TEXT::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIE
         if( j > 0 && !IsInsidePage( j ) )
             continue;
 
-        text = new WS_DRAW_ITEM_TEXT( this, j, m_FullText, GetStartPosUi( j ), textsize, pensize,
+        text = new DS_DRAW_ITEM_TEXT( this, j, m_FullText, GetStartPosUi( j ), textsize, pensize,
                                       m_Italic, m_Bold );
         text->SetFlags( itemFlags[ j ] );
         m_drawItems.push_back( text );
@@ -628,9 +630,9 @@ void WS_DATA_ITEM_TEXT::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIE
 }
 
 
-int WS_DATA_ITEM_TEXT::GetPenSizeUi()
+int DS_DATA_ITEM_TEXT::GetPenSizeUi()
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     if( m_LineWidth != 0 )
         return KiROUND( m_LineWidth * model.m_WSunits2Iu );
@@ -639,7 +641,7 @@ int WS_DATA_ITEM_TEXT::GetPenSizeUi()
 }
 
 
-void WS_DATA_ITEM_TEXT::IncrementLabel( int aIncr )
+void DS_DATA_ITEM_TEXT::IncrementLabel( int aIncr )
 {
     int last = m_TextBase.Len() -1;
 
@@ -658,7 +660,7 @@ void WS_DATA_ITEM_TEXT::IncrementLabel( int aIncr )
 // Replace the '\''n' sequence by EOL
 // and the sequence  '\''\' by only one '\' in m_FullText
 // if m_FullText is a multiline text (i.e.contains '\n') return true
-bool WS_DATA_ITEM_TEXT::ReplaceAntiSlashSequence()
+bool DS_DATA_ITEM_TEXT::ReplaceAntiSlashSequence()
 {
     bool multiline = false;
 
@@ -693,15 +695,15 @@ bool WS_DATA_ITEM_TEXT::ReplaceAntiSlashSequence()
 }
 
 
-void WS_DATA_ITEM_TEXT::SetConstrainedTextSize()
+void DS_DATA_ITEM_TEXT::SetConstrainedTextSize()
 {
     m_ConstrainedTextSize = m_TextSize;
 
     if( m_ConstrainedTextSize.x == 0  )
-        m_ConstrainedTextSize.x = WS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.x;
+        m_ConstrainedTextSize.x = DS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.x;
 
     if( m_ConstrainedTextSize.y == 0 )
-        m_ConstrainedTextSize.y = WS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.y;
+        m_ConstrainedTextSize.y = DS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.y;
 
     if( m_BoundingBoxSize.x || m_BoundingBoxSize.y )
     {
@@ -714,8 +716,8 @@ void WS_DATA_ITEM_TEXT::SetConstrainedTextSize()
         int linewidth = 0;
         size_micron.x = KiROUND( m_ConstrainedTextSize.x * FSCALE );
         size_micron.y = KiROUND( m_ConstrainedTextSize.y * FSCALE );
-        WS_DRAW_ITEM_TEXT dummy( WS_DRAW_ITEM_TEXT( this, 0, m_FullText, wxPoint( 0, 0 ),
-                                 size_micron, linewidth, m_Italic, m_Bold ) );
+        DS_DRAW_ITEM_TEXT dummy( DS_DRAW_ITEM_TEXT( this, 0, m_FullText, wxPoint( 0, 0 ),
+                                                    size_micron, linewidth, m_Italic, m_Bold ) );
         dummy.SetMultilineAllowed( true );
         dummy.SetHorizJustify( m_Hjustify ) ;
         dummy.SetVertJustify( m_Vjustify );
@@ -735,10 +737,10 @@ void WS_DATA_ITEM_TEXT::SetConstrainedTextSize()
 }
 
 
-void WS_DATA_ITEM_BITMAP::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
+void DS_DATA_ITEM_BITMAP::SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView )
 {
     std::map<int, STATUS_FLAGS> itemFlags;
-    WS_DRAW_ITEM_BASE*          item = nullptr;
+    DS_DRAW_ITEM_BASE*          item = nullptr;
 
     for( size_t i = 0; i < m_drawItems.size(); ++i )
     {
@@ -767,7 +769,7 @@ void WS_DATA_ITEM_BITMAP::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::V
         if( j && !IsInsidePage( j ) )
             continue;
 
-        WS_DRAW_ITEM_BITMAP* bitmap = new WS_DRAW_ITEM_BITMAP( this, j, GetStartPosUi( j ) );
+        DS_DRAW_ITEM_BITMAP* bitmap = new DS_DRAW_ITEM_BITMAP( this, j, GetStartPosUi( j ) );
 
         bitmap->SetFlags( itemFlags[ j ] );
         m_drawItems.push_back( bitmap );
@@ -781,7 +783,7 @@ void WS_DATA_ITEM_BITMAP::SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::V
 }
 
 
-int WS_DATA_ITEM_BITMAP::GetPPI() const
+int DS_DATA_ITEM_BITMAP::GetPPI() const
 {
     if( m_ImageBitmap )
         return m_ImageBitmap->GetPPI() / m_ImageBitmap->GetScale();
@@ -790,7 +792,7 @@ int WS_DATA_ITEM_BITMAP::GetPPI() const
 }
 
 
-void WS_DATA_ITEM_BITMAP::SetPPI( int aBitmapPPI )
+void DS_DATA_ITEM_BITMAP::SetPPI( int aBitmapPPI )
 {
     if( m_ImageBitmap )
         m_ImageBitmap->SetScale( (double) m_ImageBitmap->GetPPI() / aBitmapPPI );
diff --git a/common/page_layout/ws_data_model.cpp b/common/drawing_sheet/ds_data_model.cpp
similarity index 79%
rename from common/page_layout/ws_data_model.cpp
rename to common/drawing_sheet/ds_data_model.cpp
index 9d14bddffd..7b640321e9 100644
--- a/common/page_layout/ws_data_model.cpp
+++ b/common/drawing_sheet/ds_data_model.cpp
@@ -26,40 +26,39 @@
 
 /*
  * The WS_DATA_ITEM_* classes define the basic shapes of a drawing sheet (frame references
- * and title block).  The list of these items is stored in a WS_DATA_MODEL instance.
+ * and title block).  The list of these items is stored in a DS_DATA_MODEL instance.
  *
  * These items cannot be drawn or plotetd "as is".  They must be converted to WS_DRAW_*
  * types. When building the draw list:
- *   - the WS_DATA_MODEL is used to create a WS_DRAW_ITEM_LIST
+ *   - the DS_DATA_MODEL is used to create a DS_DRAW_ITEM_LIST
  *   - coordinates are converted to draw/plot coordinates.
  *   - texts are expanded if they contain format symbols.
  *   - items with m_RepeatCount > 1 are created m_RepeatCount times.
  *
- * The WS_DATA_MODEL is created only once.
+ * The DS_DATA_MODEL is created only once.
  * The WS_DRAW_ITEM_*s are created and maintained by the PlEditor, but are created each time
  * they're needed for drawing by the clients (Eeschema, Pcbnew, etc.)
  *
- * The WS_DATA_MODEL instance is created from a S expression which describes the page
+ * The DS_DATA_MODEL instance is created from a S expression which describes the page
  * layout (can be the default page layout or a custom file).  This format is also used
- * for undo/redo storage (wrapped in a WS_PROXY_UNDO_ITEM).
+ * for undo/redo storage (wrapped in a DS_PROXY_UNDO_ITEM).
  */
 
 #include <kiface_i.h>
 #include <title_block.h>
 #include <common.h>
 #include <eda_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_painter.h>
 
 
 // The layout shape used in the application
-// It is accessible by WS_DATA_MODEL::GetTheInstance()
-static WS_DATA_MODEL wksTheInstance;
-static WS_DATA_MODEL* wksAltInstance;
+// It is accessible by DS_DATA_MODEL::GetTheInstance()
+static DS_DATA_MODEL wksTheInstance;
+static DS_DATA_MODEL* wksAltInstance;
 
-WS_DATA_MODEL::WS_DATA_MODEL() :
+DS_DATA_MODEL::DS_DATA_MODEL() :
         m_WSunits2Iu( 1000.0 ),
         m_DefaultLineWidth( 0.0 ),
         m_DefaultTextSize( TB_DEFAULT_TEXTSIZE, TB_DEFAULT_TEXTSIZE ),
@@ -73,10 +72,10 @@ WS_DATA_MODEL::WS_DATA_MODEL() :
     m_bottomMargin = 10.0;  // the bottom page margin in mm
 }
 
-/* static function: returns the instance of WS_DATA_MODEL
- * used in the application
+/*
+ * static function: returns the instance of DS_DATA_MODEL used in the application
  */
-WS_DATA_MODEL& WS_DATA_MODEL::GetTheInstance()
+DS_DATA_MODEL& DS_DATA_MODEL::GetTheInstance()
 {
     if( wksAltInstance )
         return *wksAltInstance;
@@ -85,18 +84,18 @@ WS_DATA_MODEL& WS_DATA_MODEL::GetTheInstance()
 }
 
 /**
- * static function: Set an alternate instance of WS_DATA_MODEL
+ * static function: Set an alternate instance of DS_DATA_MODEL
  * mainly used in page setting dialog
  * @param aLayout = the alternate page layout.
  * if null, restore the basic page layout
  */
-void WS_DATA_MODEL::SetAltInstance( WS_DATA_MODEL* aLayout )
+void DS_DATA_MODEL::SetAltInstance( DS_DATA_MODEL* aLayout )
 {
     wksAltInstance = aLayout;
 }
 
 
-void WS_DATA_MODEL::SetupDrawEnvironment( const PAGE_INFO& aPageInfo, double aMilsToIU )
+void DS_DATA_MODEL::SetupDrawEnvironment( const PAGE_INFO& aPageInfo, double aMilsToIU )
 {
 #define MILS_TO_MM (25.4/1000)
 
@@ -116,29 +115,29 @@ void WS_DATA_MODEL::SetupDrawEnvironment( const PAGE_INFO& aPageInfo, double aMi
 }
 
 
-void WS_DATA_MODEL::ClearList()
+void DS_DATA_MODEL::ClearList()
 {
-    for( WS_DATA_ITEM* item : m_list )
+    for( DS_DATA_ITEM* item : m_list )
         delete item;
 
     m_list.clear();
 }
 
 
-void WS_DATA_MODEL::Append( WS_DATA_ITEM* aItem )
+void DS_DATA_MODEL::Append( DS_DATA_ITEM* aItem )
 {
     m_list.push_back( aItem );
 }
 
 
-void WS_DATA_MODEL::Remove( WS_DATA_ITEM* aItem )
+void DS_DATA_MODEL::Remove( DS_DATA_ITEM* aItem )
 {
     auto newEnd = std::remove( m_list.begin(), m_list.end(), aItem );
     m_list.erase( newEnd, m_list.end() );
 }
 
 
-int WS_DATA_MODEL::GetItemIndex( WS_DATA_ITEM* aItem ) const
+int DS_DATA_MODEL::GetItemIndex( DS_DATA_ITEM* aItem ) const
 {
     unsigned idx = 0;
     while( idx < m_list.size() )
@@ -154,7 +153,7 @@ int WS_DATA_MODEL::GetItemIndex( WS_DATA_ITEM* aItem ) const
 
 /* return the item from its index aIdx, or NULL if does not exist
  */
-WS_DATA_ITEM* WS_DATA_MODEL::GetItem( unsigned aIdx ) const
+DS_DATA_ITEM* DS_DATA_MODEL::GetItem( unsigned aIdx ) const
 {
     if( aIdx < m_list.size() )
         return m_list[aIdx];
@@ -163,7 +162,7 @@ WS_DATA_ITEM* WS_DATA_MODEL::GetItem( unsigned aIdx ) const
 }
 
 
-const wxString WS_DATA_MODEL::MakeShortFileName( const wxString& aFullFileName,
+const wxString DS_DATA_MODEL::MakeShortFileName( const wxString& aFullFileName,
                                                  const wxString& aProjectPath  )
 {
     wxString    shortFileName = aFullFileName;
@@ -192,7 +191,7 @@ const wxString WS_DATA_MODEL::MakeShortFileName( const wxString& aFullFileName,
 }
 
 
-const wxString WS_DATA_MODEL::MakeFullFileName( const wxString& aShortFileName,
+const wxString DS_DATA_MODEL::MakeFullFileName( const wxString& aShortFileName,
                                                 const wxString& aProjectPath )
 {
     wxString fullFileName = ExpandEnvVarSubstitutions( aShortFileName, nullptr );
diff --git a/common/page_layout/ws_data_model_io.cpp b/common/drawing_sheet/ds_data_model_io.cpp
similarity index 79%
rename from common/page_layout/ws_data_model_io.cpp
rename to common/drawing_sheet/ds_data_model_io.cpp
index dab5bc164d..0ce3da6674 100644
--- a/common/page_layout/ws_data_model_io.cpp
+++ b/common/drawing_sheet/ds_data_model_io.cpp
@@ -1,9 +1,3 @@
-/**
- * @file page_layout_writer.cpp
- * @brief write an S expression of description of graphic items and texts
- * to build a title block and page layout
- */
-
 /*
  * This program source code file is part of KiCad, a free EDA CAD application.
  *
@@ -33,12 +27,12 @@
 #include <eda_item.h>
 #include <locale_io.h>
 #include <macros.h>
-#include <page_layout/ws_painter.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_painter.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <math/vector2d.h>
-#include <page_layout/page_layout_reader_lexer.h>
+#include <drawing_sheet/drawing_sheet_reader_lexer.h>
 #include <convert_to_biu.h>
 
 #include <wx/msgdlg.h>
@@ -50,46 +44,45 @@ using namespace TB_READER_T;
 // A helper function to write tokens:
 static const char* getTokenName( T aTok )
 {
-    return PAGE_LAYOUT_READER_LEXER::TokenName( aTok );
+    return DRAWING_SHEET_READER_LEXER::TokenName( aTok );
 }
 
 // A basic helper class to write a page layout description
-// Not used alone, a file writer or a string writer should be
-// derived to use it
-// Therefore the constructor is protected
-class WS_DATA_MODEL_IO
+// Not used alone, a file writer or a string writer should be derived to use it.
+// Therefore the constructor is protected.
+class DS_DATA_MODEL_IO
 {
 protected:
     OUTPUTFORMATTER* m_out;
 
-    WS_DATA_MODEL_IO() { m_out = NULL; }
-    virtual ~WS_DATA_MODEL_IO() {}
+    DS_DATA_MODEL_IO() { m_out = NULL; }
+    virtual ~DS_DATA_MODEL_IO() {}
 
 public:
-    void Format( WS_DATA_MODEL* aModel ) const;
+    void Format( DS_DATA_MODEL* aModel ) const;
 
-    void Format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int aNestLevel ) const;
+    void Format( DS_DATA_MODEL* aModel, DS_DATA_ITEM* aItem, int aNestLevel ) const;
 
 private:
-    void format( WS_DATA_ITEM_TEXT* aItem, int aNestLevel ) const;
-    void format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int aNestLevel ) const;
-    void format( WS_DATA_ITEM_POLYGONS* aItem, int aNestLevel )
+    void format( DS_DATA_ITEM_TEXT* aItem, int aNestLevel ) const;
+    void format( DS_DATA_MODEL* aModel, DS_DATA_ITEM* aItem, int aNestLevel ) const;
+    void format( DS_DATA_ITEM_POLYGONS* aItem, int aNestLevel )
                  const;
-    void format( WS_DATA_ITEM_BITMAP* aItem, int aNestLevel ) const;
+    void format( DS_DATA_ITEM_BITMAP* aItem, int aNestLevel ) const;
     void formatCoordinate( const char * aToken, POINT_COORD & aCoord ) const;
-    void formatRepeatParameters( WS_DATA_ITEM* aItem ) const;
-    void formatOptions( WS_DATA_ITEM* aItem ) const;
+    void formatRepeatParameters( DS_DATA_ITEM* aItem ) const;
+    void formatOptions( DS_DATA_ITEM* aItem ) const;
 };
 
 
 // A helper class to write a page layout description to a file
-class WS_DATA_MODEL_FILEIO: public WS_DATA_MODEL_IO
+class DS_DATA_MODEL_FILEIO : public DS_DATA_MODEL_IO
 {
     FILE_OUTPUTFORMATTER * m_fileout;
 
 public:
-    WS_DATA_MODEL_FILEIO( const wxString& aFilename ):
-        WS_DATA_MODEL_IO()
+    DS_DATA_MODEL_FILEIO( const wxString& aFilename ) :
+            DS_DATA_MODEL_IO()
     {
         try
         {
@@ -102,7 +95,7 @@ public:
         }
     }
 
-    ~WS_DATA_MODEL_FILEIO()
+    ~DS_DATA_MODEL_FILEIO()
     {
         delete m_fileout;
     }
@@ -110,14 +103,14 @@ public:
 
 
 // A helper class to write a page layout description to a string
-class WS_DATA_MODEL_STRINGIO: public WS_DATA_MODEL_IO
+class DS_DATA_MODEL_STRINGIO : public DS_DATA_MODEL_IO
 {
     STRING_FORMATTER * m_writer;
     wxString & m_output;
 
 public:
-    WS_DATA_MODEL_STRINGIO( wxString& aOutputString ):
-        WS_DATA_MODEL_IO(), m_output( aOutputString )
+    DS_DATA_MODEL_STRINGIO( wxString& aOutputString ) :
+            DS_DATA_MODEL_IO(), m_output( aOutputString )
     {
         try
         {
@@ -130,7 +123,7 @@ public:
         }
     }
 
-    ~WS_DATA_MODEL_STRINGIO()
+    ~DS_DATA_MODEL_STRINGIO()
     {
         m_output = FROM_UTF8( m_writer->GetString().c_str() );
         delete m_writer;
@@ -141,52 +134,52 @@ public:
 /*
  * Save the description in a file
  */
-void WS_DATA_MODEL::Save( const wxString& aFullFileName )
+void DS_DATA_MODEL::Save( const wxString& aFullFileName )
 {
-    WS_DATA_MODEL_FILEIO writer( aFullFileName );
+    DS_DATA_MODEL_FILEIO writer( aFullFileName );
     writer.Format( this );
 }
 
 
 /* Save the description in a buffer
  */
-void WS_DATA_MODEL::SaveInString( wxString& aOutputString )
+void DS_DATA_MODEL::SaveInString( wxString& aOutputString )
 {
-    WS_DATA_MODEL_STRINGIO writer( aOutputString );
+    DS_DATA_MODEL_STRINGIO writer( aOutputString );
     writer.Format( this );
 }
 
 
-void WS_DATA_MODEL::SaveInString( std::vector<WS_DATA_ITEM*> aItemsList, wxString& aOutputString )
+void DS_DATA_MODEL::SaveInString( std::vector<DS_DATA_ITEM*> aItemsList, wxString& aOutputString )
 {
-    WS_DATA_MODEL_STRINGIO writer( aOutputString );
+    DS_DATA_MODEL_STRINGIO writer( aOutputString );
 
     LOCALE_IO   toggle;     // switch on/off the locale "C" notation
 
-    for( WS_DATA_ITEM* item : aItemsList )
+    for( DS_DATA_ITEM* item : aItemsList )
         writer.Format( this, item, 0 );
 }
 
 
-void WS_DATA_MODEL_IO::Format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int aNestLevel ) const
+void DS_DATA_MODEL_IO::Format( DS_DATA_MODEL* aModel, DS_DATA_ITEM* aItem, int aNestLevel ) const
 {
     switch( aItem->GetType() )
     {
-    case WS_DATA_ITEM::WS_TEXT:
-        format( (WS_DATA_ITEM_TEXT*) aItem, aNestLevel );
+    case DS_DATA_ITEM::DS_TEXT:
+        format( (DS_DATA_ITEM_TEXT*) aItem, aNestLevel );
         break;
 
-    case WS_DATA_ITEM::WS_SEGMENT:
-    case WS_DATA_ITEM::WS_RECT:
+    case DS_DATA_ITEM::DS_SEGMENT:
+    case DS_DATA_ITEM::DS_RECT:
         format( aModel, aItem, aNestLevel );
         break;
 
-    case WS_DATA_ITEM::WS_POLYPOLYGON:
-        format( (WS_DATA_ITEM_POLYGONS*) aItem, aNestLevel );
+    case DS_DATA_ITEM::DS_POLYPOLYGON:
+        format( (DS_DATA_ITEM_POLYGONS*) aItem, aNestLevel );
         break;
 
-    case WS_DATA_ITEM::WS_BITMAP:
-        format( (WS_DATA_ITEM_BITMAP*) aItem, aNestLevel );
+    case DS_DATA_ITEM::DS_BITMAP:
+        format( (DS_DATA_ITEM_BITMAP*) aItem, aNestLevel );
         break;
 
     default:
@@ -195,11 +188,11 @@ void WS_DATA_MODEL_IO::Format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int a
 }
 
 
-void WS_DATA_MODEL_IO::Format( WS_DATA_MODEL* aPageLayout ) const
+void DS_DATA_MODEL_IO::Format( DS_DATA_MODEL* aPageLayout ) const
 {
     LOCALE_IO   toggle;     // switch on/off the locale "C" notation
 
-    m_out->Print( 0, "(page_layout\n" );
+    m_out->Print( 0, "(drawing_sheet\n" );
 
     // Setup
     int nestLevel = 1;
@@ -228,7 +221,7 @@ void WS_DATA_MODEL_IO::Format( WS_DATA_MODEL* aPageLayout ) const
     // Save the graphical items on the page layout
     for( unsigned ii = 0; ii < aPageLayout->GetCount(); ii++ )
     {
-        WS_DATA_ITEM* item = aPageLayout->GetItem( ii );
+        DS_DATA_ITEM* item = aPageLayout->GetItem( ii );
         Format( aPageLayout, item, nestLevel );
     }
 
@@ -236,7 +229,7 @@ void WS_DATA_MODEL_IO::Format( WS_DATA_MODEL* aPageLayout ) const
 }
 
 
-void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_TEXT* aItem, int aNestLevel ) const
+void DS_DATA_MODEL_IO::format( DS_DATA_ITEM_TEXT* aItem, int aNestLevel ) const
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_tbtext ) );
     m_out->Print( 0, " %s", m_out->Quotew( aItem->m_TextBase ).c_str() );
@@ -316,9 +309,9 @@ void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_TEXT* aItem, int aNestLevel ) const
     m_out->Print( 0, ")\n" );
 }
 
-void WS_DATA_MODEL_IO::format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int aNestLevel ) const
+void DS_DATA_MODEL_IO::format( DS_DATA_MODEL* aModel, DS_DATA_ITEM* aItem, int aNestLevel ) const
 {
-    if( aItem->GetType() == WS_DATA_ITEM::WS_RECT )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_RECT )
         m_out->Print( aNestLevel, "(%s", getTokenName( T_rect ) );
     else
         m_out->Print( aNestLevel, "(%s", getTokenName( T_line ) );
@@ -339,7 +332,7 @@ void WS_DATA_MODEL_IO::format( WS_DATA_MODEL* aModel, WS_DATA_ITEM* aItem, int a
 }
 
 
-void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_POLYGONS* aItem, int aNestLevel ) const
+void DS_DATA_MODEL_IO::format( DS_DATA_ITEM_POLYGONS* aItem, int aNestLevel ) const
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_polygon ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -389,7 +382,7 @@ void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_POLYGONS* aItem, int aNestLevel ) co
 }
 
 
-void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_BITMAP* aItem, int aNestLevel ) const
+void DS_DATA_MODEL_IO::format( DS_DATA_ITEM_BITMAP* aItem, int aNestLevel ) const
 {
     m_out->Print( aNestLevel, "(%s", getTokenName( T_bitmap ) );
     m_out->Print( 0, " (%s %s)", getTokenName( T_name ),
@@ -417,8 +410,8 @@ void WS_DATA_MODEL_IO::format( WS_DATA_ITEM_BITMAP* aItem, int aNestLevel ) cons
 }
 
 
-void WS_DATA_MODEL_IO::formatCoordinate( const char * aToken,
-                                            POINT_COORD & aCoord ) const
+void DS_DATA_MODEL_IO::formatCoordinate( const char * aToken,
+                                         POINT_COORD & aCoord ) const
 {
     m_out->Print( 0, " (%s %s %s", aToken,
                   double2Str( aCoord.m_Pos.x ).c_str(),
@@ -436,7 +429,7 @@ void WS_DATA_MODEL_IO::formatCoordinate( const char * aToken,
 }
 
 
-void WS_DATA_MODEL_IO::formatRepeatParameters( WS_DATA_ITEM* aItem ) const
+void DS_DATA_MODEL_IO::formatRepeatParameters( DS_DATA_ITEM* aItem ) const
 {
     if( aItem->m_RepeatCount <= 1 )
         return;
@@ -449,12 +442,12 @@ void WS_DATA_MODEL_IO::formatRepeatParameters( WS_DATA_ITEM* aItem ) const
     if( aItem->m_IncrementVector.y )
         m_out->Print( 0, " (incry %s)", double2Str( aItem->m_IncrementVector.y ).c_str() );
 
-    if( aItem->m_IncrementLabel != 1 && aItem->GetType() == WS_DATA_ITEM::WS_TEXT )
+    if( aItem->m_IncrementLabel != 1 && aItem->GetType() == DS_DATA_ITEM::DS_TEXT )
         m_out->Print( 0, " (incrlabel %d)", aItem->m_IncrementLabel );
 }
 
 
-void WS_DATA_MODEL_IO::formatOptions( WS_DATA_ITEM* aItem ) const
+void DS_DATA_MODEL_IO::formatOptions( DS_DATA_ITEM* aItem ) const
 {
     if( aItem->GetPage1Option() == FIRST_PAGE_ONLY )
         m_out->Print( 0, " (%s %s)", getTokenName( T_option ), getTokenName(T_page1only ) );
diff --git a/common/page_layout/ws_draw_item.cpp b/common/drawing_sheet/ds_draw_item.cpp
similarity index 77%
rename from common/page_layout/ws_draw_item.cpp
rename to common/drawing_sheet/ds_draw_item.cpp
index 097b2de1f9..d57e8bcbcc 100644
--- a/common/page_layout/ws_draw_item.cpp
+++ b/common/drawing_sheet/ds_draw_item.cpp
@@ -24,36 +24,35 @@
  */
 
 /*
- * the class WS_DATA_ITEM (and WS_DATA_ITEM_TEXT) defines
+ * the class DS_DATA_ITEM (and DS_DATA_ITEM_TEXT) defines
  * a basic shape of a page layout ( frame references and title block )
  * Basic shapes are line, rect and texts
- * the WS_DATA_ITEM coordinates units is the mm, and are relative to
+ * the DS_DATA_ITEM coordinates units is the mm, and are relative to
  * one of 4 page corners.
  *
  * These items cannot be drawn or plot "as this". they should be converted
- * to a "draw list" (WS_DRAW_ITEM_BASE and derived items)
+ * to a "draw list" (DS_DRAW_ITEM_BASE and derived items)
 
- * The list of these items is stored in a WS_DATA_MODEL instance.
+ * The list of these items is stored in a DS_DATA_MODEL instance.
  *
  * When building the draw list:
- * the WS_DATA_MODEL is used to create a WS_DRAW_ITEM_LIST
+ * the DS_DATA_MODEL is used to create a DS_DRAW_ITEM_LIST
  *  coordinates are converted to draw/plot coordinates.
  *  texts are expanded if they contain format symbols.
  *  Items with m_RepeatCount > 1 are created m_RepeatCount times
  *
- * the WS_DATA_MODEL is created only once.
- * the WS_DRAW_ITEM_LIST is created each time the page layout is plotted/drawn
+ * the DS_DATA_MODEL is created only once.
+ * the DS_DRAW_ITEM_LIST is created each time the page layout is plotted/drawn
  *
- * the WS_DATA_MODEL instance is created from a S expression which
+ * the DS_DATA_MODEL instance is created from a S expression which
  * describes the page layout (can be the default page layout or a custom file).
  */
 
 #include <eda_rect.h>
 #include <eda_draw_frame.h>
-#include <fill_type.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <base_units.h>
 #include <page_info.h>
 #include <layers_id_colors_and_visibility.h>
@@ -63,13 +62,13 @@
 
 // ============================ BASE CLASS ==============================
 
-void WS_DRAW_ITEM_BASE::ViewGetLayers( int aLayers[], int& aCount ) const
+void DS_DRAW_ITEM_BASE::ViewGetLayers( int aLayers[], int& aCount ) const
 {
     aCount = 1;
 
-    WS_DATA_ITEM* dataItem = GetPeer();
+    DS_DATA_ITEM* dataItem = GetPeer();
 
-    if( !dataItem )     // No peer: this item is like a WS_DRAW_ITEM_PAGE
+    if( !dataItem )     // No peer: this item is like a DS_DRAW_ITEM_PAGE
     {
         aLayers[0] = LAYER_DRAWINGSHEET;
         return;
@@ -85,7 +84,7 @@ void WS_DRAW_ITEM_BASE::ViewGetLayers( int aLayers[], int& aCount ) const
 
 
 // A generic HitTest that can be used by some, but not all, sub-classes.
-bool WS_DRAW_ITEM_BASE::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const
+bool DS_DRAW_ITEM_BASE::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const
 {
     EDA_RECT sel = aRect;
 
@@ -99,10 +98,10 @@ bool WS_DRAW_ITEM_BASE::HitTest( const EDA_RECT& aRect, bool aContained, int aAc
 }
 
 
-void WS_DRAW_ITEM_BASE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList )
+void DS_DRAW_ITEM_BASE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList )
 {
     wxString      msg;
-    WS_DATA_ITEM* dataItem = GetPeer();
+    DS_DATA_ITEM* dataItem = GetPeer();
 
     if( dataItem == nullptr )   // Is only a pure graphic item used in drawing sheet editor to
                                 // handle the page limits
@@ -110,24 +109,24 @@ void WS_DRAW_ITEM_BASE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS
 
     switch( dataItem->GetType() )
     {
-    case WS_DATA_ITEM::WS_SEGMENT:
+    case DS_DATA_ITEM::DS_SEGMENT:
         aList.push_back( MSG_PANEL_ITEM( _( "Line" ), msg ) );
         break;
 
-    case WS_DATA_ITEM::WS_RECT:
+    case DS_DATA_ITEM::DS_RECT:
         aList.push_back( MSG_PANEL_ITEM( _( "Rectangle" ), msg ) );
         break;
 
-    case WS_DATA_ITEM::WS_TEXT:
-        msg = static_cast<WS_DRAW_ITEM_TEXT*>( this )->GetShownText();
+    case DS_DATA_ITEM::DS_TEXT:
+        msg = static_cast<DS_DRAW_ITEM_TEXT*>( this )->GetShownText();
         aList.push_back( MSG_PANEL_ITEM( _( "Text" ), msg ) );
         break;
 
-    case WS_DATA_ITEM::WS_POLYPOLYGON:
+    case DS_DATA_ITEM::DS_POLYPOLYGON:
         aList.push_back( MSG_PANEL_ITEM( _( "Imported Shape" ), msg ) );
         break;
 
-    case WS_DATA_ITEM::WS_BITMAP:
+    case DS_DATA_ITEM::DS_BITMAP:
         aList.push_back( MSG_PANEL_ITEM( _( "Image" ), msg ) );
         break;
     }
@@ -159,45 +158,46 @@ void WS_DRAW_ITEM_BASE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS
 
 // ============================ TEXT ==============================
 
-void WS_DRAW_ITEM_TEXT::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
+void DS_DRAW_ITEM_TEXT::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
 {
     Print( aSettings, aOffset, aSettings->GetLayerColor( LAYER_DRAWINGSHEET ), FILLED );
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_TEXT::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_TEXT::GetBoundingBox() const
 {
     return EDA_TEXT::GetTextBox();
 }
 
 
-bool WS_DRAW_ITEM_TEXT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
+bool DS_DRAW_ITEM_TEXT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 {
     return EDA_TEXT::TextHitTest( aPosition, aAccuracy );
 }
 
 
-bool WS_DRAW_ITEM_TEXT::HitTest( const EDA_RECT& aRect, bool aContains, int aAccuracy ) const
+bool DS_DRAW_ITEM_TEXT::HitTest( const EDA_RECT& aRect, bool aContains, int aAccuracy ) const
 {
     return EDA_TEXT::TextHitTest( aRect, aContains, aAccuracy );
 }
 
 
-wxString WS_DRAW_ITEM_TEXT::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_TEXT::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return wxString::Format( _( "Text '%s'" ),
                              GetShownText() );
 }
 
 
-void WS_DRAW_ITEM_TEXT::SetTextAngle( double aAngle )
+void DS_DRAW_ITEM_TEXT::SetTextAngle( double aAngle )
 {
     EDA_TEXT::SetTextAngle( NormalizeAngle360Min( aAngle ) );
 }
 
 // ============================ POLYGON =================================
 
-void WS_DRAW_ITEM_POLYPOLYGONS::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
+void DS_DRAW_ITEM_POLYPOLYGONS::PrintWsItem( const RENDER_SETTINGS* aSettings,
+                                             const wxPoint& aOffset )
 {
     wxDC*   DC = aSettings->GetPrintDC();
     COLOR4D color = aSettings->GetLayerColor( LAYER_DRAWINGSHEET );
@@ -222,7 +222,7 @@ void WS_DRAW_ITEM_POLYPOLYGONS::PrintWsItem( const RENDER_SETTINGS* aSettings, c
 }
 
 
-void WS_DRAW_ITEM_POLYPOLYGONS::SetPosition( const wxPoint& aPos )
+void DS_DRAW_ITEM_POLYPOLYGONS::SetPosition( const wxPoint& aPos )
 {
     // Note: m_pos is the anchor point of the shape.
     wxPoint move_vect = aPos - m_pos;
@@ -233,7 +233,7 @@ void WS_DRAW_ITEM_POLYPOLYGONS::SetPosition( const wxPoint& aPos )
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_POLYPOLYGONS::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_POLYPOLYGONS::GetBoundingBox() const
 {
     EDA_RECT rect;
     BOX2I box = m_Polygons.BBox();
@@ -247,13 +247,13 @@ const EDA_RECT WS_DRAW_ITEM_POLYPOLYGONS::GetBoundingBox() const
 }
 
 
-bool WS_DRAW_ITEM_POLYPOLYGONS::HitTest( const wxPoint& aPosition, int aAccuracy ) const
+bool DS_DRAW_ITEM_POLYPOLYGONS::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 {
     return m_Polygons.Collide( aPosition, aAccuracy );
 }
 
 
-bool WS_DRAW_ITEM_POLYPOLYGONS::HitTest( const EDA_RECT& aRect, bool aContained,
+bool DS_DRAW_ITEM_POLYPOLYGONS::HitTest( const EDA_RECT& aRect, bool aContained,
                                          int aAccuracy ) const
 {
     EDA_RECT sel = aRect;
@@ -293,7 +293,7 @@ bool WS_DRAW_ITEM_POLYPOLYGONS::HitTest( const EDA_RECT& aRect, bool aContained,
 }
 
 
-wxString WS_DRAW_ITEM_POLYPOLYGONS::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_POLYPOLYGONS::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return wxString::Format( _( "Imported Shape" ) );
 }
@@ -301,7 +301,7 @@ wxString WS_DRAW_ITEM_POLYPOLYGONS::GetSelectMenuText( EDA_UNITS aUnits ) const
 
 // ============================ RECT ==============================
 
-void WS_DRAW_ITEM_RECT::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
+void DS_DRAW_ITEM_RECT::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
 {
     wxDC*   DC = aSettings->GetPrintDC();
     COLOR4D color = aSettings->GetLayerColor( LAYER_DRAWINGSHEET );
@@ -312,13 +312,13 @@ void WS_DRAW_ITEM_RECT::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxP
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_RECT::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_RECT::GetBoundingBox() const
 {
     return EDA_RECT( GetStart(), wxSize( GetEnd().x - GetStart().x, GetEnd().y - GetStart().y ) );
 }
 
 
-bool WS_DRAW_ITEM_RECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
+bool DS_DRAW_ITEM_RECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 {
     int dist = aAccuracy + ( GetPenWidth() / 2 );
     wxPoint start = GetStart();
@@ -352,7 +352,7 @@ bool WS_DRAW_ITEM_RECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 }
 
 
-bool WS_DRAW_ITEM_RECT::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const
+bool DS_DRAW_ITEM_RECT::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const
 {
     EDA_RECT sel = aRect;
 
@@ -363,7 +363,7 @@ bool WS_DRAW_ITEM_RECT::HitTest( const EDA_RECT& aRect, bool aContained, int aAc
         return sel.Contains( GetBoundingBox() );
 
     // For greedy we need to check each side of the rect as we're pretty much always inside the
-    // rect which defines the drawing sheet frame.
+    // rect which defines the drawing-sheet frame.
     EDA_RECT side = GetBoundingBox();
     side.SetHeight( 0 );
 
@@ -390,7 +390,7 @@ bool WS_DRAW_ITEM_RECT::HitTest( const EDA_RECT& aRect, bool aContained, int aAc
 }
 
 
-wxString WS_DRAW_ITEM_RECT::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_RECT::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return wxString::Format( _( "Rectangle, width %s height %s" ),
                              MessageTextFromValue( aUnits, std::abs( GetStart().x - GetEnd().x ) ),
@@ -400,7 +400,7 @@ wxString WS_DRAW_ITEM_RECT::GetSelectMenuText( EDA_UNITS aUnits ) const
 
 // ============================ LINE ==============================
 
-void WS_DRAW_ITEM_LINE::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
+void DS_DRAW_ITEM_LINE::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
 {
     wxDC*   DC = aSettings->GetPrintDC();
     COLOR4D color = aSettings->GetLayerColor( LAYER_DRAWINGSHEET );
@@ -410,20 +410,20 @@ void WS_DRAW_ITEM_LINE::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxP
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_LINE::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_LINE::GetBoundingBox() const
 {
     return EDA_RECT( GetStart(), wxSize( GetEnd().x - GetStart().x, GetEnd().y - GetStart().y ) );
 }
 
 
-bool WS_DRAW_ITEM_LINE::HitTest( const wxPoint& aPosition, int aAccuracy ) const
+bool DS_DRAW_ITEM_LINE::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 {
     int mindist = aAccuracy + ( GetPenWidth() / 2 ) + 1;
     return TestSegmentHit( aPosition, GetStart(), GetEnd(), mindist );
 }
 
 
-wxString WS_DRAW_ITEM_LINE::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_LINE::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return wxString::Format( _( "Line, length %s" ),
                              MessageTextFromValue( aUnits, EuclideanNorm( GetStart() - GetEnd() ) ) );
@@ -432,9 +432,9 @@ wxString WS_DRAW_ITEM_LINE::GetSelectMenuText( EDA_UNITS aUnits ) const
 
 // ============== BITMAP ================
 
-void WS_DRAW_ITEM_BITMAP::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
+void DS_DRAW_ITEM_BITMAP::PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset )
 {
-    WS_DATA_ITEM_BITMAP* bitmap = (WS_DATA_ITEM_BITMAP*) GetPeer();
+    DS_DATA_ITEM_BITMAP* bitmap = (DS_DATA_ITEM_BITMAP*) GetPeer();
 
     if( !bitmap->m_ImageBitmap )
         return;
@@ -443,9 +443,9 @@ void WS_DRAW_ITEM_BITMAP::PrintWsItem( const RENDER_SETTINGS* aSettings, const w
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_BITMAP::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_BITMAP::GetBoundingBox() const
 {
-    auto*    bitmap = static_cast<const WS_DATA_ITEM_BITMAP*>( m_peer );
+    auto*    bitmap = static_cast<const DS_DATA_ITEM_BITMAP*>( m_peer );
     wxSize bm_size = bitmap->m_ImageBitmap->GetSize();
 
     EDA_RECT bbox;
@@ -456,7 +456,7 @@ const EDA_RECT WS_DRAW_ITEM_BITMAP::GetBoundingBox() const
 }
 
 
-bool WS_DRAW_ITEM_BITMAP::HitTest( const wxPoint& aPosition, int aAccuracy ) const
+bool DS_DRAW_ITEM_BITMAP::HitTest( const wxPoint& aPosition, int aAccuracy ) const
 {
     EDA_RECT bbox = GetBoundingBox();
     bbox.Inflate( aAccuracy );
@@ -465,25 +465,25 @@ bool WS_DRAW_ITEM_BITMAP::HitTest( const wxPoint& aPosition, int aAccuracy ) con
 }
 
 
-bool WS_DRAW_ITEM_BITMAP::HitTest( const EDA_RECT& aRect, bool aContains, int aAccuracy ) const
+bool DS_DRAW_ITEM_BITMAP::HitTest( const EDA_RECT& aRect, bool aContains, int aAccuracy ) const
 {
-    return WS_DRAW_ITEM_BASE::HitTest( aRect, aContains, aAccuracy );
+    return DS_DRAW_ITEM_BASE::HitTest( aRect, aContains, aAccuracy );
 }
 
 
-wxString WS_DRAW_ITEM_BITMAP::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_BITMAP::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return _( "Image" );
 }
 
 
-wxString WS_DRAW_ITEM_PAGE::GetSelectMenuText( EDA_UNITS aUnits ) const
+wxString DS_DRAW_ITEM_PAGE::GetSelectMenuText( EDA_UNITS aUnits ) const
 {
     return _( "Page Limits" );
 }
 
 
-const EDA_RECT WS_DRAW_ITEM_PAGE::GetBoundingBox() const
+const EDA_RECT DS_DRAW_ITEM_PAGE::GetBoundingBox() const
 {
     EDA_RECT dummy;
 
@@ -494,23 +494,23 @@ const EDA_RECT WS_DRAW_ITEM_PAGE::GetBoundingBox() const
 }
 
 
-// ====================== WS_DRAW_ITEM_LIST ==============================
+// ====================== DS_DRAW_ITEM_LIST ==============================
 
-void WS_DRAW_ITEM_LIST::BuildDrawItemsList( const PAGE_INFO& aPageInfo,
+void DS_DRAW_ITEM_LIST::BuildDrawItemsList( const PAGE_INFO& aPageInfo,
                                             const TITLE_BLOCK& aTitleBlock )
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     m_titleBlock = &aTitleBlock;
     m_paperFormat = &aPageInfo.GetType();
 
     // Build the basic layout shape, if the layout list is empty
     if( model.GetCount() == 0 && !model.VoidListAllowed() )
-        model.SetPageLayout();
+        model.LoadDrawingSheet();
 
     model.SetupDrawEnvironment( aPageInfo, m_milsToIu );
 
-    for( WS_DATA_ITEM* wsItem : model.GetItems() )
+    for( DS_DATA_ITEM* wsItem : model.GetItems() )
     {
         // Generate it only if the page option allows this
         if( wsItem->GetPage1Option() == FIRST_PAGE_ONLY && !m_isFirstPage )
@@ -529,11 +529,11 @@ void WS_DRAW_ITEM_LIST::BuildDrawItemsList( const PAGE_INFO& aPageInfo,
  * The selected items are drawn after (usually 0 or 1)
  * to be sure they are seen, even for overlapping items
  */
-void WS_DRAW_ITEM_LIST::Print( const RENDER_SETTINGS* aSettings )
+void DS_DRAW_ITEM_LIST::Print( const RENDER_SETTINGS* aSettings )
 {
-    std::vector<WS_DRAW_ITEM_BASE*> second_items;
+    std::vector<DS_DRAW_ITEM_BASE*> second_items;
 
-    for( WS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() )
+    for( DS_DRAW_ITEM_BASE* item = GetFirst(); item; item = GetNext() )
     {
         if( item->Type() == WSG_BITMAP_T )
             item->PrintWsItem( aSettings );
diff --git a/common/page_layout/ws_painter.cpp b/common/drawing_sheet/ds_painter.cpp
similarity index 87%
rename from common/page_layout/ws_painter.cpp
rename to common/drawing_sheet/ds_painter.cpp
index d5c6f5aef0..4157999768 100644
--- a/common/page_layout/ws_painter.cpp
+++ b/common/drawing_sheet/ds_painter.cpp
@@ -29,11 +29,11 @@
 #include <title_block.h>
 #include <build_version.h>
 #include <settings/color_settings.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_draw_item.h>
 #include <gal/graphics_abstraction_layer.h>
 
-#include <page_layout/ws_painter.h>
-#include <page_layout/ws_data_item.h>
+#include <drawing_sheet/ds_painter.h>
+#include <drawing_sheet/ds_data_item.h>
 
 #include <wx/app.h>
 
@@ -41,7 +41,7 @@ using namespace KIGFX;
 
 static const wxString productName = wxT( "KiCad E.D.A.  " );
 
-WS_RENDER_SETTINGS::WS_RENDER_SETTINGS()
+DS_RENDER_SETTINGS::DS_RENDER_SETTINGS()
 {
     m_backgroundColor = COLOR4D( 1.0, 1.0, 1.0, 1.0 );
     m_normalColor =     RED;
@@ -53,7 +53,7 @@ WS_RENDER_SETTINGS::WS_RENDER_SETTINGS()
 }
 
 
-void WS_RENDER_SETTINGS::LoadColors( const COLOR_SETTINGS* aSettings )
+void DS_RENDER_SETTINGS::LoadColors( const COLOR_SETTINGS* aSettings )
 {
     for( int layer = SCH_LAYER_ID_START; layer < SCH_LAYER_ID_END; layer ++)
         m_layerColors[ layer ] = aSettings->GetColor( layer );
@@ -67,7 +67,7 @@ void WS_RENDER_SETTINGS::LoadColors( const COLOR_SETTINGS* aSettings )
 }
 
 
-COLOR4D WS_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) const
+COLOR4D DS_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) const
 {
     const EDA_ITEM* item = dynamic_cast<const EDA_ITEM*>( aItem );
 
@@ -85,7 +85,7 @@ COLOR4D WS_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) const
 }
 
 
-void WS_DRAW_ITEM_LIST::GetTextVars( wxArrayString* aVars )
+void DS_DRAW_ITEM_LIST::GetTextVars( wxArrayString* aVars )
 {
     aVars->push_back( wxT( "KICAD_VERSION" ) );
     aVars->push_back( wxT( "#" ) );
@@ -100,7 +100,7 @@ void WS_DRAW_ITEM_LIST::GetTextVars( wxArrayString* aVars )
 
 // returns the full text corresponding to the aTextbase,
 // after replacing format symbols by the corresponding value
-wxString WS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
+wxString DS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
 {
     std::function<bool( wxString* )> wsResolver =
             [ this ]( wxString* token ) -> bool
@@ -169,7 +169,7 @@ wxString WS_DRAW_ITEM_LIST::BuildFullText( const wxString& aTextbase )
 }
 
 
-bool KIGFX::WS_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
+bool KIGFX::DS_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
 {
     auto item = dynamic_cast<const EDA_ITEM*>( aItem );
 
@@ -178,12 +178,12 @@ bool KIGFX::WS_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
 
     switch( item->Type() )
     {
-    case WSG_LINE_T:   draw( (WS_DRAW_ITEM_LINE*) item, aLayer );         break;
-    case WSG_POLY_T:   draw( (WS_DRAW_ITEM_POLYPOLYGONS*) item, aLayer );      break;
-    case WSG_RECT_T:   draw( (WS_DRAW_ITEM_RECT*) item, aLayer );         break;
-    case WSG_TEXT_T:   draw( (WS_DRAW_ITEM_TEXT*) item, aLayer );         break;
-    case WSG_BITMAP_T: draw( (WS_DRAW_ITEM_BITMAP*) item, aLayer );       break;
-    case WSG_PAGE_T:   draw( (WS_DRAW_ITEM_PAGE*) item, aLayer );       break;
+    case WSG_LINE_T:   draw( (DS_DRAW_ITEM_LINE*) item, aLayer );         break;
+    case WSG_POLY_T:   draw( (DS_DRAW_ITEM_POLYPOLYGONS*) item, aLayer ); break;
+    case WSG_RECT_T:   draw( (DS_DRAW_ITEM_RECT*) item, aLayer );         break;
+    case WSG_TEXT_T:   draw( (DS_DRAW_ITEM_TEXT*) item, aLayer );         break;
+    case WSG_BITMAP_T: draw( (DS_DRAW_ITEM_BITMAP*) item, aLayer );       break;
+    case WSG_PAGE_T:   draw( (DS_DRAW_ITEM_PAGE*) item, aLayer );         break;
     default:           return false;
     }
 
@@ -191,7 +191,7 @@ bool KIGFX::WS_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_LINE* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_LINE* aItem, int aLayer ) const
 {
     m_gal->SetIsStroke( true );
     m_gal->SetIsFill( false );
@@ -201,7 +201,7 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_LINE* aItem, int aLayer ) const
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_RECT* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_RECT* aItem, int aLayer ) const
 {
     m_gal->SetIsStroke( true );
     m_gal->SetIsFill( false );
@@ -211,13 +211,13 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_RECT* aItem, int aLayer ) const
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_POLYPOLYGONS* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_POLYPOLYGONS* aItem, int aLayer ) const
 {
     m_gal->SetFillColor( m_renderSettings.GetColor( aItem, aLayer ) );
     m_gal->SetIsFill( true );
     m_gal->SetIsStroke( false );
 
-    WS_DRAW_ITEM_POLYPOLYGONS* item =  (WS_DRAW_ITEM_POLYPOLYGONS*)aItem;
+    DS_DRAW_ITEM_POLYPOLYGONS* item =  (DS_DRAW_ITEM_POLYPOLYGONS*)aItem;
 
     for( int idx = 0; idx < item->GetPolygons().OutlineCount(); ++idx )
     {
@@ -227,7 +227,7 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_POLYPOLYGONS* aItem, int aLayer
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_TEXT* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_TEXT* aItem, int aLayer ) const
 {
     VECTOR2D position( aItem->GetTextPos().x, aItem->GetTextPos().y );
     int      penWidth = std::max( aItem->GetEffectiveTextPenWidth(),
@@ -246,10 +246,10 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_TEXT* aItem, int aLayer ) const
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_BITMAP* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_BITMAP* aItem, int aLayer ) const
 {
     m_gal->Save();
-    auto* bitmap = static_cast<WS_DATA_ITEM_BITMAP*>( aItem->GetPeer() );
+    auto* bitmap = static_cast<DS_DATA_ITEM_BITMAP*>( aItem->GetPeer() );
 
     VECTOR2D position = aItem->GetPosition();
     m_gal->Translate( position );
@@ -281,7 +281,7 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_BITMAP* aItem, int aLayer ) con
 }
 
 
-void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_PAGE* aItem, int aLayer ) const
+void KIGFX::DS_PAINTER::draw( const DS_DRAW_ITEM_PAGE* aItem, int aLayer ) const
 {
     VECTOR2D origin = VECTOR2D( 0.0, 0.0 );
     VECTOR2D end = VECTOR2D( aItem->GetPageSize().x,
@@ -309,7 +309,7 @@ void KIGFX::WS_PAINTER::draw( const WS_DRAW_ITEM_PAGE* aItem, int aLayer ) const
 }
 
 
-void KIGFX::WS_PAINTER::DrawBorder( const PAGE_INFO* aPageInfo, int aScaleFactor ) const
+void KIGFX::DS_PAINTER::DrawBorder( const PAGE_INFO* aPageInfo, int aScaleFactor ) const
 {
     VECTOR2D origin = VECTOR2D( 0.0, 0.0 );
     VECTOR2D end = VECTOR2D( aPageInfo->GetWidthMils() * aScaleFactor,
diff --git a/common/page_layout/ws_proxy_undo_item.cpp b/common/drawing_sheet/ds_proxy_undo_item.cpp
similarity index 77%
rename from common/page_layout/ws_proxy_undo_item.cpp
rename to common/drawing_sheet/ds_proxy_undo_item.cpp
index b9ef6abf78..b566d955a7 100644
--- a/common/page_layout/ws_proxy_undo_item.cpp
+++ b/common/drawing_sheet/ds_proxy_undo_item.cpp
@@ -21,16 +21,16 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#include <page_layout/ws_proxy_undo_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <view/view.h>
 #include <eda_draw_frame.h>
 #include <macros.h>
 
 using namespace KIGFX;
 
-WS_PROXY_UNDO_ITEM::WS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame ) :
+DS_PROXY_UNDO_ITEM::DS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame ) :
         EDA_ITEM( aFrame ? WS_PROXY_UNDO_ITEM_PLUS_T : WS_PROXY_UNDO_ITEM_T ),
         m_selectedDataItem( INT_MAX ),
         m_selectedDrawItem( INT_MAX )
@@ -41,16 +41,16 @@ WS_PROXY_UNDO_ITEM::WS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame ) :
         m_titleBlock = aFrame->GetTitleBlock();
     }
 
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
     model.SaveInString( m_layoutSerialization );
 
     for( size_t ii = 0; ii < model.GetItems().size(); ++ii )
     {
-        WS_DATA_ITEM* dataItem = model.GetItem( ii );
+        DS_DATA_ITEM* dataItem = model.GetItem( ii );
 
         for( size_t jj = 0; jj < dataItem->GetDrawItems().size(); ++jj )
         {
-            WS_DRAW_ITEM_BASE* drawItem = dataItem->GetDrawItems()[ jj ];
+            DS_DRAW_ITEM_BASE* drawItem = dataItem->GetDrawItems()[ jj ];
 
             if( drawItem->IsSelected() )
             {
@@ -63,7 +63,7 @@ WS_PROXY_UNDO_ITEM::WS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame ) :
 }
 
 
-void WS_PROXY_UNDO_ITEM::Restore( EDA_DRAW_FRAME* aFrame, KIGFX::VIEW* aView )
+void DS_PROXY_UNDO_ITEM::Restore( EDA_DRAW_FRAME* aFrame, KIGFX::VIEW* aView )
 {
     if( Type() == WS_PROXY_UNDO_ITEM_PLUS_T )
     {
@@ -71,21 +71,21 @@ void WS_PROXY_UNDO_ITEM::Restore( EDA_DRAW_FRAME* aFrame, KIGFX::VIEW* aView )
         aFrame->SetTitleBlock( m_titleBlock );
     }
 
-    WS_DATA_MODEL::GetTheInstance().SetPageLayout( TO_UTF8( m_layoutSerialization ) );
+    DS_DATA_MODEL::GetTheInstance().SetPageLayout(TO_UTF8( m_layoutSerialization ) );
 
     if( aView )
     {
         aView->Clear();
 
-        for( int ii = 0; ii < (int)WS_DATA_MODEL::GetTheInstance().GetItems().size(); ++ii )
+        for( int ii = 0; ii < (int)DS_DATA_MODEL::GetTheInstance().GetItems().size(); ++ii )
         {
-            WS_DATA_ITEM* dataItem = WS_DATA_MODEL::GetTheInstance().GetItem( ii );
+            DS_DATA_ITEM* dataItem = DS_DATA_MODEL::GetTheInstance().GetItem( ii );
 
             dataItem->SyncDrawItems( nullptr, aView );
 
             if( ii == m_selectedDataItem && m_selectedDrawItem < (int)dataItem->GetDrawItems().size() )
             {
-                WS_DRAW_ITEM_BASE* drawItem = dataItem->GetDrawItems()[ m_selectedDrawItem ];
+                DS_DRAW_ITEM_BASE* drawItem = dataItem->GetDrawItems()[ m_selectedDrawItem ];
                 drawItem->SetSelected();
             }
         }
diff --git a/common/page_layout/ws_proxy_view_item.cpp b/common/drawing_sheet/ds_proxy_view_item.cpp
similarity index 84%
rename from common/page_layout/ws_proxy_view_item.cpp
rename to common/drawing_sheet/ds_proxy_view_item.cpp
index f3e2bedcd2..4c0785a11e 100644
--- a/common/page_layout/ws_proxy_view_item.cpp
+++ b/common/drawing_sheet/ds_proxy_view_item.cpp
@@ -24,16 +24,16 @@
 
 #include <layers_id_colors_and_visibility.h>
 #include <page_info.h>
-#include <page_layout/ws_proxy_view_item.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_painter.h>
 #include <project.h>
 #include <view/view.h>
 
 using namespace KIGFX;
 
-WS_PROXY_VIEW_ITEM::WS_PROXY_VIEW_ITEM( int aMils2IUscalefactor, const PAGE_INFO* aPageInfo,
+DS_PROXY_VIEW_ITEM::DS_PROXY_VIEW_ITEM( int aMils2IUscalefactor, const PAGE_INFO* aPageInfo,
                                         const PROJECT* aProject, const TITLE_BLOCK* aTitleBlock ) :
         EDA_ITEM( NOT_USED ), // this item is never added to a BOARD so it needs no type
         m_mils2IUscalefactor( aMils2IUscalefactor ),
@@ -49,7 +49,7 @@ WS_PROXY_VIEW_ITEM::WS_PROXY_VIEW_ITEM( int aMils2IUscalefactor, const PAGE_INFO
 }
 
 
-const BOX2I WS_PROXY_VIEW_ITEM::ViewBBox() const
+const BOX2I DS_PROXY_VIEW_ITEM::ViewBBox() const
 {
     BOX2I bbox;
 
@@ -68,7 +68,7 @@ const BOX2I WS_PROXY_VIEW_ITEM::ViewBBox() const
 }
 
 
-void WS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView, WS_DRAW_ITEM_LIST* aDrawList ) const
+void DS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView, DS_DRAW_ITEM_LIST* aDrawList ) const
 {
     RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
     wxString         fileName( m_fileName.c_str(), wxConvUTF8 );
@@ -89,11 +89,11 @@ void WS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView, WS_DRAW_ITEM_LIST* aDrawLis
 }
 
 
-void WS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
+void DS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
 {
     GAL*              gal = aView->GetGAL();
     RENDER_SETTINGS*  settings = aView->GetPainter()->GetSettings();
-    WS_DRAW_ITEM_LIST drawList;
+    DS_DRAW_ITEM_LIST drawList;
 
     buildDrawList( aView, &drawList );
 
@@ -107,8 +107,8 @@ void WS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
         gal->Scale( VECTOR2D( -1.0, 1.0 ) );
     }
 
-    WS_PAINTER ws_painter( gal );
-    auto       ws_settings = static_cast<WS_RENDER_SETTINGS*>( ws_painter.GetSettings() );
+    DS_PAINTER ws_painter( gal );
+    auto       ws_settings = static_cast<DS_RENDER_SETTINGS*>( ws_painter.GetSettings() );
 
     ws_settings->SetNormalColor( settings->GetLayerColor( m_colorLayer ) );
     ws_settings->SetSelectedColor( settings->GetLayerColor( LAYER_SELECT_OVERLAY ) );
@@ -116,7 +116,7 @@ void WS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
     ws_settings->SetPageBorderColor( settings->GetLayerColor( m_pageBorderColorLayer ) );
 
     // Draw all the components that make the page layout
-    for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
+    for( DS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
         ws_painter.Draw( item, LAYER_DRAWINGSHEET );
 
     // Draw gray line that outlines the sheet size
@@ -128,21 +128,21 @@ void WS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
 }
 
 
-void WS_PROXY_VIEW_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
+void DS_PROXY_VIEW_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
 {
     aCount = 1;
     aLayers[0] = LAYER_DRAWINGSHEET;
 }
 
 
-bool WS_PROXY_VIEW_ITEM::HitTestDrawingSheetItems( VIEW* aView, const wxPoint& aPosition )
+bool DS_PROXY_VIEW_ITEM::HitTestDrawingSheetItems( VIEW* aView, const wxPoint& aPosition )
 {
     int               accuracy = (int) aView->ToWorld( 5.0 );   // five pixels at current zoom
-    WS_DRAW_ITEM_LIST drawList;
+    DS_DRAW_ITEM_LIST drawList;
 
     buildDrawList( aView, &drawList );
 
-    for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
+    for( DS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
     {
         if( item->HitTest( aPosition, accuracy ) )
             return true;
diff --git a/common/eda_draw_frame.cpp b/common/eda_draw_frame.cpp
index ca49b0505e..1b242cf6a4 100644
--- a/common/eda_draw_frame.cpp
+++ b/common/eda_draw_frame.cpp
@@ -53,12 +53,11 @@
 #include <tool/zoom_menu.h>
 #include <trace_helpers.h>
 #include <view/view.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_draw_item.h>
 #include <widgets/msgpanel.h>
 #include <wx/snglinst.h>
 #include <dialogs/dialog_grid_settings.h>
 #include <widgets/ui_common.h>
-#include <zoom_defines.h>
 
 #define FR_HISTORY_LIST_CNT     10   ///< Maximum size of the find/replace history stacks.
 
@@ -831,13 +830,13 @@ void EDA_DRAW_FRAME::FocusOnLocation( const wxPoint& aPos )
 
 static const wxString productName = wxT( "KiCad E.D.A.  " );
 
-void PrintPageLayout( const RENDER_SETTINGS* aSettings, const PAGE_INFO& aPageInfo,
-                      const wxString& aFullSheetName, const wxString& aFileName,
-                      const TITLE_BLOCK& aTitleBlock, int aSheetCount, const wxString& aPageNumber,
-                      double aMils2Iu, const PROJECT* aProject, const wxString& aSheetLayer,
-                      bool aIsFirstPage )
+void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, const PAGE_INFO& aPageInfo,
+                        const wxString& aFullSheetName, const wxString& aFileName,
+                        const TITLE_BLOCK& aTitleBlock, int aSheetCount,
+                        const wxString& aPageNumber, double aMils2Iu, const PROJECT* aProject,
+                        const wxString& aSheetLayer, bool aIsFirstPage )
 {
-    WS_DRAW_ITEM_LIST drawList;
+    DS_DRAW_ITEM_LIST drawList;
 
     drawList.SetDefaultPenSize( aSettings->GetDefaultPenWidth() );
     drawList.SetMilsToIUfactor( aMils2Iu );
@@ -872,9 +871,9 @@ void EDA_DRAW_FRAME::PrintDrawingSheet( const RENDER_SETTINGS* aSettings, BASE_S
         DC->SetAxisOrientation( true, false );
     }
 
-    PrintPageLayout( aSettings, GetPageSettings(), GetScreenDesc(), aFilename, GetTitleBlock(),
-                     aScreen->GetPageCount(), aScreen->GetPageNumber(), aMils2Iu, &Prj(),
-                     aSheetLayer, aScreen->GetVirtualPageNumber() == 1 );
+    ::PrintDrawingSheet( aSettings, GetPageSettings(), GetScreenDesc(), aFilename, GetTitleBlock(),
+                         aScreen->GetPageCount(), aScreen->GetPageNumber(), aMils2Iu, &Prj(),
+                         aSheetLayer, aScreen->GetVirtualPageNumber() == 1 );
 
     if( origin.y > 0 )
     {
diff --git a/common/plotters/common_plot_functions.cpp b/common/plotters/common_plot_functions.cpp
index b4e77225f2..b65ae634bf 100644
--- a/common/plotters/common_plot_functions.cpp
+++ b/common/plotters/common_plot_functions.cpp
@@ -24,9 +24,9 @@
 
 #include <eda_item.h>
 #include <plotters_specific.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_painter.h>
 #include <title_block.h>
 #include <wx/filename.h>
 
@@ -69,7 +69,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
         plotColor = COLOR4D( RED );
 
     plotter->SetColor( plotColor );
-    WS_DRAW_ITEM_LIST drawList;
+    DS_DRAW_ITEM_LIST drawList;
 
     // Print only a short filename, if aFilename is the full filename
     wxFileName fn( aFilename );
@@ -87,7 +87,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
     drawList.BuildDrawItemsList( aPageInfo, aTitleBlock );
 
     // Draw item list
-    for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
+    for( DS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() )
     {
         plotter->SetCurrentLineWidth( PLOTTER::USE_DEFAULT_LINE_WIDTH );
 
@@ -95,7 +95,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
         {
         case WSG_LINE_T:
             {
-                WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item;
+                DS_DRAW_ITEM_LINE* line = (DS_DRAW_ITEM_LINE*) item;
                 plotter->SetCurrentLineWidth( std::max( line->GetPenWidth(), defaultPenWidth ) );
                 plotter->MoveTo( line->GetStart() );
                 plotter->FinishTo( line->GetEnd() );
@@ -104,7 +104,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
 
         case WSG_RECT_T:
             {
-                WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item;
+                DS_DRAW_ITEM_RECT* rect = (DS_DRAW_ITEM_RECT*) item;
                 int penWidth = std::max( rect->GetPenWidth(), defaultPenWidth );
                 plotter->Rect( rect->GetStart(), rect->GetEnd(), FILL_TYPE::NO_FILL, penWidth );
             }
@@ -112,7 +112,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
 
         case WSG_TEXT_T:
             {
-                WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item;
+                DS_DRAW_ITEM_TEXT* text = (DS_DRAW_ITEM_TEXT*) item;
                 int penWidth = std::max( text->GetEffectiveTextPenWidth(), defaultPenWidth );
                 plotter->Text( text->GetTextPos(), plotColor, text->GetShownText(),
                                text->GetTextAngle(), text->GetTextSize(), text->GetHorizJustify(),
@@ -123,7 +123,7 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
 
         case WSG_POLY_T:
             {
-                WS_DRAW_ITEM_POLYPOLYGONS* poly = (WS_DRAW_ITEM_POLYPOLYGONS*) item;
+                DS_DRAW_ITEM_POLYPOLYGONS* poly = (DS_DRAW_ITEM_POLYPOLYGONS*) item;
                 int penWidth = std::max( poly->GetPenWidth(), defaultPenWidth );
                 std::vector<wxPoint> points;
 
@@ -142,8 +142,8 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
 
         case WSG_BITMAP_T:
             {
-                WS_DRAW_ITEM_BITMAP* drawItem = (WS_DRAW_ITEM_BITMAP*) item;
-                auto*                bitmap = (WS_DATA_ITEM_BITMAP*) drawItem->GetPeer();
+                DS_DRAW_ITEM_BITMAP* drawItem = (DS_DRAW_ITEM_BITMAP*) item;
+                DS_DATA_ITEM_BITMAP* bitmap = (DS_DATA_ITEM_BITMAP*) drawItem->GetPeer();
 
                 if( bitmap->m_ImageBitmap == NULL )
                     break;
diff --git a/eeschema/dialogs/dialog_eeschema_page_settings.h b/eeschema/dialogs/dialog_eeschema_page_settings.h
index e2137553e7..06f41bb6fa 100644
--- a/eeschema/dialogs/dialog_eeschema_page_settings.h
+++ b/eeschema/dialogs/dialog_eeschema_page_settings.h
@@ -22,7 +22,6 @@
 
 #include <dialogs/dialog_page_settings.h>
 
-class WS_DATA_MODEL;
 
 class DIALOG_EESCHEMA_PAGE_SETTINGS : public DIALOG_PAGES_SETTINGS
 {
diff --git a/eeschema/dialogs/dialog_plot_schematic.cpp b/eeschema/dialogs/dialog_plot_schematic.cpp
index cb06335c23..17cfb0f480 100644
--- a/eeschema/dialogs/dialog_plot_schematic.cpp
+++ b/eeschema/dialogs/dialog_plot_schematic.cpp
@@ -30,7 +30,7 @@
 #include <kiface_i.h>
 #include <pgm_base.h>
 #include <settings/settings_manager.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_painter.h>
 #include <sch_painter.h>
 #include <schematic.h>
 
diff --git a/eeschema/dialogs/dialog_print_using_printer.cpp b/eeschema/dialogs/dialog_print_using_printer.cpp
index b786065ab7..0d68a6ee90 100644
--- a/eeschema/dialogs/dialog_print_using_printer.cpp
+++ b/eeschema/dialogs/dialog_print_using_printer.cpp
@@ -486,7 +486,7 @@ void SCH_PRINTOUT::PrintPage( SCH_SCREEN* aScreen )
     if( cfg->m_Printing.use_theme && theme )
         renderSettings.LoadColors( theme );
 
-    // The drawing sheet item print code is shared between PCBNew and EESchema, so it's easier
+    // The drawing-sheet-item print code is shared between PCBNew and EESchema, so it's easier
     // if they just use the PCB layer.
     renderSettings.SetLayerColor( LAYER_DRAWINGSHEET,
                                   renderSettings.GetLayerColor( LAYER_SCHEMATIC_DRAWINGSHEET ) );
diff --git a/eeschema/dialogs/panel_eeschema_color_settings.cpp b/eeschema/dialogs/panel_eeschema_color_settings.cpp
index 7c18632221..a3d4ccfa07 100644
--- a/eeschema/dialogs/panel_eeschema_color_settings.cpp
+++ b/eeschema/dialogs/panel_eeschema_color_settings.cpp
@@ -40,20 +40,20 @@
 #include <settings/settings_manager.h>
 #include <title_block.h>
 #include <view/view.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <sch_base_frame.h>
 #include <widgets/color_swatch.h>
 
 
 PANEL_EESCHEMA_COLOR_SETTINGS::PANEL_EESCHEMA_COLOR_SETTINGS( SCH_BASE_FRAME* aFrame,
                                                               wxWindow* aParent ) :
-          PANEL_COLOR_SETTINGS( aParent ),
-          m_frame( aFrame ),
-          m_preview( nullptr ),
-          m_page( nullptr ),
-          m_titleBlock( nullptr ),
-          m_ws( nullptr ),
-          m_previewItems()
+        PANEL_COLOR_SETTINGS( aParent ),
+        m_frame( aFrame ),
+        m_preview( nullptr ),
+        m_page( nullptr ),
+        m_titleBlock( nullptr ),
+        m_drawingSheet( nullptr ),
+        m_previewItems()
 {
     m_colorNamespace = "schematic";
 
@@ -107,7 +107,7 @@ PANEL_EESCHEMA_COLOR_SETTINGS::~PANEL_EESCHEMA_COLOR_SETTINGS()
 {
     delete m_page;
     delete m_titleBlock;
-    delete m_ws;
+    delete m_drawingSheet;
     delete m_currentSettings;
 
     for( EDA_ITEM* item : m_previewItems )
@@ -244,9 +244,9 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
     m_page->SetHeightMils( 5000 );
     m_page->SetWidthMils( 6000 );
 
-    m_ws = new KIGFX::WS_PROXY_VIEW_ITEM( (int) IU_PER_MILS, m_page, nullptr, m_titleBlock );
-    m_ws->SetColorLayer( LAYER_SCHEMATIC_DRAWINGSHEET );
-    view->Add( m_ws );
+    m_drawingSheet = new DS_PROXY_VIEW_ITEM((int) IU_PER_MILS, m_page, nullptr, m_titleBlock );
+    m_drawingSheet->SetColorLayer( LAYER_SCHEMATIC_DRAWINGSHEET );
+    view->Add( m_drawingSheet );
 
     // NOTE: It would be nice to parse a schematic file here.
     // This is created from the color_settings.sch file in demos folder
@@ -453,7 +453,7 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::zoomFitPreview()
                                                 fabs( psize.y / screenSize.y ) );
 
     view->SetScale( scale * 1.1 );
-    view->SetCenter( m_ws->ViewBBox().Centre() );
+    view->SetCenter( m_drawingSheet->ViewBBox().Centre() );
     m_preview->ForceRefresh();
 }
 
diff --git a/eeschema/dialogs/panel_eeschema_color_settings.h b/eeschema/dialogs/panel_eeschema_color_settings.h
index a621107525..7e68018222 100644
--- a/eeschema/dialogs/panel_eeschema_color_settings.h
+++ b/eeschema/dialogs/panel_eeschema_color_settings.h
@@ -33,11 +33,8 @@ class PAGE_INFO;
 class SCH_ITEM;
 class SCH_PREVIEW_PANEL;
 class TITLE_BLOCK;
+class DS_PROXY_VIEW_ITEM;
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-}
 
 class PANEL_EESCHEMA_COLOR_SETTINGS : public PANEL_COLOR_SETTINGS
 {
@@ -68,7 +65,7 @@ private:
     SCH_PREVIEW_PANEL*         m_preview;
     PAGE_INFO*                 m_page;
     TITLE_BLOCK*               m_titleBlock;
-    KIGFX::WS_PROXY_VIEW_ITEM* m_ws;
+    DS_PROXY_VIEW_ITEM*        m_drawingSheet;
     std::vector<EDA_ITEM*>     m_previewItems;
 
     KIGFX::GAL_DISPLAY_OPTIONS m_galDisplayOptions;
diff --git a/eeschema/eeschema_config.cpp b/eeschema/eeschema_config.cpp
index 43415f8a75..b4d90b883d 100644
--- a/eeschema/eeschema_config.cpp
+++ b/eeschema/eeschema_config.cpp
@@ -45,7 +45,7 @@
 #include <symbol_lib_table.h>
 #include <widgets/paged_dialog.h>
 #include <wildcards_and_files_ext.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <zoom_defines.h>
 
 
@@ -86,14 +86,13 @@ bool SCH_EDIT_FRAME::LoadProjectSettings()
     LIB_PART::SetSubpartIdNotation( LIB_PART::GetSubpartIdSeparator(),
                                     LIB_PART::GetSubpartFirstId() );
 
-    // Load the page layout decr file, from the filename stored in
+    // Load the drawing sheet description file, from the filename stored in
     // BASE_SCREEN::m_PageLayoutDescrFileName, read in config project file
     // If empty, or not existing, the default descr is loaded
-    WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
-    wxString filename = WS_DATA_MODEL::MakeFullFileName( BASE_SCREEN::m_PageLayoutDescrFileName,
+    wxString filename = DS_DATA_MODEL::MakeFullFileName( BASE_SCREEN::m_PageLayoutDescrFileName,
                                                          Prj().GetProjectPath() );
 
-    pglayout.SetPageLayout( filename );
+    DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename );
 
     return true;
 }
diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp
index f841e08731..a52bddcf99 100644
--- a/eeschema/erc.cpp
+++ b/eeschema/erc.cpp
@@ -32,8 +32,8 @@
 #include <sch_reference_list.h>
 #include <sch_sheet.h>
 #include <schematic.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <wx/ffile.h>
 
 
@@ -159,9 +159,9 @@ int ERC_TESTER::TestDuplicateSheetNames( bool aCreateMarker )
 }
 
 
-void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aDrawingSheet )
+void ERC_TESTER::TestTextVars( DS_PROXY_VIEW_ITEM* aDrawingSheet )
 {
-    WS_DRAW_ITEM_LIST wsItems;
+    DS_DRAW_ITEM_LIST wsItems;
 
     auto unresolved = [this]( wxString str )
     {
@@ -252,9 +252,9 @@ void ERC_TESTER::TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aDrawingSheet )
             }
         }
 
-        for( WS_DRAW_ITEM_BASE* item = wsItems.GetFirst(); item; item = wsItems.GetNext() )
+        for( DS_DRAW_ITEM_BASE* item = wsItems.GetFirst(); item; item = wsItems.GetNext() )
         {
-            if( WS_DRAW_ITEM_TEXT* text = dynamic_cast<WS_DRAW_ITEM_TEXT*>( item ) )
+            if( DS_DRAW_ITEM_TEXT* text = dynamic_cast<DS_DRAW_ITEM_TEXT*>( item ) )
             {
                 if( text->GetShownText().Matches( wxT( "*${*}*" ) ) )
                 {
diff --git a/eeschema/erc.h b/eeschema/erc.h
index 6370612029..088728c5e2 100644
--- a/eeschema/erc.h
+++ b/eeschema/erc.h
@@ -37,11 +37,7 @@ class NETLIST_OBJECT;
 class NETLIST_OBJECT_LIST;
 class SCH_SHEET_LIST;
 class SCHEMATIC;
-
-namespace KIGFX
-{
-class WS_PROXY_VIEW_ITEM;
-}
+class DS_PROXY_VIEW_ITEM;
 
 
 extern const wxString CommentERC_H[];
@@ -83,7 +79,7 @@ public:
     /**
      * Check for any unresolved text variable references.
      */
-    void TestTextVars( KIGFX::WS_PROXY_VIEW_ITEM* aDrawingSheet );
+    void TestTextVars( DS_PROXY_VIEW_ITEM* aDrawingSheet );
 
     /**
      * Check that there are no conflicting bus alias definitions in the schematic.
diff --git a/eeschema/files-io.cpp b/eeschema/files-io.cpp
index 2843222f18..a323fdbca5 100644
--- a/eeschema/files-io.cpp
+++ b/eeschema/files-io.cpp
@@ -41,25 +41,21 @@
 #include <project_rescue.h>
 #include <reporter.h>
 #include <richio.h>
-#include <sch_component.h>
 #include <sch_edit_frame.h>
 #include <sch_plugins/legacy/sch_legacy_plugin.h>
 #include <sch_file_versions.h>
 #include <sch_sheet.h>
 #include <sch_sheet_path.h>
 #include <schematic.h>
-#include <settings/common_settings.h>
 #include <settings/settings_manager.h>
-#include <symbol_lib_table.h>
 #include <tool/actions.h>
 #include <tool/tool_manager.h>
 #include <tools/sch_editor_control.h>
 #include <trace_helpers.h>
 #include <widgets/infobar.h>
 #include <wildcards_and_files_ext.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <wx/ffile.h>
-#include <wx/stdpaths.h>
 #include <tools/ee_inspection_tool.h>
 #include <paths.h>
 
@@ -920,9 +916,9 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
                     SCH_IO_MGR::FindPlugin( (SCH_IO_MGR::SCH_FILE_T) aFileType ) );
             Schematic().SetRoot( pi->Load( aFileName, &Schematic() ) );
 
-            // Eagle sheets do not use a drawing sheet frame by default, so set it to an empty one
-            WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
-            pglayout.SetEmptyLayout();
+            // Eagle sheets do not use a drawing-sheet frame by default, so set it to an empty one
+            DS_DATA_MODEL& drawingSheet = DS_DATA_MODEL::GetTheInstance();
+            drawingSheet.SetEmptyLayout();
 
             BASE_SCREEN::m_PageLayoutDescrFileName = "empty.kicad_wks";
             wxFileName layoutfn( Prj().GetProjectPath(), BASE_SCREEN::m_PageLayoutDescrFileName );
@@ -930,7 +926,7 @@ bool SCH_EDIT_FRAME::importFile( const wxString& aFileName, int aFileType )
 
             if( layoutfile.Open( layoutfn.GetFullPath(), "wb" ) )
             {
-                layoutfile.Write( WS_DATA_MODEL::EmptyLayout() );
+                layoutfile.Write( DS_DATA_MODEL::EmptyLayout() );
                 layoutfile.Close();
             }
 
diff --git a/eeschema/hierarch.cpp b/eeschema/hierarch.cpp
index 41997be091..3ba32e1871 100644
--- a/eeschema/hierarch.cpp
+++ b/eeschema/hierarch.cpp
@@ -317,5 +317,5 @@ void SCH_EDIT_FRAME::DisplayCurrentSheet()
     TOOL_EVENT dummy;
     editTool->UpdateNetHighlighting( dummy );
 
-    HardRedraw();   // Ensure any item has its view updated, especially the worksheet items
+    HardRedraw();   // Ensure all items are redrawn (especially the drawing-sheet items)
 }
diff --git a/eeschema/sch_edit_frame.cpp b/eeschema/sch_edit_frame.cpp
index 66ca74467d..a4cf172304 100644
--- a/eeschema/sch_edit_frame.cpp
+++ b/eeschema/sch_edit_frame.cpp
@@ -77,7 +77,7 @@
 #include <wildcards_and_files_ext.h>
 #include <wx/cmdline.h>
 #include <gal/graphics_abstraction_layer.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 
 // non-member so it can be moved easily, and kept REALLY private.
 // Do NOT Clear() in here.
@@ -1466,9 +1466,9 @@ const BOX2I SCH_EDIT_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) const
     }
     else
     {
-        // Get current drawing sheet in a form we can compare to an EDA_ITEM
-        KIGFX::WS_PROXY_VIEW_ITEM* ds = SCH_BASE_FRAME::GetCanvas()->GetView()->GetDrawingSheet();
-        EDA_ITEM*                  dsAsItem = static_cast<EDA_ITEM*>( ds );
+        // Get current drawing-sheet in a form we can compare to an EDA_ITEM
+        DS_PROXY_VIEW_ITEM* ds = SCH_BASE_FRAME::GetCanvas()->GetView()->GetDrawingSheet();
+        EDA_ITEM*           dsAsItem = static_cast<EDA_ITEM*>( ds );
 
         // Need an EDA_RECT so the first ".Merge" sees it's uninitialized
         EDA_RECT bBoxItems;
@@ -1476,7 +1476,7 @@ const BOX2I SCH_EDIT_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) const
         // Calc the bounding box of all items on screen except the page border
         for( EDA_ITEM* item : GetScreen()->Items() )
         {
-            if( item != dsAsItem ) // Ignore the worksheet itself
+            if( item != dsAsItem ) // Ignore the drawing-sheet itself
             {
                 if( item->Type() == SCH_COMPONENT_T )
                 {
diff --git a/eeschema/sch_plugins/eagle/sch_eagle_plugin.cpp b/eeschema/sch_plugins/eagle/sch_eagle_plugin.cpp
index c13c881929..87f10fc358 100644
--- a/eeschema/sch_plugins/eagle/sch_eagle_plugin.cpp
+++ b/eeschema/sch_plugins/eagle/sch_eagle_plugin.cpp
@@ -57,7 +57,6 @@
 #include <schematic.h>
 #include <symbol_lib_table.h>
 #include <wildcards_and_files_ext.h>
-#include <page_layout/ws_draw_item.h>
 
 
 // Eagle schematic axes are aligned with x increasing left to right and Y increasing bottom to top
diff --git a/eeschema/sch_preview_panel.cpp b/eeschema/sch_preview_panel.cpp
index 909dcc61dd..7af6bc06e9 100644
--- a/eeschema/sch_preview_panel.cpp
+++ b/eeschema/sch_preview_panel.cpp
@@ -23,7 +23,7 @@
 
 
 #include <view/wx_view_controls.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 
 #include <gal/graphics_abstraction_layer.h>
 
diff --git a/eeschema/sch_view.cpp b/eeschema/sch_view.cpp
index 53945d4ecb..ada71c48d4 100644
--- a/eeschema/sch_view.cpp
+++ b/eeschema/sch_view.cpp
@@ -31,7 +31,7 @@
 #include <view/view_group.h>
 #include <view/view_rtree.h>
 #include <view/wx_view_controls.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <layers_id_colors_and_visibility.h>
 #include <sch_screen.h>
 #include <schematic.h>
@@ -47,12 +47,9 @@ SCH_VIEW::SCH_VIEW( bool aIsDynamic, SCH_BASE_FRAME* aFrame ) :
     VIEW( aIsDynamic )
 {
     m_frame = aFrame;
-    // Set m_boundary to define the max working area size. The default value
-    // is acceptable for Pcbnew and Gerbview, but too large for Eeschema due to
-    // very different internal units.
-    // So we have to use a smaller value.
-    // A full size = 3 * MAX_PAGE_SIZE_MILS size allows a wide margin
-    // around the worksheet.
+    // Set m_boundary to define the max working area size. The default value is acceptable for
+    // Pcbnew and Gerbview, but too large for Eeschema due to very different internal units.
+    // A full size = 3 * MAX_PAGE_SIZE_MILS size allows a wide margin around the drawing-sheet.
     double max_size = Mils2iu( MAX_PAGE_SIZE_MILS ) * 3.0;
     m_boundary.SetOrigin( -max_size/4, -max_size/4 );
     m_boundary.SetSize( max_size, max_size );
@@ -97,10 +94,10 @@ void SCH_VIEW::DisplaySheet( const SCH_SCREEN *aScreen )
     for( SCH_ITEM* item : aScreen->Items() )
         Add( item );
 
-    m_drawingSheet.reset( new KIGFX::WS_PROXY_VIEW_ITEM( static_cast< int >( IU_PER_MILS ),
-                                                         &aScreen->GetPageSettings(),
-                                                         &aScreen->Schematic()->Prj(),
-                                                         &aScreen->GetTitleBlock() ) );
+    m_drawingSheet.reset( new DS_PROXY_VIEW_ITEM( static_cast<int>( IU_PER_MILS ),
+                                                  &aScreen->GetPageSettings(),
+                                                  &aScreen->Schematic()->Prj(),
+                                                  &aScreen->GetTitleBlock() ) );
     m_drawingSheet->SetPageNumber( TO_UTF8( aScreen->GetPageNumber() ) );
     m_drawingSheet->SetSheetCount( aScreen->GetPageCount() );
     m_drawingSheet->SetFileName( TO_UTF8( aScreen->GetFileName() ) );
diff --git a/eeschema/sch_view.h b/eeschema/sch_view.h
index 136f943f44..3bb9f9950d 100644
--- a/eeschema/sch_view.h
+++ b/eeschema/sch_view.h
@@ -37,6 +37,8 @@ class SCH_SCREEN;
 class LIB_PART;
 class LIB_PIN;
 class SCH_BASE_FRAME;
+class DS_PROXY_VIEW_ITEM;
+
 
 // Eeschema 100nm as the internal units
 constexpr double SCH_WORLD_UNIT ( 1e-7 / 0.0254 );
@@ -62,7 +64,6 @@ static const LAYER_NUM SCH_LAYER_ORDER[] =
 namespace KIGFX
 {
     class VIEW_GROUP;
-    class WS_PROXY_VIEW_ITEM;
 
     namespace PREVIEW
     {
@@ -94,13 +95,13 @@ public:
 
     void HideDrawingSheet();
 
-    WS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_drawingSheet.get(); }
+    DS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_drawingSheet.get(); }
 
 private:
     SCH_BASE_FRAME* m_frame;    // The frame using this view. Can be null. Used mainly
                                 // to know the sheet path name when drawing the page layout
 
-    std::unique_ptr<WS_PROXY_VIEW_ITEM> m_drawingSheet;
+    std::unique_ptr<DS_PROXY_VIEW_ITEM> m_drawingSheet;
 };
 
 }; // namespace
diff --git a/eeschema/schematic_undo_redo.cpp b/eeschema/schematic_undo_redo.cpp
index d8e94525e4..e4fa729914 100644
--- a/eeschema/schematic_undo_redo.cpp
+++ b/eeschema/schematic_undo_redo.cpp
@@ -30,7 +30,7 @@
 #include <sch_line.h>
 #include <sch_bitmap.h>
 #include <tools/ee_selection_tool.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 #include <tool/actions.h>
 
 
@@ -292,8 +292,8 @@ void SCH_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
         else if( status == UNDO_REDO::PAGESETTINGS )
         {
             // swap current settings with stored settings
-            WS_PROXY_UNDO_ITEM  alt_item( this );
-            WS_PROXY_UNDO_ITEM* item = (WS_PROXY_UNDO_ITEM*) eda_item;
+            DS_PROXY_UNDO_ITEM  alt_item( this );
+            DS_PROXY_UNDO_ITEM* item = static_cast<DS_PROXY_UNDO_ITEM*>( eda_item );
             item->Restore( this );
             *item = alt_item;
             GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
diff --git a/eeschema/tools/sch_edit_tool.cpp b/eeschema/tools/sch_edit_tool.cpp
index ce1e105419..538ef324ea 100644
--- a/eeschema/tools/sch_edit_tool.cpp
+++ b/eeschema/tools/sch_edit_tool.cpp
@@ -46,8 +46,8 @@
 #include <sch_junction.h>
 #include <sch_edit_frame.h>
 #include <schematic.h>
-#include <page_layout/ws_proxy_view_item.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 #include <eeschema_id.h>
 #include <status_popup.h>
 #include <wx/gdicmn.h>
@@ -207,7 +207,7 @@ bool SCH_EDIT_TOOL::Init()
             []( const SELECTION& aSel )
             {
                 if( aSel.GetSize() == 0 )
-                    return true;            // Show worksheet properties
+                    return true;            // Show drawing-sheet properties
 
                 SCH_ITEM*           firstItem   = dynamic_cast<SCH_ITEM*>( aSel.Front() );
                 const EE_SELECTION* eeSelection = dynamic_cast<const EE_SELECTION*>( &aSel );
@@ -1335,8 +1335,8 @@ int SCH_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
     {
         if( getView()->IsLayerVisible( LAYER_SCHEMATIC_DRAWINGSHEET ) )
         {
-            KIGFX::WS_PROXY_VIEW_ITEM* ds = m_frame->GetCanvas()->GetView()->GetDrawingSheet();
-            VECTOR2D                   cursorPos = getViewControls()->GetCursorPosition( false );
+            DS_PROXY_VIEW_ITEM* ds = m_frame->GetCanvas()->GetView()->GetDrawingSheet();
+            VECTOR2D            cursorPos = getViewControls()->GetCursorPosition( false );
 
             if( ds && ds->HitTestDrawingSheetItems( getView(), (wxPoint) cursorPos ) )
                 m_toolMgr->RunAction( ACTIONS::pageSettings );
diff --git a/eeschema/tools/sch_editor_control.cpp b/eeschema/tools/sch_editor_control.cpp
index 2dc799ec44..df7cee650d 100644
--- a/eeschema/tools/sch_editor_control.cpp
+++ b/eeschema/tools/sch_editor_control.cpp
@@ -56,7 +56,7 @@
 #include <tools/ee_selection.h>
 #include <tools/ee_selection_tool.h>
 #include <tools/sch_editor_control.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 #include <dialog_update_from_pcb.h>
 #include <dialog_helpers.h>
 
@@ -99,7 +99,7 @@ int SCH_EDITOR_CONTROL::ShowSchematicSetup( const TOOL_EVENT& aEvent )
 int SCH_EDITOR_CONTROL::PageSetup( const TOOL_EVENT& aEvent )
 {
     PICKED_ITEMS_LIST   undoCmd;
-    WS_PROXY_UNDO_ITEM* undoItem = new WS_PROXY_UNDO_ITEM( m_frame );
+    DS_PROXY_UNDO_ITEM* undoItem = new DS_PROXY_UNDO_ITEM( m_frame );
     ITEM_PICKER         wrapper( m_frame->GetScreen(), undoItem, UNDO_REDO::PAGESETTINGS );
 
     undoCmd.PushItem( wrapper );
diff --git a/gerbview/clear_gbr_drawlayers.cpp b/gerbview/clear_gbr_drawlayers.cpp
index 1dd7dcc1be..4fb449ae02 100644
--- a/gerbview/clear_gbr_drawlayers.cpp
+++ b/gerbview/clear_gbr_drawlayers.cpp
@@ -55,7 +55,7 @@ bool GERBVIEW_FRAME::Clear_DrawLayers( bool query )
 
         GetCanvas()->GetView()->Clear();
 
-        // Reinit the worksheet view, cleared by GetView()->Clear():
+        // Reinit the drawing-sheet view, cleared by GetView()->Clear():
         SetPageSettings( GetPageSettings() );
     }
 
diff --git a/gerbview/gerbview_draw_panel_gal.cpp b/gerbview/gerbview_draw_panel_gal.cpp
index 5a7efadcec..66c3b3a1da 100644
--- a/gerbview/gerbview_draw_panel_gal.cpp
+++ b/gerbview/gerbview_draw_panel_gal.cpp
@@ -21,7 +21,7 @@
 #include <view/view.h>
 #include <view/wx_view_controls.h>
 #include <gerbview_painter.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <zoom_defines.h>
 
 #include <gerbview_frame.h>
@@ -30,7 +30,6 @@
 
 #include <gerber_file_image.h>
 #include <gerber_file_image_list.h>
-#include <zoom_defines.h>
 
 #include <functional>
 #include <memory>
@@ -177,7 +176,7 @@ void GERBVIEW_DRAW_PANEL_GAL::setDefaultLayerDeps()
 }
 
 
-void GERBVIEW_DRAW_PANEL_GAL::SetDrawingSheet( KIGFX::WS_PROXY_VIEW_ITEM* aDrawingSheet )
+void GERBVIEW_DRAW_PANEL_GAL::SetDrawingSheet( DS_PROXY_VIEW_ITEM* aDrawingSheet )
 {
     m_drawingSheet.reset( aDrawingSheet );
     m_view->Add( m_drawingSheet.get() );
diff --git a/gerbview/gerbview_draw_panel_gal.h b/gerbview/gerbview_draw_panel_gal.h
index cc92b2732c..bd5f612dcc 100644
--- a/gerbview/gerbview_draw_panel_gal.h
+++ b/gerbview/gerbview_draw_panel_gal.h
@@ -22,10 +22,7 @@
 
 #include <class_draw_panel_gal.h>
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-}
+class DS_PROXY_VIEW_ITEM;
 
 
 class GERBVIEW_DRAW_PANEL_GAL : public EDA_DRAW_PANEL_GAL
@@ -56,24 +53,24 @@ public:
     BOX2I GetDefaultViewBBox() const override;
 
     /**
-     * Set or update worksheet used by the draw panel.
+     * Set or update the drawing-sheet (borders and title block) used by the draw panel.
      *
-     * @param aDrawingSheet is the worksheet to be used.
+     * @param aDrawingSheet is the drawing-sheet to be used.
      *        The object is then owned by GERBVIEW_DRAW_PANEL_GAL.
      */
-    void SetDrawingSheet( KIGFX::WS_PROXY_VIEW_ITEM* aDrawingSheet );
+    void SetDrawingSheet( DS_PROXY_VIEW_ITEM* aDrawingSheet );
 
     /**
-     * @return the current worksheet
+     * @return the current drawing-sheet
      */
-    KIGFX::WS_PROXY_VIEW_ITEM* GetWorksheet() const { return m_drawingSheet.get(); }
+    DS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_drawingSheet.get(); }
 
 protected:
     ///< Set rendering targets & dependencies for layers.
     void setDefaultLayerDeps();
 
-    ///< Currently used worksheet
-    std::unique_ptr<KIGFX::WS_PROXY_VIEW_ITEM> m_drawingSheet;
+    ///< Currently used drawing-sheet (borders and title block)
+    std::unique_ptr<DS_PROXY_VIEW_ITEM> m_drawingSheet;
 };
 
 
diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp
index f5a65669db..7c9c5a498d 100644
--- a/gerbview/gerbview_frame.cpp
+++ b/gerbview/gerbview_frame.cpp
@@ -32,7 +32,7 @@
 #include <gerbview_draw_panel_gal.h>
 #include <gerbview_settings.h>
 #include <gal/graphics_abstraction_layer.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <settings/common_settings.h>
 #include <settings/settings_manager.h>
 #include <tool/tool_manager.h>
@@ -750,9 +750,9 @@ void GERBVIEW_FRAME::SetVisibleElementColor( int aLayerID, COLOR4D aColor )
 
     case LAYER_GERBVIEW_DRAWINGSHEET:
         settings->SetColor( LAYER_GERBVIEW_DRAWINGSHEET, aColor );
-        // LAYER_DRAWINGSHEET color is also used to draw the worksheet
+        // LAYER_DRAWINGSHEET color is also used to draw the drawing-sheet
         // FIX ME: why LAYER_DRAWINGSHEET must be set, although LAYER_GERBVIEW_DRAWINGSHEET
-        // is used to initialize the worksheet color layer.
+        // is used to initialize the drawing-sheet color layer.
         settings->SetColor( LAYER_DRAWINGSHEET, aColor );
         break;
 
@@ -819,22 +819,22 @@ void GERBVIEW_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
     if( GetScreen() )
         GetScreen()->InitDataPoints( aPageSettings.GetSizeIU() );
 
-    auto drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
+    GERBVIEW_DRAW_PANEL_GAL* drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
 
-    // Prepare worksheet template
-    auto worksheet = new KIGFX::WS_PROXY_VIEW_ITEM( IU_PER_MILS, &GetPageSettings(),
-                                                    &Prj(), &GetTitleBlock() );
+    // Prepare drawing-sheet template
+    DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( IU_PER_MILS, &GetPageSettings(),
+                                                               &Prj(), &GetTitleBlock() );
 
     if( GetScreen() )
     {
-        worksheet->SetPageNumber( "1" );
-        worksheet->SetSheetCount( 1 );
+        drawingSheet->SetPageNumber( "1" );
+        drawingSheet->SetSheetCount( 1 );
     }
 
-    worksheet->SetColorLayer( LAYER_GERBVIEW_DRAWINGSHEET );
+    drawingSheet->SetColorLayer( LAYER_GERBVIEW_DRAWINGSHEET );
 
-    // Draw panel takes ownership of the worksheet
-    drawPanel->SetDrawingSheet( worksheet );
+    // Draw panel takes ownership of the drawing-sheet
+    drawPanel->SetDrawingSheet( drawingSheet );
 }
 
 
diff --git a/gerbview/gerbview_printout.cpp b/gerbview/gerbview_printout.cpp
index 205dc6ce8c..0b42b2fcc5 100644
--- a/gerbview/gerbview_printout.cpp
+++ b/gerbview/gerbview_printout.cpp
@@ -46,22 +46,19 @@ bool GERBVIEW_PRINTOUT::OnPrintPage( int aPage )
     // Store the layerset, as it is going to be modified below and the original settings are needed
     LSET lset = m_settings.m_LayerSet;
 
-    // The gerber filename of the page to print will be printed to the worksheet.
-    // Find this filename:
-    // Find the graphic layer number for the page to print
     LSEQ seq = lset.UIOrder();
     wxCHECK( unsigned( aPage - 1 ) < seq.size(), false );
     auto layerId = seq[aPage - 1];
 
-    // In gerbview, draw layers are always printed on separate pages
-    // because handling negative objects when using only one page is tricky
+    // In gerbview, draw layers are always printed on separate pages because handling negative
+    // objects when using only one page is tricky
 
     // Enable only one layer to create a printout
     m_settings.m_LayerSet = LSET( layerId );
 
     GERBER_FILE_IMAGE_LIST& gbrImgList = GERBER_FILE_IMAGE_LIST::GetImagesList();
-    GERBER_FILE_IMAGE* gbrImage = gbrImgList.GetGbrImage( layerId );
-    wxString gbr_filename;
+    GERBER_FILE_IMAGE*      gbrImage = gbrImgList.GetGbrImage( layerId );
+    wxString                gbr_filename;
 
     if( gbrImage )
         gbr_filename = gbrImage->m_FileName;
diff --git a/include/bitmap_base.h b/include/bitmap_base.h
index c697f99587..ed9759cc61 100644
--- a/include/bitmap_base.h
+++ b/include/bitmap_base.h
@@ -43,7 +43,7 @@ class PLOTTER;
  * This class handle bitmap images in KiCad.
  *
  * It is not intended to be used alone, but inside another class so all methods are protected
- * or private.  It is used in #SCH_BITMAP class, #WS_DRAW_ITEM_BITMAP, and possibly others in
+ * or private.  It is used in #SCH_BITMAP class, #DS_DRAW_ITEM_BITMAP, and possibly others in
  * the future.
  *
  * @warning Not all plotters are able to plot a bitmap.  Mainly GERBER plotters cannot.
diff --git a/include/board_printout.h b/include/board_printout.h
index be4c68f05d..6ad8c7cf15 100644
--- a/include/board_printout.h
+++ b/include/board_printout.h
@@ -108,7 +108,7 @@ protected:
     ///< Configures GAL object for a printout
     virtual void setupGal( KIGFX::GAL* aGal );
 
-    ///< Returns bounding box of the printed objects (excluding worksheet frame)
+    ///< Returns bounding box of the printed objects (excluding drawing-sheet frame)
     virtual EDA_RECT getBoundingBox() = 0;
 
     ///< Returns a PAINTER instance used to draw the items.
diff --git a/include/dialogs/dialog_page_settings.h b/include/dialogs/dialog_page_settings.h
index 6a1babbafc..80ee044aac 100644
--- a/include/dialogs/dialog_page_settings.h
+++ b/include/dialogs/dialog_page_settings.h
@@ -25,7 +25,7 @@
 #include <widgets/unit_binder.h>
 #include <dialog_page_settings_base.h>
 
-class WS_DATA_MODEL;
+class DS_DATA_MODEL;
 
 /*!
  * DIALOG_PAGES_SETTINGS class declaration
@@ -123,8 +123,8 @@ protected:
     PAGE_INFO       m_pageInfo;              /// Temporary page info.
     bool            m_customFmt;             /// true if the page selection is custom
     TITLE_BLOCK     m_tb;                    /// Temporary title block (basic inscriptions).
-    WS_DATA_MODEL*  m_pagelayout; // the alternate and temporary page layout shown by the dialog
-                                  // when the initial one is replaced by a new one
+    DS_DATA_MODEL*  m_drawingSheet; // the alternate and temporary page layout shown by the dialog
+                                    // when the initial one is replaced by a new one
     double          m_iuPerMils;
 
 private:
diff --git a/include/page_layout/ws_data_item.h b/include/drawing_sheet/ds_data_item.h
similarity index 88%
rename from include/page_layout/ws_data_item.h
rename to include/drawing_sheet/ds_data_item.h
index 57f7d16ab8..f02114fae6 100644
--- a/include/page_layout/ws_data_item.h
+++ b/include/drawing_sheet/ds_data_item.h
@@ -22,20 +22,15 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-/**
- * @file worksheet_dataitem.h
- * @brief description of graphic items and texts to build a title block
- */
-
-#ifndef  WORKSHEET_DATA_ITEM_H
-#define  WORKSHEET_DATA_ITEM_H
+#ifndef  DS_DATA_ITEM_H
+#define  DS_DATA_ITEM_H
 
 #include <math/vector2d.h>
 #include <eda_text.h>
 #include <bitmap_base.h>
-#include "page_layout/ws_draw_item.h"
+#include "drawing_sheet/ds_draw_item.h"
 
-class WS_DRAW_ITEM_TEXT;            // Forward declaration
+class DS_DRAW_ITEM_TEXT;            // Forward declaration
 
 #define TB_DEFAULT_TEXTSIZE 1.5     // default worksheet text size in mm
 
@@ -88,7 +83,7 @@ public:
 
 
 /**
- * Work sheet structure type definitions.
+ * Drawing sheet structure type definitions.
  *
  * Basic items are:
  * * segment and rect (defined by 2 points)
@@ -97,25 +92,25 @@ public:
  *   ( because we use it for logos, there are more than one polygon
  *   in this description
  */
-class WS_DATA_ITEM
+class DS_DATA_ITEM
 {
 public:
-    enum WS_ITEM_TYPE {
-        WS_TEXT,
-        WS_SEGMENT,
-        WS_RECT,
-        WS_POLYPOLYGON,
-        WS_BITMAP
+    enum DS_ITEM_TYPE {
+        DS_TEXT,
+        DS_SEGMENT,
+        DS_RECT,
+        DS_POLYPOLYGON,
+        DS_BITMAP
     };
 
 public:
-    WS_DATA_ITEM( WS_ITEM_TYPE aType );
+    DS_DATA_ITEM( DS_ITEM_TYPE aType );
 
-    virtual ~WS_DATA_ITEM();
+    virtual ~DS_DATA_ITEM();
 
-    const std::vector<WS_DRAW_ITEM_BASE*>& GetDrawItems() const { return m_drawItems; }
+    const std::vector<DS_DRAW_ITEM_BASE*>& GetDrawItems() const { return m_drawItems; }
 
-    virtual void SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView );
+    virtual void SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView );
 
     void SetStart( double aPosx, double aPosy, enum CORNER_ANCHOR aAnchor = RB_CORNER )
     {
@@ -131,7 +126,7 @@ public:
         m_End.m_Anchor = aAnchor;
     }
 
-    WS_ITEM_TYPE GetType() const { return m_type; }
+    DS_ITEM_TYPE GetType() const { return m_type; }
 
     /**
      * @return true if the item has a end point (segment; rect) of false (text, polygon).
@@ -202,10 +197,10 @@ public:
     const wxString GetClassName() const;
 
 protected:
-    WS_ITEM_TYPE   m_type;
+    DS_ITEM_TYPE   m_type;
     PAGE_OPTION    m_pageOption;
 
-    std::vector<WS_DRAW_ITEM_BASE*> m_drawItems;
+    std::vector<DS_DRAW_ITEM_BASE*> m_drawItems;
 
 public:
     wxString       m_Name;                  // a item name used in page layout
@@ -221,12 +216,12 @@ public:
 };
 
 
-class WS_DATA_ITEM_POLYGONS : public WS_DATA_ITEM
+class DS_DATA_ITEM_POLYGONS : public DS_DATA_ITEM
 {
 public:
-    WS_DATA_ITEM_POLYGONS( );
+    DS_DATA_ITEM_POLYGONS( );
 
-    void SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
+    void SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
 
     virtual int GetPenSizeUi() override;
 
@@ -303,12 +298,12 @@ private:
 };
 
 
-class WS_DATA_ITEM_TEXT : public WS_DATA_ITEM
+class DS_DATA_ITEM_TEXT : public DS_DATA_ITEM
 {
 public:
-    WS_DATA_ITEM_TEXT( const wxString& aTextBase );
+    DS_DATA_ITEM_TEXT( const wxString& aTextBase );
 
-    void SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
+    void SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
 
     virtual int GetPenSizeUi() override;
 
@@ -360,16 +355,16 @@ public:
 
 class BITMAP_BASE;
 
-class WS_DATA_ITEM_BITMAP : public WS_DATA_ITEM
+class DS_DATA_ITEM_BITMAP : public DS_DATA_ITEM
 {
 public:
-    WS_DATA_ITEM_BITMAP( BITMAP_BASE* aImage ) :
-            WS_DATA_ITEM( WS_BITMAP )
+    DS_DATA_ITEM_BITMAP( BITMAP_BASE* aImage ) :
+            DS_DATA_ITEM( DS_BITMAP )
     {
         m_ImageBitmap = aImage;
     }
 
-    void SyncDrawItems( WS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
+    void SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIEW* aView ) override;
 
     int GetPPI() const;
     void SetPPI( int aBitmapPPI );
@@ -379,4 +374,4 @@ public:
 };
 
 
-#endif      // WORKSHEET_DATA_ITEM_H
+#endif      // DS_DATA_ITEM_H
diff --git a/include/page_layout/ws_data_model.h b/include/drawing_sheet/ds_data_model.h
similarity index 89%
rename from include/page_layout/ws_data_model.h
rename to include/drawing_sheet/ds_data_model.h
index fae002805c..f68f0105b7 100644
--- a/include/page_layout/ws_data_model.h
+++ b/include/drawing_sheet/ds_data_model.h
@@ -22,39 +22,40 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#ifndef  WS_DATA_MODEL_H
-#define  WS_DATA_MODEL_H
+#ifndef  DS_DATA_MODEL_H
+#define  DS_DATA_MODEL_H
 
 #include <math/vector2d.h>
 #include <eda_text.h>
 #include <bitmap_base.h>
 
-class WS_DATA_ITEM;
+class DS_DATA_ITEM;
 class PAGE_INFO;
 
 /**
  * Handle the graphic items list to draw/plot the frame and title block.
  */
-class WS_DATA_MODEL
+class DS_DATA_MODEL
 {
 public:
-    WS_DATA_MODEL();
-    ~WS_DATA_MODEL()
+    DS_DATA_MODEL();
+
+    ~DS_DATA_MODEL()
     {
         ClearList();
     }
 
     /**
-     * static function: returns the instance of WS_DATA_MODEL used in the application
+     * static function: returns the instance of DS_DATA_MODEL used in the application
      */
-    static WS_DATA_MODEL& GetTheInstance();
+    static DS_DATA_MODEL& GetTheInstance();
 
     /**
-     * Set an alternate instance of WS_DATA_MODEL.
+     * Set an alternate instance of DS_DATA_MODEL.
      *
      * @param aLayout the alternate page layout; if null restore the basic page layout
      */
-    static void SetAltInstance( WS_DATA_MODEL* aLayout = NULL );
+    static void SetAltInstance( DS_DATA_MODEL* aLayout = NULL );
 
     double GetLeftMargin() { return m_leftMargin; }
     void SetLeftMargin( double aMargin ) { m_leftMargin = aMargin; }
@@ -106,25 +107,25 @@ public:
     /**
      * Fill the given string with an S-expr serialization of the WS_DATA_ITEMs.
      */
-    void SaveInString( std::vector<WS_DATA_ITEM*> aItemsList, wxString& aOutputString );
+    void SaveInString( std::vector<DS_DATA_ITEM*> aItemsList, wxString& aOutputString );
 
-    void Append( WS_DATA_ITEM* aItem );
-    void Remove( WS_DATA_ITEM* aItem );
+    void Append( DS_DATA_ITEM* aItem );
+    void Remove( DS_DATA_ITEM* aItem );
 
     /**
      * @return the index of aItem, or -1 if does not exist.
      */
-    int GetItemIndex( WS_DATA_ITEM* aItem ) const;
+    int GetItemIndex( DS_DATA_ITEM* aItem ) const;
 
     /**
      * @return is the item from it's index \a aIdx, or NULL if does not exist.
      */
-    WS_DATA_ITEM* GetItem( unsigned aIdx ) const;
+    DS_DATA_ITEM* GetItem( unsigned aIdx ) const;
 
     /**
      * @return a reference to the items.
      */
-    std::vector<WS_DATA_ITEM*>& GetItems() { return m_list; }
+    std::vector<DS_DATA_ITEM*>& GetItems() { return m_list; }
 
     /**
      * @return the item count.
@@ -153,7 +154,7 @@ public:
      *                      default internal description.
      * @param Append if true: do not delete old layout, and load only \a aFullFileName.
      */
-    void SetPageLayout( const wxString& aFullFileName = wxEmptyString, bool Append = false );
+    void LoadDrawingSheet( const wxString& aFullFileName = wxEmptyString, bool Append = false );
 
     /**
      * Populate the list from a S expr description stored in a string.
@@ -204,9 +205,9 @@ public:
                                     // displayed "as this"
 
 private:
-    std::vector <WS_DATA_ITEM*> m_list;
+    std::vector <DS_DATA_ITEM*> m_list;
     bool   m_allowVoidList;         // If false, the default page layout will be loaded the
-                                    // first time WS_DRAW_ITEM_LIST::BuildDrawItemsList
+                                    // first time DS_DRAW_ITEM_LIST::BuildDrawItemsList
                                     // is run (useful mainly for drawing sheet editor)
     double m_leftMargin;            // the left page margin in mm
     double m_rightMargin;           // the right page margin in mm
@@ -216,4 +217,4 @@ private:
 
 };
 
-#endif      // WS_DATA_MODEL_H
+#endif      // DS_DATA_MODEL_H
diff --git a/include/page_layout/ws_draw_item.h b/include/drawing_sheet/ds_draw_item.h
similarity index 87%
rename from include/page_layout/ws_draw_item.h
rename to include/drawing_sheet/ds_draw_item.h
index d20542567a..6d8133800e 100644
--- a/include/page_layout/ws_draw_item.h
+++ b/include/drawing_sheet/ds_draw_item.h
@@ -22,8 +22,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#ifndef  WS_DRAW_ITEM_H
-#define  WS_DRAW_ITEM_H
+#ifndef  DS_DRAW_ITEM_H
+#define  DS_DRAW_ITEM_H
 
 #include <core/typeinfo.h>
 #include <math/vector2d.h>
@@ -36,7 +36,7 @@
 #include <algorithm>
 #include <vector>
 
-class WS_DATA_ITEM;
+class DS_DATA_ITEM;
 class TITLE_BLOCK;
 class PAGE_INFO;
 class EDA_ITEM;
@@ -55,12 +55,12 @@ class PROJECT;
  *  - bitmaps (also for logos, but they cannot be plot by SVG, GERBER or HPGL plotters
  *    where we just plot the bounding box)
  */
-class WS_DRAW_ITEM_BASE : public EDA_ITEM
+class DS_DRAW_ITEM_BASE : public EDA_ITEM
 {
 public:
-    virtual ~WS_DRAW_ITEM_BASE() {}
+    virtual ~DS_DRAW_ITEM_BASE() {}
 
-    WS_DATA_ITEM* GetPeer() const { return m_peer; }
+    DS_DATA_ITEM* GetPeer() const { return m_peer; }
     int GetIndexInPeer() const { return m_index; }
 
     void ViewGetLayers( int aLayers[], int& aCount ) const override;
@@ -100,7 +100,7 @@ public:
     void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList ) override;
 
 protected:
-    WS_DRAW_ITEM_BASE( WS_DATA_ITEM* aPeer, int aIndex, KICAD_T aType ) :
+    DS_DRAW_ITEM_BASE( DS_DATA_ITEM* aPeer, int aIndex, KICAD_T aType ) :
             EDA_ITEM( aType )
     {
         m_peer = aPeer;
@@ -109,26 +109,26 @@ protected:
         m_flags = 0;
     }
 
-    WS_DATA_ITEM*  m_peer;       // the parent WS_DATA_ITEM item in the WS_DATA_MODEL
+    DS_DATA_ITEM*  m_peer;       // the parent DS_DATA_ITEM item in the DS_DATA_MODEL
     int            m_index;      // the index in the parent's repeat count
     int            m_penWidth;
 };
 
 
 // This class draws a thick segment
-class WS_DRAW_ITEM_LINE : public WS_DRAW_ITEM_BASE
+class DS_DRAW_ITEM_LINE : public DS_DRAW_ITEM_BASE
 {
 public:
-    WS_DRAW_ITEM_LINE( WS_DATA_ITEM* aPeer, int aIndex, wxPoint aStart, wxPoint aEnd,
+    DS_DRAW_ITEM_LINE( DS_DATA_ITEM* aPeer, int aIndex, wxPoint aStart, wxPoint aEnd,
                        int aPenWidth ) :
-        WS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_LINE_T )
+            DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_LINE_T )
     {
         m_start     = aStart;
         m_end       = aEnd;
         m_penWidth  = aPenWidth;
     }
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_LINE" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_LINE" ); }
 
     const wxPoint&  GetStart() const { return m_start; }
     void SetStart( wxPoint aPos ) { m_start = aPos; }
@@ -155,17 +155,17 @@ private:
 };
 
 
-class WS_DRAW_ITEM_POLYPOLYGONS : public WS_DRAW_ITEM_BASE
+class DS_DRAW_ITEM_POLYPOLYGONS : public DS_DRAW_ITEM_BASE
 {
 public:
-    WS_DRAW_ITEM_POLYPOLYGONS( WS_DATA_ITEM* aPeer, int aIndex, wxPoint aPos, int aPenWidth ) :
-            WS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_POLY_T )
+    DS_DRAW_ITEM_POLYPOLYGONS( DS_DATA_ITEM* aPeer, int aIndex, wxPoint aPos, int aPenWidth ) :
+            DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_POLY_T )
     {
         m_penWidth = aPenWidth;
         m_pos = aPos;
     }
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_POLYPOLYGONS" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_POLYPOLYGONS" ); }
 
     SHAPE_POLY_SET& GetPolygons() { return m_Polygons; }
     wxPoint GetPosition() const override { return m_pos; }
@@ -194,7 +194,7 @@ public:
 
 
 private:
-    wxPoint m_pos;      // position of reference point, from the WS_DATA_ITEM_POLYGONS parent
+    wxPoint m_pos;      // position of reference point, from the DS_DATA_ITEM_POLYGONS parent
                         // (used only in drawing sheet editor to draw anchors)
 };
 
@@ -202,19 +202,19 @@ private:
 /**
  * Non filled rectangle with thick segment.
  */
-class WS_DRAW_ITEM_RECT : public WS_DRAW_ITEM_BASE
+class DS_DRAW_ITEM_RECT : public DS_DRAW_ITEM_BASE
 {
 public:
-    WS_DRAW_ITEM_RECT( WS_DATA_ITEM* aPeer, int aIndex, wxPoint aStart, wxPoint aEnd,
+    DS_DRAW_ITEM_RECT( DS_DATA_ITEM* aPeer, int aIndex, wxPoint aStart, wxPoint aEnd,
                        int aPenWidth ) :
-            WS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_RECT_T )
+            DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_RECT_T )
     {
         m_start     = aStart;
         m_end       = aEnd;
         m_penWidth  = aPenWidth;
     }
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_RECT" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_RECT" ); }
 
     const wxPoint&  GetStart() const { return m_start; }
     void SetStart( wxPoint aPos ) { m_start = aPos; }
@@ -246,20 +246,20 @@ private:
  * A rectangle with thick segment showing the page limits and a marker showing the coordinate
  * origin.
  *
- * This only a draw item only.  Therefore m_peer ( the parent WS_DATA_ITEM item in the
- * WS_DATA_MODEL) is always a nullptr.
+ * This only a draw item only.  Therefore m_peer ( the parent DS_DATA_ITEM item in the
+ * DS_DATA_MODEL) is always a nullptr.
  */
-class WS_DRAW_ITEM_PAGE : public WS_DRAW_ITEM_BASE
+class DS_DRAW_ITEM_PAGE : public DS_DRAW_ITEM_BASE
 {
 public:
-    WS_DRAW_ITEM_PAGE( int aPenWidth, double aMarkerSize ) :
-            WS_DRAW_ITEM_BASE( nullptr, 0, WSG_PAGE_T )
+    DS_DRAW_ITEM_PAGE( int aPenWidth, double aMarkerSize ) :
+            DS_DRAW_ITEM_BASE( nullptr, 0, WSG_PAGE_T )
     {
         m_penWidth  = aPenWidth;
         m_markerSize = aMarkerSize;
     }
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_PAGE" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_PAGE" ); }
 
     void SetPageSize( wxSize aSize ) { m_pageSize = aSize; }
     wxSize GetPageSize() const { return m_pageSize; }
@@ -294,13 +294,13 @@ private:
  * It is derived from an #EDA_TEXT, so it handle all characteristics of this graphic text
  * (justification, rotation ... ).
  */
-class WS_DRAW_ITEM_TEXT : public WS_DRAW_ITEM_BASE, public EDA_TEXT
+class DS_DRAW_ITEM_TEXT : public DS_DRAW_ITEM_BASE, public EDA_TEXT
 {
 public:
-    WS_DRAW_ITEM_TEXT( WS_DATA_ITEM* aPeer, int aIndex, wxString& aText, wxPoint aPos,
+    DS_DRAW_ITEM_TEXT( DS_DATA_ITEM* aPeer, int aIndex, wxString& aText, wxPoint aPos,
                        wxSize aSize, int aPenWidth, bool aItalic = false,
                        bool aBold = false ) :
-            WS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_TEXT_T),
+            DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_TEXT_T),
             EDA_TEXT( aText )
     {
         SetTextPos( aPos );
@@ -310,7 +310,7 @@ public:
         SetBold( aBold );
     }
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_TEXT" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_TEXT" ); }
 
     void PrintWsItem( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset ) override;
 
@@ -334,18 +334,18 @@ public:
 /**
  * A bitmap.
  */
-class WS_DRAW_ITEM_BITMAP : public WS_DRAW_ITEM_BASE
+class DS_DRAW_ITEM_BITMAP : public DS_DRAW_ITEM_BASE
 {
 public:
-    WS_DRAW_ITEM_BITMAP( WS_DATA_ITEM* aPeer, int aIndex, wxPoint aPos ) :
-            WS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_BITMAP_T )
+    DS_DRAW_ITEM_BITMAP( DS_DATA_ITEM* aPeer, int aIndex, wxPoint aPos ) :
+            DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_BITMAP_T )
     {
         m_pos = aPos;
     }
 
-    ~WS_DRAW_ITEM_BITMAP() {}
+    ~DS_DRAW_ITEM_BITMAP() {}
 
-    virtual wxString GetClass() const override { return wxT( "WS_DRAW_ITEM_BITMAP" ); }
+    virtual wxString GetClass() const override { return wxT( "DS_DRAW_ITEM_BITMAP" ); }
 
     wxPoint GetPosition() const override { return m_pos; }
     void SetPosition( const wxPoint& aPos ) override { m_pos = aPos; }
@@ -373,10 +373,10 @@ private:
  * the title block and frame references, and parameters to
  * draw/plot them
  */
-class WS_DRAW_ITEM_LIST
+class DS_DRAW_ITEM_LIST
 {
 public:
-    WS_DRAW_ITEM_LIST()
+    DS_DRAW_ITEM_LIST()
     {
         m_idx = 0;
         m_milsToIu = 1.0;
@@ -390,10 +390,10 @@ public:
         m_isFirstPage = true;
     }
 
-    ~WS_DRAW_ITEM_LIST()
+    ~DS_DRAW_ITEM_LIST()
     {
         // Items in the m_graphicList are owned by their respective WORKSHEET_DATAITEMs.
-        // for( WS_DRAW_ITEM_BASE* item : m_graphicList )
+        // for( DS_DRAW_ITEM_BASE* item : m_graphicList )
         //     delete item;
     }
 
@@ -470,18 +470,18 @@ public:
         m_sheetCount = aSheetCount;
     }
 
-    void Append( WS_DRAW_ITEM_BASE* aItem )
+    void Append( DS_DRAW_ITEM_BASE* aItem )
     {
         m_graphicList.push_back( aItem );
     }
 
-    void Remove( WS_DRAW_ITEM_BASE* aItem )
+    void Remove( DS_DRAW_ITEM_BASE* aItem )
     {
         auto newEnd = std::remove( m_graphicList.begin(), m_graphicList.end(), aItem );
         m_graphicList.erase( newEnd, m_graphicList.end() );
     }
 
-    WS_DRAW_ITEM_BASE* GetFirst()
+    DS_DRAW_ITEM_BASE* GetFirst()
     {
         m_idx = 0;
 
@@ -491,7 +491,7 @@ public:
             return NULL;
     }
 
-    WS_DRAW_ITEM_BASE* GetNext()
+    DS_DRAW_ITEM_BASE* GetNext()
     {
         m_idx++;
 
@@ -501,7 +501,7 @@ public:
             return NULL;
     }
 
-    void GetAllItems( std::vector<WS_DRAW_ITEM_BASE*>* aList )
+    void GetAllItems( std::vector<DS_DRAW_ITEM_BASE*>* aList )
     {
         *aList = m_graphicList;
     }
@@ -561,7 +561,7 @@ public:
     wxString BuildFullText( const wxString& aTextbase );
 
 protected:
-    std::vector <WS_DRAW_ITEM_BASE*> m_graphicList;     // Items to draw/plot
+    std::vector <DS_DRAW_ITEM_BASE*> m_graphicList;     // Items to draw/plot
     unsigned           m_idx;             // for GetFirst, GetNext functions
     double             m_milsToIu;        // the scalar to convert pages units ( mils)
                                           // to draw/plot units.
@@ -580,4 +580,4 @@ protected:
 };
 
 
-#endif      // WS_DRAW_ITEM_H
+#endif      // DS_DRAW_ITEM_H
diff --git a/include/page_layout/ws_painter.h b/include/drawing_sheet/ds_painter.h
similarity index 77%
rename from include/page_layout/ws_painter.h
rename to include/drawing_sheet/ds_painter.h
index 50f699e2bf..6a5cb72cbf 100644
--- a/include/page_layout/ws_painter.h
+++ b/include/drawing_sheet/ds_painter.h
@@ -23,13 +23,13 @@
 
 // For page and paper size, values are in 1/1000 inch
 
-#ifndef WS_PAINTER_H
-#define WS_PAINTER_H
+#ifndef DS_PAINTER_H
+#define DS_PAINTER_H
 
 #include <gal/color4d.h>
 #include <painter.h>
 #include <page_info.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_draw_item.h>
 
 // Forward declarations:
 class EDA_RECT;
@@ -43,12 +43,12 @@ namespace KIGFX
 /**
  * Store page-layout-specific render settings.
  */
-class WS_RENDER_SETTINGS : public RENDER_SETTINGS
+class DS_RENDER_SETTINGS : public RENDER_SETTINGS
 {
 public:
-    friend class WS_PAINTER;
+    friend class DS_PAINTER;
 
-    WS_RENDER_SETTINGS();
+    DS_RENDER_SETTINGS();
 
     void LoadColors( const COLOR_SETTINGS* aSettings ) override;
 
@@ -95,10 +95,10 @@ private:
 /**
  * Methods for drawing worksheet items.
  */
-class WS_PAINTER : public PAINTER
+class DS_PAINTER : public PAINTER
 {
 public:
-    WS_PAINTER( GAL* aGal ) :
+    DS_PAINTER( GAL* aGal ) :
             PAINTER( aGal )
     { }
 
@@ -111,15 +111,15 @@ public:
     virtual RENDER_SETTINGS* GetSettings() override { return &m_renderSettings; }
 
 private:
-    void draw( const WS_DRAW_ITEM_LINE* aItem, int aLayer ) const;
-    void draw( const WS_DRAW_ITEM_RECT* aItem, int aLayer ) const;
-    void draw( const WS_DRAW_ITEM_POLYPOLYGONS* aItem, int aLayer ) const;
-    void draw( const WS_DRAW_ITEM_TEXT* aItem, int aLayer ) const;
-    void draw( const WS_DRAW_ITEM_BITMAP* aItem, int aLayer ) const;
-    void draw( const WS_DRAW_ITEM_PAGE* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_LINE* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_RECT* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_POLYPOLYGONS* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_TEXT* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_BITMAP* aItem, int aLayer ) const;
+    void draw( const DS_DRAW_ITEM_PAGE* aItem, int aLayer ) const;
 
 private:
-    WS_RENDER_SETTINGS m_renderSettings;
+    DS_RENDER_SETTINGS m_renderSettings;
 };
 
 } // namespace KIGFX
@@ -144,10 +144,10 @@ private:
  * - the LTmargin The left top margin of the page layout.
  * - the RBmargin The right bottom margin of the page layout.
  */
-void PrintPageLayout( const RENDER_SETTINGS* aSettings, const PAGE_INFO& aPageInfo,
-                      const wxString& aFullSheetName, const wxString& aFileName,
-                      const TITLE_BLOCK& aTitleBlock, int aSheetCount, const wxString& aPageNumber,
-                      double aScalar, const PROJECT* aProject,
-                      const wxString& aSheetLayer = wxEmptyString, bool aIsFirstPage = true );
+void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, const PAGE_INFO& aPageInfo,
+                        const wxString& aFullSheetName, const wxString& aFileName,
+                        const TITLE_BLOCK& aTitleBlock, int aSheetCount,
+                        const wxString& aPageNumber, double aScalar, const PROJECT* aProject,
+                        const wxString& aSheetLayer = wxEmptyString, bool aIsFirstPage = true );
 
-#endif // WS_PAINTER_H
+#endif // DS_PAINTER_H
diff --git a/include/page_layout/ws_proxy_undo_item.h b/include/drawing_sheet/ds_proxy_undo_item.h
similarity index 88%
rename from include/page_layout/ws_proxy_undo_item.h
rename to include/drawing_sheet/ds_proxy_undo_item.h
index b1256be347..0c43bd1dac 100644
--- a/include/page_layout/ws_proxy_undo_item.h
+++ b/include/drawing_sheet/ds_proxy_undo_item.h
@@ -22,18 +22,18 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#ifndef WS_PROXY_UNDO_ITEM_H
-#define WS_PROXY_UNDO_ITEM_H
+#ifndef DS_PROXY_UNDO_ITEM_H
+#define DS_PROXY_UNDO_ITEM_H
 
 #include <eda_item.h>
 #include <title_block.h>
 #include <page_info.h>
 
 
-class WS_PROXY_UNDO_ITEM : public EDA_ITEM
+class DS_PROXY_UNDO_ITEM : public EDA_ITEM
 {
 public:
-    WS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame );
+    DS_PROXY_UNDO_ITEM( const EDA_DRAW_FRAME* aFrame );
 
     /*
      * Restores the saved worksheet layout to the global worksheet record, and the saved
@@ -49,7 +49,7 @@ public:
 
     wxString GetClass() const override
     {
-        return wxT( "WS_PROXY_UNDO_ITEM" );
+        return wxT( "DS_PROXY_UNDO_ITEM" );
     }
 
 protected:
@@ -60,4 +60,4 @@ protected:
     int         m_selectedDrawItem;
 };
 
-#endif /* WS_PROXY_UNDO_ITEM_H */
+#endif /* DS_PROXY_UNDO_ITEM_H */
diff --git a/include/page_layout/ws_proxy_view_item.h b/include/drawing_sheet/ds_proxy_view_item.h
similarity index 86%
rename from include/page_layout/ws_proxy_view_item.h
rename to include/drawing_sheet/ds_proxy_view_item.h
index 64083a6360..668118c27d 100644
--- a/include/page_layout/ws_proxy_view_item.h
+++ b/include/drawing_sheet/ds_proxy_view_item.h
@@ -23,8 +23,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#ifndef WS_PROXY_VIEW_ITEM_H
-#define WS_PROXY_VIEW_ITEM_H
+#ifndef DS_PROXY_VIEW_ITEM_H
+#define DS_PROXY_VIEW_ITEM_H
 
 #include <eda_item.h>
 
@@ -32,21 +32,22 @@ class BOARD;
 class PAGE_INFO;
 class PROJECT;
 class TITLE_BLOCK;
-class WS_DRAW_ITEM_LINE;
-class WS_DRAW_ITEM_RECT;
-class WS_DRAW_ITEM_TEXT;
-class WS_DRAW_ITEM_BITMAP;
-class WS_DRAW_ITEM_LIST;
+class DS_DRAW_ITEM_LINE;
+class DS_DRAW_ITEM_RECT;
+class DS_DRAW_ITEM_TEXT;
+class DS_DRAW_ITEM_BITMAP;
+class DS_DRAW_ITEM_LIST;
 
 namespace KIGFX
 {
 class VIEW;
 class GAL;
+}
 
-class WS_PROXY_VIEW_ITEM : public EDA_ITEM
+class DS_PROXY_VIEW_ITEM : public EDA_ITEM
 {
 public:
-    WS_PROXY_VIEW_ITEM( int aScaleFactor, const PAGE_INFO* aPageInfo, const PROJECT* aProject,
+    DS_PROXY_VIEW_ITEM( int aScaleFactor, const PAGE_INFO* aPageInfo, const PROJECT* aProject,
                         const TITLE_BLOCK* aTitleBlock );
 
     /**
@@ -65,7 +66,7 @@ public:
     void SetPageNumber( const std::string& aPageNumber ) { m_pageNumber = aPageNumber; }
 
     /**
-     * Change the sheets count number displayed in the title block.
+     * Changes the sheet-count number displayed in the title block.
      */
     void SetSheetCount( int aSheetCount ) { m_sheetCount = aSheetCount; }
 
@@ -102,7 +103,7 @@ public:
     const BOX2I ViewBBox() const override;
 
     /// @copydoc VIEW_ITEM::ViewDraw()
-    void ViewDraw( int aLayer, VIEW* aView ) const override;
+    void ViewDraw( int aLayer, KIGFX::VIEW* aView ) const override;
 
     /// @copydoc VIEW_ITEM::ViewGetLayers()
     void ViewGetLayers( int aLayers[], int& aCount ) const override;
@@ -117,13 +118,13 @@ public:
      */
     virtual wxString GetClass() const override
     {
-        return wxT( "WS_PROXY_VIEW_ITEM" );
+        return wxT( "DS_PROXY_VIEW_ITEM" );
     }
 
-    bool HitTestDrawingSheetItems( VIEW* aView, const wxPoint& aPosition );
+    bool HitTestDrawingSheetItems( KIGFX::VIEW* aView, const wxPoint& aPosition );
 
 protected:
-    void buildDrawList( VIEW* aView, WS_DRAW_ITEM_LIST* aDrawList ) const;
+    void buildDrawList( KIGFX::VIEW* aView, DS_DRAW_ITEM_LIST* aDrawList ) const;
 
     /// the factor between mils (units used in worksheet and internal units)
     /// it is the value IU_PER_MILS used in the caller
@@ -144,6 +145,5 @@ protected:
     /// Layer that is used for page border color
     int                m_pageBorderColorLayer;
 };
-}
 
-#endif /* WS_PROXY_VIEW_ITEM_H */
+#endif /* DS_PROXY_VIEW_ITEM_H */
diff --git a/include/eda_draw_frame.h b/include/eda_draw_frame.h
index b1494aa41b..579936f58d 100644
--- a/include/eda_draw_frame.h
+++ b/include/eda_draw_frame.h
@@ -302,7 +302,7 @@ public:
     void AddStandardSubMenus( TOOL_MENU& aMenu );
 
     /**
-     * Prints the drawing sheet with the frame and title block.
+     * Prints the drawing-sheet (frame and title block).
      *
      * @param aScreen screen to draw.
      * @param aMils2Iu The mils to Iu conversion factor.
diff --git a/pagelayout_editor/CMakeLists.txt b/pagelayout_editor/CMakeLists.txt
index fcd8f61289..b5ddbbf627 100644
--- a/pagelayout_editor/CMakeLists.txt
+++ b/pagelayout_editor/CMakeLists.txt
@@ -18,7 +18,6 @@ set( DIALOGS_SRCS
     dialogs/properties_frame_base.cpp
     dialogs/dialogs_for_printing.cpp
     dialogs/dialog_new_dataitem_base.cpp
-    dialogs/dialog_new_dataitem.cpp
     dialogs/dialog_design_inspector_base.cpp
     dialogs/design_inspector.cpp
     dialogs/panel_pl_editor_color_settings.cpp
diff --git a/pagelayout_editor/dialogs/design_inspector.cpp b/pagelayout_editor/dialogs/design_inspector.cpp
index 9200f2b596..f3b4764c85 100644
--- a/pagelayout_editor/dialogs/design_inspector.cpp
+++ b/pagelayout_editor/dialogs/design_inspector.cpp
@@ -26,9 +26,9 @@
 #include <wx/wupdlock.h>
 
 #include <eda_item.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <tool/tool_manager.h>
 
 #include "dialogs/dialog_design_inspector_base.h"
@@ -209,7 +209,7 @@ void DIALOG_INSPECTOR::ReCreateDesignList()
 
     m_itemsList.clear();
 
-    WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& drawingSheet = DS_DATA_MODEL::GetTheInstance();
     wxFileName     fn( static_cast<PL_EDITOR_FRAME*>( GetParent() )->GetCurrentFileName() );
 
     if( fn.GetName().IsEmpty() )
@@ -227,33 +227,33 @@ void DIALOG_INSPECTOR::ReCreateDesignList()
                                  Iu2Millimeter( page_sizeIU.x ), Iu2Millimeter( page_sizeIU.y ) ) );
     GetGridList()->SetCellRenderer (row, COL_BITMAP, new BitmapGridCellRenderer( root_xpm ) );
     GetGridList()->SetReadOnly( row, COL_BITMAP );
-    m_itemsList.push_back( nullptr );   // this item is not a WS_DATA_ITEM, just a pseudo item
+    m_itemsList.push_back( nullptr );   // this item is not a DS_DATA_ITEM, just a pseudo item
 
     // Now adding all current items
     row++;
-    for( WS_DATA_ITEM* item : pglayout.GetItems() )
+    for( DS_DATA_ITEM* item : drawingSheet.GetItems() )
     {
         const char** img = nullptr;
 
         switch( item->GetType() )
         {
-            case WS_DATA_ITEM::WS_SEGMENT:
+            case DS_DATA_ITEM::DS_SEGMENT:
                 img = line_xpm;
                 break;
 
-            case WS_DATA_ITEM::WS_RECT:
+            case DS_DATA_ITEM::DS_RECT:
                 img = rect_xpm;
                 break;
 
-            case WS_DATA_ITEM::WS_TEXT:
+            case DS_DATA_ITEM::DS_TEXT:
                 img = text_xpm;
                 break;
 
-            case WS_DATA_ITEM::WS_POLYPOLYGON:
+            case DS_DATA_ITEM::DS_POLYPOLYGON:
                 img = poly_xpm;
                 break;
 
-            case WS_DATA_ITEM::WS_BITMAP:
+            case DS_DATA_ITEM::DS_BITMAP:
                 img = img_xpm;
                 break;
         }
@@ -266,9 +266,9 @@ void DIALOG_INSPECTOR::ReCreateDesignList()
                                      wxString::Format( "%d", item->m_RepeatCount ) );
         GetGridList()->SetCellValue( row, COL_COMMENT, item->m_Info );
 
-        if( item->GetType() == WS_DATA_ITEM::WS_TEXT )
+        if( item->GetType() == DS_DATA_ITEM::DS_TEXT )
         {
-            WS_DATA_ITEM_TEXT* t_item = static_cast<WS_DATA_ITEM_TEXT*>( item );
+            DS_DATA_ITEM_TEXT* t_item = static_cast<DS_DATA_ITEM_TEXT*>( item );
             GetGridList()->SetCellValue( row, COL_TEXTSTRING, t_item->m_TextBase );
         }
 
@@ -303,10 +303,10 @@ void DIALOG_INSPECTOR::ReCreateDesignList()
 }
 
 
-// Select the row corresponding to the WS_DATA_ITEM aItem
-void DIALOG_INSPECTOR::SelectRow( WS_DATA_ITEM* aItem )
+// Select the row corresponding to the DS_DATA_ITEM aItem
+void DIALOG_INSPECTOR::SelectRow( DS_DATA_ITEM* aItem )
 {
-    // m_itemsList[0] is not a true WS_DATA_ITEM
+    // m_itemsList[0] is not a true DS_DATA_ITEM
     for( unsigned row = 1; row < m_itemsList.size(); ++row )
     {
         if( m_itemsList[row] == aItem )
@@ -319,29 +319,20 @@ void DIALOG_INSPECTOR::SelectRow( WS_DATA_ITEM* aItem )
 }
 
 //return the page layout item managed by the cell
-WS_DATA_ITEM* DIALOG_INSPECTOR::GetWsDataItem( int aRow ) const
+DS_DATA_ITEM* DIALOG_INSPECTOR::GetDrawingSheetDataItem( int aRow ) const
 {
         return ( aRow >= 0 && aRow < (int)m_itemsList.size() ) ? m_itemsList[aRow]: nullptr;
 }
 
 
-/* return the page layout item managed by the selected cell (or NULL)
- */
-WS_DATA_ITEM* DIALOG_INSPECTOR::GetSelectedWsDataItem() const
-{
-    int idx = GetGridList()->GetGridCursorRow();
-    return GetWsDataItem( idx );
-}
-
-
 void DIALOG_INSPECTOR::onCellClicked( wxGridEvent& event )
 {
     int row = event.GetRow();
     GetGridList()->SelectRow( row );
 
-    WS_DATA_ITEM* item = GetWsDataItem( row );
+    DS_DATA_ITEM* item = GetDrawingSheetDataItem( row );
 
-    if( !item )     // only WS_DATA_ITEM are returned.
+    if( !item )     // only DS_DATA_ITEM are returned.
         return;
 
     // Select this item in drawing sheet editor, and update the properties panel:
diff --git a/pagelayout_editor/dialogs/design_inspector.h b/pagelayout_editor/dialogs/design_inspector.h
index eed39b9480..ff344e05e8 100644
--- a/pagelayout_editor/dialogs/design_inspector.h
+++ b/pagelayout_editor/dialogs/design_inspector.h
@@ -43,8 +43,8 @@ private:
     wxGrid* GetGridList() const { return m_gridListItems; }
 	void onCellClicked( wxGridEvent& event ) override;
 
-    // The list of WS_DATA_ITEM found in page layout
-    std::vector<WS_DATA_ITEM*> m_itemsList;
+    // The list of DS_DATA_ITEM found in page layout
+    std::vector<DS_DATA_ITEM*> m_itemsList;
     PL_EDITOR_FRAME* m_editorFrame;
 
 public:
@@ -53,16 +53,13 @@ public:
 
     void    ReCreateDesignList();
 
-    /** @return the WS_DATA_ITEM item managed by the grid row
+    /**
+     * @return the DS_DATA_ITEM item managed by the grid row
      */
-    WS_DATA_ITEM* GetWsDataItem( int aRow ) const;
+    DS_DATA_ITEM* GetDrawingSheetDataItem( int aRow ) const;
 
-    /** @return the page layout item managed by the selected row (or NULL)
-     */
-    WS_DATA_ITEM* GetSelectedWsDataItem() const;
-
-    // Select the tree item corresponding to the WS_DATA_ITEM aItem
-    void SelectRow( WS_DATA_ITEM* aItem );
+    // Select the tree item corresponding to the DS_DATA_ITEM aItem
+    void SelectRow( DS_DATA_ITEM* aItem );
 };
 
 #endif /* _DESIGN_INSPECTOR_H */
diff --git a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp b/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
deleted file mode 100644
index e5511fdabc..0000000000
--- a/pagelayout_editor/dialogs/dialog_new_dataitem.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * This program source code file is part of KiCad, a free EDA CAD application.
- *
- * Copyright (C) 2013 CERN
- * @author Jean-Pierre Charras, jp.charras at wanadoo.fr
- *
- * 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 <eda_item.h>
-#include <page_layout/ws_data_item.h>
-
-#include "dialog_new_dataitem_base.h"
-#include "pl_editor_frame.h"
-
-class DIALOG_NEW_DATAITEM : public DIALOG_NEW_DATAITEM_BASE
-{
-    WS_DATA_ITEM* m_item;
-
-public:
-    DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, WS_DATA_ITEM* aItem );
-
-private:
-    void OnOKClick( wxCommandEvent& event ) override;
-
-    void initDlg();
-};
-
-
-int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WS_DATA_ITEM* aItem )
-{
-    DIALOG_NEW_DATAITEM dlg( aCaller, aItem );
-    return dlg.ShowModal();
-}
-
-
-DIALOG_NEW_DATAITEM::DIALOG_NEW_DATAITEM( PL_EDITOR_FRAME* aCaller, WS_DATA_ITEM* aItem )
-    : DIALOG_NEW_DATAITEM_BASE( aCaller )
-{
-    m_item = aItem;
-    initDlg();
-
-    GetSizer()->SetSizeHints( this );
-    Centre();
-}
-
-
-void DIALOG_NEW_DATAITEM::OnOKClick( wxCommandEvent& event )
-{
-    if( m_item->GetType() == WS_DATA_ITEM::WS_TEXT )
-    {
-        WS_DATA_ITEM_TEXT* text = ((WS_DATA_ITEM_TEXT*)m_item);
-        text->m_TextBase = m_textCtrlText->GetValue();
-        // For multiline texts, replace the '\n' char by the "\\n" sequence",
-        // in internal string
-        text->m_TextBase.Replace( wxT("\n"), wxT("\\n") );
-    }
-
-    wxString msg;
-
-    // Import Start point
-    double dtmp;
-    msg = m_textCtrlPosX->GetValue();
-    msg.ToDouble( &dtmp );
-    m_item->m_Pos.m_Pos.x = dtmp;
-
-    msg = m_textCtrlPosY->GetValue();
-    msg.ToDouble( &dtmp );
-    m_item->m_Pos.m_Pos.y = dtmp;
-
-    switch( m_choiceCornerPos->GetSelection() )
-    {
-    case 2: m_item->m_Pos.m_Anchor = RB_CORNER; break;
-    case 0: m_item->m_Pos.m_Anchor = RT_CORNER; break;
-    case 3: m_item->m_Pos.m_Anchor = LB_CORNER; break;
-    case 1: m_item->m_Pos.m_Anchor = LT_CORNER; break;
-    }
-
-    // Import End point
-    msg = m_textCtrlEndX->GetValue();
-    msg.ToDouble( &dtmp );
-    m_item->m_End.m_Pos.x = dtmp;
-
-    msg = m_textCtrlEndY->GetValue();
-    msg.ToDouble( &dtmp );
-    m_item->m_End.m_Pos.y = dtmp;
-
-    switch( m_choiceCornerEnd->GetSelection() )
-    {
-    case 2: m_item->m_End.m_Anchor = RB_CORNER; break;
-    case 0: m_item->m_End.m_Anchor = RT_CORNER; break;
-    case 3: m_item->m_End.m_Anchor = LB_CORNER; break;
-    case 1: m_item->m_End.m_Anchor = LT_CORNER; break;
-    }
-
-    EndModal( wxID_OK);
-}
-
-void DIALOG_NEW_DATAITEM::initDlg()
-{
-    // Disable useless widgets, depending on WS_DATA_ITEM type
-    switch( m_item->GetType() )
-    {
-    case WS_DATA_ITEM::WS_SEGMENT:
-    case WS_DATA_ITEM::WS_RECT:
-        m_textCtrlText->Enable( false );
-        break;
-
-    case WS_DATA_ITEM::WS_BITMAP:
-    case WS_DATA_ITEM::WS_POLYPOLYGON:
-        m_textCtrlText->Enable( false );
-        KI_FALLTHROUGH;
-
-    case WS_DATA_ITEM::WS_TEXT:
-        m_textCtrlEndX->Enable( false );
-        m_textCtrlEndY->Enable( false );
-        m_choiceCornerEnd->Enable( false );
-        break;
-    }
-
-    wxString msg;
-
-    // Position/ start point
-    msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.x );
-    m_textCtrlPosX->SetValue( msg );
-    msg.Printf( wxT("%.3f"), m_item->m_Pos.m_Pos.y );
-    m_textCtrlPosY->SetValue( msg );
-
-    switch(  m_item->m_Pos.m_Anchor )
-    {
-    case RB_CORNER: m_choiceCornerPos->SetSelection( 2 ); break;
-    case RT_CORNER: m_choiceCornerPos->SetSelection( 0 ); break;
-    case LB_CORNER: m_choiceCornerPos->SetSelection( 3 ); break;
-    case LT_CORNER: m_choiceCornerPos->SetSelection( 1 ); break;
-    }
-
-    // End point
-    msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.x );
-    m_textCtrlEndX->SetValue( msg );
-    msg.Printf( wxT("%.3f"), m_item->m_End.m_Pos.y );
-    m_textCtrlEndY->SetValue( msg );
-
-    switch( m_item->m_End.m_Anchor )
-    {
-    case RB_CORNER: m_choiceCornerEnd->SetSelection( 2 ); break;
-    case RT_CORNER: m_choiceCornerEnd->SetSelection( 0 ); break;
-    case LB_CORNER: m_choiceCornerEnd->SetSelection( 3 ); break;
-    case LT_CORNER: m_choiceCornerEnd->SetSelection( 1 ); break;
-    }
-
-    if( m_item->GetType() == WS_DATA_ITEM::WS_TEXT )
-        m_textCtrlText->SetValue( ((WS_DATA_ITEM_TEXT*)m_item)->m_TextBase );
-}
diff --git a/pagelayout_editor/dialogs/dialogs_for_printing.cpp b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
index c273da8fc2..ef833ec4f9 100644
--- a/pagelayout_editor/dialogs/dialogs_for_printing.cpp
+++ b/pagelayout_editor/dialogs/dialogs_for_printing.cpp
@@ -32,10 +32,10 @@
 #include <dialog_helpers.h>
 #include <eda_item.h>
 #include <gr_basic.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_painter.h>
 #include <dialogs/dialog_page_settings.h>
 
 #include "invoke_pl_editor_dialog.h"
@@ -188,19 +188,19 @@ void PLEDITOR_PRINTOUT::PrintPage( int aPageNum )
 
     screen->SetVirtualPageNumber( aPageNum );
 
-    KIGFX::WS_RENDER_SETTINGS renderSettings;
+    KIGFX::DS_RENDER_SETTINGS renderSettings;
     renderSettings.SetDefaultPenWidth( 1 );
     renderSettings.SetLayerColor( LAYER_DRAWINGSHEET, COLOR4D( RED ) );
     renderSettings.SetPrintDC( dc );
 
     // Ensure the scaling factor (used only in printing) of bitmaps is up to date
-    WS_DATA_MODEL&     model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
-    for( WS_DATA_ITEM* dataItem : model.GetItems() )
+    for( DS_DATA_ITEM* dataItem : model.GetItems() )
     {
-        if( dataItem->GetType() == WS_DATA_ITEM::WS_BITMAP )
+        if( dataItem->GetType() == DS_DATA_ITEM::DS_BITMAP )
         {
-            BITMAP_BASE* bitmap = static_cast<WS_DATA_ITEM_BITMAP*>( dataItem )->m_ImageBitmap;
+            BITMAP_BASE* bitmap = static_cast<DS_DATA_ITEM_BITMAP*>( dataItem )->m_ImageBitmap;
             bitmap->SetPixelSizeIu( IU_PER_MILS * 1000 / bitmap->GetPPI() );
         }
     }
diff --git a/pagelayout_editor/dialogs/properties_frame.cpp b/pagelayout_editor/dialogs/properties_frame.cpp
index e859c74311..71014c8921 100644
--- a/pagelayout_editor/dialogs/properties_frame.cpp
+++ b/pagelayout_editor/dialogs/properties_frame.cpp
@@ -26,13 +26,12 @@
 #include <project.h>
 #include <scintilla_tricks.h>
 #include <tool/tool_manager.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <view/view.h>
 
 #include "properties_frame.h"
-#include "pl_draw_panel_gal.h"
 #include "pl_editor_frame.h"
 #include "tools/pl_selection_tool.h"
 
@@ -101,7 +100,7 @@ wxSize PROPERTIES_FRAME::GetMinSize() const
 // Data transfert from general properties to widgets
 void PROPERTIES_FRAME::CopyPrmsFromGeneralToPanel()
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     // Set default parameters
     m_textCtrlDefaultLineWidthBinder.SetDoubleValue(
@@ -125,7 +124,7 @@ void PROPERTIES_FRAME::CopyPrmsFromGeneralToPanel()
 // Data transfert from widgets to general properties
 bool PROPERTIES_FRAME::CopyPrmsFromPanelToGeneral()
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     // Import default parameters from widgets
     model.m_DefaultLineWidth =
@@ -156,7 +155,7 @@ bool PROPERTIES_FRAME::CopyPrmsFromPanelToGeneral()
 
 
 // Data transfert from item to widgets in properties frame
-void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
+void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( DS_DATA_ITEM* aItem )
 {
     if( !aItem )
     {
@@ -166,7 +165,7 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
 
     wxString msg;
 
-    // Set parameters common to all WS_DATA_ITEM types
+    // Set parameters common to all DS_DATA_ITEM types
     m_staticTextType->SetLabel( aItem->GetClassName() );
     m_textCtrlComment->SetValue( aItem->m_Info );
 
@@ -210,12 +209,12 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
     m_textCtrlThicknessBinder.SetDoubleValue(
             From_User_Unit( EDA_UNITS::MILLIMETRES, aItem->m_LineWidth ) );
 
-    // Now, set prms more specific to WS_DATA_ITEM types
+    // Now, set prms more specific to DS_DATA_ITEM types
     // For a given type, disable widgets which are not relevant,
     // and be sure widgets which are relevant are enabled
-    if( aItem->GetType() == WS_DATA_ITEM::WS_TEXT )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_TEXT )
     {
-        WS_DATA_ITEM_TEXT* item = (WS_DATA_ITEM_TEXT*) aItem;
+        DS_DATA_ITEM_TEXT* item = static_cast<DS_DATA_ITEM_TEXT*>( aItem );
         item->m_FullText = item->m_TextBase;
         // Replace our '\' 'n' sequence by the EOL char
         item->ReplaceAntiSlashSequence();
@@ -259,17 +258,17 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
                 From_User_Unit( EDA_UNITS::MILLIMETRES, item->m_TextSize.y ) );
     }
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_POLYPOLYGON )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_POLYPOLYGON )
     {
-        WS_DATA_ITEM_POLYGONS* item = (WS_DATA_ITEM_POLYGONS*) aItem;
+        DS_DATA_ITEM_POLYGONS* item = static_cast<DS_DATA_ITEM_POLYGONS*>( aItem );
         // Rotation (poly and text)
         msg.Printf( wxT("%.3f"), item->m_Orient );
         m_textCtrlRotation->SetValue( msg );
     }
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_BITMAP )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_BITMAP )
     {
-        WS_DATA_ITEM_BITMAP* item = (WS_DATA_ITEM_BITMAP*) aItem;
+        DS_DATA_ITEM_BITMAP* item = static_cast<DS_DATA_ITEM_BITMAP*>( aItem );
         // select definition in PPI
         msg.Printf( wxT("%d"), item->GetPPI() );
         m_textCtrlBitmapDPI->SetValue( msg );
@@ -277,15 +276,15 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
 
     m_SizerItemProperties->Show( true );
 
-    m_SizerTextOptions->Show( aItem->GetType() == WS_DATA_ITEM::WS_TEXT );
+    m_SizerTextOptions->Show( aItem->GetType() == DS_DATA_ITEM::DS_TEXT );
 
-    m_sbSizerEndPosition->Show( aItem->GetType() == WS_DATA_ITEM::WS_SEGMENT
-                           || aItem->GetType() == WS_DATA_ITEM::WS_RECT );
+    m_sbSizerEndPosition->Show( aItem->GetType() == DS_DATA_ITEM::DS_SEGMENT
+                           || aItem->GetType() == DS_DATA_ITEM::DS_RECT );
 
-    m_textCtrlThicknessBinder.Show( aItem->GetType() != WS_DATA_ITEM::WS_BITMAP );
+    m_textCtrlThicknessBinder.Show( aItem->GetType() != DS_DATA_ITEM::DS_BITMAP );
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_TEXT
-            || aItem->GetType() == WS_DATA_ITEM::WS_POLYPOLYGON )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_TEXT
+            || aItem->GetType() == DS_DATA_ITEM::DS_POLYPOLYGON )
     {
         m_staticTextRot->Show( true );
         m_textCtrlRotation->Show( true );
@@ -296,11 +295,11 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem )
         m_textCtrlRotation->Show( false );
     }
 
-    m_staticTextBitmapDPI->Show( aItem->GetType() == WS_DATA_ITEM::WS_BITMAP );
-    m_textCtrlBitmapDPI->Show( aItem->GetType() == WS_DATA_ITEM::WS_BITMAP );
+    m_staticTextBitmapDPI->Show( aItem->GetType() == DS_DATA_ITEM::DS_BITMAP );
+    m_textCtrlBitmapDPI->Show( aItem->GetType() == DS_DATA_ITEM::DS_BITMAP );
 
-    m_staticTextInclabel->Show( aItem->GetType() == WS_DATA_ITEM::WS_TEXT );
-    m_textCtrlTextIncrement->Show( aItem->GetType() == WS_DATA_ITEM::WS_TEXT );
+    m_staticTextInclabel->Show( aItem->GetType() == DS_DATA_ITEM::DS_TEXT );
+    m_textCtrlTextIncrement->Show( aItem->GetType() == DS_DATA_ITEM::DS_TEXT );
 
     // Repeat parameters
     msg.Printf( wxT("%d"), aItem->m_RepeatCount );
@@ -334,11 +333,11 @@ void PROPERTIES_FRAME::OnAcceptPrms( wxCommandEvent& event )
 
     m_parent->SaveCopyInUndoList();
 
-    WS_DRAW_ITEM_BASE* drawItem = (WS_DRAW_ITEM_BASE*) selection.Front();
+    DS_DRAW_ITEM_BASE* drawItem = (DS_DRAW_ITEM_BASE*) selection.Front();
 
     if( drawItem )
     {
-        WS_DATA_ITEM* dataItem = drawItem->GetPeer();
+        DS_DATA_ITEM* dataItem = drawItem->GetPeer();
         CopyPrmsFromPanelToItem( dataItem );
         // Be sure what is displayed is what is set for item
         // (mainly, texts can be modified if they contain "\n")
@@ -361,7 +360,7 @@ void PROPERTIES_FRAME::OnAcceptPrms( wxCommandEvent& event )
 
 void PROPERTIES_FRAME::OnSetDefaultValues( wxCommandEvent& event )
 {
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
     model.m_DefaultTextSize = DSIZE( TB_DEFAULT_TEXTSIZE, TB_DEFAULT_TEXTSIZE );
     model.m_DefaultLineWidth = 0.15;
@@ -376,7 +375,7 @@ void PROPERTIES_FRAME::OnSetDefaultValues( wxCommandEvent& event )
 
 
 // Data transfert from  properties frame to item parameters
-bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WS_DATA_ITEM* aItem )
+bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( DS_DATA_ITEM* aItem )
 {
     if( aItem == NULL )
         return false;
@@ -430,9 +429,9 @@ bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WS_DATA_ITEM* aItem )
     aItem->m_IncrementVector.x = To_User_Unit( EDA_UNITS::MILLIMETRES, m_textCtrlStepXBinder.GetValue() );
     aItem->m_IncrementVector.y = To_User_Unit( EDA_UNITS::MILLIMETRES, m_textCtrlStepYBinder.GetValue() );
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_TEXT )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_TEXT )
     {
-        WS_DATA_ITEM_TEXT* item = (WS_DATA_ITEM_TEXT*) aItem;
+        DS_DATA_ITEM_TEXT* item = static_cast<DS_DATA_ITEM_TEXT*>( aItem );
 
         item->m_TextBase = m_stcText->GetValue();
 
@@ -473,17 +472,17 @@ bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WS_DATA_ITEM* aItem )
                 To_User_Unit( EDA_UNITS::MILLIMETRES, m_textCtrlConstraintYBinder.GetValue() );
     }
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_POLYPOLYGON )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_POLYPOLYGON )
     {
-        WS_DATA_ITEM_POLYGONS* item = (WS_DATA_ITEM_POLYGONS*) aItem;
+        DS_DATA_ITEM_POLYGONS* item = static_cast<DS_DATA_ITEM_POLYGONS*>( aItem );
 
         msg = m_textCtrlRotation->GetValue();
         item->m_Orient = DoubleValueFromString( EDA_UNITS::UNSCALED, msg );
     }
 
-    if( aItem->GetType() == WS_DATA_ITEM::WS_BITMAP )
+    if( aItem->GetType() == DS_DATA_ITEM::DS_BITMAP )
     {
-        WS_DATA_ITEM_BITMAP* item = (WS_DATA_ITEM_BITMAP*) aItem;
+        DS_DATA_ITEM_BITMAP* item = static_cast<DS_DATA_ITEM_BITMAP*>( aItem );
         long                 value;
 
         msg = m_textCtrlBitmapDPI->GetValue();
@@ -507,7 +506,7 @@ void PROPERTIES_FRAME::onScintillaCharAdded( wxStyledTextEvent &aEvent )
             && m_stcText->GetCharAt( start-2 ) == '$'
             && m_stcText->GetCharAt( start-1 ) == '{' )
     {
-        WS_DRAW_ITEM_LIST::GetTextVars( &autocompleteTokens );
+        DS_DRAW_ITEM_LIST::GetTextVars( &autocompleteTokens );
 
         partial = m_stcText->GetTextRange( start, pos );
 
diff --git a/pagelayout_editor/dialogs/properties_frame.h b/pagelayout_editor/dialogs/properties_frame.h
index b9e2ab2ef1..ad835f1c5b 100644
--- a/pagelayout_editor/dialogs/properties_frame.h
+++ b/pagelayout_editor/dialogs/properties_frame.h
@@ -32,7 +32,7 @@
 #include "dialogs/properties_frame_base.h"
 #include <widgets/unit_binder.h>
 
-class WS_DATA_ITEM;
+class DS_DATA_ITEM;
 class PL_EDITOR_FRAME;
 class SCINTILLA_TRICKS;
 
@@ -91,10 +91,10 @@ public:
     bool CopyPrmsFromPanelToGeneral();
 
     // Data transfert from item to widgets in properties frame
-    void CopyPrmsFromItemToPanel( WS_DATA_ITEM* aItem );
+    void CopyPrmsFromItemToPanel( DS_DATA_ITEM* aItem );
 
     // Data transfert from widgets in properties frame to item
-    bool CopyPrmsFromPanelToItem( WS_DATA_ITEM* aItem );
+    bool CopyPrmsFromPanelToItem( DS_DATA_ITEM* aItem );
 
     wxSize GetMinSize() const override;
 };
diff --git a/pagelayout_editor/files.cpp b/pagelayout_editor/files.cpp
index 23aaa31209..87d49958e3 100644
--- a/pagelayout_editor/files.cpp
+++ b/pagelayout_editor/files.cpp
@@ -26,7 +26,7 @@
 
 #include <confirm.h>
 #include <gestfich.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <paths.h>
 #include <widgets/infobar.h>
 #include <wildcards_and_files_ext.h>
@@ -89,7 +89,7 @@ void PL_EDITOR_FRAME::Files_io( wxCommandEvent& event )
     wxString       msg;
     int            id = event.GetId();
     wxString       filename = GetCurrentFileName();
-    WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& pglayout = DS_DATA_MODEL::GetTheInstance();
 
     if( filename.IsEmpty() && id == wxID_SAVE )
         id = wxID_SAVEAS;
@@ -223,7 +223,7 @@ bool PL_EDITOR_FRAME::LoadPageLayoutDescrFile( const wxString& aFullFileName )
 {
     if( wxFileExists( aFullFileName ) )
     {
-        WS_DATA_MODEL::GetTheInstance().SetPageLayout( aFullFileName );
+        DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( aFullFileName );
         SetCurrentFileName( aFullFileName );
         UpdateFileHistory( aFullFileName );
         GetScreen()->ClrModify();
@@ -251,7 +251,7 @@ bool PL_EDITOR_FRAME::InsertPageLayoutDescrFile( const wxString& aFullFileName )
     {
         const bool append = true;
         SaveCopyInUndoList();
-        WS_DATA_MODEL::GetTheInstance().SetPageLayout( aFullFileName, append );
+        DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( aFullFileName, append );
         return true;
     }
 
@@ -269,7 +269,7 @@ bool PL_EDITOR_FRAME::SavePageLayoutDescrFile( const wxString& aFullFileName )
 
         try
         {
-            WS_DATA_MODEL::GetTheInstance().Save( tempFile.GetFullPath() );
+            DS_DATA_MODEL::GetTheInstance().Save( tempFile.GetFullPath() );
         }
         catch( const IO_ERROR& )
         {
diff --git a/pagelayout_editor/invoke_pl_editor_dialog.h b/pagelayout_editor/invoke_pl_editor_dialog.h
index fd7661b8cf..0c40d2687b 100644
--- a/pagelayout_editor/invoke_pl_editor_dialog.h
+++ b/pagelayout_editor/invoke_pl_editor_dialog.h
@@ -42,15 +42,11 @@
 // Often this is not used in the prototypes, since wxFrame is good enough and would
 // represent maximum information hiding.
 class PL_EDITOR_FRAME;
-class WS_DATA_ITEM;
+class DS_DATA_ITEM;
 class wxPrintData;
 class wxPageSetupDialogData;
 
 
-/// Create and show DIALOG_NEW_DATAITEM and return whatever
-/// DIALOG_NEW_DATAITEM::ShowModal() returns.
-int InvokeDialogNewItem( PL_EDITOR_FRAME* aCaller, WS_DATA_ITEM* aItem );
-
 /// Create and show a print dialog
 /// returns 1 if OK, 0 , there is a problem.
 int InvokeDialogPrint( PL_EDITOR_FRAME* aCaller, wxPrintData* aPrintData,
diff --git a/pagelayout_editor/pl_draw_panel_gal.cpp b/pagelayout_editor/pl_draw_panel_gal.cpp
index a94e9352d4..c733966264 100644
--- a/pagelayout_editor/pl_draw_panel_gal.cpp
+++ b/pagelayout_editor/pl_draw_panel_gal.cpp
@@ -23,10 +23,10 @@
 #include <view/view.h>
 #include <tool/tool_manager.h>
 #include <view/wx_view_controls.h>
-#include <page_layout/ws_proxy_view_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_painter.h>
 #include <pgm_base.h>
 #include <kiway.h>
 #include <settings/settings_manager.h>
@@ -52,7 +52,7 @@ PL_DRAW_PANEL_GAL::PL_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindo
 
     GetGAL()->SetWorldUnitLength( 1.0/IU_PER_MM /* 10 nm */ / 25.4 /* 1 inch in mm */ );
 
-    m_painter = std::make_unique<KIGFX::WS_PAINTER>( m_gal );
+    m_painter = std::make_unique<KIGFX::DS_PAINTER>( m_gal );
 
     SETTINGS_MANAGER&   settingsManager = Pgm().GetSettingsManager();
     PL_EDITOR_SETTINGS* cfg = settingsManager.GetAppSettings<PL_EDITOR_SETTINGS>();
@@ -86,7 +86,7 @@ void PL_DRAW_PANEL_GAL::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame,
 void PL_DRAW_PANEL_GAL::DisplayWorksheet()
 {
     PL_SELECTION_TOOL* selTool = m_edaFrame->GetToolManager()->GetTool<PL_SELECTION_TOOL>();
-    WS_DATA_MODEL&     model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL&     model = DS_DATA_MODEL::GetTheInstance();
 
     selTool->GetSelection().Clear();
     m_view->Clear();
@@ -102,22 +102,22 @@ void PL_DRAW_PANEL_GAL::DisplayWorksheet()
     model.SetupDrawEnvironment( m_edaFrame->GetPageSettings(), Mils2iu( 1 ) );
 
     // To show the formatted texts instead of raw texts in drawing sheet editor, we need
-    // a dummy WS_DRAW_ITEM_LIST.
-    WS_DRAW_ITEM_LIST dummy;
+    // a dummy DS_DRAW_ITEM_LIST.
+    DS_DRAW_ITEM_LIST dummy;
     dummy.SetPaperFormat( &m_edaFrame->GetPageSettings().GetType() );
     dummy.SetTitleBlock( &m_edaFrame->GetTitleBlock() );
     dummy.SetProject( &m_edaFrame->Prj() );
     dummy.SetMilsToIUfactor( IU_PER_MILS );
 
-    for( WS_DATA_ITEM* dataItem : model.GetItems() )
+    for( DS_DATA_ITEM* dataItem : model.GetItems() )
         dataItem->SyncDrawItems( &dummy, m_view );
 
-    // Build and add a WS_DRAW_ITEM_PAGE to show the page limits and the corner position
+    // Build and add a DS_DRAW_ITEM_PAGE to show the page limits and the corner position
     // of the selected corner for coord origin of new items
-    // Not also this item has no peer in WS_DATA_MODEL list.
+    // Not also this item has no peer in DS_DATA_MODEL list.
     const int penWidth = 0;     // This value is to use the default thickness line
     constexpr double markerSize = Millimeter2iu( 5 );
-    m_pageDrawItem = std::make_unique<WS_DRAW_ITEM_PAGE>( penWidth, markerSize );
+    m_pageDrawItem = std::make_unique<DS_DRAW_ITEM_PAGE>( penWidth, markerSize );
     m_view->Add( m_pageDrawItem.get() );
 
     selTool->RebuildSelection();
diff --git a/pagelayout_editor/pl_draw_panel_gal.h b/pagelayout_editor/pl_draw_panel_gal.h
index 546011b0ba..211b9c60e5 100644
--- a/pagelayout_editor/pl_draw_panel_gal.h
+++ b/pagelayout_editor/pl_draw_panel_gal.h
@@ -22,12 +22,9 @@
 
 #include <class_draw_panel_gal.h>
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-}
+class DS_PROXY_VIEW_ITEM;
+class DS_DRAW_ITEM_PAGE;
 
-class WS_DRAW_ITEM_PAGE;
 
 class PL_DRAW_PANEL_GAL : public EDA_DRAW_PANEL_GAL
 {
@@ -57,9 +54,9 @@ protected:
     void setDefaultLayerDeps();
 
     ///< Currently used worksheet
-    std::unique_ptr<KIGFX::WS_PROXY_VIEW_ITEM> m_worksheet;
+    std::unique_ptr<DS_PROXY_VIEW_ITEM> m_worksheet;
 
-    std::unique_ptr<WS_DRAW_ITEM_PAGE> m_pageDrawItem;
+    std::unique_ptr<DS_DRAW_ITEM_PAGE> m_pageDrawItem;
 };
 
 
diff --git a/pagelayout_editor/pl_editor_frame.cpp b/pagelayout_editor/pl_editor_frame.cpp
index f6fc3baaf9..e776d2cfe6 100644
--- a/pagelayout_editor/pl_editor_frame.cpp
+++ b/pagelayout_editor/pl_editor_frame.cpp
@@ -28,8 +28,8 @@
 #include <bitmaps.h>
 #include <core/arraydim.h>
 #include <eda_item.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <widgets/paged_dialog.h>
 #include <dialogs/panel_gal_display_options.h>
 #include <panel_hotkeys_editor.h>
@@ -91,7 +91,7 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
     m_userUnits = EDA_UNITS::MILLIMETRES;
 
     m_showBorderAndTitleBlock   = true; // true for reference drawings.
-    WS_DATA_MODEL::GetTheInstance().m_EditMode = true;
+    DS_DATA_MODEL::GetTheInstance().m_EditMode = true;
     SetShowPageLimits( true );
     m_aboutTitle = _( "KiCad Drawing Sheet Editor" );
 
@@ -195,12 +195,11 @@ PL_EDITOR_FRAME::PL_EDITOR_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
     SetGridOrigin( originCoord );
 
     // Initialize the current page layout
-    WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
 #if 0       //start with empty layout
-    pglayout.AllowVoidList( true );
-    pglayout.ClearList();
+    DS_DATA_MODEL::GetTheInstance().AllowVoidList( true );
+    DS_DATA_MODEL::GetTheInstance().ClearList();
 #else       // start with the default Kicad layout
-    pglayout.SetPageLayout();
+    DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet();
 #endif
     OnNewPageLayout();
 
@@ -287,13 +286,13 @@ void PL_EDITOR_FRAME::setupUIConditions()
     auto titleBlockNormalMode =
         [] ( const SELECTION& )
         {
-            return WS_DATA_MODEL::GetTheInstance().m_EditMode == false;
+            return DS_DATA_MODEL::GetTheInstance().m_EditMode == false;
         };
 
     auto titleBlockEditMode =
         [] ( const SELECTION& )
         {
-            return WS_DATA_MODEL::GetTheInstance().m_EditMode == true;
+            return DS_DATA_MODEL::GetTheInstance().m_EditMode == true;
         };
 
     mgr->SetConditions( PL_ACTIONS::layoutNormalMode, CHECK( titleBlockNormalMode ) );
@@ -372,7 +371,7 @@ void PL_EDITOR_FRAME::doCloseWindow()
     Show( false );
 
     // clean up the data before the view is destroyed
-    WS_DATA_MODEL::GetTheInstance().ClearList();
+    DS_DATA_MODEL::GetTheInstance().ClearList();
 
     // On Linux, m_propertiesPagelayout must be destroyed
     // before deleting the main frame to avoid a crash when closing
@@ -609,7 +608,7 @@ wxPoint PL_EDITOR_FRAME::ReturnCoordOriginCorner() const
     wxPoint originCoord;
 
     // To avoid duplicate code, we use a dummy segment starting at 0,0 in relative coord
-    WS_DATA_ITEM dummy( WS_DATA_ITEM::WS_SEGMENT );
+    DS_DATA_ITEM dummy( DS_DATA_ITEM::DS_SEGMENT );
 
     switch( m_originSelectChoice )
     {
@@ -749,14 +748,14 @@ void PL_EDITOR_FRAME::UpdateStatusBar()
 void PL_EDITOR_FRAME::PrintPage( const RENDER_SETTINGS* aSettings )
 {
     GetScreen()->SetVirtualPageNumber( GetPageNumberOption() ? 1 : 2 );
-    WS_DATA_MODEL&     model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
 
-    for( WS_DATA_ITEM* dataItem : model.GetItems() )
+    for( DS_DATA_ITEM* dataItem : model.GetItems() )
     {
         // Ensure the scaling factor (used only in printing) of bitmaps is up to date
-        if( dataItem->GetType() == WS_DATA_ITEM::WS_BITMAP )
+        if( dataItem->GetType() == DS_DATA_ITEM::DS_BITMAP )
         {
-            BITMAP_BASE* bitmap = static_cast<WS_DATA_ITEM_BITMAP*>( dataItem )->m_ImageBitmap;
+            BITMAP_BASE* bitmap = static_cast<DS_DATA_ITEM_BITMAP*>( dataItem )->m_ImageBitmap;
             bitmap->SetPixelSizeIu( IU_PER_MILS * 1000 / bitmap->GetPPI() );
         }
     }
@@ -786,10 +785,10 @@ void PL_EDITOR_FRAME::HardRedraw()
 
     PL_SELECTION_TOOL*  selTool = m_toolManager->GetTool<PL_SELECTION_TOOL>();
     PL_SELECTION&       selection = selTool->GetSelection();
-    WS_DATA_ITEM*       item = nullptr;
+    DS_DATA_ITEM*       item = nullptr;
 
     if( selection.GetSize() == 1 )
-        item = static_cast<WS_DRAW_ITEM_BASE*>( selection.Front() )->GetPeer();
+        item = static_cast<DS_DRAW_ITEM_BASE*>( selection.Front() )->GetPeer();
 
     m_propertiesPagelayout->CopyPrmsFromItemToPanel( item );
     m_propertiesPagelayout->CopyPrmsFromGeneralToPanel();
@@ -797,29 +796,29 @@ void PL_EDITOR_FRAME::HardRedraw()
 }
 
 
-WS_DATA_ITEM* PL_EDITOR_FRAME::AddPageLayoutItem( int aType )
+DS_DATA_ITEM* PL_EDITOR_FRAME::AddPageLayoutItem( int aType )
 {
-    WS_DATA_ITEM * item = NULL;
+    DS_DATA_ITEM * item = NULL;
 
     switch( aType )
     {
-    case WS_DATA_ITEM::WS_TEXT:
-        item = new WS_DATA_ITEM_TEXT( wxT( "Text") );
+    case DS_DATA_ITEM::DS_TEXT:
+        item = new DS_DATA_ITEM_TEXT( wxT( "Text") );
         break;
 
-    case WS_DATA_ITEM::WS_SEGMENT:
-        item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_SEGMENT );
+    case DS_DATA_ITEM::DS_SEGMENT:
+        item = new DS_DATA_ITEM( DS_DATA_ITEM::DS_SEGMENT );
         break;
 
-    case WS_DATA_ITEM::WS_RECT:
-        item = new WS_DATA_ITEM( WS_DATA_ITEM::WS_RECT );
+    case DS_DATA_ITEM::DS_RECT:
+        item = new DS_DATA_ITEM( DS_DATA_ITEM::DS_RECT );
         break;
 
-    case WS_DATA_ITEM::WS_POLYPOLYGON:
-        item = new WS_DATA_ITEM_POLYGONS();
+    case DS_DATA_ITEM::DS_POLYPOLYGON:
+        item = new DS_DATA_ITEM_POLYGONS();
         break;
 
-    case WS_DATA_ITEM::WS_BITMAP:
+    case DS_DATA_ITEM::DS_BITMAP:
     {
         wxFileDialog fileDlg( this, _( "Choose Image" ), wxEmptyString, wxEmptyString,
                               _( "Image Files" ) + wxS( " " ) + wxImage::GetImageExtWildcard(),
@@ -847,7 +846,7 @@ WS_DATA_ITEM* PL_EDITOR_FRAME::AddPageLayoutItem( int aType )
 
         // Set the scale factor for pl_editor (it is set for eeschema by default)
         image->SetPixelSizeIu( IU_PER_MILS * 1000.0 / image->GetPPI() );
-        item = new WS_DATA_ITEM_BITMAP( image );
+        item = new DS_DATA_ITEM_BITMAP( image );
     }
     break;
     }
@@ -855,7 +854,7 @@ WS_DATA_ITEM* PL_EDITOR_FRAME::AddPageLayoutItem( int aType )
     if( item == NULL )
         return NULL;
 
-    WS_DATA_MODEL::GetTheInstance().Append( item );
+    DS_DATA_MODEL::GetTheInstance().Append( item );
     item->SyncDrawItems( nullptr, GetCanvas()->GetView() );
 
     return item;
diff --git a/pagelayout_editor/pl_editor_frame.h b/pagelayout_editor/pl_editor_frame.h
index 95e31af5b6..1f3e48b8ad 100644
--- a/pagelayout_editor/pl_editor_frame.h
+++ b/pagelayout_editor/pl_editor_frame.h
@@ -35,7 +35,7 @@
 
 class PL_DRAW_PANEL_GAL;
 class PROPERTIES_FRAME;
-class WS_DATA_ITEM;
+class DS_DATA_ITEM;
 
 
 /**
@@ -69,7 +69,7 @@ public:
     PROPERTIES_FRAME* GetPropertiesFrame() { return m_propertiesPagelayout; }
 
     /**
-     * Show the dialog displaying the list of WS_DATA_ITEM items in the page layout
+     * Show the dialog displaying the list of DS_DATA_ITEM items in the page layout
      */
     void ShowDesignInspector();
 
@@ -243,11 +243,11 @@ public:
      * Function AddPageLayoutItem
      * Add a new item to the page layout item list.
      * @param aType = the type of item:
-     *  WS_TEXT, WS_SEGMENT, WS_RECT, WS_POLYPOLYGON
+     *  DS_TEXT, DS_SEGMENT, DS_RECT, DS_POLYPOLYGON
      * @param aIdx = the position in list to insert the new item.
      * @return a reference to the new item
      */
-    WS_DATA_ITEM* AddPageLayoutItem( int aType );
+    DS_DATA_ITEM* AddPageLayoutItem( int aType );
 
     /**
      * Must be called after a change in order to set the "modify" flag
diff --git a/pagelayout_editor/pl_editor_layout.h b/pagelayout_editor/pl_editor_layout.h
index a9ec3d0f91..6c9b1661e7 100644
--- a/pagelayout_editor/pl_editor_layout.h
+++ b/pagelayout_editor/pl_editor_layout.h
@@ -30,7 +30,7 @@
 
 #include <page_info.h>
 #include <title_block.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_draw_item.h>
 
 
 /**
@@ -43,7 +43,7 @@ private:
     PAGE_INFO               m_paper;
     TITLE_BLOCK             m_titles;
 
-    WS_DRAW_ITEM_LIST       m_drawItemList;
+    DS_DRAW_ITEM_LIST       m_drawItemList;
 
 public:
     PL_EDITOR_LAYOUT();
@@ -63,7 +63,7 @@ public:
     const TITLE_BLOCK& GetTitleBlock() const { return m_titles; }
     void SetTitleBlock( const TITLE_BLOCK& aTitleBlock ) { m_titles = aTitleBlock; }
 
-    WS_DRAW_ITEM_LIST& GetDrawItems()
+    DS_DRAW_ITEM_LIST& GetDrawItems()
     {
         return m_drawItemList;
     }
diff --git a/pagelayout_editor/pl_editor_undo_redo.cpp b/pagelayout_editor/pl_editor_undo_redo.cpp
index 3483f310da..592bf23900 100644
--- a/pagelayout_editor/pl_editor_undo_redo.cpp
+++ b/pagelayout_editor/pl_editor_undo_redo.cpp
@@ -23,8 +23,8 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  */
 
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 #include <tool/tool_manager.h>
 #include <tool/actions.h>
 
@@ -34,7 +34,7 @@
 void PL_EDITOR_FRAME::SaveCopyInUndoList()
 {
     PICKED_ITEMS_LIST*  lastcmd = new PICKED_ITEMS_LIST();
-    WS_PROXY_UNDO_ITEM* copyItem = new WS_PROXY_UNDO_ITEM( this );
+    DS_PROXY_UNDO_ITEM* copyItem = new DS_PROXY_UNDO_ITEM( this );
     ITEM_PICKER         wrapper( GetScreen(), copyItem, UNDO_REDO::LIBEDIT );
 
     lastcmd->PushItem( wrapper );
@@ -57,11 +57,11 @@ void PL_EDITOR_FRAME::GetLayoutFromRedoList()
         return;
 
     ITEM_PICKER         redoWrapper = PopCommandFromRedoList()->PopItem();
-    WS_PROXY_UNDO_ITEM* redoItem = static_cast<WS_PROXY_UNDO_ITEM*>( redoWrapper.GetItem() );
+    DS_PROXY_UNDO_ITEM* redoItem = static_cast<DS_PROXY_UNDO_ITEM*>( redoWrapper.GetItem() );
     bool                pageSettingsAndTitleBlock = redoItem->Type() == WS_PROXY_UNDO_ITEM_PLUS_T;
 
     PICKED_ITEMS_LIST*  undoCmd = new PICKED_ITEMS_LIST();
-    WS_PROXY_UNDO_ITEM* undoItem = new WS_PROXY_UNDO_ITEM( pageSettingsAndTitleBlock ? this : nullptr );
+    DS_PROXY_UNDO_ITEM* undoItem = new DS_PROXY_UNDO_ITEM( pageSettingsAndTitleBlock ? this : nullptr );
     ITEM_PICKER         undoWrapper( GetScreen(), undoItem );
 
     undoCmd->PushItem( undoWrapper );
@@ -94,11 +94,11 @@ void PL_EDITOR_FRAME::GetLayoutFromUndoList()
         return;
 
     ITEM_PICKER         undoWrapper = PopCommandFromUndoList()->PopItem();
-    WS_PROXY_UNDO_ITEM* undoItem = static_cast<WS_PROXY_UNDO_ITEM*>( undoWrapper.GetItem() );
+    DS_PROXY_UNDO_ITEM* undoItem = static_cast<DS_PROXY_UNDO_ITEM*>( undoWrapper.GetItem() );
     bool                pageSettingsAndTitleBlock = undoItem->Type() == WS_PROXY_UNDO_ITEM_PLUS_T;
 
     PICKED_ITEMS_LIST*  redoCmd = new PICKED_ITEMS_LIST();
-    WS_PROXY_UNDO_ITEM* redoItem = new WS_PROXY_UNDO_ITEM( pageSettingsAndTitleBlock ? this : nullptr );
+    DS_PROXY_UNDO_ITEM* redoItem = new DS_PROXY_UNDO_ITEM( pageSettingsAndTitleBlock ? this : nullptr );
     ITEM_PICKER         redoWrapper( GetScreen(), redoItem );
 
     redoCmd->PushItem( redoWrapper );
@@ -130,7 +130,7 @@ void PL_EDITOR_FRAME::RollbackFromUndo()
         return;
 
     ITEM_PICKER         undoWrapper = PopCommandFromUndoList()->PopItem();
-    WS_PROXY_UNDO_ITEM* undoItem = static_cast<WS_PROXY_UNDO_ITEM*>( undoWrapper.GetItem() );
+    DS_PROXY_UNDO_ITEM* undoItem = static_cast<DS_PROXY_UNDO_ITEM*>( undoWrapper.GetItem() );
     bool                pageSettingsAndTitleBlock = undoItem->Type() == WS_PROXY_UNDO_ITEM_PLUS_T;
 
     selTool->ClearSelection();
diff --git a/pagelayout_editor/tools/pl_actions.cpp b/pagelayout_editor/tools/pl_actions.cpp
index 52e11a8fe9..a4a041cd7d 100644
--- a/pagelayout_editor/tools/pl_actions.cpp
+++ b/pagelayout_editor/tools/pl_actions.cpp
@@ -25,7 +25,7 @@
 #include <tool/tool_action.h>
 #include <bitmaps.h>
 #include <eda_item.h>
-#include <page_layout/ws_data_item.h>
+#include <drawing_sheet/ds_data_item.h>
 
 #include "tools/pl_actions.h"
 
@@ -42,22 +42,22 @@
 TOOL_ACTION PL_ACTIONS::drawLine( "plEditor.InteractiveDrawing.drawLine",
         AS_GLOBAL, 0, "",
         _( "Add Line" ), _( "Add a line" ),
-        add_graphical_segments_xpm, AF_ACTIVATE, (void*) WS_DATA_ITEM::WS_SEGMENT );
+        add_graphical_segments_xpm, AF_ACTIVATE, (void*) DS_DATA_ITEM::DS_SEGMENT );
 
 TOOL_ACTION PL_ACTIONS::drawRectangle( "plEditor.InteractiveDrawing.drawRectangle",
         AS_GLOBAL, 0, "",
         _( "Add Rectangle" ), _( "Add a rectangle" ),
-        add_rectangle_xpm, AF_ACTIVATE, (void*) WS_DATA_ITEM::WS_RECT );
+        add_rectangle_xpm, AF_ACTIVATE, (void*) DS_DATA_ITEM::DS_RECT );
 
 TOOL_ACTION PL_ACTIONS::placeText( "plEditor.InteractiveDrawing.placeText",
         AS_GLOBAL, 0, "",
         _( "Add Text" ), _( "Add a text item" ),
-        text_xpm, AF_ACTIVATE, (void*) WS_DATA_ITEM::WS_TEXT );
+        text_xpm, AF_ACTIVATE, (void*) DS_DATA_ITEM::DS_TEXT );
 
 TOOL_ACTION PL_ACTIONS::placeImage( "plEditor.InteractiveDrawing.placeImage",
         AS_GLOBAL, 0, "",
         _( "Add Bitmap" ), _( "Add a bitmap image" ),
-        image_xpm, AF_ACTIVATE, (void*) WS_DATA_ITEM::WS_BITMAP );
+        image_xpm, AF_ACTIVATE, (void*) DS_DATA_ITEM::DS_BITMAP );
 
 
 // PL_EDIT_TOOL
diff --git a/pagelayout_editor/tools/pl_drawing_tools.cpp b/pagelayout_editor/tools/pl_drawing_tools.cpp
index cc2f22b9d2..8d3d1d680f 100644
--- a/pagelayout_editor/tools/pl_drawing_tools.cpp
+++ b/pagelayout_editor/tools/pl_drawing_tools.cpp
@@ -29,8 +29,8 @@
 #include <view/view.h>
 #include <tool/tool_manager.h>
 #include <bitmaps.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
 
 #include "invoke_pl_editor_dialog.h"
 #include "pl_editor_frame.h"
@@ -75,9 +75,9 @@ void PL_DRAWING_TOOLS::Reset( RESET_REASON aReason )
 
 int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
 {
-    WS_DATA_ITEM::WS_ITEM_TYPE type = aEvent.Parameter<WS_DATA_ITEM::WS_ITEM_TYPE>();
+    DS_DATA_ITEM::DS_ITEM_TYPE type = aEvent.Parameter<DS_DATA_ITEM::DS_ITEM_TYPE>();
     VECTOR2I                   cursorPos;
-    WS_DRAW_ITEM_BASE*         item   = nullptr;
+    DS_DRAW_ITEM_BASE*         item   = nullptr;
     bool                       isText = aEvent.IsAction( &PL_ACTIONS::placeText );
 
     m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
@@ -151,7 +151,7 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
             // First click creates...
             if( !item )
             {
-                WS_DATA_ITEM* dataItem = m_frame->AddPageLayoutItem( type );
+                DS_DATA_ITEM* dataItem = m_frame->AddPageLayoutItem( type );
 
                 if( dataItem )  // dataItem = nullptr can happens if the command was cancelled
                 {
@@ -219,8 +219,8 @@ int PL_DRAWING_TOOLS::PlaceItem( const TOOL_EVENT& aEvent )
 
 int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
 {
-    WS_DATA_ITEM::WS_ITEM_TYPE type = aEvent.Parameter<WS_DATA_ITEM::WS_ITEM_TYPE>();
-    WS_DRAW_ITEM_BASE*         item = nullptr;
+    DS_DATA_ITEM::DS_ITEM_TYPE type = aEvent.Parameter<DS_DATA_ITEM::DS_ITEM_TYPE>();
+    DS_DRAW_ITEM_BASE*         item = nullptr;
 
     // We might be running as the same shape in another co-routine.  Make sure that one
     // gets whacked.
@@ -279,7 +279,7 @@ int PL_DRAWING_TOOLS::DrawShape( const TOOL_EVENT& aEvent )
                 m_frame->SaveCopyInUndoList();
                 m_toolMgr->RunAction( PL_ACTIONS::clearSelection, true );
 
-                WS_DATA_ITEM* dataItem = m_frame->AddPageLayoutItem( type );
+                DS_DATA_ITEM* dataItem = m_frame->AddPageLayoutItem( type );
                 dataItem->MoveToUi( (wxPoint) cursorPos );
 
                 item = dataItem->GetDrawItems()[0];
diff --git a/pagelayout_editor/tools/pl_edit_tool.cpp b/pagelayout_editor/tools/pl_edit_tool.cpp
index bbd1ca53c2..faac7ce6c7 100644
--- a/pagelayout_editor/tools/pl_edit_tool.cpp
+++ b/pagelayout_editor/tools/pl_edit_tool.cpp
@@ -24,9 +24,9 @@
 
 #include <tool/tool_manager.h>
 #include <tool/picker_tool.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
 #include <bitmaps.h>
 #include <confirm.h>
 #include <eda_item.h>
@@ -108,11 +108,11 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
     if( selection.Empty() || m_moveInProgress )
         return 0;
 
-    std::set<WS_DATA_ITEM*> unique_peers;
+    std::set<DS_DATA_ITEM*> unique_peers;
 
     for( EDA_ITEM* item : selection )
     {
-        WS_DRAW_ITEM_BASE* drawItem = static_cast<WS_DRAW_ITEM_BASE*>( item );
+        DS_DRAW_ITEM_BASE* drawItem = static_cast<DS_DRAW_ITEM_BASE*>( item );
         unique_peers.insert( drawItem->GetPeer() );
     }
 
@@ -146,7 +146,7 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
             {
                 // Apply any initial offset in case we're coming from a previous command.
                 //
-                for( WS_DATA_ITEM* item : unique_peers )
+                for( DS_DATA_ITEM* item : unique_peers )
                     moveItem( item, m_moveOffset );
 
                 // Set up the starting position and move/drag offset
@@ -158,7 +158,7 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
                     VECTOR2I delta = m_cursor - selection.GetReferencePoint();
 
                     // Drag items to the current cursor position
-                    for( WS_DATA_ITEM* item : unique_peers )
+                    for( DS_DATA_ITEM* item : unique_peers )
                         moveItem( item, delta );
 
                     selection.SetReferencePoint( m_cursor );
@@ -192,7 +192,7 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
             m_moveOffset += delta;
             prevPos = m_cursor;
 
-            for( WS_DATA_ITEM* item : unique_peers )
+            for( DS_DATA_ITEM* item : unique_peers )
                 moveItem( item, delta );
 
             m_toolMgr->PostEvent( EVENTS::SelectedItemsModified );
@@ -271,11 +271,11 @@ int PL_EDIT_TOOL::Main( const TOOL_EVENT& aEvent )
 }
 
 
-void PL_EDIT_TOOL::moveItem( WS_DATA_ITEM* aItem, VECTOR2I aDelta )
+void PL_EDIT_TOOL::moveItem( DS_DATA_ITEM* aItem, VECTOR2I aDelta )
 {
     aItem->MoveToUi( aItem->GetStartPosUi() + (wxPoint) aDelta );
 
-    for( WS_DRAW_ITEM_BASE* item : aItem->GetDrawItems() )
+    for( DS_DRAW_ITEM_BASE* item : aItem->GetDrawItems() )
     {
         getView()->Update( item );
         item->SetFlags( IS_MOVED );
@@ -326,11 +326,11 @@ int PL_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
 
     while( selection.Front() )
     {
-        WS_DRAW_ITEM_BASE*  drawItem = static_cast<WS_DRAW_ITEM_BASE*>( selection.Front() );
-        WS_DATA_ITEM* dataItem = drawItem->GetPeer();
-        WS_DATA_MODEL::GetTheInstance().Remove( dataItem );
+        DS_DRAW_ITEM_BASE* drawItem = static_cast<DS_DRAW_ITEM_BASE*>( selection.Front() );
+        DS_DATA_ITEM*      dataItem = drawItem->GetPeer();
+        DS_DATA_MODEL::GetTheInstance().Remove( dataItem );
 
-        for( WS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
+        for( DS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
         {
             // Note: repeat items won't be selected but must be removed & deleted
 
@@ -384,9 +384,9 @@ int PL_EDIT_TOOL::DeleteItemCursor( const TOOL_EVENT& aEvent )
             int threshold = KiROUND( getView()->ToWorld( HITTEST_THRESHOLD_PIXELS ) );
             EDA_ITEM* item = nullptr;
 
-            for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
+            for( DS_DATA_ITEM* dataItem : DS_DATA_MODEL::GetTheInstance().GetItems() )
             {
-                for( WS_DRAW_ITEM_BASE* drawItem : dataItem->GetDrawItems() )
+                for( DS_DRAW_ITEM_BASE* drawItem : dataItem->GetDrawItems() )
                 {
                     if( drawItem->HitTest( (wxPoint) aPos, threshold ) )
                     {
@@ -454,15 +454,15 @@ int PL_EDIT_TOOL::Cut( const TOOL_EVENT& aEvent )
 int PL_EDIT_TOOL::Copy( const TOOL_EVENT& aEvent )
 {
     PL_SELECTION&              selection = m_selectionTool->RequestSelection();
-    std::vector<WS_DATA_ITEM*> items;
-    WS_DATA_MODEL&             model = WS_DATA_MODEL::GetTheInstance();
+    std::vector<DS_DATA_ITEM*> items;
+    DS_DATA_MODEL&             model = DS_DATA_MODEL::GetTheInstance();
     wxString                   sexpr;
 
     if( selection.GetSize() == 0 )
         return 0;
 
     for( EDA_ITEM* item : selection.GetItems() )
-        items.push_back( static_cast<WS_DRAW_ITEM_BASE*>( item )->GetPeer() );
+        items.push_back( static_cast<DS_DRAW_ITEM_BASE*>( item )->GetPeer() );
 
     try
     {
@@ -483,7 +483,7 @@ int PL_EDIT_TOOL::Copy( const TOOL_EVENT& aEvent )
 int PL_EDIT_TOOL::Paste( const TOOL_EVENT& aEvent )
 {
     PL_SELECTION&  selection = m_selectionTool->GetSelection();
-    WS_DATA_MODEL& model = WS_DATA_MODEL::GetTheInstance();
+    DS_DATA_MODEL& model = DS_DATA_MODEL::GetTheInstance();
     std::string    sexpr = m_toolMgr->GetClipboardUTF8();
 
     m_selectionTool->ClearSelection();
@@ -491,7 +491,7 @@ int PL_EDIT_TOOL::Paste( const TOOL_EVENT& aEvent )
     model.SetPageLayout( sexpr.c_str(), true, wxT( "clipboard" ) );
 
     // Build out draw items and select the first of each data item
-    for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
+    for( DS_DATA_ITEM* dataItem : model.GetItems() )
     {
         if( dataItem->GetDrawItems().empty() )
         {
diff --git a/pagelayout_editor/tools/pl_edit_tool.h b/pagelayout_editor/tools/pl_edit_tool.h
index 9fd468cc31..e3b0c32365 100644
--- a/pagelayout_editor/tools/pl_edit_tool.h
+++ b/pagelayout_editor/tools/pl_edit_tool.h
@@ -66,7 +66,7 @@ public:
     int DeleteItemCursor( const TOOL_EVENT& aEvent );
 
 private:
-    void moveItem( WS_DATA_ITEM* aItem, VECTOR2I aDelta );
+    void moveItem( DS_DATA_ITEM* aItem, VECTOR2I aDelta );
 
     ///< Return the right modification point (e.g. for rotation), depending on the number of
     ///< selected items.
diff --git a/pagelayout_editor/tools/pl_editor_control.cpp b/pagelayout_editor/tools/pl_editor_control.cpp
index a261cf4f12..7da9a4ec63 100644
--- a/pagelayout_editor/tools/pl_editor_control.cpp
+++ b/pagelayout_editor/tools/pl_editor_control.cpp
@@ -28,8 +28,8 @@
 #include <confirm.h>
 #include <bitmaps.h>
 #include <dialogs/dialog_page_settings.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_painter.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_painter.h>
 
 #include "pl_editor_frame.h"
 #include "pl_editor_id.h"
@@ -130,9 +130,9 @@ int PL_EDITOR_CONTROL::ShowInspector( const TOOL_EVENT& aEvent )
 int PL_EDITOR_CONTROL::TitleBlockDisplayMode( const TOOL_EVENT& aEvent )
 {
     if( aEvent.IsAction( &PL_ACTIONS::layoutEditMode ) )
-        WS_DATA_MODEL::GetTheInstance().m_EditMode = true;
+        DS_DATA_MODEL::GetTheInstance().m_EditMode = true;
     else
-        WS_DATA_MODEL::GetTheInstance().m_EditMode = false;
+        DS_DATA_MODEL::GetTheInstance().m_EditMode = false;
 
     m_frame->HardRedraw();
     return 0;
@@ -155,7 +155,7 @@ int PL_EDITOR_CONTROL::UpdateMessagePanel( const TOOL_EVENT& aEvent )
         item->GetMsgPanelInfo( m_frame, msgItems );
         m_frame->SetMsgPanel( msgItems );
 
-        WS_DATA_ITEM* dataItem = static_cast<WS_DRAW_ITEM_BASE*>( item )->GetPeer();
+        DS_DATA_ITEM* dataItem = static_cast<DS_DRAW_ITEM_BASE*>( item )->GetPeer();
         m_frame->GetPropertiesFrame()->CopyPrmsFromItemToPanel( dataItem );
     }
     else
diff --git a/pagelayout_editor/tools/pl_point_editor.cpp b/pagelayout_editor/tools/pl_point_editor.cpp
index cf7fb40843..62a9a67f54 100644
--- a/pagelayout_editor/tools/pl_point_editor.cpp
+++ b/pagelayout_editor/tools/pl_point_editor.cpp
@@ -34,8 +34,8 @@ using namespace std::placeholders;
 
 #include <bitmaps.h>
 #include <status_popup.h>
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_data_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
 #include <widgets/progress_reporter.h>
 
 #include "pl_editor_frame.h"
@@ -71,14 +71,14 @@ public:
         {
         case WSG_LINE_T:
         {
-            WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) aItem;
+            DS_DRAW_ITEM_LINE* line = static_cast<DS_DRAW_ITEM_LINE*>( aItem );
             points->AddPoint( line->GetStart() );
             points->AddPoint( line->GetEnd() );
             break;
         }
         case WSG_RECT_T:
         {
-            WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) aItem;
+            DS_DRAW_ITEM_RECT* rect = static_cast<DS_DRAW_ITEM_RECT*>( aItem );
             wxPoint            topLeft = rect->GetStart();
             wxPoint            botRight = rect->GetEnd();
 
@@ -317,7 +317,7 @@ void PL_POINT_EDITOR::updateItem() const
     if( !item )
         return;
 
-    WS_DATA_ITEM* dataItem = static_cast<WS_DRAW_ITEM_BASE*>( item )->GetPeer();
+    DS_DATA_ITEM* dataItem = static_cast<DS_DRAW_ITEM_BASE*>( item )->GetPeer();
 
     // the current item is perhaps not the main item if we have a set of
     // repeated items.
@@ -328,7 +328,7 @@ void PL_POINT_EDITOR::updateItem() const
     {
     case WSG_LINE_T:
     {
-        WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item;
+        DS_DRAW_ITEM_LINE* line = static_cast<DS_DRAW_ITEM_LINE*>( item );
 
         wxPoint move_startpoint = (wxPoint) m_editPoints->Point( LINE_START ).GetPosition()
                                   - line->GetStart();
@@ -338,9 +338,9 @@ void PL_POINT_EDITOR::updateItem() const
         dataItem->MoveStartPointToUi( dataItem->GetStartPosUi() + move_startpoint );
         dataItem->MoveEndPointToUi( dataItem->GetEndPosUi() + move_endpoint );
 
-        for( WS_DRAW_ITEM_BASE* draw_item : dataItem->GetDrawItems() )
+        for( DS_DRAW_ITEM_BASE* draw_item : dataItem->GetDrawItems() )
         {
-            WS_DRAW_ITEM_LINE* draw_line = static_cast<WS_DRAW_ITEM_LINE*>( draw_item );
+            DS_DRAW_ITEM_LINE* draw_line = static_cast<DS_DRAW_ITEM_LINE*>( draw_item );
 
             draw_line->SetStart( draw_line->GetStart() + move_startpoint );
             draw_line->SetEnd( draw_line->GetEnd() + move_endpoint );
@@ -352,7 +352,7 @@ void PL_POINT_EDITOR::updateItem() const
 
     case WSG_RECT_T:
     {
-        WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item;
+        DS_DRAW_ITEM_RECT* rect = static_cast<DS_DRAW_ITEM_RECT*>( item );
         VECTOR2I           topLeft = m_editPoints->Point( RECT_TOPLEFT ).GetPosition();
         VECTOR2I           topRight = m_editPoints->Point( RECT_TOPRIGHT ).GetPosition();
         VECTOR2I           botLeft = m_editPoints->Point( RECT_BOTLEFT ).GetPosition();
@@ -366,10 +366,9 @@ void PL_POINT_EDITOR::updateItem() const
 
         dataItem->MoveStartPointToUi( dataItem->GetStartPosUi() + move_startpoint );
         dataItem->MoveEndPointToUi( dataItem->GetEndPosUi() + move_endpoint );
-
-        for( WS_DRAW_ITEM_BASE* draw_item : dataItem->GetDrawItems() )
+        for( DS_DRAW_ITEM_BASE* draw_item : dataItem->GetDrawItems() )
         {
-            WS_DRAW_ITEM_RECT* draw_rect = (WS_DRAW_ITEM_RECT*) draw_item;
+            DS_DRAW_ITEM_RECT* draw_rect = static_cast<DS_DRAW_ITEM_RECT*>( draw_item );
 
             draw_rect->SetStart( draw_rect->GetStart() + move_startpoint );
             draw_rect->SetEnd( draw_rect->GetEnd() + move_endpoint );
@@ -406,7 +405,7 @@ void PL_POINT_EDITOR::updatePoints()
     {
     case WSG_LINE_T:
     {
-        WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item;
+        DS_DRAW_ITEM_LINE* line = static_cast<DS_DRAW_ITEM_LINE*>( item );
 
         m_editPoints->Point( LINE_START ).SetPosition( line->GetStart() );
         m_editPoints->Point( LINE_END ).SetPosition( line->GetEnd() );
@@ -415,7 +414,7 @@ void PL_POINT_EDITOR::updatePoints()
 
     case WSG_RECT_T:
     {
-        WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item;
+        DS_DRAW_ITEM_RECT* rect = static_cast<DS_DRAW_ITEM_RECT*>( item );
         wxPoint            topLeft = rect->GetPosition();
         wxPoint            botRight = rect->GetEnd();
 
diff --git a/pagelayout_editor/tools/pl_selection_tool.cpp b/pagelayout_editor/tools/pl_selection_tool.cpp
index e5b12d8448..88766ad79f 100644
--- a/pagelayout_editor/tools/pl_selection_tool.cpp
+++ b/pagelayout_editor/tools/pl_selection_tool.cpp
@@ -30,9 +30,9 @@
 #include <tool/tool_event.h>
 #include <tool/tool_manager.h>
 #include <tool/selection.h>
-#include <page_layout/ws_data_item.h>
-#include <page_layout/ws_data_model.h>
-#include <page_layout/ws_draw_item.h>
+#include <drawing_sheet/ds_data_item.h>
+#include <drawing_sheet/ds_data_model.h>
+#include <drawing_sheet/ds_draw_item.h>
 #include <collector.h>
 #include <math/util.h>      // for KiROUND
 
@@ -232,9 +232,9 @@ void PL_SELECTION_TOOL::SelectPoint( const VECTOR2I& aWhere, bool* aSelectionCan
     // locate items.
     COLLECTOR collector;
 
-    for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
+    for( DS_DATA_ITEM* dataItem : DS_DATA_MODEL::GetTheInstance().GetItems() )
     {
-        for( WS_DRAW_ITEM_BASE* drawItem : dataItem->GetDrawItems() )
+        for( DS_DRAW_ITEM_BASE* drawItem : dataItem->GetDrawItems() )
         {
             if( drawItem->HitTest( (wxPoint) aWhere, threshold ) )
                 collector.Append( drawItem );
@@ -389,9 +389,9 @@ bool PL_SELECTION_TOOL::selectMultiple()
 
             selectionRect.Normalize();
 
-            for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
+            for( DS_DATA_ITEM* dataItem : DS_DATA_MODEL::GetTheInstance().GetItems() )
             {
-                for( WS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
+                for( DS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
                 {
                     if( item->HitTest( selectionRect, windowSelection ) )
                     {
@@ -538,9 +538,9 @@ void PL_SELECTION_TOOL::RebuildSelection()
 {
     m_selection.Clear();
 
-    for( WS_DATA_ITEM* dataItem : WS_DATA_MODEL::GetTheInstance().GetItems() )
+    for( DS_DATA_ITEM* dataItem : DS_DATA_MODEL::GetTheInstance().GetItems() )
     {
-        for( WS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
+        for( DS_DRAW_ITEM_BASE* item : dataItem->GetDrawItems() )
         {
             if( item->IsSelected() )
                 select( item );
diff --git a/pcbnew/board.cpp b/pcbnew/board.cpp
index 3165edb5a9..13ac522924 100644
--- a/pcbnew/board.cpp
+++ b/pcbnew/board.cpp
@@ -29,7 +29,6 @@
 #include <iterator>
 #include <pcb_base_frame.h>
 #include <reporter.h>
-#include <page_layout/ws_proxy_view_item.h>
 #include <board_commit.h>
 #include <board.h>
 #include <footprint.h>
@@ -49,7 +48,6 @@
 #include <project/project_file.h>
 #include <project/project_local_settings.h>
 #include <ratsnest/ratsnest_data.h>
-#include <ratsnest/ratsnest_viewitem.h>
 #include <tool/selection_conditions.h>
 #include <convert_drawsegment_list_to_polygon.h>
 
diff --git a/pcbnew/dialogs/panel_fp_editor_color_settings.h b/pcbnew/dialogs/panel_fp_editor_color_settings.h
index db7707fef8..23181871af 100644
--- a/pcbnew/dialogs/panel_fp_editor_color_settings.h
+++ b/pcbnew/dialogs/panel_fp_editor_color_settings.h
@@ -29,11 +29,8 @@ class COLOR_SETTINGS;
 class PAGE_INFO;
 class FOOTPRINT_EDIT_FRAME;
 class TITLE_BLOCK;
+class DS_PROXY_VIEW_ITEM;
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-}
 
 class PANEL_FP_EDITOR_COLOR_SETTINGS : public PANEL_COLOR_SETTINGS
 {
diff --git a/pcbnew/dialogs/panel_pcbnew_color_settings.cpp b/pcbnew/dialogs/panel_pcbnew_color_settings.cpp
index 5ccaaffc9c..6613be473d 100644
--- a/pcbnew/dialogs/panel_pcbnew_color_settings.cpp
+++ b/pcbnew/dialogs/panel_pcbnew_color_settings.cpp
@@ -30,7 +30,7 @@
 #include <settings/settings_manager.h>
 #include <footprint_preview_panel.h>
 #include <widgets/appearance_controls.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <pcb_painter.h>
 #include <track.h>
 #include <plugins/kicad/kicad_plugin.h>
@@ -512,10 +512,10 @@ void PANEL_PCBNEW_COLOR_SETTINGS::createPreviewItems()
     m_preview->UpdateColors();
     m_preview->DisplayBoard( m_preview->GetBoard() );
 
-    auto worksheet = new KIGFX::WS_PROXY_VIEW_ITEM( (int) IU_PER_MILS, m_page, nullptr,
-                                                    m_titleBlock );
-    worksheet->SetColorLayer( LAYER_DRAWINGSHEET );
-    m_preview->SetDrawingSheet( worksheet );
+    DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( (int) IU_PER_MILS, m_page, nullptr,
+                                                               m_titleBlock );
+    drawingSheet->SetColorLayer( LAYER_DRAWINGSHEET );
+    m_preview->SetDrawingSheet( drawingSheet );
 
     zoomFitPreview();
 }
diff --git a/pcbnew/dialogs/panel_pcbnew_color_settings.h b/pcbnew/dialogs/panel_pcbnew_color_settings.h
index 45096d15a2..482f1a5677 100644
--- a/pcbnew/dialogs/panel_pcbnew_color_settings.h
+++ b/pcbnew/dialogs/panel_pcbnew_color_settings.h
@@ -30,11 +30,8 @@ class PAGE_INFO;
 class PCB_EDIT_FRAME;
 class FOOTPRINT_PREVIEW_PANEL;
 class TITLE_BLOCK;
+class DS_PROXY_VIEW_ITEM;
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-}
 
 class PANEL_PCBNEW_COLOR_SETTINGS : public PANEL_COLOR_SETTINGS
 {
diff --git a/pcbnew/drc/drc_engine.cpp b/pcbnew/drc/drc_engine.cpp
index 1dfc7f76ba..fce2060eea 100644
--- a/pcbnew/drc/drc_engine.cpp
+++ b/pcbnew/drc/drc_engine.cpp
@@ -56,7 +56,7 @@ void drcPrintDebugMessage( int level, const wxString& msg, const char *function,
 DRC_ENGINE::DRC_ENGINE( BOARD* aBoard, BOARD_DESIGN_SETTINGS *aSettings ) :
     m_designSettings ( aSettings ),
     m_board( aBoard ),
-    m_worksheet( nullptr ),
+    m_drawingSheet( nullptr ),
     m_schematicNetlist( nullptr ),
     m_rulesValid( false ),
     m_userUnits( EDA_UNITS::MILLIMETRES ),
diff --git a/pcbnew/drc/drc_engine.h b/pcbnew/drc/drc_engine.h
index 5308f82ba6..021c681fd1 100644
--- a/pcbnew/drc/drc_engine.h
+++ b/pcbnew/drc/drc_engine.h
@@ -36,6 +36,7 @@
 class BOARD_DESIGN_SETTINGS;
 class DRC_TEST_PROVIDER;
 class PCB_EDIT_FRAME;
+class DS_PROXY_VIEW_ITEM;
 class BOARD_ITEM;
 class BOARD;
 class PCB_MARKER;
@@ -48,7 +49,6 @@ class wxFileName;
 
 namespace KIGFX
 {
-    class WS_PROXY_VIEW_ITEM;
     class VIEW_OVERLAY;
 };
 
@@ -92,8 +92,8 @@ public:
     void SetSchematicNetlist( NETLIST* aNetlist ) { m_schematicNetlist = aNetlist; }
     NETLIST* GetSchematicNetlist() const { return m_schematicNetlist; }
 
-    void SetWorksheet( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet ) { m_worksheet = aWorksheet; }
-    KIGFX::WS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_worksheet; }
+    void SetDrawingSheet( DS_PROXY_VIEW_ITEM* aDrawingSheet ) { m_drawingSheet = aDrawingSheet; }
+    DS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_drawingSheet; }
 
     void SetDebugOverlay( std::shared_ptr<KIGFX::VIEW_OVERLAY> aOverlay ) { m_debugOverlay = aOverlay; }
     std::shared_ptr<KIGFX::VIEW_OVERLAY> GetDebugOverlay() const { return m_debugOverlay; }
@@ -200,7 +200,7 @@ private:
 protected:
     BOARD_DESIGN_SETTINGS*           m_designSettings;
     BOARD*                           m_board;
-    KIGFX::WS_PROXY_VIEW_ITEM*       m_worksheet;
+    DS_PROXY_VIEW_ITEM*              m_drawingSheet;
     NETLIST*                         m_schematicNetlist;
 
     std::vector<DRC_RULE*>           m_rules;
diff --git a/pcbnew/drc/drc_test_provider_misc.cpp b/pcbnew/drc/drc_test_provider_misc.cpp
index 59491595ba..d91d5ed317 100644
--- a/pcbnew/drc/drc_test_provider_misc.cpp
+++ b/pcbnew/drc/drc_test_provider_misc.cpp
@@ -26,8 +26,8 @@
 #include <drc/drc_rule.h>
 #include <drc/drc_test_provider.h>
 
-#include <page_layout/ws_draw_item.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_draw_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 
 /*
     Miscellaneous tests:
@@ -176,8 +176,8 @@ void DRC_TEST_PROVIDER_MISC::testTextVars()
     forEachGeometryItem( { PCB_FP_TEXT_T, PCB_TEXT_T }, LSET::AllLayersMask(),
                          checkUnresolvedTextVar );
 
-    KIGFX::WS_PROXY_VIEW_ITEM* drawingSheet = m_drcEngine->GetDrawingSheet();
-    WS_DRAW_ITEM_LIST          drawItems;
+    DS_PROXY_VIEW_ITEM* drawingSheet = m_drcEngine->GetDrawingSheet();
+    DS_DRAW_ITEM_LIST   drawItems;
 
     if( !drawingSheet || m_drcEngine->IsErrorLimitExceeded( DRCE_UNRESOLVED_VARIABLE ) )
         return;
@@ -191,12 +191,12 @@ void DRC_TEST_PROVIDER_MISC::testTextVars()
     drawItems.SetProject( m_board->GetProject() );
     drawItems.BuildDrawItemsList( drawingSheet->GetPageInfo(), drawingSheet->GetTitleBlock() );
 
-    for( WS_DRAW_ITEM_BASE* item = drawItems.GetFirst(); item; item = drawItems.GetNext() )
+    for( DS_DRAW_ITEM_BASE* item = drawItems.GetFirst(); item; item = drawItems.GetNext() )
     {
         if( m_drcEngine->IsErrorLimitExceeded( DRCE_UNRESOLVED_VARIABLE ) )
             break;
 
-        WS_DRAW_ITEM_TEXT* text = dynamic_cast<WS_DRAW_ITEM_TEXT*>( item );
+        DS_DRAW_ITEM_TEXT* text = dynamic_cast<DS_DRAW_ITEM_TEXT*>( item );
 
         if( text && text->GetShownText().Matches( wxT( "*${*}*" ) ) )
         {
diff --git a/pcbnew/pcb_draw_panel_gal.cpp b/pcbnew/pcb_draw_panel_gal.cpp
index f36bfe725a..ca8f9c3103 100644
--- a/pcbnew/pcb_draw_panel_gal.cpp
+++ b/pcbnew/pcb_draw_panel_gal.cpp
@@ -26,7 +26,7 @@
 #include <pcb_view.h>
 #include <view/wx_view_controls.h>
 #include <pcb_painter.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <connectivity/connectivity_data.h>
 
 #include <board.h>
@@ -36,7 +36,7 @@
 #include <pcb_base_frame.h>
 #include <pcbnew_settings.h>
 #include <ratsnest/ratsnest_data.h>
-#include <ratsnest/ratsnest_viewitem.h>
+#include <ratsnest/ratsnest_view_item.h>
 
 #include <pgm_base.h>
 #include <settings/settings_manager.h>
@@ -198,8 +198,8 @@ void PCB_DRAW_PANEL_GAL::DisplayBoard( BOARD* aBoard )
         t.detach();
     }
 
-    if( m_worksheet )
-        m_worksheet->SetFileName( TO_UTF8( aBoard->GetFileName() ) );
+    if( m_drawingSheet )
+        m_drawingSheet->SetFileName( TO_UTF8( aBoard->GetFileName() ) );
 
     // Load drawings
     for( BOARD_ITEM* drawing : aBoard->Drawings() )
@@ -226,15 +226,15 @@ void PCB_DRAW_PANEL_GAL::DisplayBoard( BOARD* aBoard )
         m_view->Add( zone );
 
     // Ratsnest
-    m_ratsnest = std::make_unique<KIGFX::RATSNEST_VIEWITEM>( aBoard->GetConnectivity() );
+    m_ratsnest = std::make_unique<RATSNEST_VIEW_ITEM>( aBoard->GetConnectivity() );
     m_view->Add( m_ratsnest.get() );
 }
 
 
-void PCB_DRAW_PANEL_GAL::SetDrawingSheet( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet )
+void PCB_DRAW_PANEL_GAL::SetDrawingSheet( DS_PROXY_VIEW_ITEM* aDrawingSheet )
 {
-    m_worksheet.reset( aWorksheet );
-    m_view->Add( m_worksheet.get() );
+    m_drawingSheet.reset( aDrawingSheet );
+    m_view->Add( m_drawingSheet.get() );
 }
 
 
@@ -535,8 +535,8 @@ void PCB_DRAW_PANEL_GAL::RedrawRatsnest()
 
 BOX2I PCB_DRAW_PANEL_GAL::GetDefaultViewBBox() const
 {
-    if( m_worksheet && m_view->IsLayerVisible( LAYER_DRAWINGSHEET ) )
-        return m_worksheet->ViewBBox();
+    if( m_drawingSheet && m_view->IsLayerVisible( LAYER_DRAWINGSHEET ) )
+        return m_drawingSheet->ViewBBox();
 
     return BOX2I();
 }
diff --git a/pcbnew/pcb_draw_panel_gal.h b/pcbnew/pcb_draw_panel_gal.h
index c49153778b..bafe9ba109 100644
--- a/pcbnew/pcb_draw_panel_gal.h
+++ b/pcbnew/pcb_draw_panel_gal.h
@@ -31,11 +31,8 @@
 #include <layers_id_colors_and_visibility.h>
 #include <pcb_view.h>
 
-namespace KIGFX
-{
-    class WS_PROXY_VIEW_ITEM;
-    class RATSNEST_VIEWITEM;
-}
+class DS_PROXY_VIEW_ITEM;
+class RATSNEST_VIEW_ITEM;
 
 class PCB_DRAW_PANEL_GAL : public EDA_DRAW_PANEL_GAL
 {
@@ -54,14 +51,14 @@ public:
     void DisplayBoard( BOARD* aBoard );
 
     /**
-     * Set (or updates) worksheet used by the draw panel.
+     * Sets (or updates) drawing-sheet used by the draw panel.
      *
-     * @param aWorksheet is the worksheet to be used.  The object is then owned by
+     * @param aDrawingSheet is the drawing-sheet to be used.  The object is then owned by
      *                   #PCB_DRAW_PANEL_GAL.
      */
-    void SetDrawingSheet( KIGFX::WS_PROXY_VIEW_ITEM* aWorksheet );
+    void SetDrawingSheet( DS_PROXY_VIEW_ITEM* aDrawingSheet );
 
-    KIGFX::WS_PROXY_VIEW_ITEM* GetWorksheet() const { return m_worksheet.get(); }
+    DS_PROXY_VIEW_ITEM* GetDrawingSheet() const { return m_drawingSheet.get(); }
 
     // TODO(JE) Look at optimizing this out
     /**
@@ -117,11 +114,11 @@ protected:
     ///< Set rendering targets & dependencies for layers.
     void setDefaultLayerDeps();
 
-    ///< Currently used worksheet.
-    std::unique_ptr<KIGFX::WS_PROXY_VIEW_ITEM> m_worksheet;
+    ///< Currently used drawing-sheet.
+    std::unique_ptr<DS_PROXY_VIEW_ITEM> m_drawingSheet;
 
     ///< Ratsnest view item
-    std::unique_ptr<KIGFX::RATSNEST_VIEWITEM> m_ratsnest;
+    std::unique_ptr<RATSNEST_VIEW_ITEM> m_ratsnest;
 };
 
 #endif /* PCB_DRAW_PANEL_GAL_H_ */
diff --git a/pcbnew/pcb_edit_frame.cpp b/pcbnew/pcb_edit_frame.cpp
index 3badf31795..c977afe36a 100644
--- a/pcbnew/pcb_edit_frame.cpp
+++ b/pcbnew/pcb_edit_frame.cpp
@@ -40,7 +40,7 @@
 #include <invoke_pcb_dialog.h>
 #include <board.h>
 #include <footprint.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <connectivity/connectivity_data.h>
 #include <wildcards_and_files_ext.h>
 #include <pcb_draw_panel_gal.h>
@@ -88,7 +88,7 @@
 #include <netlist_reader/pcb_netlist.h>
 #include <wx/wupdlock.h>
 #include <dialog_drc.h>     // for DIALOG_DRC_WINDOW_NAME definition
-#include <ratsnest/ratsnest_viewitem.h>
+#include <ratsnest/ratsnest_view_item.h>
 #include <widgets/appearance_controls.h>
 #include <widgets/panel_selection_filter.h>
 #include <kiplatform/app.h>
@@ -396,7 +396,7 @@ void PCB_EDIT_FRAME::SetBoard( BOARD* aBoard )
     aBoard->SetProject( &Prj() );
     aBoard->GetConnectivity()->Build( aBoard );
 
-    // reload the drawing sheet
+    // reload the drawing-sheet
     SetPageSettings( aBoard->GetPageSettings() );
 }
 
@@ -411,10 +411,11 @@ void PCB_EDIT_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
 {
     PCB_BASE_FRAME::SetPageSettings( aPageSettings );
 
-    // Prepare drawingSheet template
-    KIGFX::WS_PROXY_VIEW_ITEM* drawingSheet;
-    drawingSheet = new KIGFX::WS_PROXY_VIEW_ITEM( IU_PER_MILS, &m_pcb->GetPageSettings(),
-                                                  m_pcb->GetProject(), &m_pcb->GetTitleBlock() );
+    // Prepare drawing-sheet template
+    DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( IU_PER_MILS,
+                                                               &m_pcb->GetPageSettings(),
+                                                               m_pcb->GetProject(),
+                                                               &m_pcb->GetTitleBlock() );
     drawingSheet->SetSheetName( std::string( GetScreenDesc().mb_str() ) );
 
     BASE_SCREEN* screen = GetScreen();
@@ -428,7 +429,7 @@ void PCB_EDIT_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
     if( BOARD* board = GetBoard() )
         drawingSheet->SetFileName( TO_UTF8( board->GetFileName() ) );
 
-    // PCB_DRAW_PANEL_GAL takes ownership of the drawing sheet
+    // PCB_DRAW_PANEL_GAL takes ownership of the drawing-sheet
     GetCanvas()->SetDrawingSheet( drawingSheet );
 }
 
diff --git a/pcbnew/pcb_view.cpp b/pcbnew/pcb_view.cpp
index 5e6541d5ab..a82c649ef8 100644
--- a/pcbnew/pcb_view.cpp
+++ b/pcbnew/pcb_view.cpp
@@ -38,11 +38,10 @@ namespace KIGFX {
 PCB_VIEW::PCB_VIEW( bool aIsDynamic ) :
     VIEW( aIsDynamic )
 {
-    // Set m_boundary to define the max area size. The default value
-    // is acceptable for Pcbnew and Gerbview.
-    // However, ensure this area has the right size (max size allowed by integer coordinates)
-    // in case of the default value is changed.
-    // Could be a size depending on the worksheet size.
+    // Set m_boundary to define the max area size. The default value is acceptable for Pcbnew
+    // and Gerbview.
+    // However, ensure this area has the right size (max size allowed by integer coordinates) in
+    // case of the default value is changed. Could be a size depending on the drawing-sheet size.
     typedef std::numeric_limits<int> coord_limits;
     double pos = coord_limits::lowest() / 2 + coord_limits::epsilon();
     double size = coord_limits::max() - coord_limits::epsilon();
diff --git a/pcbnew/pcbnew_config.cpp b/pcbnew/pcbnew_config.cpp
index 1b6475cc51..d1bad01050 100644
--- a/pcbnew/pcbnew_config.cpp
+++ b/pcbnew/pcbnew_config.cpp
@@ -33,7 +33,7 @@
 #include <panel_pcbnew_display_origin.h>
 #include <tool/tool_manager.h>
 #include <tools/pcb_selection_tool.h>
-#include <page_layout/ws_data_model.h>
+#include <drawing_sheet/ds_data_model.h>
 #include <pcbplot.h>
 #include <pcb_painter.h>
 #include <invoke_pcb_dialog.h>
@@ -71,14 +71,13 @@ bool PCB_EDIT_FRAME::LoadProjectSettings()
 
     BASE_SCREEN::m_PageLayoutDescrFileName = project.m_BoardPageLayoutDescrFile;
 
-    // Load the page layout decr file, from the filename stored in
+    // Load the drawing sheet description file, from the filename stored in
     // BASE_SCREEN::m_PageLayoutDescrFileName, read in config project file
     // If empty, or not existing, the default descr is loaded
-    WS_DATA_MODEL& pglayout = WS_DATA_MODEL::GetTheInstance();
-    wxString filename = WS_DATA_MODEL::MakeFullFileName( BASE_SCREEN::m_PageLayoutDescrFileName,
+    wxString filename = DS_DATA_MODEL::MakeFullFileName( BASE_SCREEN::m_PageLayoutDescrFileName,
                                                          Prj().GetProjectPath() );
 
-    pglayout.SetPageLayout( filename );
+    DS_DATA_MODEL::GetTheInstance().LoadDrawingSheet( filename );
 
     // Load render settings that aren't stored in PCB_DISPLAY_OPTIONS
 
diff --git a/pcbnew/ratsnest/ratsnest_viewitem.cpp b/pcbnew/ratsnest/ratsnest_view_item.cpp
similarity index 94%
rename from pcbnew/ratsnest/ratsnest_viewitem.cpp
rename to pcbnew/ratsnest/ratsnest_view_item.cpp
index 83c4a59bd5..134832842c 100644
--- a/pcbnew/ratsnest/ratsnest_viewitem.cpp
+++ b/pcbnew/ratsnest/ratsnest_view_item.cpp
@@ -25,11 +25,10 @@
  */
 
 /**
- * @file ratsnest_viewitem.cpp
  * @brief Class that draws missing connections on a PCB.
  */
 
-#include <ratsnest/ratsnest_viewitem.h>
+#include <ratsnest/ratsnest_view_item.h>
 
 #include <gal/graphics_abstraction_layer.h>
 #include <pcb_painter.h>
@@ -43,15 +42,13 @@
 
 #include <view/view.h>
 
-namespace KIGFX {
-
-RATSNEST_VIEWITEM::RATSNEST_VIEWITEM(  std::shared_ptr<CONNECTIVITY_DATA> aData ) :
+RATSNEST_VIEW_ITEM::RATSNEST_VIEW_ITEM( std::shared_ptr<CONNECTIVITY_DATA> aData ) :
         EDA_ITEM( NOT_USED ), m_data( std::move(aData) )
 {
 }
 
 
-const BOX2I RATSNEST_VIEWITEM::ViewBBox() const
+const BOX2I RATSNEST_VIEW_ITEM::ViewBBox() const
 {
     // Make it always visible
     BOX2I bbox;
@@ -61,7 +58,7 @@ const BOX2I RATSNEST_VIEWITEM::ViewBBox() const
 }
 
 
-void RATSNEST_VIEWITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
+void RATSNEST_VIEW_ITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
 {
     std::unique_lock<KISPINLOCK> lock( m_data->GetLock(), std::try_to_lock );
 
@@ -74,7 +71,7 @@ void RATSNEST_VIEWITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
 	gal->SetIsStroke( true );
     gal->SetIsFill( false );
     gal->SetLineWidth( 1.0 );
-    auto rs = static_cast<PCB_RENDER_SETTINGS*>( aView->GetPainter()->GetSettings() );
+    auto rs = static_cast<KIGFX::PCB_RENDER_SETTINGS*>( aView->GetPainter()->GetSettings() );
 
     COLOR4D    defaultColor = rs->GetColor( nullptr, LAYER_RATSNEST );
     COLOR4D    color        = defaultColor;
@@ -234,10 +231,9 @@ void RATSNEST_VIEWITEM::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
 }
 
 
-void RATSNEST_VIEWITEM::ViewGetLayers( int aLayers[], int& aCount ) const
+void RATSNEST_VIEW_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
 {
     aCount = 1;
     aLayers[0] = LAYER_RATSNEST;
 }
 
-}
diff --git a/pcbnew/ratsnest/ratsnest_viewitem.h b/pcbnew/ratsnest/ratsnest_view_item.h
similarity index 80%
rename from pcbnew/ratsnest/ratsnest_viewitem.h
rename to pcbnew/ratsnest/ratsnest_view_item.h
index 5b2c524b66..a483f1f651 100644
--- a/pcbnew/ratsnest/ratsnest_viewitem.h
+++ b/pcbnew/ratsnest/ratsnest_view_item.h
@@ -25,12 +25,11 @@
  */
 
 /**
- * @file ratsnest_viewitem.h
  * @brief Class that draws missing connections on a PCB.
  */
 
-#ifndef RATSNEST_VIEWITEM_H
-#define RATSNEST_VIEWITEM_H
+#ifndef RATSNEST_VIEW_ITEM_H
+#define RATSNEST_VIEW_ITEM_H
 
 #include <memory>
 #include <eda_item.h>
@@ -39,12 +38,11 @@
 class GAL;
 class CONNECTIVITY_DATA;
 
-namespace KIGFX
-{
-class RATSNEST_VIEWITEM : public EDA_ITEM
+
+class RATSNEST_VIEW_ITEM : public EDA_ITEM
 {
 public:
-    RATSNEST_VIEWITEM( std::shared_ptr<CONNECTIVITY_DATA> aData );
+    RATSNEST_VIEW_ITEM( std::shared_ptr<CONNECTIVITY_DATA> aData );
 
     /// @copydoc VIEW_ITEM::ViewBBox()
     const BOX2I ViewBBox() const override;
@@ -65,21 +63,14 @@ public:
     void Show( int x, std::ostream& st ) const override { }
 #endif
 
-    /**
-     * Get class name.
-     *
-     * @return string "RATSNEST_VIEWITEM"
-     */
     virtual wxString GetClass() const override
     {
-        return wxT( "RATSNEST_VIEWITEM" );
+        return wxT( "RATSNEST_VIEW_ITEM" );
     }
 
 protected:
-    ///< Object containing ratsnest data.
-    std::shared_ptr<CONNECTIVITY_DATA> m_data;
+    std::shared_ptr<CONNECTIVITY_DATA> m_data;      ///< Object containing ratsnest data.
 };
 
-}   // namespace KIGFX
 
-#endif /* RATSNEST_VIEWITEM_H */
+#endif /* RATSNEST_VIEW_ITEM_H */
diff --git a/pcbnew/tools/board_editor_control.cpp b/pcbnew/tools/board_editor_control.cpp
index 136110119d..ca3eb78414 100644
--- a/pcbnew/tools/board_editor_control.cpp
+++ b/pcbnew/tools/board_editor_control.cpp
@@ -62,7 +62,7 @@
 #include <view/view_controls.h>
 #include <view/view_group.h>
 #include <wildcards_and_files_ext.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 #include <footprint_edit_frame.h>
 
 using namespace std::placeholders;
@@ -271,7 +271,7 @@ int BOARD_EDITOR_CONTROL::SaveCopyAs( const TOOL_EVENT& aEvent )
 int BOARD_EDITOR_CONTROL::PageSettings( const TOOL_EVENT& aEvent )
 {
     PICKED_ITEMS_LIST   undoCmd;
-    WS_PROXY_UNDO_ITEM* undoItem = new WS_PROXY_UNDO_ITEM( m_frame );
+    DS_PROXY_UNDO_ITEM* undoItem = new DS_PROXY_UNDO_ITEM( m_frame );
     ITEM_PICKER         wrapper( nullptr, undoItem, UNDO_REDO::PAGESETTINGS );
 
     undoCmd.PushItem( wrapper );
diff --git a/pcbnew/tools/drc_tool.cpp b/pcbnew/tools/drc_tool.cpp
index b9974f5d04..f1581d68c1 100644
--- a/pcbnew/tools/drc_tool.cpp
+++ b/pcbnew/tools/drc_tool.cpp
@@ -150,7 +150,7 @@ void DRC_TOOL::RunTests( PROGRESS_REPORTER* aProgressReporter, bool aRefillZones
         zoneFiller->FillAllZones( m_drcDialog, aProgressReporter );
     }
 
-    m_drcEngine->SetWorksheet( m_editFrame->GetCanvas()->GetWorksheet() );
+    m_drcEngine->SetDrawingSheet( m_editFrame->GetCanvas()->GetDrawingSheet());
 
     if( aTestFootprints && !Kiface().IsSingle() )
     {
diff --git a/pcbnew/tools/edit_tool.cpp b/pcbnew/tools/edit_tool.cpp
index 8d0eaff4c0..f0eaf184f1 100644
--- a/pcbnew/tools/edit_tool.cpp
+++ b/pcbnew/tools/edit_tool.cpp
@@ -30,7 +30,7 @@
 #include <fp_shape.h>
 #include <collectors.h>
 #include <pcb_edit_frame.h>
-#include <page_layout/ws_proxy_view_item.h>
+#include <drawing_sheet/ds_proxy_view_item.h>
 #include <kiway.h>
 #include <array_creator.h>
 #include <pcbnew_settings.h>
@@ -1236,10 +1236,10 @@ int EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
     }
     else if( selection.Size() == 0 && getView()->IsLayerVisible( LAYER_DRAWINGSHEET ) )
     {
-        KIGFX::WS_PROXY_VIEW_ITEM* worksheet = editFrame->GetCanvas()->GetWorksheet();
-        VECTOR2D cursorPos = getViewControls()->GetCursorPosition( false );
+        DS_PROXY_VIEW_ITEM* ds = editFrame->GetCanvas()->GetDrawingSheet();
+        VECTOR2D            cursorPos = getViewControls()->GetCursorPosition( false );
 
-        if( worksheet && worksheet->HitTestDrawingSheetItems( getView(), (wxPoint) cursorPos ) )
+        if( ds && ds->HitTestDrawingSheetItems( getView(), (wxPoint) cursorPos ) )
             m_toolMgr->RunAction( ACTIONS::pageSettings );
     }
 
diff --git a/pcbnew/undo_redo.cpp b/pcbnew/undo_redo.cpp
index 11ac6b4a12..9d9714c697 100644
--- a/pcbnew/undo_redo.cpp
+++ b/pcbnew/undo_redo.cpp
@@ -42,7 +42,7 @@ using namespace std::placeholders;
 #include <tools/pcb_selection_tool.h>
 #include <tools/pcb_control.h>
 #include <tools/board_editor_control.h>
-#include <page_layout/ws_proxy_undo_item.h>
+#include <drawing_sheet/ds_proxy_undo_item.h>
 
 /* Functions to undo and redo edit commands.
  *  commands to undo are stored in CurrentScreen->m_UndoList
@@ -518,8 +518,8 @@ void PCB_BASE_EDIT_FRAME::PutDataInPreviousState( PICKED_ITEMS_LIST* aList )
         case UNDO_REDO::PAGESETTINGS:
         {
             // swap current settings with stored settings
-            WS_PROXY_UNDO_ITEM  alt_item( this );
-            WS_PROXY_UNDO_ITEM* item = (WS_PROXY_UNDO_ITEM*) eda_item;
+            DS_PROXY_UNDO_ITEM  alt_item( this );
+            DS_PROXY_UNDO_ITEM* item = static_cast<DS_PROXY_UNDO_ITEM*>( eda_item );
             item->Restore( this );
             *item = alt_item;
         }