diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index d4eae7c06d..ebe33ebe6a 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -69,6 +69,25 @@ add_library( singletop STATIC EXCLUDE_FROM_ALL
 set( KICOMMON_SRCS
     gal/color4d.cpp
 
+    jobs/job.cpp
+    jobs/job_export_pcb_drill.cpp
+    jobs/job_export_pcb_dxf.cpp
+    jobs/job_export_pcb_gerber.cpp
+    jobs/job_export_pcb_gerbers.cpp
+    jobs/job_export_pcb_pdf.cpp
+    jobs/job_export_pcb_pos.cpp
+    jobs/job_export_pcb_svg.cpp
+    jobs/job_export_pcb_3d.cpp
+    jobs/job_export_sch_bom.cpp
+    jobs/job_export_sch_netlist.cpp
+    jobs/job_export_sch_pythonbom.cpp
+    jobs/job_fp_export_svg.cpp
+    jobs/job_fp_upgrade.cpp
+    jobs/job_pcb_drc.cpp
+    jobs/job_sch_erc.cpp
+    jobs/job_sym_export_svg.cpp
+    jobs/job_sym_upgrade.cpp
+
     asset_archive.cpp
     array_axis.cpp
     array_options.cpp
diff --git a/common/jobs/job.cpp b/common/jobs/job.cpp
new file mode 100644
index 0000000000..fa3678f76c
--- /dev/null
+++ b/common/jobs/job.cpp
@@ -0,0 +1,28 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job.h>
+
+JOB::JOB( const std::string& aType, bool aIsCli ) :
+        m_type( aType ),
+        m_isCli( aIsCli ),
+        m_varOverrides()
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job.h b/common/jobs/job.h
index 8b13a44826..47e24e47f6 100644
--- a/common/jobs/job.h
+++ b/common/jobs/job.h
@@ -21,21 +21,17 @@
 #ifndef JOB_H
 #define JOB_H
 
+#include <kicommon.h>
 #include <map>
 #include <wx/string.h>
 
 /**
  * An simple container class that lets us dispatch output jobs to kifaces
  */
-class JOB
+class KICOMMON_API JOB
 {
 public:
-    JOB( const std::string& aType, bool aIsCli ) :
-            m_type( aType ),
-            m_isCli( aIsCli ),
-            m_varOverrides()
-    {
-    }
+    JOB( const std::string& aType, bool aIsCli );
 
     virtual ~JOB() {}
 
diff --git a/common/jobs/job_export_pcb_3d.cpp b/common/jobs/job_export_pcb_3d.cpp
new file mode 100644
index 0000000000..ee8767c577
--- /dev/null
+++ b/common/jobs/job_export_pcb_3d.cpp
@@ -0,0 +1,47 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_3d.h>
+
+
+JOB_EXPORT_PCB_3D::JOB_EXPORT_PCB_3D( bool aIsCli ) :
+    JOB( "3d", aIsCli ),
+    m_overwrite( false ),
+    m_useGridOrigin( false ),
+    m_useDrillOrigin( false ),
+    m_hasUserOrigin( false ),
+    m_boardOnly( false ),
+    m_includeUnspecified( false ),
+    m_includeDNP( false ),
+    m_substModels( false ),
+    m_filename(),
+    m_outputFile(),
+    m_xOrigin( 0.0 ),
+    m_yOrigin( 0.0 ),
+    // max dist to chain 2 items (lines or curves) to build the board outlines
+    m_BoardOutlinesChainingEpsilon( 0.01 ),     // 0.01 mm is a good value
+    m_exportTracks( false ),     // Extremely time consuming if true
+    m_exportZones( false ),      // Extremely time consuming if true
+    m_format( JOB_EXPORT_PCB_3D::FORMAT::UNKNOWN ),
+    m_vrmlUnits( JOB_EXPORT_PCB_3D::VRML_UNITS::METERS ),
+    m_vrmlModelDir( wxEmptyString ),
+    m_vrmlRelativePaths( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_3d.h b/common/jobs/job_export_pcb_3d.h
index b94aa579ed..ba9f2c0cbc 100644
--- a/common/jobs/job_export_pcb_3d.h
+++ b/common/jobs/job_export_pcb_3d.h
@@ -21,36 +21,14 @@
 #ifndef JOB_EXPORT_STEP_H
 #define JOB_EXPORT_STEP_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_3D : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_3D : public JOB
 {
 public:
-    JOB_EXPORT_PCB_3D( bool aIsCli ) :
-            JOB( "3d", aIsCli ),
-            m_overwrite( false ),
-            m_useGridOrigin( false ),
-            m_useDrillOrigin( false ),
-            m_hasUserOrigin( false ),
-            m_boardOnly( false ),
-            m_includeUnspecified( false ),
-            m_includeDNP( false ),
-            m_substModels( false ),
-            m_filename(),
-            m_outputFile(),
-            m_xOrigin( 0.0 ),
-            m_yOrigin( 0.0 ),
-            // max dist to chain 2 items (lines or curves) to build the board outlines
-            m_BoardOutlinesChainingEpsilon( 0.01 ),     // 0.01 mm is a good value
-            m_exportTracks( false ),     // Extremely time consuming if true
-            m_exportZones( false ),      // Extremely time consuming if true
-            m_format( JOB_EXPORT_PCB_3D::FORMAT::UNKNOWN ),
-            m_vrmlUnits( JOB_EXPORT_PCB_3D::VRML_UNITS::METERS ),
-            m_vrmlModelDir( wxEmptyString ),
-            m_vrmlRelativePaths( false )
-    {
-    }
+    JOB_EXPORT_PCB_3D( bool aIsCli );
 
     enum class FORMAT
     {
diff --git a/common/jobs/job_export_pcb_drill.cpp b/common/jobs/job_export_pcb_drill.cpp
new file mode 100644
index 0000000000..759fb53ef4
--- /dev/null
+++ b/common/jobs/job_export_pcb_drill.cpp
@@ -0,0 +1,39 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_drill.h>
+
+JOB_EXPORT_PCB_DRILL::JOB_EXPORT_PCB_DRILL( bool aIsCli ) :
+    JOB( "drill", aIsCli ),
+    m_filename(),
+    m_outputDir(),
+    m_excellonMirrorY( false ),
+    m_excellonMinimalHeader( false ),
+    m_excellonCombinePTHNPTH( true ),
+    m_excellonOvalDrillRoute( false ),
+    m_format( DRILL_FORMAT::EXCELLON ),
+    m_drillOrigin( DRILL_ORIGIN::ABS ),
+    m_drillUnits( DRILL_UNITS::INCHES ),
+    m_zeroFormat( ZEROS_FORMAT::DECIMAL ),
+    m_mapFormat( MAP_FORMAT::PDF ),
+    m_gerberPrecision( 5 ),
+    m_generateMap( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_drill.h b/common/jobs/job_export_pcb_drill.h
index e845d9b198..7423b2ea31 100644
--- a/common/jobs/job_export_pcb_drill.h
+++ b/common/jobs/job_export_pcb_drill.h
@@ -21,30 +21,15 @@
 #ifndef JOB_EXPORT_PCB_DRILL_H
 #define JOB_EXPORT_PCB_DRILL_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_DRILL : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_DRILL : public JOB
 {
 public:
-    JOB_EXPORT_PCB_DRILL( bool aIsCli ) :
-            JOB( "drill", aIsCli ),
-            m_filename(),
-            m_outputDir(),
-            m_excellonMirrorY( false ),
-            m_excellonMinimalHeader( false ),
-            m_excellonCombinePTHNPTH( true ),
-            m_excellonOvalDrillRoute( false ),
-            m_format( DRILL_FORMAT::EXCELLON ),
-            m_drillOrigin( DRILL_ORIGIN::ABS ),
-            m_drillUnits( DRILL_UNITS::INCHES ),
-            m_zeroFormat( ZEROS_FORMAT::DECIMAL ),
-            m_mapFormat( MAP_FORMAT::PDF ),
-            m_gerberPrecision( 5 ),
-            m_generateMap( false )
-    {
-    }
+    JOB_EXPORT_PCB_DRILL( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputDir;
diff --git a/common/jobs/job_export_pcb_dxf.cpp b/common/jobs/job_export_pcb_dxf.cpp
new file mode 100644
index 0000000000..e920009f04
--- /dev/null
+++ b/common/jobs/job_export_pcb_dxf.cpp
@@ -0,0 +1,36 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_dxf.h>
+
+
+JOB_EXPORT_PCB_DXF::JOB_EXPORT_PCB_DXF( bool aIsCli ) :
+    JOB( "dxf", aIsCli ),
+    m_filename(),
+    m_outputFile(),
+    m_drawingSheet(),
+    m_plotFootprintValues( true ),
+    m_plotRefDes( true ),
+    m_plotGraphicItemsUsingContours( true ),
+    m_plotBorderTitleBlocks( false ),
+    m_dxfUnits( DXF_UNITS::INCHES ),
+    m_printMaskLayer()
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_dxf.h b/common/jobs/job_export_pcb_dxf.h
index 2d33a62cca..cc903e17d7 100644
--- a/common/jobs/job_export_pcb_dxf.h
+++ b/common/jobs/job_export_pcb_dxf.h
@@ -21,26 +21,15 @@
 #ifndef JOB_EXPORT_PCB_DXF_H
 #define JOB_EXPORT_PCB_DXF_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_DXF : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_DXF : public JOB
 {
 public:
-    JOB_EXPORT_PCB_DXF( bool aIsCli ) :
-            JOB( "dxf", aIsCli ),
-            m_filename(),
-            m_outputFile(),
-            m_drawingSheet(),
-            m_plotFootprintValues( true ),
-            m_plotRefDes( true ),
-            m_plotGraphicItemsUsingContours( true ),
-            m_plotBorderTitleBlocks( false ),
-            m_dxfUnits( DXF_UNITS::INCHES ),
-            m_printMaskLayer()
-    {
-    }
+    JOB_EXPORT_PCB_DXF( bool aIsCli );
 
     enum class DXF_UNITS
     {
diff --git a/common/jobs/job_export_pcb_gerber.cpp b/common/jobs/job_export_pcb_gerber.cpp
new file mode 100644
index 0000000000..732e1a7f3e
--- /dev/null
+++ b/common/jobs/job_export_pcb_gerber.cpp
@@ -0,0 +1,47 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_gerber.h>
+
+
+JOB_EXPORT_PCB_GERBER::JOB_EXPORT_PCB_GERBER( const std::string& aType, bool aIsCli ) :
+    JOB( aType, aIsCli ),
+    m_filename(),
+    m_outputFile(),
+    m_drawingSheet(),
+    m_plotFootprintValues( true ),
+    m_plotRefDes( true ),
+    m_plotBorderTitleBlocks( false ),
+    m_subtractSolderMaskFromSilk( false ),
+    m_includeNetlistAttributes( true ),
+    m_useX2Format( true ),
+    m_disableApertureMacros( false ),
+    m_useAuxOrigin( false ),
+    m_useProtelFileExtension( true ),
+    m_precision( 5 ),
+    m_printMaskLayer()
+{
+}
+
+
+JOB_EXPORT_PCB_GERBER::JOB_EXPORT_PCB_GERBER( bool aIsCli ) :
+    JOB_EXPORT_PCB_GERBER( "gerber", aIsCli )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_gerber.h b/common/jobs/job_export_pcb_gerber.h
index f38bf7a171..9ddf3b6155 100644
--- a/common/jobs/job_export_pcb_gerber.h
+++ b/common/jobs/job_export_pcb_gerber.h
@@ -21,36 +21,16 @@
 #ifndef JOB_EXPORT_PCB_GERBER_H
 #define JOB_EXPORT_PCB_GERBER_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_GERBER : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_GERBER : public JOB
 {
 public:
-    JOB_EXPORT_PCB_GERBER( const std::string& aType, bool aIsCli ) :
-            JOB( aType, aIsCli ),
-            m_filename(),
-            m_outputFile(),
-            m_drawingSheet(),
-            m_plotFootprintValues( true ),
-            m_plotRefDes( true ),
-            m_plotBorderTitleBlocks( false ),
-            m_subtractSolderMaskFromSilk( false ),
-            m_includeNetlistAttributes( true ),
-            m_useX2Format( true ),
-            m_disableApertureMacros( false ),
-            m_useAuxOrigin( false ),
-            m_useProtelFileExtension( true ),
-            m_precision( 5 ),
-            m_printMaskLayer()
-    {
-    }
-
-    JOB_EXPORT_PCB_GERBER( bool aIsCli ) :
-            JOB_EXPORT_PCB_GERBER( "gerber", aIsCli )
-    {
-    }
+    JOB_EXPORT_PCB_GERBER( const std::string& aType, bool aIsCli );
+    JOB_EXPORT_PCB_GERBER( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_export_pcb_gerbers.cpp b/common/jobs/job_export_pcb_gerbers.cpp
new file mode 100644
index 0000000000..112b06877f
--- /dev/null
+++ b/common/jobs/job_export_pcb_gerbers.cpp
@@ -0,0 +1,30 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_gerbers.h>
+
+
+JOB_EXPORT_PCB_GERBERS::JOB_EXPORT_PCB_GERBERS( bool aIsCli ) :
+        JOB_EXPORT_PCB_GERBER( "gerbers", aIsCli ),
+        m_layersIncludeOnAll(),
+        m_layersIncludeOnAllSet( false ),
+        m_useBoardPlotParams( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_gerbers.h b/common/jobs/job_export_pcb_gerbers.h
index d5428cc550..8365e28027 100644
--- a/common/jobs/job_export_pcb_gerbers.h
+++ b/common/jobs/job_export_pcb_gerbers.h
@@ -21,21 +21,16 @@
 #ifndef JOB_EXPORT_PCB_GERBERS_H
 #define JOB_EXPORT_PCB_GERBERS_H
 
+#include <kicommon.h>
 #include "job_export_pcb_gerber.h"
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_GERBERS : public JOB_EXPORT_PCB_GERBER
+class KICOMMON_API JOB_EXPORT_PCB_GERBERS : public JOB_EXPORT_PCB_GERBER
 {
 public:
-    JOB_EXPORT_PCB_GERBERS( bool aIsCli ) :
-            JOB_EXPORT_PCB_GERBER( "gerbers", aIsCli ),
-            m_layersIncludeOnAll(),
-            m_layersIncludeOnAllSet( false ),
-            m_useBoardPlotParams( false )
-    {
-    }
+    JOB_EXPORT_PCB_GERBERS( bool aIsCli );
 
     LSET m_layersIncludeOnAll;
 
diff --git a/common/jobs/job_export_pcb_pdf.cpp b/common/jobs/job_export_pcb_pdf.cpp
new file mode 100644
index 0000000000..c62e622e78
--- /dev/null
+++ b/common/jobs/job_export_pcb_pdf.cpp
@@ -0,0 +1,39 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_pdf.h>
+
+
+JOB_EXPORT_PCB_PDF::JOB_EXPORT_PCB_PDF( bool aIsCli ) :
+        JOB( "pdf", aIsCli ),
+        m_filename(),
+        m_outputFile(),
+        m_colorTheme(),
+        m_drawingSheet(),
+        m_mirror( false ),
+        m_blackAndWhite( false ),
+        m_negative( false ),
+        m_plotFootprintValues( true ),
+        m_plotRefDes( true ),
+        m_plotBorderTitleBlocks( false ),
+        m_printMaskLayer(),
+        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 915a327cbf..e9c51e39be 100644
--- a/common/jobs/job_export_pcb_pdf.h
+++ b/common/jobs/job_export_pcb_pdf.h
@@ -21,29 +21,16 @@
 #ifndef JOB_EXPORT_PCB_PDF_H
 #define JOB_EXPORT_PCB_PDF_H
 
+#include <kicommon.h>
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_PDF : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_PDF : public JOB
 {
 public:
-    JOB_EXPORT_PCB_PDF( bool aIsCli ) :
-            JOB( "pdf", aIsCli ),
-            m_filename(),
-            m_outputFile(),
-            m_colorTheme(),
-            m_drawingSheet(),
-            m_mirror( false ),
-            m_blackAndWhite( false ),
-            m_negative( false ),
-            m_plotFootprintValues( true ),
-            m_plotRefDes( true ),
-            m_plotBorderTitleBlocks( false ),
-            m_printMaskLayer(),
-            m_drillShapeOption( 2 )
-    {
-    }
+    JOB_EXPORT_PCB_PDF( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_export_pcb_pos.cpp b/common/jobs/job_export_pcb_pos.cpp
new file mode 100644
index 0000000000..2cf82cddfa
--- /dev/null
+++ b/common/jobs/job_export_pcb_pos.cpp
@@ -0,0 +1,38 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_pos.h>
+
+
+JOB_EXPORT_PCB_POS::JOB_EXPORT_PCB_POS( bool aIsCli ) :
+    JOB( "pos", aIsCli ),
+    m_filename(),
+    m_outputFile(),
+    m_useDrillPlaceFileOrigin( true ),
+    m_smdOnly( false ),
+    m_excludeFootprintsWithTh( false ),
+    m_excludeDNP( false ),
+    m_negateBottomX( false )
+{
+    m_side = SIDE::BOTH;
+    m_units = UNITS::MILLIMETERS;
+    m_format = FORMAT::ASCII;
+    m_gerberBoardEdge = true;
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_pcb_pos.h b/common/jobs/job_export_pcb_pos.h
index d20b92ef7a..fe45a966ff 100644
--- a/common/jobs/job_export_pcb_pos.h
+++ b/common/jobs/job_export_pcb_pos.h
@@ -21,28 +21,15 @@
 #ifndef JOB_EXPORT_PCB_POS_H
 #define JOB_EXPORT_PCB_POS_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_POS : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_POS : public JOB
 {
 public:
-    JOB_EXPORT_PCB_POS( bool aIsCli ) :
-            JOB( "pos", aIsCli ),
-            m_filename(),
-            m_outputFile(),
-            m_useDrillPlaceFileOrigin( true ),
-            m_smdOnly( false ),
-            m_excludeFootprintsWithTh( false ),
-            m_excludeDNP( false ),
-            m_negateBottomX( false )
-    {
-        m_side = SIDE::BOTH;
-        m_units = UNITS::MILLIMETERS;
-        m_format = FORMAT::ASCII;
-        m_gerberBoardEdge = true;
-    }
+    JOB_EXPORT_PCB_POS( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_export_pcb_svg.cpp b/common/jobs/job_export_pcb_svg.cpp
new file mode 100644
index 0000000000..081891e3cc
--- /dev/null
+++ b/common/jobs/job_export_pcb_svg.cpp
@@ -0,0 +1,38 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_pcb_svg.h>
+
+
+JOB_EXPORT_PCB_SVG::JOB_EXPORT_PCB_SVG( bool aIsCli ) :
+    JOB( "svg", aIsCli ),
+    m_filename(),
+    m_outputFile(),
+    m_colorTheme(),
+    m_drawingSheet(),
+    m_mirror( false ),
+    m_blackAndWhite( false ),
+    m_negative( false ),
+    m_plotDrawingSheet( true ),
+    m_pageSizeMode( 0 ),
+    m_printMaskLayer(),
+    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 b0a2d1a225..4ac99b5352 100644
--- a/common/jobs/job_export_pcb_svg.h
+++ b/common/jobs/job_export_pcb_svg.h
@@ -21,28 +21,15 @@
 #ifndef JOB_EXPORT_PCB_SVG_H
 #define JOB_EXPORT_PCB_SVG_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_PCB_SVG : public JOB
+class KICOMMON_API JOB_EXPORT_PCB_SVG : public JOB
 {
 public:
-    JOB_EXPORT_PCB_SVG( bool aIsCli ) :
-            JOB( "svg", aIsCli ),
-            m_filename(),
-            m_outputFile(),
-            m_colorTheme(),
-            m_drawingSheet(),
-            m_mirror( false ),
-            m_blackAndWhite( false ),
-            m_negative( false ),
-            m_plotDrawingSheet( true ),
-            m_pageSizeMode( 0 ),
-            m_printMaskLayer(),
-            m_drillShapeOption( 2 )
-    {
-    }
+    JOB_EXPORT_PCB_SVG( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_export_sch_bom.cpp b/common/jobs/job_export_sch_bom.cpp
new file mode 100644
index 0000000000..8eae1e7f47
--- /dev/null
+++ b/common/jobs/job_export_sch_bom.cpp
@@ -0,0 +1,44 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_sch_bom.h>
+
+
+JOB_EXPORT_SCH_BOM::JOB_EXPORT_SCH_BOM( bool aIsCli ) :
+    JOB( "bom", aIsCli ),
+    m_filename(),
+    m_outputFile(),
+
+    m_fieldDelimiter(),
+    m_stringDelimiter(),
+    m_refDelimiter(),
+    m_refRangeDelimiter(),
+    m_keepTabs( false ),
+    m_keepLineBreaks( false ),
+
+    m_fieldsOrdered(),
+    m_fieldsLabels(),
+    m_fieldsGroupBy(),
+    m_sortField(),
+    m_sortAsc( true ),
+    m_filterString(),
+    m_excludeDNP( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_sch_bom.h b/common/jobs/job_export_sch_bom.h
index af042158da..4af9d79015 100644
--- a/common/jobs/job_export_sch_bom.h
+++ b/common/jobs/job_export_sch_bom.h
@@ -21,33 +21,14 @@
 #ifndef JOB_EXPORT_SCH_BOM_H
 #define JOB_EXPORT_SCH_BOM_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_SCH_BOM : public JOB
+class KICOMMON_API JOB_EXPORT_SCH_BOM : public JOB
 {
 public:
-    JOB_EXPORT_SCH_BOM( bool aIsCli ) :
-            JOB( "bom", aIsCli ),
-            m_filename(),
-            m_outputFile(),
-
-            m_fieldDelimiter(),
-            m_stringDelimiter(),
-            m_refDelimiter(),
-            m_refRangeDelimiter(),
-            m_keepTabs( false ),
-            m_keepLineBreaks( false ),
-
-            m_fieldsOrdered(),
-            m_fieldsLabels(),
-            m_fieldsGroupBy(),
-            m_sortField(),
-            m_sortAsc( true ),
-            m_filterString(),
-            m_excludeDNP( false )
-    {
-    }
+    JOB_EXPORT_SCH_BOM( bool aIsCli );
 
     // Basic options
     wxString m_filename;
diff --git a/common/jobs/job_export_sch_netlist.cpp b/common/jobs/job_export_sch_netlist.cpp
new file mode 100644
index 0000000000..16024b2535
--- /dev/null
+++ b/common/jobs/job_export_sch_netlist.cpp
@@ -0,0 +1,30 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_sch_netlist.h>
+
+
+JOB_EXPORT_SCH_NETLIST::JOB_EXPORT_SCH_NETLIST( bool aIsCli ) :
+    JOB( "netlist", aIsCli ),
+    m_filename(),
+    m_outputFile()
+{
+    format = FORMAT::KICADSEXPR;
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_sch_netlist.h b/common/jobs/job_export_sch_netlist.h
index eacb13aac5..655b2b3e1a 100644
--- a/common/jobs/job_export_sch_netlist.h
+++ b/common/jobs/job_export_sch_netlist.h
@@ -21,19 +21,14 @@
 #ifndef JOB_EXPORT_SCH_NETLIST_H
 #define JOB_EXPORT_SCH_NETLIST_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_SCH_NETLIST : public JOB
+class KICOMMON_API JOB_EXPORT_SCH_NETLIST : public JOB
 {
 public:
-    JOB_EXPORT_SCH_NETLIST( bool aIsCli ) :
-            JOB( "netlist", aIsCli ),
-            m_filename(),
-            m_outputFile()
-    {
-        format = FORMAT::KICADSEXPR;
-    }
+    JOB_EXPORT_SCH_NETLIST( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_export_sch_pythonbom.cpp b/common/jobs/job_export_sch_pythonbom.cpp
new file mode 100644
index 0000000000..d98908cc96
--- /dev/null
+++ b/common/jobs/job_export_sch_pythonbom.cpp
@@ -0,0 +1,29 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_export_sch_pythonbom.h>
+
+
+JOB_EXPORT_SCH_PYTHONBOM::JOB_EXPORT_SCH_PYTHONBOM( bool aIsCli ) :
+        JOB( "pythonbom", aIsCli ),
+        m_filename(),
+        m_outputFile()
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_export_sch_pythonbom.h b/common/jobs/job_export_sch_pythonbom.h
index c280e32444..888836766a 100644
--- a/common/jobs/job_export_sch_pythonbom.h
+++ b/common/jobs/job_export_sch_pythonbom.h
@@ -21,18 +21,14 @@
 #ifndef JOB_EXPORT_SCH_PYTHONBOM_H
 #define JOB_EXPORT_SCH_PYTHONBOM_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_EXPORT_SCH_PYTHONBOM : public JOB
+class KICOMMON_API JOB_EXPORT_SCH_PYTHONBOM : public JOB
 {
 public:
-    JOB_EXPORT_SCH_PYTHONBOM( bool aIsCli ) :
-            JOB( "pythonbom", aIsCli ),
-            m_filename(),
-            m_outputFile()
-    {
-    }
+    JOB_EXPORT_SCH_PYTHONBOM( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_fp_export_svg.cpp b/common/jobs/job_fp_export_svg.cpp
new file mode 100644
index 0000000000..45e496caa8
--- /dev/null
+++ b/common/jobs/job_fp_export_svg.cpp
@@ -0,0 +1,31 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_fp_export_svg.h>
+
+
+JOB_FP_EXPORT_SVG::JOB_FP_EXPORT_SVG( bool aIsCli ) :
+    JOB( "fpsvg", aIsCli ),
+    m_libraryPath(),
+    m_footprint(),
+    m_outputDirectory(),
+    m_blackAndWhite( false )
+{
+}
\ 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 5224427530..90a36d06e5 100644
--- a/common/jobs/job_fp_export_svg.h
+++ b/common/jobs/job_fp_export_svg.h
@@ -21,20 +21,15 @@
 #ifndef JOB_FP_EXPORT_SVG_H
 #define JOB_FP_EXPORT_SVG_H
 
+#include <kicommon.h>
+#include <layer_ids.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_FP_EXPORT_SVG : public JOB
+class KICOMMON_API JOB_FP_EXPORT_SVG : public JOB
 {
 public:
-    JOB_FP_EXPORT_SVG( bool aIsCli ) :
-            JOB( "fpsvg", aIsCli ),
-            m_libraryPath(),
-            m_footprint(),
-            m_outputDirectory(),
-            m_blackAndWhite( false )
-    {
-    }
+    JOB_FP_EXPORT_SVG( bool aIsCli );
 
     wxString m_libraryPath;
     wxString m_footprint;
diff --git a/common/jobs/job_fp_upgrade.cpp b/common/jobs/job_fp_upgrade.cpp
new file mode 100644
index 0000000000..10cfbc4ee0
--- /dev/null
+++ b/common/jobs/job_fp_upgrade.cpp
@@ -0,0 +1,30 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_fp_upgrade.h>
+
+
+JOB_FP_UPGRADE::JOB_FP_UPGRADE( bool aIsCli ) :
+        JOB( "fpupgrade", aIsCli ),
+        m_libraryPath(),
+        m_outputLibraryPath(),
+        m_force( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_fp_upgrade.h b/common/jobs/job_fp_upgrade.h
index 48f8c7a91b..0e96de0db9 100644
--- a/common/jobs/job_fp_upgrade.h
+++ b/common/jobs/job_fp_upgrade.h
@@ -21,19 +21,14 @@
 #ifndef JOB_FP_UPGRADE_H
 #define JOB_FP_UPGRADE_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_FP_UPGRADE : public JOB
+class KICOMMON_API JOB_FP_UPGRADE : public JOB
 {
 public:
-    JOB_FP_UPGRADE( bool aIsCli ) :
-            JOB( "fpupgrade", aIsCli ),
-            m_libraryPath(),
-            m_outputLibraryPath(),
-            m_force( false )
-    {
-    }
+    JOB_FP_UPGRADE( bool aIsCli );
 
     wxString m_libraryPath;
     wxString m_outputLibraryPath;
diff --git a/common/jobs/job_pcb_drc.cpp b/common/jobs/job_pcb_drc.cpp
new file mode 100644
index 0000000000..7b8a3de56d
--- /dev/null
+++ b/common/jobs/job_pcb_drc.cpp
@@ -0,0 +1,33 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_pcb_drc.h>
+
+
+JOB_PCB_DRC::JOB_PCB_DRC( bool aIsCli ) :
+    JOB( "drc", aIsCli ),
+    m_filename(),
+    m_reportAllTrackErrors( false ),
+    m_units( JOB_PCB_DRC::UNITS::MILLIMETERS ),
+    m_severity( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ),
+    m_format( OUTPUT_FORMAT::REPORT ),
+    m_exitCodeViolations( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_pcb_drc.h b/common/jobs/job_pcb_drc.h
index 05bb13279a..c3526d6fc1 100644
--- a/common/jobs/job_pcb_drc.h
+++ b/common/jobs/job_pcb_drc.h
@@ -21,24 +21,16 @@
 #ifndef JOB_PCB_DRC_H
 #define JOB_PCB_DRC_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include <widgets/report_severity.h>
 #include "job.h"
 
-class JOB_PCB_DRC : public JOB
+class KICOMMON_API JOB_PCB_DRC : public JOB
 {
 public:
-    JOB_PCB_DRC( bool aIsCli ) :
-            JOB( "drc", aIsCli ),
-            m_filename(),
-            m_reportAllTrackErrors( false ),
-            m_units( JOB_PCB_DRC::UNITS::MILLIMETERS ),
-            m_severity( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ),
-            m_format( OUTPUT_FORMAT::REPORT ),
-            m_exitCodeViolations( false )
-    {
-    }
+    JOB_PCB_DRC( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_sch_erc.cpp b/common/jobs/job_sch_erc.cpp
new file mode 100644
index 0000000000..722b7dadd2
--- /dev/null
+++ b/common/jobs/job_sch_erc.cpp
@@ -0,0 +1,32 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_sch_erc.h>
+
+
+JOB_SCH_ERC::JOB_SCH_ERC( bool aIsCli ) :
+    JOB( "erc", aIsCli ),
+    m_filename(),
+    m_units( JOB_SCH_ERC::UNITS::MILLIMETERS ),
+    m_severity( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ),
+    m_format( OUTPUT_FORMAT::REPORT ),
+    m_exitCodeViolations( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_sch_erc.h b/common/jobs/job_sch_erc.h
index c58df4dcc1..ec00a186c4 100644
--- a/common/jobs/job_sch_erc.h
+++ b/common/jobs/job_sch_erc.h
@@ -21,23 +21,16 @@
 #ifndef JOB_PCB_DRC_H
 #define JOB_PCB_DRC_H
 
+#include <kicommon.h>
 #include <layer_ids.h>
 #include <wx/string.h>
 #include <widgets/report_severity.h>
 #include "job.h"
 
-class JOB_SCH_ERC : public JOB
+class KICOMMON_API JOB_SCH_ERC : public JOB
 {
 public:
-    JOB_SCH_ERC( bool aIsCli ) :
-            JOB( "erc", aIsCli ),
-            m_filename(),
-            m_units( JOB_SCH_ERC::UNITS::MILLIMETERS ),
-            m_severity( RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ),
-            m_format( OUTPUT_FORMAT::REPORT ),
-            m_exitCodeViolations( false )
-    {
-    }
+    JOB_SCH_ERC( bool aIsCli );
 
     wxString m_filename;
     wxString m_outputFile;
diff --git a/common/jobs/job_sym_export_svg.cpp b/common/jobs/job_sym_export_svg.cpp
new file mode 100644
index 0000000000..3bb5e31f38
--- /dev/null
+++ b/common/jobs/job_sym_export_svg.cpp
@@ -0,0 +1,33 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_sym_export_svg.h>
+
+
+JOB_SYM_EXPORT_SVG::JOB_SYM_EXPORT_SVG( bool aIsCli ) :
+    JOB( "symsvg", aIsCli ),
+    m_libraryPath(),
+    m_symbol(),
+    m_outputDirectory(),
+    m_blackAndWhite( false ),
+    m_includeHiddenPins( false ),
+    m_includeHiddenFields( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_sym_export_svg.h b/common/jobs/job_sym_export_svg.h
index 2d341c34f3..b508ae1ff8 100644
--- a/common/jobs/job_sym_export_svg.h
+++ b/common/jobs/job_sym_export_svg.h
@@ -21,22 +21,14 @@
 #ifndef JOB_SYM_EXPORT_SVG_H
 #define JOB_SYM_EXPORT_SVG_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_SYM_EXPORT_SVG : public JOB
+class KICOMMON_API JOB_SYM_EXPORT_SVG : public JOB
 {
 public:
-    JOB_SYM_EXPORT_SVG( bool aIsCli ) :
-            JOB( "symsvg", aIsCli ),
-            m_libraryPath(),
-            m_symbol(),
-            m_outputDirectory(),
-            m_blackAndWhite( false ),
-            m_includeHiddenPins( false ),
-            m_includeHiddenFields( false )
-    {
-    }
+    JOB_SYM_EXPORT_SVG( bool aIsCli );
 
     wxString m_libraryPath;
     wxString m_symbol;
diff --git a/common/jobs/job_sym_upgrade.cpp b/common/jobs/job_sym_upgrade.cpp
new file mode 100644
index 0000000000..caefc60134
--- /dev/null
+++ b/common/jobs/job_sym_upgrade.cpp
@@ -0,0 +1,30 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2023 Mark Roszko <mark.roszko@gmail.com>
+ * Copyright (C) 2023 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <jobs/job_sym_upgrade.h>
+
+
+JOB_SYM_UPGRADE::JOB_SYM_UPGRADE( bool aIsCli ) :
+    JOB( "symupgrade", aIsCli ),
+    m_libraryPath(),
+    m_outputLibraryPath(),
+    m_force( false )
+{
+}
\ No newline at end of file
diff --git a/common/jobs/job_sym_upgrade.h b/common/jobs/job_sym_upgrade.h
index 44884a3069..6f74937ec4 100644
--- a/common/jobs/job_sym_upgrade.h
+++ b/common/jobs/job_sym_upgrade.h
@@ -21,19 +21,14 @@
 #ifndef JOB_SYM_UPGRADE_H
 #define JOB_SYM_UPGRADE_H
 
+#include <kicommon.h>
 #include <wx/string.h>
 #include "job.h"
 
-class JOB_SYM_UPGRADE : public JOB
+class KICOMMON_API JOB_SYM_UPGRADE : public JOB
 {
 public:
-    JOB_SYM_UPGRADE( bool aIsCli ) :
-            JOB( "symupgrade", aIsCli ),
-            m_libraryPath(),
-            m_outputLibraryPath(),
-            m_force( false )
-    {
-    }
+    JOB_SYM_UPGRADE( bool aIsCli );
 
     wxString m_libraryPath;
     wxString m_outputLibraryPath;