diff --git a/common/jobs/job_export_pcb_pdf.cpp b/common/jobs/job_export_pcb_pdf.cpp
index 7f2a5f39fb..d1b4e4c186 100644
--- a/common/jobs/job_export_pcb_pdf.cpp
+++ b/common/jobs/job_export_pcb_pdf.cpp
@@ -35,6 +35,9 @@ JOB_EXPORT_PCB_PDF::JOB_EXPORT_PCB_PDF( bool aIsCli ) :
         m_plotBorderTitleBlocks( false ),
         m_printMaskLayer(),
         m_sketchPadsOnFabLayers( false ),
+        m_hideDNPFPsOnFabLayers( false ),
+        m_sketchDNPFPsOnFabLayers( true ),
+        m_crossoutDNPFPsOnFabLayers( true ),
         m_drillShapeOption( 2 )
 {
 }
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_pdf.h b/common/jobs/job_export_pcb_pdf.h
index 92a96d3c37..2ded1bf74b 100644
--- a/common/jobs/job_export_pcb_pdf.h
+++ b/common/jobs/job_export_pcb_pdf.h
@@ -48,6 +48,9 @@ public:
     LSEQ m_printMaskLayer;
 
     bool m_sketchPadsOnFabLayers;
+    bool m_hideDNPFPsOnFabLayers;
+    bool m_sketchDNPFPsOnFabLayers;
+    bool m_crossoutDNPFPsOnFabLayers;
 
     // How holes in pads/vias are plotted:
     // 0 = no hole, 1 = small shape, 2 = actual shape
diff --git a/common/jobs/job_export_pcb_svg.cpp b/common/jobs/job_export_pcb_svg.cpp
index 63efcb8881..843b32e1dd 100644
--- a/common/jobs/job_export_pcb_svg.cpp
+++ b/common/jobs/job_export_pcb_svg.cpp
@@ -34,6 +34,9 @@ JOB_EXPORT_PCB_SVG::JOB_EXPORT_PCB_SVG( bool aIsCli ) :
     m_pageSizeMode( 0 ),
     m_printMaskLayer(),
     m_sketchPadsOnFabLayers( false ),
+    m_hideDNPFPsOnFabLayers( false ),
+    m_sketchDNPFPsOnFabLayers( true ),
+    m_crossoutDNPFPsOnFabLayers( true ),
     m_drillShapeOption( 2 )
 {
 }
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_svg.h b/common/jobs/job_export_pcb_svg.h
index 3f4dcf0384..c39c6db540 100644
--- a/common/jobs/job_export_pcb_svg.h
+++ b/common/jobs/job_export_pcb_svg.h
@@ -46,6 +46,9 @@ public:
 
     LSEQ m_printMaskLayer;
     bool m_sketchPadsOnFabLayers;
+    bool m_hideDNPFPsOnFabLayers;
+    bool m_sketchDNPFPsOnFabLayers;
+    bool m_crossoutDNPFPsOnFabLayers;
 
     // How holes in pads/vias are plotted:
     // 0 = no hole, 1 = small shape, 2 = actual shape
diff --git a/common/jobs/job_fp_export_svg.cpp b/common/jobs/job_fp_export_svg.cpp
index 2bb0d00b43..ed15af6347 100644
--- a/common/jobs/job_fp_export_svg.cpp
+++ b/common/jobs/job_fp_export_svg.cpp
@@ -27,6 +27,9 @@ JOB_FP_EXPORT_SVG::JOB_FP_EXPORT_SVG( bool aIsCli ) :
     m_footprint(),
     m_outputDirectory(),
     m_blackAndWhite( false ),
-    m_sketchPadsOnFabLayers( false )
+    m_sketchPadsOnFabLayers( false ),
+    m_hideDNPFPsOnFabLayers( false ),
+    m_sketchDNPFPsOnFabLayers( true ),
+    m_crossoutDNPFPsOnFabLayers( true )
 {
 }
\ No newline at end of file
diff --git a/common/jobs/job_fp_export_svg.h b/common/jobs/job_fp_export_svg.h
index 6694342210..da3fdb4bfe 100644
--- a/common/jobs/job_fp_export_svg.h
+++ b/common/jobs/job_fp_export_svg.h
@@ -41,6 +41,10 @@ public:
 
     bool m_blackAndWhite;
     bool m_sketchPadsOnFabLayers;
+    bool m_hideDNPFPsOnFabLayers;
+    bool m_sketchDNPFPsOnFabLayers;
+    bool m_crossoutDNPFPsOnFabLayers;
+
     LSEQ m_printMaskLayer;
 };
 
diff --git a/common/pcb_plot_params.keywords b/common/pcb_plot_params.keywords
index bb20738e21..6e1b40ab20 100644
--- a/common/pcb_plot_params.keywords
+++ b/common/pcb_plot_params.keywords
@@ -1,4 +1,5 @@
 creategerberjobfile
+crossoutdnponfab
 dashed_line_dash_ratio
 dashed_line_gap_ratio
 disableapertmacros
@@ -9,6 +10,7 @@ dxfusepcbnewfont
 excludeedgelayer
 false
 gerberprecision
+hidednponfab
 hpglpendiameter
 hpglpennumber
 hpglpenoverlay
@@ -36,6 +38,7 @@ pscolor
 psnegative
 scaleselection
 sketchpadsonfab
+sketchdnponfab
 subtractmaskfromsilk
 svgprecision
 svguseinch
diff --git a/kicad/cli/command_fp_export_svg.cpp b/kicad/cli/command_fp_export_svg.cpp
index c8f45100c1..e8304cc7ea 100644
--- a/kicad/cli/command_fp_export_svg.cpp
+++ b/kicad/cli/command_fp_export_svg.cpp
@@ -54,6 +54,18 @@ CLI::FP_EXPORT_SVG_COMMAND::FP_EXPORT_SVG_COMMAND() : PCB_EXPORT_BASE_COMMAND( "
             .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) )
             .flag();
 
+    m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
     m_argParser.add_argument( ARG_BLACKANDWHITE )
             .help( UTF8STDSTR( _( ARG_BLACKANDWHITE_DESC ) ) )
             .flag();
@@ -72,6 +84,9 @@ int CLI::FP_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway )
     svgJob->m_outputDirectory = m_argOutput;
     svgJob->m_blackAndWhite = m_argParser.get<bool>( ARG_BLACKANDWHITE );
     svgJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
+    svgJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
+    svgJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS );
+    svgJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS );
     svgJob->m_footprint = From_UTF8( m_argParser.get<std::string>( ARG_FOOTPRINT ).c_str() );
     svgJob->SetVarOverrides( m_argDefineVars );
 
diff --git a/kicad/cli/command_pcb_export_base.h b/kicad/cli/command_pcb_export_base.h
index 4726548429..4fb3b5c67c 100644
--- a/kicad/cli/command_pcb_export_base.h
+++ b/kicad/cli/command_pcb_export_base.h
@@ -34,6 +34,13 @@ namespace CLI
 #define ARG_SKETCH_PADS_ON_FAB_LAYERS "--sketch-pads-on-fab-layers"
 #define ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC "Draw pad outlines and their numbers on front and back fab layers"
 
+#define ARG_HIDE_DNP_FPS_ON_FAB_LAYERS "--hide-DNP-footprints-on-fab-layers"
+#define ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC "Don't plot text & graphics of DNP footprints on fab layers"
+#define ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS "--sketch-DNP-footprints-on-fab-layers"
+#define ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC "Plot graphics of DNP footprints in sketch mode on fab layers"
+#define ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS "--crossout-DNP-footprints-on-fab-layers"
+#define ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC "Plot an 'X' over the courtyard of DNP footprints on fab layers, and strikeout their reference designators"
+
 #define ARG_DRILL_SHAPE_OPTION "--drill-shape-opt"
 #define ARG_DRILL_SHAPE_OPTION_DESC "Set pad/via drill shape option (0 = no shape, 1 = small shape, 2 = actual shape)"
 
diff --git a/kicad/cli/command_pcb_export_pdf.cpp b/kicad/cli/command_pcb_export_pdf.cpp
index b105703c65..6e23644136 100644
--- a/kicad/cli/command_pcb_export_pdf.cpp
+++ b/kicad/cli/command_pcb_export_pdf.cpp
@@ -57,6 +57,18 @@ CLI::PCB_EXPORT_PDF_COMMAND::PCB_EXPORT_PDF_COMMAND() : PCB_EXPORT_BASE_COMMAND(
             .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) )
             .flag();
 
+    m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
     m_argParser.add_argument( ARG_NEGATIVE_SHORT, ARG_NEGATIVE )
             .help( UTF8STDSTR( _( ARG_NEGATIVE_DESC ) ) )
             .flag();
@@ -108,6 +120,9 @@ int CLI::PCB_EXPORT_PDF_COMMAND::doPerform( KIWAY& aKiway )
     pdfJob->m_negative = m_argParser.get<bool>( ARG_NEGATIVE );
 
     pdfJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
+    pdfJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
+    pdfJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS );
+    pdfJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS );
     pdfJob->m_drillShapeOption = m_argParser.get<int>( ARG_DRILL_SHAPE_OPTION );
 
     pdfJob->m_printMaskLayer = m_selectedLayers;
diff --git a/kicad/cli/command_pcb_export_svg.cpp b/kicad/cli/command_pcb_export_svg.cpp
index ddc52278d6..ae2f652180 100644
--- a/kicad/cli/command_pcb_export_svg.cpp
+++ b/kicad/cli/command_pcb_export_svg.cpp
@@ -63,6 +63,18 @@ CLI::PCB_EXPORT_SVG_COMMAND::PCB_EXPORT_SVG_COMMAND() : PCB_EXPORT_BASE_COMMAND(
             .help( UTF8STDSTR( _( ARG_SKETCH_PADS_ON_FAB_LAYERS_DESC ) ) )
             .flag();
 
+    m_argParser.add_argument( "--hdnp", ARG_HIDE_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--sdnp", ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
+    m_argParser.add_argument( "--cdnp", ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS )
+            .help( UTF8STDSTR( _( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS_DESC ) ) )
+            .flag();
+
     m_argParser.add_argument( ARG_PAGE_SIZE )
             .help( UTF8STDSTR( _( "Set page sizing mode (0 = page with frame and title block, 1 = "
                                 "current page size, 2 = board area only)" ) ) )
@@ -95,6 +107,9 @@ int CLI::PCB_EXPORT_SVG_COMMAND::doPerform( KIWAY& aKiway )
     svgJob->m_pageSizeMode = m_argParser.get<int>( ARG_PAGE_SIZE );
     svgJob->m_negative = m_argParser.get<bool>( ARG_NEGATIVE );
     svgJob->m_sketchPadsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_PADS_ON_FAB_LAYERS );
+    svgJob->m_hideDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_HIDE_DNP_FPS_ON_FAB_LAYERS );
+    svgJob->m_sketchDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_SKETCH_DNP_FPS_ON_FAB_LAYERS );
+    svgJob->m_crossoutDNPFPsOnFabLayers = m_argParser.get<bool>( ARG_CROSSOUT_DNP_FPS_ON_FAB_LAYERS );
     svgJob->m_drillShapeOption = m_argParser.get<int>( ARG_DRILL_SHAPE_OPTION );
     svgJob->m_drawingSheet = m_argDrawingSheet;
 
diff --git a/pcbnew/dialogs/dialog_export_svg.cpp b/pcbnew/dialogs/dialog_export_svg.cpp
index cf2ff2fad1..320ca05327 100644
--- a/pcbnew/dialogs/dialog_export_svg.cpp
+++ b/pcbnew/dialogs/dialog_export_svg.cpp
@@ -321,6 +321,9 @@ void DIALOG_EXPORT_SVG::ExportSVGFile( bool aOnlyOneFile )
     svgPlotOptions.m_blackAndWhite = m_printBW;
     svgPlotOptions.m_printMaskLayer = m_printMaskLayer;
     svgPlotOptions.m_sketchPadsOnFabLayers = false;
+    svgPlotOptions.m_hideDNPFPsOnFabLayers = false;
+    svgPlotOptions.m_sketchDNPFPsOnFabLayers = true;
+    svgPlotOptions.m_crossoutDNPFPsOnFabLayers = true;
     svgPlotOptions.m_pageSizeMode = m_rbSvgPageSizeOpt->GetSelection();
 
     PCBNEW_SETTINGS* cfg = m_parent->GetPcbNewSettings();
diff --git a/pcbnew/dialogs/dialog_plot.cpp b/pcbnew/dialogs/dialog_plot.cpp
index a3a0c6a99b..3bb77f79e8 100644
--- a/pcbnew/dialogs/dialog_plot.cpp
+++ b/pcbnew/dialogs/dialog_plot.cpp
@@ -323,6 +323,21 @@ void DIALOG_PLOT::init_Dialog()
     m_plotPadNumbers->SetValue( m_plotOpts.GetPlotPadNumbers() );
     m_plotPadNumbers->Enable( m_plotOpts.GetSketchPadsOnFabLayers() );
 
+    m_plotDNP->SetValue( m_plotOpts.GetHideDNPFPsOnFabLayers()
+                            || m_plotOpts.GetSketchDNPFPsOnFabLayers()
+                            || m_plotOpts.GetCrossoutDNPFPsOnFabLayers() );
+
+    if( m_plotDNP->GetValue() )
+    {
+        if( m_plotOpts.GetHideDNPFPsOnFabLayers() )
+            m_hideDNP->SetValue( true );
+        else
+            m_crossoutDNP->SetValue( true );
+    }
+
+    m_hideDNP->Enable( m_plotDNP->GetValue() );
+    m_crossoutDNP->Enable( m_plotDNP->GetValue() );
+
     // Option to tent vias
     m_subtractMaskFromSilk->SetValue( m_plotOpts.GetSubtractMaskFromSilk() );
 
@@ -332,10 +347,7 @@ void DIALOG_PLOT::init_Dialog()
     // Option to plot page references:
     m_plotSheetRef->SetValue( m_plotOpts.GetPlotFrameRef() );
 
-    // Options to plot texts on footprints
-    m_plotFootprintValues->SetValue( m_plotOpts.GetPlotValue() );
-    m_plotFootprintRefs->SetValue( m_plotOpts.GetPlotReference() );
-    m_plotFootprintText->SetValue( m_plotOpts.GetPlotFPText() );
+    // Option to force ploting of hidden text in footprints
     m_plotInvisibleText->SetValue( m_plotOpts.GetPlotInvisibleText() );
 
     // Options to plot pads and vias holes
@@ -895,10 +907,13 @@ void DIALOG_PLOT::applyPlotSettings()
     tempOptions.SetPlotFrameRef( m_plotSheetRef->GetValue() );
     tempOptions.SetSketchPadsOnFabLayers( m_sketchPadsOnFabLayers->GetValue() );
     tempOptions.SetPlotPadNumbers( m_plotPadNumbers->GetValue() );
+    tempOptions.SetHideDNPFPsOnFabLayers( m_plotDNP->GetValue()
+                                            && m_hideDNP->GetValue() );
+    tempOptions.SetSketchDNPFPsOnFabLayers( m_plotDNP->GetValue()
+                                            && m_crossoutDNP->GetValue() );
+    tempOptions.SetCrossoutDNPFPsOnFabLayers( m_plotDNP->GetValue()
+                                            && m_crossoutDNP->GetValue() );
     tempOptions.SetUseAuxOrigin( m_useAuxOriginCheckBox->GetValue() );
-    tempOptions.SetPlotValue( m_plotFootprintValues->GetValue() );
-    tempOptions.SetPlotReference( m_plotFootprintRefs->GetValue() );
-    tempOptions.SetPlotFPText( m_plotFootprintText->GetValue() );
     tempOptions.SetPlotInvisibleText( m_plotInvisibleText->GetValue() );
     tempOptions.SetScaleSelection( m_scaleOpt->GetSelection() );
 
@@ -1332,29 +1347,13 @@ void DIALOG_PLOT::onPlotAllListMoveDown( wxCommandEvent& aEvent )
 }
 
 
-void DIALOG_PLOT::onPlotFPRefs( wxCommandEvent& aEvent )
+void DIALOG_PLOT::onDNPCheckbox( wxCommandEvent& aEvent )
 {
-    if( aEvent.IsChecked() )
-        m_plotFootprintText->SetValue( true );
+    m_hideDNP->Enable( aEvent.IsChecked() );
+    m_crossoutDNP->Enable( aEvent.IsChecked() );
 }
 
 
-void DIALOG_PLOT::onPlotFPValues( wxCommandEvent& aEvent )
-{
-    if( aEvent.IsChecked() )
-        m_plotFootprintText->SetValue( true );
-}
-
-
-void DIALOG_PLOT::onPlotFPText( wxCommandEvent& aEvent )
-{
-    if( !aEvent.IsChecked() )
-    {
-        m_plotFootprintRefs->SetValue( false );
-        m_plotFootprintValues->SetValue( false );
-    }
-}
-
 void DIALOG_PLOT::onSketchPads( wxCommandEvent& aEvent )
 {
     m_plotPadNumbers->Enable( aEvent.IsChecked() );
diff --git a/pcbnew/dialogs/dialog_plot.h b/pcbnew/dialogs/dialog_plot.h
index 86d7bb009b..d527bb776d 100644
--- a/pcbnew/dialogs/dialog_plot.h
+++ b/pcbnew/dialogs/dialog_plot.h
@@ -60,9 +60,7 @@ private:
     void onPlotAllListMoveUp( wxCommandEvent& aEvent );
     void onPlotAllListMoveDown( wxCommandEvent& aEvent );
 
-    void onPlotFPValues( wxCommandEvent& aEvent ) override;
-    void onPlotFPRefs( wxCommandEvent& aEvent ) override;
-    void onPlotFPText( wxCommandEvent& aEvent ) override;
+    void onDNPCheckbox( wxCommandEvent& event ) override;
     void onSketchPads( wxCommandEvent& event ) override;
 
     // other functions
diff --git a/pcbnew/dialogs/dialog_plot_base.cpp b/pcbnew/dialogs/dialog_plot_base.cpp
index eb093c7274..c2a275f40b 100644
--- a/pcbnew/dialogs/dialog_plot_base.cpp
+++ b/pcbnew/dialogs/dialog_plot_base.cpp
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
+// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!
@@ -77,22 +77,23 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
 
 	gbSizer1->Add( m_plotSheetRef, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
 
-	m_plotFootprintValues = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Plot footprint values"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_plotFootprintValues->SetValue(true);
-	gbSizer1->Add( m_plotFootprintValues, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+	m_plotDNP = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Indicate DNP on fabrication layers"), wxDefaultPosition, wxDefaultSize, 0 );
+	m_plotDNP->SetToolTip( _("Hide or cross-out DNP footprints on fabrication layers") );
 
-	m_plotFootprintRefs = new wxCheckBox( sbOptionsSizer->GetStaticBox(), ID_PRINT_REF, _("Plot reference designators"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_plotFootprintRefs->SetValue(true);
-	gbSizer1->Add( m_plotFootprintRefs, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+	gbSizer1->Add( m_plotDNP, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
 
-	m_plotFootprintText = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Plot footprint text"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_plotFootprintText->SetValue(true);
-	gbSizer1->Add( m_plotFootprintText, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+	m_hideDNP = new wxRadioButton( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Hide"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
+	m_hideDNP->SetToolTip( _("Hide the footprint text and graphics") );
+
+	gbSizer1->Add( m_hideDNP, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 );
+
+	m_crossoutDNP = new wxRadioButton( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Cross-out"), wxDefaultPosition, wxDefaultSize, 0 );
+	gbSizer1->Add( m_crossoutDNP, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 );
 
 	m_plotInvisibleText = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Force plotting of invisible values / refs"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_plotInvisibleText->SetToolTip( _("Force plot invisible footprint values and reference designators") );
 
-	gbSizer1->Add( m_plotInvisibleText, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
+	gbSizer1->Add( m_plotInvisibleText, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
 
 	m_sketchPadsOnFabLayers = new wxCheckBox( sbOptionsSizer->GetStaticBox(), ID_ALLOW_PRINT_PAD_ON_SILKSCREEN, _("Sketch pads on fabrication layers"), wxDefaultPosition, wxDefaultSize, 0 );
 	m_sketchPadsOnFabLayers->SetToolTip( _("Include pad outlines on F.Fab and B.Fab layers when plotting") );
@@ -100,11 +101,10 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
 	gbSizer1->Add( m_sketchPadsOnFabLayers, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
 
 	m_plotPadNumbers = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Include pad numbers"), wxDefaultPosition, wxDefaultSize, 0 );
-	m_plotPadNumbers->SetValue(true);
 	gbSizer1->Add( m_plotPadNumbers, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), wxLEFT, 25 );
 
 	m_zoneFillCheck = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Check zone fills before plotting"), wxDefaultPosition, wxDefaultSize, 0 );
-	gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
+	gbSizer1->Add( m_zoneFillCheck, wxGBPosition( 6, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 30 );
 
 	drillMarksLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Drill marks:"), wxDefaultPosition, wxDefaultSize, 0 );
 	drillMarksLabel->Wrap( -1 );
@@ -155,7 +155,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
 
 	m_SizerSolderMaskAlert = new wxBoxSizer( wxHORIZONTAL );
 
-	m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxASCII_STR(wxART_WARNING), wxASCII_STR(wxART_CMN_DIALOG) ), wxDefaultPosition, wxDefaultSize, 0 );
+	m_bitmapAlert = new wxStaticBitmap( this, wxID_ANY, wxArtProvider::GetBitmap( wxART_WARNING, wxART_CMN_DIALOG ), wxDefaultPosition, wxDefaultSize, 0 );
 	m_SizerSolderMaskAlert->Add( m_bitmapAlert, 0, wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
 
 	wxBoxSizer* bSizerWarningText;
@@ -474,9 +474,7 @@ DIALOG_PLOT_BASE::DIALOG_PLOT_BASE( wxWindow* parent, wxWindowID id, const wxStr
 	this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
 	m_plotFormatOpt->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
 	m_browseButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
-	m_plotFootprintValues->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPValues ), NULL, this );
-	m_plotFootprintRefs->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPRefs ), NULL, this );
-	m_plotFootprintText->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPText ), NULL, this );
+	m_plotDNP->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onDNPCheckbox ), NULL, this );
 	m_sketchPadsOnFabLayers->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onSketchPads ), NULL, this );
 	m_scaleOpt->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnSetScaleOpt ), NULL, this );
 	m_boardSetup->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_PLOT_BASE::onBoardSetup ), NULL, this );
@@ -493,9 +491,7 @@ DIALOG_PLOT_BASE::~DIALOG_PLOT_BASE()
 	this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PLOT_BASE::OnInitDialog ) );
 	m_plotFormatOpt->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::SetPlotFormat ), NULL, this );
 	m_browseButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnOutputDirectoryBrowseClicked ), NULL, this );
-	m_plotFootprintValues->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPValues ), NULL, this );
-	m_plotFootprintRefs->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPRefs ), NULL, this );
-	m_plotFootprintText->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onPlotFPText ), NULL, this );
+	m_plotDNP->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onDNPCheckbox ), NULL, this );
 	m_sketchPadsOnFabLayers->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PLOT_BASE::onSketchPads ), NULL, this );
 	m_scaleOpt->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PLOT_BASE::OnSetScaleOpt ), NULL, this );
 	m_boardSetup->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( DIALOG_PLOT_BASE::onBoardSetup ), NULL, this );
diff --git a/pcbnew/dialogs/dialog_plot_base.fbp b/pcbnew/dialogs/dialog_plot_base.fbp
index e1025cd495..e24c94e0fd 100644
--- a/pcbnew/dialogs/dialog_plot_base.fbp
+++ b/pcbnew/dialogs/dialog_plot_base.fbp
@@ -1,36 +1,34 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <wxFormBuilder_Project>
-  <FileVersion major="1" minor="18"/>
+  <FileVersion major="1" minor="17"/>
   <object class="Project" expanded="true">
+    <property name="class_decoration">; </property>
     <property name="code_generation">C++</property>
-    <property name="cpp_class_decoration"></property>
-    <property name="cpp_disconnect_events">1</property>
-    <property name="cpp_event_generation">connect</property>
-    <property name="cpp_help_provider">none</property>
-    <property name="cpp_namespace"></property>
-    <property name="cpp_precompiled_header"></property>
-    <property name="cpp_use_array_enum">0</property>
-    <property name="cpp_use_enum">1</property>
+    <property name="disconnect_events">1</property>
+    <property name="disconnect_mode">source_name</property>
+    <property name="disconnect_php_events">0</property>
+    <property name="disconnect_python_events">0</property>
     <property name="embedded_files_path">res</property>
     <property name="encoding">UTF-8</property>
+    <property name="event_generation">connect</property>
     <property name="file">dialog_plot_base</property>
     <property name="first_id">1000</property>
+    <property name="help_provider">none</property>
+    <property name="image_path_wrapper_function_name"></property>
+    <property name="indent_with_spaces"></property>
     <property name="internationalize">1</property>
-    <property name="lua_skip_events">1</property>
-    <property name="lua_ui_table">UI</property>
     <property name="name">Dialog_Plot_base</property>
+    <property name="namespace"></property>
     <property name="path">.</property>
-    <property name="php_disconnect_events">0</property>
-    <property name="php_disconnect_mode">source_name</property>
-    <property name="php_skip_events">1</property>
-    <property name="python_disconnect_events">0</property>
-    <property name="python_disconnect_mode">source_name</property>
-    <property name="python_image_path_wrapper_function_name"></property>
-    <property name="python_indent_with_spaces"></property>
-    <property name="python_skip_events">1</property>
+    <property name="precompiled_header"></property>
     <property name="relative_path">1</property>
+    <property name="skip_lua_events">1</property>
+    <property name="skip_php_events">1</property>
+    <property name="skip_python_events">1</property>
+    <property name="ui_table">UI</property>
+    <property name="use_array_enum">0</property>
+    <property name="use_enum">0</property>
     <property name="use_microsoft_bom">0</property>
-    <property name="use_native_eol">0</property>
     <object class="Dialog" expanded="true">
       <property name="aui_managed">0</property>
       <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
@@ -607,75 +605,6 @@
                             <property name="window_style"></property>
                           </object>
                         </object>
-                        <object class="gbsizeritem" expanded="false">
-                          <property name="border">5</property>
-                          <property name="colspan">1</property>
-                          <property name="column">0</property>
-                          <property name="flag">wxALIGN_CENTER_VERTICAL</property>
-                          <property name="row">1</property>
-                          <property name="rowspan">1</property>
-                          <object class="wxCheckBox" expanded="false">
-                            <property name="BottomDockable">1</property>
-                            <property name="LeftDockable">1</property>
-                            <property name="RightDockable">1</property>
-                            <property name="TopDockable">1</property>
-                            <property name="aui_layer">0</property>
-                            <property name="aui_name"></property>
-                            <property name="aui_position">0</property>
-                            <property name="aui_row">0</property>
-                            <property name="best_size"></property>
-                            <property name="bg"></property>
-                            <property name="caption"></property>
-                            <property name="caption_visible">1</property>
-                            <property name="center_pane">0</property>
-                            <property name="checked">1</property>
-                            <property name="close_button">1</property>
-                            <property name="context_help"></property>
-                            <property name="context_menu">1</property>
-                            <property name="default_pane">0</property>
-                            <property name="dock">Dock</property>
-                            <property name="dock_fixed">0</property>
-                            <property name="docking">Left</property>
-                            <property name="drag_accept_files">0</property>
-                            <property name="enabled">1</property>
-                            <property name="fg"></property>
-                            <property name="floatable">1</property>
-                            <property name="font"></property>
-                            <property name="gripper">0</property>
-                            <property name="hidden">0</property>
-                            <property name="id">wxID_ANY</property>
-                            <property name="label">Plot footprint values</property>
-                            <property name="max_size"></property>
-                            <property name="maximize_button">0</property>
-                            <property name="maximum_size"></property>
-                            <property name="min_size"></property>
-                            <property name="minimize_button">0</property>
-                            <property name="minimum_size"></property>
-                            <property name="moveable">1</property>
-                            <property name="name">m_plotFootprintValues</property>
-                            <property name="pane_border">1</property>
-                            <property name="pane_position"></property>
-                            <property name="pane_size"></property>
-                            <property name="permission">protected</property>
-                            <property name="pin_button">1</property>
-                            <property name="pos"></property>
-                            <property name="resize">Resizable</property>
-                            <property name="show">1</property>
-                            <property name="size"></property>
-                            <property name="style"></property>
-                            <property name="subclass"></property>
-                            <property name="toolbar_pane">0</property>
-                            <property name="tooltip"></property>
-                            <property name="validator_data_type"></property>
-                            <property name="validator_style">wxFILTER_NONE</property>
-                            <property name="validator_type">wxDefaultValidator</property>
-                            <property name="validator_variable"></property>
-                            <property name="window_extra_style"></property>
-                            <property name="window_name"></property>
-                            <property name="window_style"></property>
-                            <event name="OnCheckBox">onPlotFPValues</event>
-                          </object>
-                        </object>
                         <object class="gbsizeritem" expanded="false">
                           <property name="border">5</property>
                           <property name="colspan">1</property>
@@ -697,76 +626,7 @@
                             <property name="caption"></property>
                             <property name="caption_visible">1</property>
                             <property name="center_pane">0</property>
-                            <property name="checked">1</property>
-                            <property name="close_button">1</property>
-                            <property name="context_help"></property>
-                            <property name="context_menu">1</property>
-                            <property name="default_pane">0</property>
-                            <property name="dock">Dock</property>
-                            <property name="dock_fixed">0</property>
-                            <property name="docking">Left</property>
-                            <property name="drag_accept_files">0</property>
-                            <property name="enabled">1</property>
-                            <property name="fg"></property>
-                            <property name="floatable">1</property>
-                            <property name="font"></property>
-                            <property name="gripper">0</property>
-                            <property name="hidden">0</property>
-                            <property name="id">ID_PRINT_REF</property>
-                            <property name="label">Plot reference designators</property>
-                            <property name="max_size"></property>
-                            <property name="maximize_button">0</property>
-                            <property name="maximum_size"></property>
-                            <property name="min_size"></property>
-                            <property name="minimize_button">0</property>
-                            <property name="minimum_size"></property>
-                            <property name="moveable">1</property>
-                            <property name="name">m_plotFootprintRefs</property>
-                            <property name="pane_border">1</property>
-                            <property name="pane_position"></property>
-                            <property name="pane_size"></property>
-                            <property name="permission">protected</property>
-                            <property name="pin_button">1</property>
-                            <property name="pos"></property>
-                            <property name="resize">Resizable</property>
-                            <property name="show">1</property>
-                            <property name="size"></property>
-                            <property name="style"></property>
-                            <property name="subclass"></property>
-                            <property name="toolbar_pane">0</property>
-                            <property name="tooltip"></property>
-                            <property name="validator_data_type"></property>
-                            <property name="validator_style">wxFILTER_NONE</property>
-                            <property name="validator_type">wxDefaultValidator</property>
-                            <property name="validator_variable"></property>
-                            <property name="window_extra_style"></property>
-                            <property name="window_name"></property>
-                            <property name="window_style"></property>
-                            <event name="OnCheckBox">onPlotFPRefs</event>
-                          </object>
-                        </object>
-                        <object class="gbsizeritem" expanded="true">
-                          <property name="border">5</property>
-                          <property name="colspan">1</property>
-                          <property name="column">0</property>
-                          <property name="flag">wxALIGN_CENTER_VERTICAL</property>
-                          <property name="row">3</property>
-                          <property name="rowspan">1</property>
-                          <object class="wxCheckBox" expanded="true">
-                            <property name="BottomDockable">1</property>
-                            <property name="LeftDockable">1</property>
-                            <property name="RightDockable">1</property>
-                            <property name="TopDockable">1</property>
-                            <property name="aui_layer">0</property>
-                            <property name="aui_name"></property>
-                            <property name="aui_position">0</property>
-                            <property name="aui_row">0</property>
-                            <property name="best_size"></property>
-                            <property name="bg"></property>
-                            <property name="caption"></property>
-                            <property name="caption_visible">1</property>
-                            <property name="center_pane">0</property>
-                            <property name="checked">1</property>
+                            <property name="checked">0</property>
                             <property name="close_button">1</property>
                             <property name="context_help"></property>
                             <property name="context_menu">1</property>
@@ -782,7 +642,7 @@
                             <property name="gripper">0</property>
                             <property name="hidden">0</property>
                             <property name="id">wxID_ANY</property>
-                            <property name="label">Plot footprint text</property>
+                            <property name="label">Indicate DNP on fabrication layers</property>
                             <property name="max_size"></property>
                             <property name="maximize_button">0</property>
                             <property name="maximum_size"></property>
@@ -790,7 +650,143 @@
                             <property name="minimize_button">0</property>
                             <property name="minimum_size"></property>
                             <property name="moveable">1</property>
-                            <property name="name">m_plotFootprintText</property>
+                            <property name="name">m_plotDNP</property>
+                            <property name="pane_border">1</property>
+                            <property name="pane_position"></property>
+                            <property name="pane_size"></property>
+                            <property name="permission">protected</property>
+                            <property name="pin_button">1</property>
+                            <property name="pos"></property>
+                            <property name="resize">Resizable</property>
+                            <property name="show">1</property>
+                            <property name="size"></property>
+                            <property name="style"></property>
+                            <property name="subclass"></property>
+                            <property name="toolbar_pane">0</property>
+                            <property name="tooltip">Hide or cross-out DNP footprints on fabrication layers</property>
+                            <property name="validator_data_type"></property>
+                            <property name="validator_style">wxFILTER_NONE</property>
+                            <property name="validator_type">wxDefaultValidator</property>
+                            <property name="validator_variable"></property>
+                            <property name="window_extra_style"></property>
+                            <property name="window_name"></property>
+                            <property name="window_style"></property>
+                            <event name="OnCheckBox">onDNPCheckbox</event>
+                          </object>
+                        </object>
+                        <object class="gbsizeritem" expanded="true">
+                          <property name="border">25</property>
+                          <property name="colspan">1</property>
+                          <property name="column">0</property>
+                          <property name="flag">wxLEFT</property>
+                          <property name="row">3</property>
+                          <property name="rowspan">1</property>
+                          <object class="wxRadioButton" expanded="true">
+                            <property name="BottomDockable">1</property>
+                            <property name="LeftDockable">1</property>
+                            <property name="RightDockable">1</property>
+                            <property name="TopDockable">1</property>
+                            <property name="aui_layer"></property>
+                            <property name="aui_name"></property>
+                            <property name="aui_position"></property>
+                            <property name="aui_row"></property>
+                            <property name="best_size"></property>
+                            <property name="bg"></property>
+                            <property name="caption"></property>
+                            <property name="caption_visible">1</property>
+                            <property name="center_pane">0</property>
+                            <property name="close_button">1</property>
+                            <property name="context_help"></property>
+                            <property name="context_menu">1</property>
+                            <property name="default_pane">0</property>
+                            <property name="dock">Dock</property>
+                            <property name="dock_fixed">0</property>
+                            <property name="docking">Left</property>
+                            <property name="drag_accept_files">0</property>
+                            <property name="enabled">1</property>
+                            <property name="fg"></property>
+                            <property name="floatable">1</property>
+                            <property name="font"></property>
+                            <property name="gripper">0</property>
+                            <property name="hidden">0</property>
+                            <property name="id">wxID_ANY</property>
+                            <property name="label">Hide</property>
+                            <property name="max_size"></property>
+                            <property name="maximize_button">0</property>
+                            <property name="maximum_size"></property>
+                            <property name="min_size"></property>
+                            <property name="minimize_button">0</property>
+                            <property name="minimum_size"></property>
+                            <property name="moveable">1</property>
+                            <property name="name">m_hideDNP</property>
+                            <property name="pane_border">1</property>
+                            <property name="pane_position"></property>
+                            <property name="pane_size"></property>
+                            <property name="permission">protected</property>
+                            <property name="pin_button">1</property>
+                            <property name="pos"></property>
+                            <property name="resize">Resizable</property>
+                            <property name="show">1</property>
+                            <property name="size"></property>
+                            <property name="style">wxRB_GROUP</property>
+                            <property name="subclass">; ; forward_declare</property>
+                            <property name="toolbar_pane">0</property>
+                            <property name="tooltip">Hide the footprint text and graphics</property>
+                            <property name="validator_data_type"></property>
+                            <property name="validator_style">wxFILTER_NONE</property>
+                            <property name="validator_type">wxDefaultValidator</property>
+                            <property name="validator_variable"></property>
+                            <property name="value">0</property>
+                            <property name="window_extra_style"></property>
+                            <property name="window_name"></property>
+                            <property name="window_style"></property>
+                          </object>
+                        </object>
+                        <object class="gbsizeritem" expanded="true">
+                          <property name="border">25</property>
+                          <property name="colspan">1</property>
+                          <property name="column">0</property>
+                          <property name="flag">wxLEFT</property>
+                          <property name="row">4</property>
+                          <property name="rowspan">1</property>
+                          <object class="wxRadioButton" expanded="true">
+                            <property name="BottomDockable">1</property>
+                            <property name="LeftDockable">1</property>
+                            <property name="RightDockable">1</property>
+                            <property name="TopDockable">1</property>
+                            <property name="aui_layer"></property>
+                            <property name="aui_name"></property>
+                            <property name="aui_position"></property>
+                            <property name="aui_row"></property>
+                            <property name="best_size"></property>
+                            <property name="bg"></property>
+                            <property name="caption"></property>
+                            <property name="caption_visible">1</property>
+                            <property name="center_pane">0</property>
+                            <property name="close_button">1</property>
+                            <property name="context_help"></property>
+                            <property name="context_menu">1</property>
+                            <property name="default_pane">0</property>
+                            <property name="dock">Dock</property>
+                            <property name="dock_fixed">0</property>
+                            <property name="docking">Left</property>
+                            <property name="drag_accept_files">0</property>
+                            <property name="enabled">1</property>
+                            <property name="fg"></property>
+                            <property name="floatable">1</property>
+                            <property name="font"></property>
+                            <property name="gripper">0</property>
+                            <property name="hidden">0</property>
+                            <property name="id">wxID_ANY</property>
+                            <property name="label">Cross-out</property>
+                            <property name="max_size"></property>
+                            <property name="maximize_button">0</property>
+                            <property name="maximum_size"></property>
+                            <property name="min_size"></property>
+                            <property name="minimize_button">0</property>
+                            <property name="minimum_size"></property>
+                            <property name="moveable">1</property>
+                            <property name="name">m_crossoutDNP</property>
                             <property name="pane_border">1</property>
                             <property name="pane_position"></property>
                             <property name="pane_size"></property>
@@ -808,10 +804,10 @@
                             <property name="validator_style">wxFILTER_NONE</property>
                             <property name="validator_type">wxDefaultValidator</property>
                             <property name="validator_variable"></property>
+                            <property name="value">0</property>
                             <property name="window_extra_style"></property>
                             <property name="window_name"></property>
                             <property name="window_style"></property>
-                            <event name="OnCheckBox">onPlotFPText</event>
                           </object>
                         </object>
                         <object class="gbsizeritem" expanded="false">
@@ -819,7 +815,7 @@
                           <property name="colspan">1</property>
                           <property name="column">0</property>
                           <property name="flag">wxALIGN_CENTER_VERTICAL</property>
-                          <property name="row">4</property>
+                          <property name="row">1</property>
                           <property name="rowspan">1</property>
                           <object class="wxCheckBox" expanded="false">
                             <property name="BottomDockable">1</property>
@@ -972,7 +968,7 @@
                             <property name="caption"></property>
                             <property name="caption_visible">1</property>
                             <property name="center_pane">0</property>
-                            <property name="checked">1</property>
+                            <property name="checked">0</property>
                             <property name="close_button">1</property>
                             <property name="context_help"></property>
                             <property name="context_menu">1</property>
@@ -1020,11 +1016,11 @@
                           </object>
                         </object>
                         <object class="gbsizeritem" expanded="false">
-                          <property name="border">5</property>
-                          <property name="colspan">1</property>
-                          <property name="column">0</property>
-                          <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
-                          <property name="row">7</property>
+                          <property name="border">30</property>
+                          <property name="colspan">2</property>
+                          <property name="column">1</property>
+                          <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
+                          <property name="row">6</property>
                           <property name="rowspan">1</property>
                           <object class="wxCheckBox" expanded="false">
                             <property name="BottomDockable">1</property>
diff --git a/pcbnew/dialogs/dialog_plot_base.h b/pcbnew/dialogs/dialog_plot_base.h
index d621729104..60c6873f96 100644
--- a/pcbnew/dialogs/dialog_plot_base.h
+++ b/pcbnew/dialogs/dialog_plot_base.h
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////
-// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
+// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf)
 // http://www.wxformbuilder.org/
 //
 // PLEASE DO *NOT* EDIT THIS FILE!
@@ -31,6 +31,7 @@ class WX_HTML_REPORT_PANEL;
 #include <wx/checklst.h>
 #include <wx/statbox.h>
 #include <wx/checkbox.h>
+#include <wx/radiobut.h>
 #include <wx/gbsizer.h>
 #include <wx/statbmp.h>
 #include <wx/hyperlink.h>
@@ -40,6 +41,9 @@ class WX_HTML_REPORT_PANEL;
 
 ///////////////////////////////////////////////////////////////////////////
 
+#define ID_ALLOW_PRINT_PAD_ON_SILKSCREEN 1000
+#define ID_MIROR_OPT 1001
+
 ///////////////////////////////////////////////////////////////////////////////
 /// Class DIALOG_PLOT_BASE
 ///////////////////////////////////////////////////////////////////////////////
@@ -48,13 +52,6 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
 	private:
 
 	protected:
-		enum
-		{
-			ID_PRINT_REF = 1000,
-			ID_ALLOW_PRINT_PAD_ON_SILKSCREEN,
-			ID_MIROR_OPT,
-		};
-
 		wxBoxSizer* m_MainSizer;
 		wxStaticText* m_staticTextPlotFmt;
 		wxChoice* m_plotFormatOpt;
@@ -66,9 +63,9 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
 		wxCheckListBox* m_layerCheckListBox;
 		wxBoxSizer* m_PlotOptionsSizer;
 		wxCheckBox* m_plotSheetRef;
-		wxCheckBox* m_plotFootprintValues;
-		wxCheckBox* m_plotFootprintRefs;
-		wxCheckBox* m_plotFootprintText;
+		wxCheckBox* m_plotDNP;
+		wxRadioButton* m_hideDNP;
+		wxRadioButton* m_crossoutDNP;
 		wxCheckBox* m_plotInvisibleText;
 		wxCheckBox* m_sketchPadsOnFabLayers;
 		wxCheckBox* m_plotPadNumbers;
@@ -138,9 +135,7 @@ class DIALOG_PLOT_BASE : public DIALOG_SHIM
 		virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); }
 		virtual void SetPlotFormat( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnOutputDirectoryBrowseClicked( wxCommandEvent& event ) { event.Skip(); }
-		virtual void onPlotFPValues( wxCommandEvent& event ) { event.Skip(); }
-		virtual void onPlotFPRefs( wxCommandEvent& event ) { event.Skip(); }
-		virtual void onPlotFPText( wxCommandEvent& event ) { event.Skip(); }
+		virtual void onDNPCheckbox( wxCommandEvent& event ) { event.Skip(); }
 		virtual void onSketchPads( wxCommandEvent& event ) { event.Skip(); }
 		virtual void OnSetScaleOpt( wxCommandEvent& event ) { event.Skip(); }
 		virtual void onBoardSetup( wxHyperlinkEvent& event ) { event.Skip(); }
diff --git a/pcbnew/exporters/export_svg.cpp b/pcbnew/exporters/export_svg.cpp
index 630f759bbb..d9a842289f 100644
--- a/pcbnew/exporters/export_svg.cpp
+++ b/pcbnew/exporters/export_svg.cpp
@@ -39,6 +39,10 @@ bool EXPORT_SVG::Plot( BOARD* aBoard, const PCB_PLOT_SVG_OPTIONS& aSvgPlotOption
         plot_opts.SetPlotPadNumbers( true );
     }
 
+    plot_opts.SetHideDNPFPsOnFabLayers( aSvgPlotOptions.m_hideDNPFPsOnFabLayers );
+    plot_opts.SetSketchDNPFPsOnFabLayers( aSvgPlotOptions.m_sketchDNPFPsOnFabLayers );
+    plot_opts.SetCrossoutDNPFPsOnFabLayers( aSvgPlotOptions.m_crossoutDNPFPsOnFabLayers );
+
     // Adding drill marks, for copper layers
     if( ( LSET( aSvgPlotOptions.m_printMaskLayer ) & LSET::AllCuMask() ).any() )
     {
diff --git a/pcbnew/exporters/export_svg.h b/pcbnew/exporters/export_svg.h
index 21dcb005ab..e16015b507 100644
--- a/pcbnew/exporters/export_svg.h
+++ b/pcbnew/exporters/export_svg.h
@@ -35,6 +35,9 @@ struct PCB_PLOT_SVG_OPTIONS
 
     LSEQ m_printMaskLayer;
     bool m_sketchPadsOnFabLayers;
+    bool m_hideDNPFPsOnFabLayers;
+    bool m_sketchDNPFPsOnFabLayers;
+    bool m_crossoutDNPFPsOnFabLayers;
 
     // How holes in pads/vias are plotted:
     // 0 = no hole, 1 = small shape, 2 = actual shape
diff --git a/pcbnew/pcb_plot_params.cpp b/pcbnew/pcb_plot_params.cpp
index dca742e5cf..677e2d9b64 100644
--- a/pcbnew/pcb_plot_params.cpp
+++ b/pcbnew/pcb_plot_params.cpp
@@ -117,6 +117,9 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS()
     m_plotFPText                 = true;
     m_plotInvisibleText          = false;
     m_sketchPadsOnFabLayers      = false;
+    m_hideDNPFPsOnFabLayers      = false;
+    m_sketchDNPFPsOnFabLayers    = true;
+    m_crossoutDNPFPsOnFabLayers  = true;
     m_plotPadNumbers             = false;
     m_subtractMaskFromSilk       = false;
     m_format                     = PLOT_FORMAT::GERBER;
@@ -140,15 +143,15 @@ PCB_PLOT_PARAMS::PCB_PLOT_PARAMS()
 
     // This parameter controls if the NPTH pads will be plotted or not
     // it is a "local" parameter
-    m_skipNPTH_Pads              = false;
+    m_skipNPTH_Pads                 = false;
 
     // line width to plot items in outline mode.
     m_sketchPadLineWidth         = pcbIUScale.mmToIU( 0.1 );
 
-    m_default_colors = std::make_shared<COLOR_SETTINGS>();
-    m_colors         = m_default_colors.get();
+    m_default_colors             = std::make_shared<COLOR_SETTINGS>();
+    m_colors                     = m_default_colors.get();
 
-    m_blackAndWhite = true;
+    m_blackAndWhite              = true;
 }
 
 
@@ -240,12 +243,12 @@ void PCB_PLOT_PARAMS::Format( OUTPUTFORMATTER* aFormatter,
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, getTokenName( T_psa4output ),
                               m_A4Output );
 
-    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotreference", m_plotReference );
-    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotvalue", m_plotValue );
-    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotfptext", m_plotFPText );
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotinvisibletext", m_plotInvisibleText );
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "sketchpadsonfab", m_sketchPadsOnFabLayers );
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "plotpadnumbers", m_plotPadNumbers );
+    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "hidednponfab", m_hideDNPFPsOnFabLayers );
+    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "sketchdnponfab", m_sketchDNPFPsOnFabLayers );
+    KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "crossoutdnponfab", m_crossoutDNPFPsOnFabLayers );
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "subtractmaskfromsilk", m_subtractMaskFromSilk );
     aFormatter->Print( aNestLevel+1, "(outputformat %d)\n", static_cast<int>( m_format ) );
     KICAD_FORMAT::FormatBool( aFormatter, aNestLevel + 1, "mirror", m_mirror );
@@ -356,6 +359,15 @@ bool PCB_PLOT_PARAMS::IsSameAs( const PCB_PLOT_PARAMS &aPcbPlotParams ) const
     if( m_plotPadNumbers != aPcbPlotParams.m_plotPadNumbers )
         return false;
 
+    if( m_hideDNPFPsOnFabLayers != aPcbPlotParams.m_hideDNPFPsOnFabLayers )
+        return false;
+
+    if( m_sketchDNPFPsOnFabLayers != aPcbPlotParams.m_sketchDNPFPsOnFabLayers )
+        return false;
+
+    if( m_crossoutDNPFPsOnFabLayers != aPcbPlotParams.m_crossoutDNPFPsOnFabLayers )
+        return false;
+
     if( m_subtractMaskFromSilk != aPcbPlotParams.m_subtractMaskFromSilk )
         return false;
 
@@ -607,18 +619,6 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
             aPcbPlotParams->m_negative = parseBool();
             break;
 
-        case T_plotreference:
-            aPcbPlotParams->m_plotReference = parseBool();
-            break;
-
-        case T_plotfptext:
-            aPcbPlotParams->m_plotFPText = parseBool();
-            break;
-
-        case T_plotvalue:
-            aPcbPlotParams->m_plotValue = parseBool();
-            break;
-
         case T_plotinvisibletext:
             aPcbPlotParams->m_plotInvisibleText = parseBool();
             break;
@@ -631,6 +631,18 @@ void PCB_PLOT_PARAMS_PARSER::Parse( PCB_PLOT_PARAMS* aPcbPlotParams )
             aPcbPlotParams->m_plotPadNumbers = parseBool();
             break;
 
+        case T_hidednponfab:
+            aPcbPlotParams->m_hideDNPFPsOnFabLayers = parseBool();
+            break;
+
+        case T_sketchdnponfab:
+            aPcbPlotParams->m_sketchDNPFPsOnFabLayers = parseBool();
+            break;
+
+        case T_crossoutdnponfab:
+            aPcbPlotParams->m_crossoutDNPFPsOnFabLayers = parseBool();
+            break;
+
         case T_subtractmaskfromsilk:
             aPcbPlotParams->m_subtractMaskFromSilk = parseBool();
             break;
diff --git a/pcbnew/pcb_plot_params.h b/pcbnew/pcb_plot_params.h
index f519fa7747..1414deef33 100644
--- a/pcbnew/pcb_plot_params.h
+++ b/pcbnew/pcb_plot_params.h
@@ -104,6 +104,13 @@ public:
     void        SetSketchPadLineWidth( int aWidth ) { m_sketchPadLineWidth = aWidth; }
     int         GetSketchPadLineWidth() const { return m_sketchPadLineWidth; }
 
+    void        SetHideDNPFPsOnFabLayers( bool aFlag ) { m_hideDNPFPsOnFabLayers = aFlag; }
+    bool        GetHideDNPFPsOnFabLayers() const { return m_hideDNPFPsOnFabLayers; }
+    void        SetSketchDNPFPsOnFabLayers( bool aFlag ) { m_sketchDNPFPsOnFabLayers = aFlag; }
+    bool        GetSketchDNPFPsOnFabLayers() const { return m_sketchDNPFPsOnFabLayers; }
+    void        SetCrossoutDNPFPsOnFabLayers( bool aFlag ) { m_crossoutDNPFPsOnFabLayers = aFlag; }
+    bool        GetCrossoutDNPFPsOnFabLayers() const { return m_crossoutDNPFPsOnFabLayers; }
+
     void        SetPlotInvisibleText( bool aFlag ) { m_plotInvisibleText = aFlag; }
     bool        GetPlotInvisibleText() const { return m_plotInvisibleText; }
     void        SetPlotValue( bool aFlag ) { m_plotValue = aFlag; }
@@ -271,6 +278,10 @@ private:
     bool       m_sketchPadsOnFabLayers; ///< Plots pads outlines on fab layers
     int        m_sketchPadLineWidth;
 
+    bool       m_hideDNPFPsOnFabLayers;
+    bool       m_sketchDNPFPsOnFabLayers;
+    bool       m_crossoutDNPFPsOnFabLayers;
+
     double     m_fineScaleAdjustX;      ///< Compensation for printer scale errors (and therefore
     double     m_fineScaleAdjustY;      ///<   expected to be very near 1.0).  Only X and Y
                                         ///<   dimensions are adjusted: circles are plotted as
diff --git a/pcbnew/pcbnew_jobs_handler.cpp b/pcbnew/pcbnew_jobs_handler.cpp
index 11b6e630fa..10b4842b08 100644
--- a/pcbnew/pcbnew_jobs_handler.cpp
+++ b/pcbnew/pcbnew_jobs_handler.cpp
@@ -423,6 +423,9 @@ int PCBNEW_JOBS_HANDLER::JobExportSvg( JOB* aJob )
     svgPlotOptions.m_printMaskLayer = aSvgJob->m_printMaskLayer;
     svgPlotOptions.m_plotFrame = aSvgJob->m_plotDrawingSheet;
     svgPlotOptions.m_sketchPadsOnFabLayers = aSvgJob->m_sketchPadsOnFabLayers;
+    svgPlotOptions.m_hideDNPFPsOnFabLayers = aSvgJob->m_hideDNPFPsOnFabLayers;
+    svgPlotOptions.m_sketchDNPFPsOnFabLayers = aSvgJob->m_sketchDNPFPsOnFabLayers;
+    svgPlotOptions.m_crossoutDNPFPsOnFabLayers = aSvgJob->m_crossoutDNPFPsOnFabLayers;
     svgPlotOptions.m_drillShapeOption = aSvgJob->m_drillShapeOption;
 
     if( aJob->IsCli() )
@@ -566,6 +569,10 @@ int PCBNEW_JOBS_HANDLER::JobExportPdf( JOB* aJob )
         plotOpts.SetPlotPadNumbers( true );
     }
 
+    plotOpts.SetHideDNPFPsOnFabLayers( aPdfJob->m_hideDNPFPsOnFabLayers );
+    plotOpts.SetSketchDNPFPsOnFabLayers( aPdfJob->m_sketchDNPFPsOnFabLayers );
+    plotOpts.SetCrossoutDNPFPsOnFabLayers( aPdfJob->m_crossoutDNPFPsOnFabLayers );
+
     switch( aPdfJob->m_drillShapeOption )
     {
         default:
@@ -1245,6 +1252,9 @@ int PCBNEW_JOBS_HANDLER::doFpExportSvg( JOB_FP_EXPORT_SVG* aSvgJob, const FOOTPR
     svgPlotOptions.m_pageSizeMode = 2; // board bounding box
     svgPlotOptions.m_printMaskLayer = aSvgJob->m_printMaskLayer;
     svgPlotOptions.m_sketchPadsOnFabLayers = aSvgJob->m_sketchPadsOnFabLayers;
+    svgPlotOptions.m_hideDNPFPsOnFabLayers = aSvgJob->m_hideDNPFPsOnFabLayers;
+    svgPlotOptions.m_sketchDNPFPsOnFabLayers = aSvgJob->m_sketchDNPFPsOnFabLayers;
+    svgPlotOptions.m_crossoutDNPFPsOnFabLayers = aSvgJob->m_crossoutDNPFPsOnFabLayers;
     svgPlotOptions.m_plotFrame = false;
 
     if( !EXPORT_SVG::Plot( brd.get(), svgPlotOptions ) )
diff --git a/pcbnew/pcbplot.h b/pcbnew/pcbplot.h
index 9ba0c72fa0..a5ac1c3203 100644
--- a/pcbnew/pcbplot.h
+++ b/pcbnew/pcbplot.h
@@ -91,7 +91,7 @@ public:
     void PlotPcbTarget( const PCB_TARGET* aMire );
     void PlotZone( const ZONE* aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET& aPolysList );
     void PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, bool aIsKnockout,
-                   const KIFONT::METRICS& aFontMetrics );
+                   const KIFONT::METRICS& aFontMetrics, bool aStrikeout = false );
     void PlotShape( const PCB_SHAPE* aShape );
     void PlotTableBorders( const PCB_TABLE* aTable );
 
@@ -129,6 +129,16 @@ public:
     COLOR4D getColor( int aLayer ) const;
 
 private:
+    bool hideDNPItems( PCB_LAYER_ID aLayer )
+    {
+        return GetHideDNPFPsOnFabLayers() && ( aLayer == F_Fab || aLayer == B_Fab );
+    }
+
+    bool crossoutDNPItems( PCB_LAYER_ID aLayer )
+    {
+        return GetCrossoutDNPFPsOnFabLayers() && ( aLayer == F_Fab || aLayer == B_Fab );
+    }
+
     /**
      * Helper function to plot a single drill mark.
      *
diff --git a/pcbnew/plot_board_layers.cpp b/pcbnew/plot_board_layers.cpp
index 0c5e5ec438..3c9571f544 100644
--- a/pcbnew/plot_board_layers.cpp
+++ b/pcbnew/plot_board_layers.cpp
@@ -571,6 +571,20 @@ void PlotStandardLayer( BOARD* aBoard, PLOTTER* aPlotter, LSET aLayerMask,
             pad->SetRoundRectRadiusRatio( padCornerRadiusRatio );
         }
 
+        if( footprint->IsDNP()
+                && !itemplotter.GetHideDNPFPsOnFabLayers()
+                && itemplotter.GetCrossoutDNPFPsOnFabLayers()
+                && ( onFrontFab || onBackFab ) )
+        {
+            BOX2I rect = footprint->GetBoundingHull().BBox();
+            int   width = aBoard->GetDesignSettings().m_LineThickness[ LAYER_CLASS_FAB ];
+
+            aPlotter->ThickSegment( rect.GetOrigin(), rect.GetEnd(), width, FILLED, nullptr );
+            aPlotter->ThickSegment( VECTOR2I( rect.GetLeft(), rect.GetBottom() ),
+                                    VECTOR2I( rect.GetRight(), rect.GetTop() ),
+                                    width, FILLED, nullptr );
+        }
+
         aPlotter->EndBlock( nullptr );
     }
 
diff --git a/pcbnew/plot_brditems_plotter.cpp b/pcbnew/plot_brditems_plotter.cpp
index 8dd3eeb534..b187bf0fd0 100644
--- a/pcbnew/plot_brditems_plotter.cpp
+++ b/pcbnew/plot_brditems_plotter.cpp
@@ -354,18 +354,22 @@ void BRDITEMS_PLOTTER::PlotFootprintTextItems( const FOOTPRINT* aFootprint )
 
     // Reference and value have special controls for forcing their plotting
     if( GetPlotReference() && m_layerMask[textLayer]
-        && ( textItem->IsVisible() || GetPlotInvisibleText() ) )
+            && ( textItem->IsVisible() || GetPlotInvisibleText() )
+            && !( aFootprint->IsDNP() && hideDNPItems( textLayer ) ) )
     {
-        PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics() );
+        PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics(),
+                  aFootprint->IsDNP() && crossoutDNPItems( textLayer ) );
     }
 
     textItem  = &aFootprint->Value();
     textLayer = textItem->GetLayer();
 
     if( GetPlotValue() && m_layerMask[textLayer]
-        && ( textItem->IsVisible() || GetPlotInvisibleText() ) )
+            && ( textItem->IsVisible() || GetPlotInvisibleText() )
+            && !( aFootprint->IsDNP() && hideDNPItems( textLayer ) ) )
     {
-        PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics() );
+        PlotText( textItem, textLayer, textItem->IsKnockout(), textItem->GetFontMetrics(),
+                  false );
     }
 
     std::vector<PCB_TEXT*> texts;
@@ -393,20 +397,32 @@ void BRDITEMS_PLOTTER::PlotFootprintTextItems( const FOOTPRINT* aFootprint )
             continue;
 
         textLayer = text->GetLayer();
+        bool strikeout = false;
 
         if( textLayer == Edge_Cuts || textLayer >= PCB_LAYER_ID_COUNT )
             continue;
 
+        if( aFootprint->IsDNP() && hideDNPItems( textLayer ) )
+            continue;
+
         if( !m_layerMask[textLayer] || aFootprint->GetPrivateLayers().test( textLayer ) )
             continue;
 
-        if( text->GetText() == wxT( "${REFERENCE}" ) && !GetPlotReference() )
-            continue;
+        if( text->GetText() == wxT( "${REFERENCE}" ) )
+        {
+            if( !GetPlotReference() )
+                continue;
 
-        if( text->GetText() == wxT( "${VALUE}" ) && !GetPlotValue() )
-            continue;
+            strikeout = aFootprint->IsDNP() && crossoutDNPItems( textLayer );
+        }
 
-        PlotText( text, textLayer, text->IsKnockout(), text->GetFontMetrics() );
+        if( text->GetText() == wxT( "${VALUE}" ) )
+        {
+            if( !GetPlotValue() )
+                continue;
+        }
+
+        PlotText( text, textLayer, text->IsKnockout(), text->GetFontMetrics(), strikeout );
     }
 }
 
@@ -590,10 +606,15 @@ void BRDITEMS_PLOTTER::PlotFootprintGraphicItems( const FOOTPRINT* aFootprint )
 {
     for( const BOARD_ITEM* item : aFootprint->GraphicalItems() )
     {
-        if( aFootprint->GetPrivateLayers().test( item->GetLayer() ) )
+        PCB_LAYER_ID itemLayer = item->GetLayer();
+
+        if( aFootprint->GetPrivateLayers().test( itemLayer ) )
             continue;
 
-        if( !m_layerMask[ item->GetLayer() ] )
+        if( aFootprint->IsDNP() && hideDNPItems( itemLayer ) )
+            continue;
+
+        if( !m_layerMask[ itemLayer ] )
             continue;
 
         switch( item->Type() )
@@ -639,7 +660,7 @@ void BRDITEMS_PLOTTER::PlotFootprintGraphicItems( const FOOTPRINT* aFootprint )
 
 #include <font/stroke_font.h>
 void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, bool aIsKnockout,
-                                 const KIFONT::METRICS& aFontMetrics )
+                                 const KIFONT::METRICS& aFontMetrics, bool aStrikeout )
 {
     KIFONT::FONT* font = aText->GetFont();
 
@@ -678,6 +699,26 @@ void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, boo
 
     m_plotter->SetCurrentLineWidth( attrs.m_StrokeWidth );
 
+    auto strikeoutText =
+            [&]( const PCB_TEXT* text )
+            {
+                SHAPE_POLY_SET  textPoly;
+
+                text->TransformTextToPolySet( textPoly, 0, ARC_LOW_DEF, ERROR_INSIDE );
+                textPoly.Rotate( -text->GetDrawRotation(), text->GetDrawPos() );
+
+                BOX2I    rect = textPoly.BBox();
+                VECTOR2I start( rect.GetLeft() - attrs.m_StrokeWidth,
+                                ( rect.GetTop() + rect.GetBottom() ) / 2 );
+                VECTOR2I end( rect.GetRight() + attrs.m_StrokeWidth,
+                              ( rect.GetTop() + rect.GetBottom() ) / 2 );
+
+                RotatePoint( start, text->GetDrawPos(), text->GetDrawRotation() );
+                RotatePoint( end, text->GetDrawPos(), text->GetDrawRotation() );
+
+                m_plotter->ThickSegment( start, end, attrs.m_StrokeWidth, FILLED, nullptr );
+            };
+
     if( aIsKnockout )
     {
         const PCB_TEXT* text = static_cast<const PCB_TEXT*>( aText );
@@ -697,17 +738,24 @@ void BRDITEMS_PLOTTER::PlotText( const EDA_TEXT* aText, PCB_LAYER_ID aLayer, boo
         wxStringSplit( shownText, strings_list, '\n' );
         positions.reserve(  strings_list.Count() );
 
-        aText->GetLinePositions( positions, strings_list.Count() );
+        aText->GetLinePositions( positions, (int) strings_list.Count() );
 
         for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
         {
             wxString& txt =  strings_list.Item( ii );
-            m_plotter->PlotText( positions[ii], color, txt, attrs, font, aFontMetrics, &gbr_metadata );
+            m_plotter->PlotText( positions[ii], color, txt, attrs, font, aFontMetrics,
+                                 &gbr_metadata );
         }
+
+        if( aStrikeout && strings_list.Count() == 1 )
+            strikeoutText( static_cast<const PCB_TEXT*>( aText ) );
     }
     else
     {
         m_plotter->PlotText( pos, color, shownText, attrs, font, aFontMetrics, &gbr_metadata );
+
+        if( aStrikeout )
+            strikeoutText( static_cast<const PCB_TEXT*>( aText ) );
     }
 }
 
@@ -779,9 +827,9 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
     if( !m_layerMask[aShape->GetLayer()] )
         return;
 
-    bool       sketch = GetPlotMode() == SKETCH;
-    int        thickness = aShape->GetWidth();
-    LINE_STYLE lineStyle = aShape->GetStroke().GetLineStyle();
+    OUTLINE_MODE plotMode = GetPlotMode();
+    int          thickness = aShape->GetWidth();
+    LINE_STYLE   lineStyle = aShape->GetStroke().GetLineStyle();
 
     m_plotter->SetColor( getColor( aShape->GetLayer() ) );
 
@@ -794,6 +842,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
         gbr_metadata.SetNetAttribType( GBR_NETLIST_METADATA::GBR_NETINFO_CMP );
     }
 
+    if( parentFP && parentFP->IsDNP() && GetSketchDNPFPsOnFabLayers() )
+    {
+        if( aShape->GetLayer() == F_Fab || aShape->GetLayer() == B_Fab )
+            plotMode = SKETCH;
+    }
+
     if( aShape->GetLayer() == Edge_Cuts )
     {
         gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT );
@@ -826,7 +880,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
         switch( aShape->GetShape() )
         {
         case SHAPE_T::SEGMENT:
-            m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, GetPlotMode(),
+            m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, plotMode,
                                      &gbr_metadata );
             break;
 
@@ -834,12 +888,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
             if( aShape->IsFilled() )
             {
                 m_plotter->FilledCircle( aShape->GetStart(), aShape->GetRadius() * 2 + thickness,
-                                         GetPlotMode(), &gbr_metadata );
+                                         plotMode, &gbr_metadata );
             }
             else
             {
                 m_plotter->ThickCircle( aShape->GetStart(), aShape->GetRadius() * 2, thickness,
-                                        GetPlotMode(), &gbr_metadata );
+                                        plotMode, &gbr_metadata );
             }
 
             break;
@@ -851,11 +905,11 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
             if( std::abs( aShape->GetArcAngle().AsDegrees() ) == 360.0 )
             {
                 m_plotter->ThickCircle( aShape->GetCenter(), aShape->GetRadius() * 2, thickness,
-                                        GetPlotMode(), &gbr_metadata );
+                                        plotMode, &gbr_metadata );
             }
             else
             {
-                m_plotter->ThickArc( *aShape, GetPlotMode(), &gbr_metadata );
+                m_plotter->ThickArc( *aShape, plotMode, &gbr_metadata );
             }
 
             break;
@@ -869,13 +923,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
         case SHAPE_T::POLY:
             if( aShape->IsPolyShapeValid() )
             {
-                if( sketch )
+                if( plotMode == SKETCH )
                 {
                     for( auto it = aShape->GetPolyShape().CIterateSegments( 0 ); it; it++ )
                     {
-                        auto seg = it.Get();
-                        m_plotter->ThickSegment( seg.A, seg.B, thickness, GetPlotMode(),
-                                                 &gbr_metadata );
+                        const SEG& seg = it.Get();
+                        m_plotter->ThickSegment( seg.A, seg.B, thickness, SKETCH, &gbr_metadata );
                     }
                 }
                 else
@@ -902,8 +955,8 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
                         // (as region for Gerber plotter to manage attributes)
                         if( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER )
                         {
-                            static_cast<GERBER_PLOTTER*>( m_plotter )->
-                                        PlotPolyAsRegion( poly, fill, thickness, &gbr_metadata );
+                            GERBER_PLOTTER* gbr_plotter = static_cast<GERBER_PLOTTER*>( m_plotter );
+                            gbr_plotter->PlotPolyAsRegion( poly, fill, thickness, &gbr_metadata );
                         }
                         else
                         {
@@ -919,15 +972,14 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
         {
             std::vector<VECTOR2I> pts = aShape->GetRectCorners();
 
-            if( sketch )
+            if( plotMode == SKETCH )
             {
-                m_plotter->ThickSegment( pts[0], pts[1], thickness, GetPlotMode(), &gbr_metadata );
-                m_plotter->ThickSegment( pts[1], pts[2], thickness, GetPlotMode(), &gbr_metadata );
-                m_plotter->ThickSegment( pts[2], pts[3], thickness, GetPlotMode(), &gbr_metadata );
-                m_plotter->ThickSegment( pts[3], pts[0], thickness, GetPlotMode(), &gbr_metadata );
+                m_plotter->ThickSegment( pts[0], pts[1], thickness, SKETCH, &gbr_metadata );
+                m_plotter->ThickSegment( pts[1], pts[2], thickness, SKETCH, &gbr_metadata );
+                m_plotter->ThickSegment( pts[2], pts[3], thickness, SKETCH, &gbr_metadata );
+                m_plotter->ThickSegment( pts[3], pts[0], thickness, SKETCH, &gbr_metadata );
             }
-
-            if( !sketch )
+            else
             {
                 SHAPE_LINE_CHAIN poly;
 
@@ -940,8 +992,8 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
 
                 if( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER )
                 {
-                    static_cast<GERBER_PLOTTER*>( m_plotter )->
-                                PlotPolyAsRegion( poly, fill_mode, thickness, &gbr_metadata );
+                    GERBER_PLOTTER* gbr_plotter = static_cast<GERBER_PLOTTER*>( m_plotter );
+                    gbr_plotter->PlotPolyAsRegion( poly, fill_mode, thickness, &gbr_metadata );
                 }
                 else
                 {
@@ -965,7 +1017,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape )
             STROKE_PARAMS::Stroke( shape, lineStyle, thickness, m_plotter->RenderSettings(),
                                    [&]( const VECTOR2I& a, const VECTOR2I& b )
                                    {
-                                       m_plotter->ThickSegment( a, b, thickness, GetPlotMode(),
+                                       m_plotter->ThickSegment( a, b, thickness, plotMode,
                                                                 &gbr_metadata );
                                    } );
         }