diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2bf9bf6..46c242f 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -105,28 +105,21 @@ jobs:
       uses: actions/checkout@v4
 
     - name: Configure
-      run: cmake --preset clang-tools
+      run: cmake --preset dev -DCMAKE_CXX_COMPILER=clang++
 
     - name: Tidy
       run: cmake --build build --target tidy
 
   sanitize:
-    name: ${{matrix.sanitizer.name}}
+    name: Sanitize
     runs-on: ubuntu-latest
 
-    strategy:
-      fail-fast: false
-      matrix:
-        sanitizer:
-        - { name: ASan,  preset: asan }
-        - { name: UBSan, preset: ubsan }
-
     steps:
     - name: Checkout
       uses: actions/checkout@v4
 
     - name: Configure
-      run: cmake --preset ${{matrix.sanitizer.preset}}
+      run: cmake --preset sanitizers
 
     - name: Build
       run: cmake --build build
diff --git a/CMakePresets.json b/CMakePresets.json
index 10558a4..fb8d1b6 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -32,24 +32,10 @@
       }
     },
     {
-      "name": "clang-tools",
+      "name": "sanitizers",
       "inherits": "dev",
       "cacheVariables": {
-        "CMAKE_CXX_COMPILER": "clang++"
-      }
-    },
-    {
-      "name": "asan",
-      "inherits": "clang-tools",
-      "cacheVariables": {
-        "CMAKE_CXX_FLAGS": "-fno-omit-frame-pointer -fsanitize=address"
-      }
-    },
-    {
-      "name": "ubsan",
-      "inherits": "clang-tools",
-      "cacheVariables": {
-        "CMAKE_CXX_FLAGS": "-fno-omit-frame-pointer -fno-sanitize-recover=all -fsanitize=undefined"
+        "CMAKE_CXX_FLAGS": "-fno-omit-frame-pointer -fno-sanitize-recover=all -fsanitize=address,undefined"
       }
     }
   ],