diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 62a9531d..baf3dd7d 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -110,7 +110,7 @@ HRESULT DirectX::ComputeNormals(
#### `noexcept` Rules
- All query and utility functions that cannot fail (e.g., `IsValidVB`, `IsValidIB`) are marked `noexcept`.
-- HRESULT-returning functions that do not perform heap allocation or use Standard C++ containers are `noexcept` — errors are communicated via return code, never via exceptions (e.g., `ComputeNormals`, `ReorderIB`, `FinalizeIB`, `FinalizeVB`, `CompactVB`, `OptimizeVertices`, `ComputeCullData`).
+- HRESULT-returning functions that do not use Standard C++ containers are `noexcept` — errors are communicated via return code, never via exceptions (e.g., `ComputeNormals`, `ReorderIB`, `FinalizeIB`, `FinalizeVB`, `CompactVB`, `OptimizeVertices`, `ComputeCullData`). Note that `noexcept` HRESULT functions may still allocate scratch memory internally using `new (std::nothrow)` and return `E_OUTOFMEMORY` on failure — `noexcept` only means they will not throw C++ exceptions.
- HRESULT-returning functions that use `std::vector`, `std::function`, or other potentially throwing types are *not* marked `noexcept` — they may throw on allocation failure (e.g., `GenerateAdjacencyAndPointReps`, `Validate`, `Clean`, `WeldVertices`, `ComputeMeshlets`, `OptimizeFaces`).
- Constructors and functions that perform heap allocation or utilize Standard C++ containers that may throw are marked `noexcept(false)`.
diff --git a/.nuget/directxmesh_desktop_win10.nuspec b/.nuget/directxmesh_desktop_win10.nuspec
index 08818c16..db43ec42 100644
--- a/.nuget/directxmesh_desktop_win10.nuspec
+++ b/.nuget/directxmesh_desktop_win10.nuspec
@@ -10,7 +10,7 @@
This version is for Windows desktop applications using Visual Studio 2022 on Windows 10 / Windows 11 including both DirectX 11 and DirectX 12.
DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
- Matches the March 31, 2026 release on GitHub.
+ Matches the May 7, 2026 release on GitHub.
http://go.microsoft.com/fwlink/?LinkID=324981
images\icon.jpg
diff --git a/.nuget/directxmesh_uwp.nuspec b/.nuget/directxmesh_uwp.nuspec
index 68101763..67593fc1 100644
--- a/.nuget/directxmesh_uwp.nuspec
+++ b/.nuget/directxmesh_uwp.nuspec
@@ -10,7 +10,7 @@
This version is for Universal Windows Platform apps on Windows 10 / Windows 11 using Visual Studio 2022.
DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
- Matches the March 31, 2026 release on GitHub.
+ Matches the May 7, 2026 release on GitHub.
http://go.microsoft.com/fwlink/?LinkID=324981
images\icon.jpg
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bdfcd2e4..19981df8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,12 @@ Releases available for download on [GitHub](https://github.com/microsoft/DirectX
## Release History
+### May 7, 2026
+* *breaking change* Added **nVerts** parameter to `OptimizeFaces(LRU)Ex` functions to improve input bounds checking
+* Extra bounds checking for all functions that take indices via an array
+* CMake project updates
+* Minor comments cleanup
+
### March 31, 2026
* Minor code review
* VS 2026 support
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ef67f42e..44988d17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ if(POLICY CMP0162)
cmake_policy(SET CMP0162 NEW)
endif()
-set(DIRECTXMESH_VERSION 1.7.1)
+set(DIRECTXMESH_VERSION 1.7.2)
project(DirectXMesh
VERSION ${DIRECTXMESH_VERSION}
diff --git a/DirectXMesh/DirectXMesh.h b/DirectXMesh/DirectXMesh.h
index 5eb759e5..32c34dc0 100644
--- a/DirectXMesh/DirectXMesh.h
+++ b/DirectXMesh/DirectXMesh.h
@@ -40,7 +40,7 @@
#include
#include
-#define DIRECTX_MESH_VERSION 171
+#define DIRECTX_MESH_VERSION 172
#if defined(_WIN32) && defined(DIRECTX_MESH_EXPORT)
#ifdef __GNUC__
diff --git a/README.md b/README.md
index fc416d8c..96189f1c 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ https://go.microsoft.com/fwlink/?LinkID=324981
Copyright (c) Microsoft Corporation.
-## March 31, 2026
+## May 7, 2026
This package contains DirectXMesh, a shared source library for performing various geometry content processing operations including generating normals and tangent frames, triangle adjacency computations, vertex cache optimization, and meshlet generation.
@@ -56,7 +56,7 @@ For a full change history, see [CHANGELOG.md](https://github.com/microsoft/Direc
* The CMake projects require 3.21 or later.
-* Starting with the April 2026 release, the OptimizeFaces(LRU)(Ex) functions now take an `nVerts` parameter in order to validate the input indices. This is a *breaking change*.
+* Starting with the May 2026 release, the functions `OptimizeFaces`, `OptimizeFacesLRU`, `OptimizeFacesEx`, and `OptimizeFacesLRUEx` now take an `nVerts` parameter in order to validate the input indices. This is a *breaking change*.
```cpp
hr = OptimizeFaces(indices, nFaces, adjacency, faceRemap, vertexCache, restart);
diff --git a/build/CompilerAndLinker.cmake b/build/CompilerAndLinker.cmake
index 8535f0fb..7e0e964c 100644
--- a/build/CompilerAndLinker.cmake
+++ b/build/CompilerAndLinker.cmake
@@ -75,7 +75,7 @@ endif()
#--- General MSVC-like SDL options
if(MSVC)
- list(APPEND COMPILER_SWITCHES "$<$>:/guard:cf>")
+ list(APPEND COMPILER_SWITCHES /Gd /GS /Zc:forScope /Zc:inline /Zc:wchar_t $<$>:/guard:cf>)
list(APPEND LINKER_SWITCHES /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO)
if(WINDOWS_STORE)
@@ -141,7 +141,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|IntelLLVM")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
list(APPEND COMPILER_SWITCHES /Zc:__cplusplus /Zc:inline /fp:fast /Qdiag-disable:161)
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
- list(APPEND COMPILER_SWITCHES /sdl /Zc:forScope /Zc:inline /Zc:wchar_t /fp:fast)
+ list(APPEND COMPILER_SWITCHES /sdl /fp:fast)
if(WINDOWS_STORE)
list(APPEND COMPILER_SWITCHES /await)