diff --git a/script/static-checks/check-include-order.py b/script/static-checks/check-include-order.py
index 2160165..b225060 100755
--- a/script/static-checks/check-include-order.py
+++ b/script/static-checks/check-include-order.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 #
-# Copyright (c) 2019-2023, Arm Limited. All rights reserved.
+# Copyright (c) 2019-2025, Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -90,40 +90,36 @@
         commit_hash = commit_hash + ":"
 
     # First, check if all includes are in the appropriate group.
+    inc_groups = collections.OrderedDict()
     incs = collections.defaultdict(list)
     error_msgs = []
-    plat_incs = dir_include_paths("plat") | dir_include_paths("include/plat")
-    plat_common_incs = dir_include_paths("include/plat/common")
-    plat_incs.difference_update(plat_common_incs)
-    libc_incs = dir_include_paths("include/lib/libc")
-    proj_incs = dir_include_paths("include/") | dir_include_paths("drivers/")
-    third_party_incs = []
-    third_party_incs.append(dir_include_paths("mbedtls"))
-    third_party_incs.append(dir_include_paths("include/lib/libfdt"))
-    third_party_incs.append(dir_include_paths("lib/compiler-rt"))
-    third_party_incs.append(dir_include_paths("lib/libfdt"))
-    third_party_incs.append(dir_include_paths("lib/zlib"))
+
+    # System (libc) includes
+    inc_groups[0] = dir_include_paths("include/lib/libc")
+    # Platform includes
+    inc_groups[3] = dir_include_paths("plat") | dir_include_paths("include/plat")
+    inc_groups[3].difference_update(dir_include_paths("include/plat/common") |
+                                    dir_include_paths("include/plat/arm"))
+    # Project includes
+    inc_groups[2] = dir_include_paths("include") | dir_include_paths("drivers")
 
     indices = []
 
     for inc in inc_list:
         inc_path = inc[1:-1].replace("..", Path(path).parents[1].as_posix())
-        inc_group_index = int(inc_path not in libc_incs)
 
-        if inc_group_index:
-            if inc_path in third_party_incs:
-                inc_group_index = 1
-            elif inc_path in proj_incs:
-                inc_group_index = 2
-            elif inc_path in plat_incs:
-                inc_group_index = 3
+        inc_group_index = 1 # Third-party includes
+        for index, group in inc_groups.items():
+            if inc_path in group:
+                inc_group_index = index
+                break
 
         incs[inc_group_index].append(inc_path)
         indices.append((inc_group_index, inc))
 
     index_sorted_paths = sorted(indices, key=lambda x: (x[0], x[1][1:-1]))
     if indices != index_sorted_paths:
-        error_msgs.append("Include ordering error, order should be:")
+        error_msgs.append("Include ordering warning, order should probably be:")
         last_group = index_sorted_paths[0][0]
         for inc in index_sorted_paths:
             # Right angle brackets are a special entity in html, convert the
