diff --git a/scripts/lib/checklayer/__init__.py b/scripts/lib/checklayer/__init__.py
index aa19a8e2ae..8838a7df48 100644
--- a/scripts/lib/checklayer/__init__.py
+++ b/scripts/lib/checklayer/__init__.py
@@ -287,9 +287,18 @@ def check_command(error_msg, cmd, cwd=None):
         raise RuntimeError(msg)
     return output
 
+# The world signatures of each dump that succeeded: the tests ask for the
+# same dump with and without -k, which only differ when it fails
+signatures_cache = {}
+
 def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
     import re
 
+    with open(os.path.join(builddir, 'conf', 'bblayers.conf')) as f:
+        key = (f.read(), machine, extravars)
+    if key in signatures_cache:
+        return signatures_cache[key]
+
     # some recipes needs to be excluded like meta-world-pkgdata
     # because a layer can add recipes to a world build so signature
     # will be change
@@ -320,7 +329,7 @@ def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
             # in a world build lack some dependencies. There is a
             # separate test_machine_world_build which exposes the
             # failure.
-            pass
+            key = None
         else:
             raise
 
@@ -362,6 +371,8 @@ def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
     if not sigs:
         raise RuntimeError('Can\'t load signatures from %s' % sigs_file)
 
+    if key:
+        signatures_cache[key] = (sigs, tune2tasks)
     return (sigs, tune2tasks)
 
 def get_depgraph(targets=['world'], failsafe=False):
