diff --git a/src/backends/packrat.c b/src/backends/packrat.c
index b77197378783f6a7468fd27c041608cb358960e7..abb198b02560e1bdec3d98211310f2e6e47da170 100644
--- a/src/backends/packrat.c
+++ b/src/backends/packrat.c
@@ -181,7 +181,10 @@ HParseResult* lr_answer(HParserCacheKey *k, HParseState *state, HLeftRec *growab
 HParseResult* h_do_parse(const HParser* parser, HParseState *state) {
   HParserCacheKey *key = a_new(HParserCacheKey, 1);
   key->input_pos = state->input_stream; key->parser = parser;
-  HParserCacheValue *m = recall(key, state);
+  HParserCacheValue *m = NULL;
+  if (parser->vtable->higher) {
+    m = recall(key, state);
+  }
   // check to see if there is already a result for this object...
   if (!m) {
     // It doesn't exist, so create a dummy result to cache