diff --git a/daemon/engine.c b/daemon/engine.c
index c8dfb40d36f0e184072cd33d531e30f7360f0234..dd36156a7ac559f972a7c994d90f47a175203f35 100644
--- a/daemon/engine.c
+++ b/daemon/engine.c
@@ -298,7 +298,9 @@ void engine_deinit(struct engine *engine)
 	kr_zonecut_deinit(&engine->resolver.root_hints);
 	kr_cache_close(&engine->resolver.cache);
 	lru_deinit(engine->resolver.cache_rtt);
+	free(engine->resolver.cache_rtt);
 	lru_deinit(engine->resolver.cache_rep);
+	free(engine->resolver.cache_rep);
 
 	/* Unload modules. */
 	for (size_t i = 0; i < engine->modules.len; ++i) {
diff --git a/daemon/ffimodule.c b/daemon/ffimodule.c
index 040d5ee87bd2282d5de6813517a5016f29dddb09..cd9d0aade4393b52adb729f73732bf5f61b026e3 100644
--- a/daemon/ffimodule.c
+++ b/daemon/ffimodule.c
@@ -99,14 +99,15 @@ static int l_ffi_init(struct kr_module *module)
 
 static int l_ffi_deinit(struct kr_module *module)
 {
-	lua_State *L = l_ffi_preface(module, "deinit");
-	if (!L) {
-		return 0;
+	/* Deinit the module in Lua (if possible) */
+	int ret = 0;
+	lua_State *L = module->lib;
+	if (l_ffi_preface(module, "deinit")) {
+		ret = l_ffi_call(L, 1);
 	}
-	int ret = l_ffi_call(L, 1);
 	/* Free the layer API wrapper */
 	lua_rawgeti(L, LUA_REGISTRYINDEX, (intptr_t)module->data);
-	lua_getfield(L, -1, "_layercdata");
+	lua_getfield(L, -1, "_layer_capi");
 	free(lua_touserdata(L, -1));
 	lua_pop(L, 2);
 	/* Unref module and unset 'lib', so the module
@@ -242,8 +243,8 @@ int ffimodule_register_lua(struct engine *engine, struct kr_module *module, cons
 	/* Create FFI module with trampolined functions. */
 	memset(module, 0, sizeof(*module));
 	module->name = strdup(name);
-	REGISTER_FFI_CALL(L, module->init,   "init",   &l_ffi_init);
-	REGISTER_FFI_CALL(L, module->deinit, "deinit", &l_ffi_deinit);
+	module->init = &l_ffi_init;
+	module->deinit = &l_ffi_deinit;
 	REGISTER_FFI_CALL(L, module->layer,  "layer",  &l_ffi_layer);
 	module->data = (void *)(intptr_t)luaL_ref(L, LUA_REGISTRYINDEX);
 	module->lib = L;
diff --git a/modules/hints/hints.c b/modules/hints/hints.c
index 80f81fb2e80e92fa5511244483d40e835e814a86..d4dc43b9a25717a3d12fca6b0428c09d83933add 100644
--- a/modules/hints/hints.c
+++ b/modules/hints/hints.c
@@ -303,6 +303,7 @@ static char* hint_root(void *env, struct kr_module *module, const char *args)
 			default: continue;
 			}
 		}
+		json_delete(root_node);
 	}
 	/* Return current root hints */
 	char *result = NULL;