diff --git a/src/backends/packrat.c b/src/backends/packrat.c
index 289803703bf32a13c8a7922fdc919e7085b2cda2..08237d9fc84f8caf549e9efd74f9c2f069405ce4 100644
--- a/src/backends/packrat.c
+++ b/src/backends/packrat.c
@@ -240,8 +240,10 @@ HParseResult* h_do_parse(const HParser* parser, HParseState *state) {
      * so we check to see if we have one
      */
     if (!base || NULL == base->head) {
-      h_hashtable_put_precomp(state->cache, key,
-                              cached_result(state, tmp_res), keyhash);
+      if (parser->vtable->higher) {
+        h_hashtable_put_precomp(state->cache, key,
+                                cached_result(state, tmp_res), keyhash);
+      }
       return tmp_res;
     } else {
       base->seed = tmp_res;