diff --git a/extern/glow b/extern/glow
index b749957cbf3738e6e21ce40a484d9005dbb5444f..88ddba8729b6d3170dc536317b811239330a6d19 160000
--- a/extern/glow
+++ b/extern/glow
@@ -1 +1 @@
-Subproject commit b749957cbf3738e6e21ce40a484d9005dbb5444f
+Subproject commit 88ddba8729b6d3170dc536317b811239330a6d19
diff --git a/extern/glow-extras b/extern/glow-extras
index d836a59ac09549fd5b3ddbd7ecfe12955a941f40..cabc984b6ed98c971263fd305a10a37f53b88d05 160000
--- a/extern/glow-extras
+++ b/extern/glow-extras
@@ -1 +1 @@
-Subproject commit d836a59ac09549fd5b3ddbd7ecfe12955a941f40
+Subproject commit cabc984b6ed98c971263fd305a10a37f53b88d05
diff --git a/extern/polymesh b/extern/polymesh
index 65025e1af6e6abb89401e0337d49310b01ba8833..5719ed1860a475ddfcf3d7119027e4bd7910b0a9 160000
--- a/extern/polymesh
+++ b/extern/polymesh
@@ -1 +1 @@
-Subproject commit 65025e1af6e6abb89401e0337d49310b01ba8833
+Subproject commit 5719ed1860a475ddfcf3d7119027e4bd7910b0a9
diff --git a/extern/typed-geometry b/extern/typed-geometry
index 9f74e822f4b8e3d974de0fd615ca185dd0a34e75..f8a5e56373e3da67e7ea543424d0704950cbdfc1 160000
--- a/extern/typed-geometry
+++ b/extern/typed-geometry
@@ -1 +1 @@
-Subproject commit 9f74e822f4b8e3d974de0fd615ca185dd0a34e75
+Subproject commit f8a5e56373e3da67e7ea543424d0704950cbdfc1
diff --git a/tests/ranges/range-test.cc b/tests/ranges/range-test.cc
index c50c38b7e20c8402f2d676f3c7562f317ef62263..d4ad946bf42af5778ab3161a79c3d134eff35574 100644
--- a/tests/ranges/range-test.cc
+++ b/tests/ranges/range-test.cc
@@ -3,8 +3,8 @@
 #include <map>
 
 #include <polymesh/Mesh.hh>
-#include <polymesh/properties.hh>
 #include <polymesh/objects/cube.hh>
+#include <polymesh/properties.hh>
 
 #include <typed-geometry/tg.hh>
 
@@ -22,6 +22,8 @@ TEST_CASE("Ranges.Basics")
     CHECK(m.vertices().min(pos) == tg::pos3(0));
     CHECK(m.vertices().max(pos) == tg::pos3(1));
 
+    CHECK(m.vertices().where([&](pm::vertex_handle v) { return pos[v].x > 0.5f; }).count() == 4);
+
     struct face_value
     {
         float area;