diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95abbe2..4f14f30 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -254,11 +254,11 @@ if(USE_STATIC_MSVC_RUNTIME)
 endif()
 
 #adding PCRE
-find_package(PCRE)
+#find_package(PCRE)
 if (PCRE_FOUND)
 	message(STATUS "SUCCESSFUL: PCRE found")
 else ()  # if pcre not found building its local copy from ./Externals
-	if (WIN32 OR APPLE)
+	if (1)
 		message("WARNING: Native PCRE not found, taking PCRE from ./Externals")
 		add_definitions(-DPCRE_STATIC)
 		add_subdirectory(${EXTERNAL_LIBRARIES}/pcre)
diff --git a/DAEValidator/CMakeLists.txt b/DAEValidator/CMakeLists.txt
index 03ad540..f7d05cf 100644
--- a/DAEValidator/CMakeLists.txt
+++ b/DAEValidator/CMakeLists.txt
@@ -98,7 +98,7 @@ if (WIN32)
 # C4710: 'function' : function not inlined
 # C4711: function 'function' selected for inline expansion
 # C4820: 'bytes' bytes padding added after construct 'member_name'
-	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /Wall /WX /wd4505 /wd4514 /wd4592 /wd4710 /wd4711 /wd4820")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /Wall /wd4505 /wd4514 /wd4592 /wd4710 /wd4711 /wd4820")
 else ()
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror")
 endif ()
diff --git a/DAEValidator/library/include/no_warning_begin b/DAEValidator/library/include/no_warning_begin
index 7a69c32..defb315 100644
--- a/DAEValidator/library/include/no_warning_begin
+++ b/DAEValidator/library/include/no_warning_begin
@@ -2,6 +2,9 @@
 #if defined(_WIN32)
 #	pragma warning(push)
 #	pragma warning(disable:4668)
+#	if _MSC_VER >=1900
+#		pragma warning(disable:5031)
+#	endif
 #	if defined(_MSC_VER) && defined(_DEBUG)
 #		pragma warning(disable:4548)
 #	endif
diff --git a/DAEValidator/library/src/ArgumentParser.cpp b/DAEValidator/library/src/ArgumentParser.cpp
index 897e4dc..98a69ff 100644
--- a/DAEValidator/library/src/ArgumentParser.cpp
+++ b/DAEValidator/library/src/ArgumentParser.cpp
@@ -6,10 +6,10 @@
 
 using namespace std;
 
-#ifdef _MSC_VER
-#define NOEXCEPT _NOEXCEPT
-#else
+#ifndef _NOEXCEPT
 #define NOEXCEPT noexcept
+#else
+#define NOEXCEPT _NOEXCEPT
 #endif
 
 namespace opencollada
diff --git a/Externals/LibXML/CMakeLists.txt b/Externals/LibXML/CMakeLists.txt
index 40081e7..e1d1bfa 100644
--- a/Externals/LibXML/CMakeLists.txt
+++ b/Externals/LibXML/CMakeLists.txt
@@ -9,6 +9,7 @@ add_definitions(
 		-DLIBXML_SCHEMAS_ENABLED
 		-DLIBXML_XPATH_ENABLED
 		-DLIBXML_TREE_ENABLED
+		-DLIBXML_STATIC
 	)
 	
 if(USE_STATIC_MSVC_RUNTIME)
diff --git a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
index 1f9a3ee..d151e9a 100644
--- a/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
+++ b/GeneratedSaxParser/src/GeneratedSaxParserUtils.cpp
@@ -1553,7 +1553,7 @@ namespace GeneratedSaxParser
 #if defined(COLLADABU_OS_WIN) && !defined(__MINGW32__)
         return _isnan( value ) ? true : false;
 #else
-#ifdef isnan
+#if defined(isnan) || defined(__APPLE__)
         return isnan( value );
 #else
         return std::isnan(value);


diff --git a/DAEValidator/library/src/Dae.cpp b/DAEValidator/library/src/Dae.cpp
index 9256ee1..241ad67 100644
--- a/DAEValidator/library/src/Dae.cpp
+++ b/DAEValidator/library/src/Dae.cpp
@@ -304,7 +304,7 @@ namespace opencollada
 			if (auto root_node = root())
 			{
 				const auto & nodes = root_node.selectNodes("//*[@id]");
-				for (const auto & node : nodes)
+				for (const auto node : nodes)
 				{
 					string id = node.attribute("id").value();
 					mIdCache.insert(id);
@@ -312,4 +312,4 @@ namespace opencollada
 			}
 		}
 	}
-}
\ No newline at end of file
+}
diff --git a/DAEValidator/library/src/DaeValidator.cpp b/DAEValidator/library/src/DaeValidator.cpp
index 715d903..24423ce 100644
--- a/DAEValidator/library/src/DaeValidator.cpp
+++ b/DAEValidator/library/src/DaeValidator.cpp
@@ -162,7 +162,7 @@ namespace opencollada
 
 		// Find xsi:schemaLocation attributes in dae and try to validate against specified xsd documents
 		const auto & elements = dae.root().selectNodes("//*[@xsi:schemaLocation]");
-		for (const auto & element : elements)
+		for (const auto element : elements)
 		{
 			if (auto schemaLocation = element.attribute("schemaLocation"))
 			{
@@ -274,7 +274,7 @@ namespace opencollada
 		int result = 0;
 		map<string, size_t> ids;
 		const auto & nodes = dae.root().selectNodes("//*[@id]");
-		for (const auto & node : nodes)
+		for (const auto node : nodes)
 		{
 			string id = node.attribute("id").value();
 			size_t line = node.line();
diff -Naur a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -274,7 +274,7 @@
 add_subdirectory(${EXTERNAL_LIBRARIES}/UTF)
 add_subdirectory(common/libBuffer)
 add_subdirectory(${EXTERNAL_LIBRARIES}/MathMLSolver)
-add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
+#add_subdirectory(${EXTERNAL_LIBRARIES}/zlib)
 
 # building OpenCOLLADA libs
 add_subdirectory(COLLADABaseUtils)
@@ -284,10 +284,10 @@
 add_subdirectory(COLLADAStreamWriter)
 
 # building COLLADAValidator app
-add_subdirectory(COLLADAValidator)
+#add_subdirectory(COLLADAValidator)
 
 # DAE validator app
-add_subdirectory(DAEValidator)
+#add_subdirectory(DAEValidator)
 
 # Library export
 install(EXPORT LibraryExport DESTINATION ${OPENCOLLADA_INST_CMAKECONFIG} FILE OpenCOLLADATargets.cmake)
diff -Naur OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h
--- OpenCOLLADA-1.6.68/common/libBuffer/include/CommonFWriteBufferFlusher.h	2018-11-26 14:43:10 -0700
+++ external_opencollada/common/libBuffer/include/CommonFWriteBufferFlusher.h	2022-08-19 11:36:04 -0600
@@ -23,7 +23,7 @@
 #	include <tr1/unordered_map>
 #endif
 
-#ifdef _LIBCPP_VERSION
+#if defined(_LIBCPP_VERSION) || defined(WIN32)
 // If we're compiling with libc++, create a namespace alias for tr1 that points to std.
 // Not particularly elegant, and largely should be filed under "hack", but it works for OS X with clang for now.
 namespace std {