diff --git a/bin/dnssec/win32/cds.vcxproj.filters.in b/bin/dnssec/win32/cds.vcxproj.filters.in
new file mode 100644
index 0000000000..b6893db631
--- /dev/null
+++ b/bin/dnssec/win32/cds.vcxproj.filters.in
@@ -0,0 +1,18 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Source Files
+
+
+
diff --git a/bin/dnssec/win32/cds.vcxproj.in b/bin/dnssec/win32/cds.vcxproj.in
new file mode 100644
index 0000000000..6c9f5d99e2
--- /dev/null
+++ b/bin/dnssec/win32/cds.vcxproj.in
@@ -0,0 +1,112 @@
+
+
+
+
+ Debug
+ @PLATFORM@
+
+
+ Release
+ @PLATFORM@
+
+
+
+ {0EB1727E-2BBD-47A6-AD12-418F9DEB0531}
+ Win32Proj
+ cds
+
+
+
+ Application
+ true
+ MultiByte
+
+
+ Application
+ false
+ true
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ ..\..\..\Build\$(Configuration)\
+ .\$(Configuration)\
+ dnssec-$(ProjectName)
+
+
+ false
+ ..\..\..\Build\$(Configuration)\
+ .\$(Configuration)\
+ dnssec-$(ProjectName)
+
+
+
+
+
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ .\$(Configuration)\$(ProjectName).pch
+ .\$(Configuration)\
+ .\$(Configuration)\
+ $(OutDir)$(TargetName).pdb
+ true
+ .\;..\..\..\;@LIBXML2_INC@@OPENSSL_INC@..\..\..\lib\isc\win32;..\..\..\lib\isc\win32\include;..\..\..\lib\isc\include;..\..\..\lib\dns\include;%(AdditionalIncludeDirectories)
+ CompileAsC
+
+
+ Console
+ true
+ ..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)
+ $(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories)
+ @OPENSSL_LIB@dnssectool.lib;libisc.lib;libdns.lib;ws2_32.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ @INTRINSIC@
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ OnlyExplicitInline
+ false
+ true
+ .\$(Configuration)\$(ProjectName).pch
+ .\$(Configuration)\
+ .\$(Configuration)\
+ $(OutDir)$(TargetName).pdb
+ .\;..\..\..\;@LIBXML2_INC@@OPENSSL_INC@..\..\..\lib\isc\win32;..\..\..\lib\isc\win32\include;..\..\..\lib\isc\include;..\..\..\lib\dns\include;%(AdditionalIncludeDirectories)
+ CompileAsC
+
+
+ Console
+ false
+ true
+ true
+ ..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)
+ Default
+ $(Configuration);..\..\..\lib\isc\win32\$(Configuration);..\..\..\lib\dns\win32\$(Configuration);%(AdditionalLibraryDirectories)
+ @OPENSSL_LIB@dnssectool.lib;libisc.lib;libdns.lib;ws2_32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
diff --git a/bin/dnssec/win32/cds.vcxproj.user b/bin/dnssec/win32/cds.vcxproj.user
new file mode 100644
index 0000000000..695b5c78b9
--- /dev/null
+++ b/bin/dnssec/win32/cds.vcxproj.user
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/bin/tests/system/conf.sh.win32 b/bin/tests/system/conf.sh.win32
index 8dc665c974..cdd963d706 100644
--- a/bin/tests/system/conf.sh.win32
+++ b/bin/tests/system/conf.sh.win32
@@ -37,7 +37,7 @@ ALTERNATIVE_ALGORITHM_NUMBER=8
ALTERNATIVE_BITS=1280
ARPANAME=$TOP/Build/$VSCONF/arpaname@EXEEXT@
-CDS=
+CDS=$TOP/Build/$VSCONF/dnssec-cds@EXEEXT@
CHECKCONF=$TOP/Build/$VSCONF/named-checkconf@EXEEXT@
CHECKDS="$PYTHON `cygpath -w $TOP/bin/python/dnssec-checkds.py`"
CHECKZONE=$TOP/Build/$VSCONF/named-checkzone@EXEEXT@
@@ -56,7 +56,7 @@ KEYGEN=$TOP/Build/$VSCONF/dnssec-keygen@EXEEXT@
KEYMGR="$PYTHON `cygpath -w $TOP/bin/python/dnssec-keymgr.py`"
MDIG=$TOP/Build/$VSCONF/mdig@EXEEXT@
NAMED=$TOP/Build/$VSCONF/named@EXEEXT@
-NSEC3HASH=
+NSEC3HASH=$TOP/Build/$VSCONF/nsec3hash@EXEEXT@
NSLOOKUP=$TOP/Build/$VSCONF/nslookup@EXEEXT@
NSUPDATE=$TOP/Build/$VSCONF/nsupdate@EXEEXT@
NZD2NZF=$TOP/Build/$VSCONF/named-nzd2nzf@EXEEXT@
diff --git a/util/copyrights b/util/copyrights
index dd6db610e2..937302251a 100644
--- a/util/copyrights
+++ b/util/copyrights
@@ -126,6 +126,9 @@
./bin/dnssec/dnssec-verify.html HTML DOCBOOK
./bin/dnssec/dnssectool.c C 2000,2001,2003,2004,2005,2007,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019
./bin/dnssec/dnssectool.h C 2000,2001,2003,2004,2007,2008,2009,2010,2011,2012,2014,2015,2016,2017,2018,2019
+./bin/dnssec/win32/cds.vcxproj.filters.in X 2019
+./bin/dnssec/win32/cds.vcxproj.in X 2019
+./bin/dnssec/win32/cds.vcxproj.user X 2019
./bin/dnssec/win32/dnssectool.vcxproj.filters.in X 2013,2015,2018,2019
./bin/dnssec/win32/dnssectool.vcxproj.in X 2013,2014,2015,2016,2017,2018,2019
./bin/dnssec/win32/dnssectool.vcxproj.user X 2013,2018,2019
diff --git a/win32utils/Configure b/win32utils/Configure
index 02fdb7098e..c92b43fcf1 100644
--- a/win32utils/Configure
+++ b/win32utils/Configure
@@ -70,6 +70,8 @@ my @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj",
"..\\bin\\dig\\win32\\host.vcxproj.filters",
"..\\bin\\dig\\win32\\nslookup.vcxproj",
"..\\bin\\dig\\win32\\nslookup.vcxproj.filters",
+ "..\\bin\\dnssec\\win32\\cds.vcxproj",
+ "..\\bin\\dnssec\\win32\\cds.vcxproj.filters",
"..\\bin\\dnssec\\win32\\dnssectool.vcxproj",
"..\\bin\\dnssec\\win32\\dnssectool.vcxproj.filters",
"..\\bin\\dnssec\\win32\\dsfromkey.vcxproj",
diff --git a/win32utils/bind9.sln.in b/win32utils/bind9.sln.in
index 22c22db720..ca67544e60 100644
--- a/win32utils/bind9.sln.in
+++ b/win32utils/bind9.sln.in
@@ -284,6 +284,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "signzone", "..\bin\dnssec\w
{2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cds", "..\bin\dnssec\win32\cds.vcxproj", "{0EB1727E-2BBD-47A6-AD12-418F9DEB0531}"
+ ProjectSection(ProjectDependencies) = postProject
+ {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}
+ {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF}
+ {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}
+ {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyfromlabel", "..\bin\dnssec\win32\keyfromlabel.vcxproj", "{17455DC6-5FBB-47C3-8F44-7DB574A188D3}"
ProjectSection(ProjectDependencies) = postProject
{A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}