diff --git a/common/pcb.keywords b/common/pcb.keywords
index 2d4c8327c3..59c2c7ba0b 100644
--- a/common/pcb.keywords
+++ b/common/pcb.keywords
@@ -141,6 +141,7 @@ hatch_min_hole_area
 height
 hide
 hole_to_hole_min
+host
 id
 island
 island_removal_mode
diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp
index 71514ef7bc..c1f5412892 100644
--- a/gerbview/export_to_pcbnew.cpp
+++ b/gerbview/export_to_pcbnew.cpp
@@ -437,8 +437,7 @@ void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aG
 
 void GBR_TO_PCB_EXPORTER::writePcbHeader( const LAYER_NUM* aLayerLookUpTable )
 {
-    fprintf( m_fp, "(kicad_pcb (version 4) (host Gerbview \"%s\")\n\n",
-             TO_UTF8( GetBuildVersion() ) );
+    fprintf( m_fp, "(kicad_pcb (version 4) (generator gerbview)\n\n" );
 
     // Write layers section
     fprintf( m_fp, "  (layers \n" );
diff --git a/pcbnew/board.h b/pcbnew/board.h
index 5ae5137b25..ce56aacf91 100644
--- a/pcbnew/board.h
+++ b/pcbnew/board.h
@@ -286,7 +286,10 @@ public:
     void Move( const wxPoint& aMoveVector ) override;
 
     void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
-    int GetFileFormatVersionAtLoad()  const { return m_fileFormatVersionAtLoad; }
+    int GetFileFormatVersionAtLoad() const { return m_fileFormatVersionAtLoad; }
+
+    void SetGenerator( const wxString& aGenerator ) { m_generator = aGenerator; }
+    const wxString& GetGenerator() const { return m_generator; }
 
     void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT ) override;
 
@@ -1126,6 +1129,7 @@ private:
     HIGH_LIGHT_INFO     m_highLightPrevious;        // a previously stored high light data
 
     int                 m_fileFormatVersionAtLoad;  // the version loaded from the file
+    wxString            m_generator;                // the generator tag from the file
 
     std::map<wxString, wxString>        m_properties;
     std::shared_ptr<CONNECTIVITY_DATA>  m_connectivity;
diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp
index 8800d5aab7..486b98e720 100644
--- a/pcbnew/files.cpp
+++ b/pcbnew/files.cpp
@@ -780,10 +780,10 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
         else
             GetScreen()->SetContentModified( false );
 
-        if( ( pluginType == IO_MGR::LEGACY &&
-              loadedBoard->GetFileFormatVersionAtLoad() < LEGACY_BOARD_FILE_VERSION ) ||
-            ( pluginType == IO_MGR::KICAD_SEXP &&
-              loadedBoard->GetFileFormatVersionAtLoad() < SEXPR_BOARD_FILE_VERSION ) )
+        if( ( pluginType == IO_MGR::LEGACY )
+         || ( pluginType == IO_MGR::KICAD_SEXP
+                && loadedBoard->GetFileFormatVersionAtLoad() < SEXPR_BOARD_FILE_VERSION
+                && loadedBoard->GetGenerator().Lower() != "gerbview" ) )
         {
             m_infoBar->RemoveAllButtons();
             m_infoBar->AddCloseButton();
diff --git a/pcbnew/plugins/kicad/pcb_parser.cpp b/pcbnew/plugins/kicad/pcb_parser.cpp
index d0888e0f34..7777e26f6f 100644
--- a/pcbnew/plugins/kicad/pcb_parser.cpp
+++ b/pcbnew/plugins/kicad/pcb_parser.cpp
@@ -592,6 +592,23 @@ BOARD* PCB_PARSER::parseBOARD_unchecked()
 
         switch( token )
         {
+        case T_host:            // legacy token
+            NeedSYMBOL();
+            m_board->SetGenerator( FromUTF8() );
+
+            // Older formats included build data
+            if( m_requiredVersion < BOARD_FILE_HOST_VERSION )
+                NeedSYMBOL();
+
+            NeedRIGHT();
+            break;
+
+        case T_generator:
+            NeedSYMBOL();
+            m_board->SetGenerator( FromUTF8() );
+            NeedRIGHT();
+            break;
+
         case T_general:
             parseGeneralSection();
             break;
@@ -900,27 +917,12 @@ void PCB_PARSER::parseHeader()
         m_requiredVersion = parseInt( FromUTF8().mb_str( wxConvUTF8 ) );
         m_tooRecent = ( m_requiredVersion > SEXPR_BOARD_FILE_VERSION );
         NeedRIGHT();
-
-        NeedLEFT();
-        NeedSYMBOL();
-        NeedSYMBOL();
-
-        // Older formats included build data
-        if( m_requiredVersion < BOARD_FILE_HOST_VERSION )
-            NeedSYMBOL();
-
-        NeedRIGHT();
     }
     else
     {
         m_requiredVersion = 20201115;   // Last version before we started writing version #s
                                         // in footprint files as well as board files.
         m_tooRecent = ( m_requiredVersion > SEXPR_BOARD_FILE_VERSION );
-
-        // Skip the host name and host build version information.
-        NeedSYMBOL();
-        NeedSYMBOL();
-        NeedRIGHT();
     }
 
     m_board->SetFileFormatVersionAtLoad( m_requiredVersion );