diff --git a/game/modules/tome/data/talents/techniques/2h-assault.lua b/game/modules/tome/data/talents/techniques/2h-assault.lua
index b6e288a5129644a13a0c7d9963470da124fa0c27..6601d74b421fe13264034babd93aff5a34a1dc67 100644
--- a/game/modules/tome/data/talents/techniques/2h-assault.lua
+++ b/game/modules/tome/data/talents/techniques/2h-assault.lua
@@ -82,6 +82,8 @@ newTalent{
 		if self:canMove(x, y) then
 			self:move(x, y)
 			moved = 1
+		else
+			self:useEnergy(game.energy_to_act)
 		end
 
 		local fx, fy = util.coordAddDir(self.x, self.y, dir)
diff --git a/game/modules/tome/data/zones/test/zone.lua b/game/modules/tome/data/zones/test/zone.lua
index 16b12bdac84a1493193a4ae81c559dfdefd78b94..458438b5c8ca711a8cd55aac4431afcba6a68b7f 100644
--- a/game/modules/tome/data/zones/test/zone.lua
+++ b/game/modules/tome/data/zones/test/zone.lua
@@ -33,7 +33,7 @@ return {
 -- [[
 			class = "engine.generator.map.Empty",
 			up = "FLOOR",
-			floor = "TREE",
+			floor = "FLOOR",
 --]]
 --[[
 			class = "engine.generator.map.Building",
diff --git a/src/map.c b/src/map.c
index 4b956d653c0603442d6ebd6a73091fc42baab366..efb6731edfe004bb717bdade4d1ec6467b68ba4c 100644
--- a/src/map.c
+++ b/src/map.c
@@ -99,6 +99,7 @@ static int map_object_new(lua_State *L)
 	obj->dh = luaL_checknumber(L, 9);
 	obj->scale = luaL_checknumber(L, 10);
 	obj->shader = NULL;
+	obj->shader_ref = LUA_NOREF;
 	obj->tint_r = obj->tint_g = obj->tint_b = 1;
 	for (i = 0; i < nb_textures; i++)
 	{
@@ -117,9 +118,10 @@ static int map_object_free(lua_State *L)
 	map_object *obj = (map_object*)auxiliar_checkclass(L, "core{mapobj}", 1);
 	int i;
 
-	for (i = 0; i < obj->nb_textures; i++)
+	for (i = 0; i < obj->nb_textures; i++) {
 		if (obj->textures_ref[i] != LUA_NOREF)
 			luaL_unref(L, LUA_REGISTRYINDEX, obj->textures_ref[i]);
+	}
 
 	free(obj->textures);
 	free(obj->tex_x);
@@ -141,6 +143,11 @@ static int map_object_free(lua_State *L)
 		obj->cb_ref = LUA_NOREF;
 	}
 
+	if (obj->shader_ref != LUA_NOREF) {
+		luaL_unref(L, LUA_REGISTRYINDEX, obj->shader_ref);
+		obj->shader_ref = LUA_NOREF;
+	}
+
 	lua_pushnumber(L, 1);
 	return 1;
 }
@@ -212,7 +219,11 @@ static int map_object_shader(lua_State *L)
 	if (!lua_isnil(L, 2)) {
 		shader_type *s = (shader_type*)lua_touserdata(L, 2);
 		obj->shader = s;
+		lua_pushvalue(L, 2);
+		obj->shader_ref = luaL_ref(L, LUA_REGISTRYINDEX);
 	} else {
+		luaL_unref(L, LUA_REGISTRYINDEX, obj->shader_ref);
+		obj->shader_ref = LUA_NOREF;
 		obj->shader = NULL;
 	}
 	return 0;
diff --git a/src/map.h b/src/map.h
index e9556ba818b7a85e7528fa2a43982e768e954376..a6e40c37259ea08cf9ff36aadb0871c149713847 100644
--- a/src/map.h
+++ b/src/map.h
@@ -31,6 +31,7 @@ struct s_map_object {
 	GLfloat *tex_x, *tex_y, *tex_factorx, *tex_factory;
 	bool *textures_is3d;
 	shader_type *shader;
+	int shader_ref;
 	int cur_x, cur_y;
 	float dx, dy, scale;
 	float animdx, animdy;