diff --git a/src/backends/packrat.c b/src/backends/packrat.c
index ab0f8748d963b141375f54525b7217e978f43ff4..381771b0ba0ac84b1e1cc480b42e5ae6a16ad502 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;