diff --git a/src/backends/llk.c b/src/backends/llk.c
index 8e44b1d992df9b244d97b13517dc3aa95f9d1825..00787ef86b55781a59ae8e42bf98720c5a0d9f06 100644
--- a/src/backends/llk.c
+++ b/src/backends/llk.c
@@ -143,7 +143,7 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
   // TODO: eliminate left recursion
   // TODO: avoid conflicts by splitting occurances?
 
-  // generate table and store in parser->data.
+  // generate table and store in parser->backend_data.
   HLLkTable *table = h_llktable_new(mm__);
   if(fill_table(grammar, table) < 0) {
     // the table was ambiguous
@@ -151,7 +151,7 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
     h_llktable_free(table);
     return -1;
   }
-  parser->data = table;
+  parser->backend_data = table;
 
   // free grammar and its arena.
   // desugared parsers (HCFChoice and HCFSequence) are unaffected by this.
@@ -160,13 +160,21 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
   return 0;
 }
 
+void h_llk_free(HParser *parser)
+{
+  HLLkTable *table = parser->backend_data;
+  h_llktable_free(table);
+  parser->backend_data = NULL;
+  parser->backend = PB_PACKRAT;
+}
+
 
 
 /* LL(k) driver */
 
 HParseResult *h_llk_parse(HAllocator* mm__, const HParser* parser, HInputStream* stream)
 {
-  const HLLkTable *table = parser->data;
+  const HLLkTable *table = parser->backend_data;
   assert(table != NULL);
 
   HArena *arena  = h_new_arena(mm__, 0);    // will hold the results
@@ -313,7 +321,8 @@ HParseResult *h_llk_parse(HAllocator* mm__, const HParser* parser, HInputStream*
 
 HParserBackendVTable h__llk_backend_vtable = {
   .compile = h_llk_compile,
-  .parse = h_llk_parse
+  .parse = h_llk_parse,
+  .free = h_llk_free
 };
 
 
diff --git a/src/hammer.h b/src/hammer.h
index 918977559dc252e618e264a7dd2856235db9b51b..45f0dda96884e4e81f976c758c51bcdfb77544d3 100644
--- a/src/hammer.h
+++ b/src/hammer.h
@@ -126,7 +126,6 @@ typedef struct HParser_ {
   HParserBackend backend;
   void* backend_data;
   void *env;
-  void *data; /* e.g., parse tables */
   HCFChoice *desugared; /* if the parser can be desugared, its desugared form */
 } HParser;