diff --git a/src/Fl.cxx b/src/Fl.cxx
index 6742b0bc9a7a9bf0b1d5dcee57375e70b9a7fcbb..f6fef73e3788e9e69efcc2cbd08ad3f930c5fb1d 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -659,7 +659,12 @@ Fl_Window* Fl::first_window() {
   \param[in] window must be shown and not NULL
 */
 Fl_Window* Fl::next_window(const Fl_Window* window) {
-  Fl_X* i = Fl_X::i(window)->next;
+  Fl_X* i = window ? Fl_X::i(window) : 0;
+  if (!i) {
+    Fl::error("Fl::next_window() failed: window (%p) not shown.", window);
+    return 0;
+  }
+  i = i->next;
   return i ? i->w : 0;
 }