diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 4ad1f8f..a33e68e 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -501,7 +501,12 @@ EOF
 		  || confess "Could not touch bki-stamp";
 		close($f);
 		chdir('../../..');
+	}
 
+	if (IsNewer(
+			'src/include/catalog/header-stamp',
+			'src/backend/catalog/bki-stamp'))
+	{
 		# Copy generated headers to include directory.
 		opendir(my $dh, 'src/backend/catalog/')
 		  || die "Can't opendir src/backend/catalog/ $!";
@@ -516,6 +521,9 @@ EOF
 		copyFile(
 			'src/backend/catalog/schemapg.h',
 			'src/include/catalog/schemapg.h');
+		open(my $chs, '>', 'src/include/catalog/header-stamp')
+		  || confess "Could not touch header-stamp";
+		close($chs);
 	}
 
 	open(my $o, '>', "doc/src/sgml/version.sgml")
diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat
index a041ef2..6545442 100755
--- a/src/tools/msvc/clean.bat
+++ b/src/tools/msvc/clean.bat
@@ -49,6 +49,7 @@ if exist src\include\storage\lwlocknames.h del /q src\include\storage\lwlockname
 if exist src\include\utils\probes.h del /q src\include\utils\probes.h
 if exist src\include\catalog\schemapg.h del /q src\include\catalog\schemapg.h
 if exist src\include\catalog\pg_*_d.h del /q src\include\catalog\pg_*_d.h
+if exist src\include\catalog\header-stamp del /q src\include\catalog\header-stamp
 if exist doc\src\sgml\version.sgml del /q doc\src\sgml\version.sgml
 
 if %DIST%==1 if exist src\backend\utils\fmgroids.h del /q src\backend\utils\fmgroids.h
