diff --git a/doc/tutorial.rst b/doc/tutorial.rst
index 9e4bd8c913361ad87783dc9220919fc32d8e5e90..d9627deed502a8cecbdda4933268d29c1b546207 100644
--- a/doc/tutorial.rst
+++ b/doc/tutorial.rst
@@ -456,8 +456,8 @@ control is the nesting of loops. For example, should the *i* loop be nested
 around the *j* loop, or the other way around, in the following simple
 zero-fill kernel?
 
-It turns out that Loopy will choose a loop nesting for us, but it might be
-ambiguous. Consider the following code:
+It turns out that Loopy will typically choose a loop nesting for us, but it
+does not like doing so. Loo.py will react to the following code
 
 .. doctest::
 
@@ -467,8 +467,13 @@ ambiguous. Consider the following code:
     ...     a[i,j] = 0
     ...     """)
 
-Both nestings of the inames `i` and `j` result in a correct kernel.
-This ambiguity can be resolved:
+By saying::
+
+    LoopyWarning: kernel scheduling was ambiguous--more than one schedule found, ignoring
+
+And by picking one of the possible loop orderings at random.
+
+The warning (and the nondeterminism it warns about) is easily resolved:
 
 .. doctest::
 
diff --git a/loopy/schedule/__init__.py b/loopy/schedule/__init__.py
index bf51147b516f84e247c7ab94c103e4c202072a9b..e23e5f350864a623d2ff05551fc2d559c361d734 100644
--- a/loopy/schedule/__init__.py
+++ b/loopy/schedule/__init__.py
@@ -1959,7 +1959,7 @@ def get_one_scheduled_kernel(kernel):
 
     if CACHING_ENABLED:
         try:
-            result = schedule_cache[sched_cache_key]
+            result, ambiguous = schedule_cache[sched_cache_key]
 
             logger.debug("%s: schedule cache hit" % kernel.name)
             from_cache = True
@@ -1967,18 +1967,38 @@ def get_one_scheduled_kernel(kernel):
             pass
 
     if not from_cache:
+        ambiguous = False
+
+        kernel_count = 0
+
         from time import time
         start_time = time()
 
         logger.info("%s: schedule start" % kernel.name)
 
-        result = next(iter(generate_loop_schedules(kernel)))
+        for scheduled_kernel in generate_loop_schedules(kernel):
+            kernel_count += 1
+
+            if kernel_count == 1:
+                # use the first schedule
+                result = scheduled_kernel
+
+            if kernel_count == 2:
+                ambiguous = True
+                break
 
         logger.info("%s: scheduling done after %.2f s" % (
             kernel.name, time()-start_time))
 
+    if ambiguous:
+        from warnings import warn
+        from loopy.diagnostic import LoopyWarning
+        warn("scheduling for kernel '%s' was ambiguous--more than one "
+                "schedule found, ignoring" % kernel.name, LoopyWarning,
+                stacklevel=2)
+
     if CACHING_ENABLED and not from_cache:
-        schedule_cache[sched_cache_key] = result
+        schedule_cache[sched_cache_key] = result, ambiguous
 
     return result