diff --git a/init.lua b/init.lua
index 8d2e9f9..8c25838 100644
--- a/init.lua
+++ b/init.lua
@@ -290,6 +290,10 @@ local function is_group(item)
 end
 
 local function fmt(elem, ...)
+	if not fs_elements[elem] then
+		return sprintf(elem, ...)
+	end
+
 	return sprintf(fs_elements[elem], ...)
 end
 
@@ -442,7 +446,7 @@ function i3.register_craft(def)
 
 	if true_str(def.url) then
 		if not http then
-			return err(sprintf([[i3.register_craft(): Unable to reach %s.
+			return err(fmt([[i3.register_craft(): Unable to reach %s.
 				No HTTP support for this mod: add it to the `secure.http_mods` or
 				`secure.trusted_mods` setting.]], def.url))
 		end
@@ -610,7 +614,7 @@ local function toupper(str)
 end
 
 local function snip(str, limit)
-	return #str > limit and sprintf("%s...", sub(str, 1, limit - 3)) or str
+	return #str > limit and fmt("%s...", sub(str, 1, limit - 3)) or str
 end
 
 local function get_desc(item, lang_code)
@@ -769,7 +773,7 @@ local function drop_table(name, drop)
 					i3.register_craft{
 						type   = rarity and "digging_chance" or "digging",
 						items  = {name},
-						output = sprintf("%s %u", dname, dcount),
+						output = fmt("%s %u", dname, dcount),
 						rarity = rarity,
 						tools  = di.tools,
 					}
@@ -915,7 +919,7 @@ local function sort_itemlist(player, az)
 			if next(meta.fields) or wear then
 				stack_meta[#stack_meta + 1] = stack
 			else
-				new_inv[#new_inv + 1] = sprintf("%s %u", name, count)
+				new_inv[#new_inv + 1] = fmt("%s %u", name, count)
 			end
 		end
 	end
@@ -963,7 +967,7 @@ local function compress_items(player)
 		local leftover = count
 
 		for _ = 1, iter do
-			_new_inv[#_new_inv + 1] = sprintf("%s %u", name, min(stackmax, leftover))
+			_new_inv[#_new_inv + 1] = fmt("%s %u", name, min(stackmax, leftover))
 			leftover = leftover - stackmax
 		end
 	end
@@ -1036,7 +1040,7 @@ local function get_stack(player, pname, stack, message)
 
 	if inv:room_for_item("main", stack) then
 		inv:add_item("main", stack)
-		msg(pname, sprintf("%s added in your inventory", message))
+		msg(pname, fmt("%s added in your inventory", message))
 	else
 		local dir     = player:get_look_dir()
 		local ppos    = player:get_pos()
@@ -1044,7 +1048,7 @@ local function get_stack(player, pname, stack, message)
 		local look_at = vec_add(ppos, vec_mul(dir, 1))
 
 		core.add_item(look_at, stack)
-		msg(pname, sprintf("%s spawned", message))
+		msg(pname, fmt("%s spawned", message))
 	end
 end
 
@@ -1054,7 +1058,7 @@ local function craft_stack(player, pname, data, craft_rcp)
 	local output = craft_rcp and data.recipes[data.rnum].output or data.usages[data.unum].output
 	output = ItemStack(output)
 	local stackname, stackcount, stackmax = output:get_name(), output:get_count(), output:get_stack_max()
-	local scrbar_val = data[sprintf("scrbar_%s", craft_rcp and "rcp" or "usg")] or 1
+	local scrbar_val = data[fmt("scrbar_%s", craft_rcp and "rcp" or "usg")] or 1
 
 	for name, count in pairs(data.export_counts[rcp_usg].rcp) do
 		local items = {[name] = count}
@@ -1079,7 +1083,7 @@ local function craft_stack(player, pname, data, craft_rcp)
 		end
 
 		for k, v in pairs(items) do
-			inv:remove_item("main", sprintf("%s %s", k, v * scrbar_val))
+			inv:remove_item("main", fmt("%s %s", k, v * scrbar_val))
 		end
 	end
 
@@ -1093,12 +1097,12 @@ local function craft_stack(player, pname, data, craft_rcp)
 		local message
 
 		if c > 1 then
-			message = clr("#ff0", sprintf("%s x %s", c, desc))
+			message = clr("#ff0", fmt("%s x %s", c, desc))
 		else
-			message = clr("#ff0", sprintf("%s", desc))
+			message = clr("#ff0", fmt("%s", desc))
 		end
 
-		local stack = ItemStack(sprintf("%s %s", stackname, c))
+		local stack = ItemStack(fmt("%s %s", stackname, c))
 		get_stack(player, pname, stack, message)
 		leftover = leftover - stackmax
 	end
@@ -1131,8 +1135,8 @@ local function select_item(player, name, data, _f)
 		if creative_enabled(name) then
 			local stack = ItemStack(item)
 			local stackmax = stack:get_stack_max()
-			stack = sprintf("%s %s", item, stackmax)
-			get_stack(player, name, stack, clr("#ff0", sprintf("%u x %s", stackmax, item)))
+			stack = fmt("%s %s", item, stackmax)
+			get_stack(player, name, stack, clr("#ff0", fmt("%u x %s", stackmax, item)))
 		end
 
 		return
@@ -1191,7 +1195,7 @@ local function get_tooltip(item, info)
 	end
 
 	local function add(str)
-		return sprintf("%s\n%s", tooltip, str)
+		return fmt("%s\n%s", tooltip, str)
 	end
 
 	if info.cooktime then
@@ -1232,8 +1236,7 @@ local function get_tooltip(item, info)
 
 		if several then
 			for i = 1, #info.tools do
-				names = sprintf("%s\t\t- %s\n",
-					names, clr("#ff0", get_desc(info.tools[i])))
+				names = fmt("%s\t\t- %s\n", names, clr("#ff0", get_desc(info.tools[i])))
 			end
 
 			tooltip = add(S("Only drop if using one of these tools: @1",
@@ -1244,7 +1247,7 @@ local function get_tooltip(item, info)
 		end
 	end
 
-	return sprintf("tooltip[%s;%s]", item, ESC(tooltip))
+	return fmt("tooltip[%s;%s]", item, ESC(tooltip))
 end
 
 local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_size, _btn_size)
@@ -1255,7 +1258,7 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz
 			     shapeless and "shapeless" or "furnace"
 
 		if not custom_recipe then
-			icon = sprintf("i3_%s.png^[resize:16x16", icon)
+			icon = fmt("i3_%s.png^[resize:16x16", icon)
 		end
 
 		local pos_x = right + btn_size + 0.42
@@ -1290,11 +1293,11 @@ local function get_output_fs(fs, data, rcp, is_recipe, shapeless, right, btn_siz
 
 		fs(fmt("image", X, Y - 0.11, bt_s, bt_s, PNG.slot))
 
-		local _name = sprintf("_%s", name)
+		local _name = fmt("_%s", name)
 
 		fs(fmt("item_image_button",
 			X + 0.11, Y, ITEM_BTN_SIZE, ITEM_BTN_SIZE,
-			sprintf("%s %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)),
+			fmt("%s %u", name, count * (is_recipe and data.scrbar_rcp or data.scrbar_usg or 1)),
 			_name, ""))
 
 		local def = reg_items[name]
@@ -1389,7 +1392,7 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 				end
 
 				if not added then
-					label = sprintf("%s%s\nR", label ~= "" and "\n" or "", label)
+					label = fmt("%s%s\nR", label ~= "" and "\n" or "", label)
 					replace.items[#replace.items + 1] = replacement[2]
 				end
 			end
@@ -1399,10 +1402,10 @@ local function get_grid_fs(fs, data, rcp, is_recipe)
 			fs(fmt("image", X, Y, btn_size, btn_size, PNG.slot))
 		end
 
-		local btn_name = groups and sprintf("group|%s|%s", groups[1], item) or item
+		local btn_name = groups and fmt("group|%s|%s", groups[1], item) or item
 
 		fs(fmt("item_image_button", X, Y, btn_size, btn_size,
-			sprintf("%s %u", item, is_recipe and data.scrbar_rcp or data.scrbar_usg or 1),
+			fmt("%s %u", item, is_recipe and data.scrbar_rcp or data.scrbar_usg or 1),
 			btn_name, label))
 
 		local def = reg_items[name]
@@ -1448,8 +1451,8 @@ local function get_rcp_lbl(fs, data, panel, rn, is_recipe)
 
 	if rn > 1 then
 		local btn_suffix = is_recipe and "recipe" or "usage"
-		local prev_name = sprintf("prev_%s", btn_suffix)
-		local next_name = sprintf("next_%s", btn_suffix)
+		local prev_name = fmt("prev_%s", btn_suffix)
+		local next_name = fmt("next_%s", btn_suffix)
 		local x_arrow = data.xoffset + 5.09
 		local y_arrow = data.yoffset + 3.2
 
@@ -1481,19 +1484,19 @@ local function get_model_fs(fs, data, def, model_alias)
 
 		if v.color then
 			if is_num(v.color) then
-				local hex = sprintf("%02x", v.color)
+				local hex = fmt("%02x", v.color)
 
 				while #hex < 8 do
 					hex = "0" .. hex
 				end
 
-				_name = sprintf("%s^[multiply:%s", v.name,
-					sprintf("#%s%s", sub(hex, 3), sub(hex, 1, 2)))
+				_name = fmt("%s^[multiply:%s", v.name,
+					fmt("#%s%s", sub(hex, 3), sub(hex, 1, 2)))
 			else
-				_name = sprintf("%s^[multiply:%s", v.name, v.color)
+				_name = fmt("%s^[multiply:%s", v.name, v.color)
 			end
 		elseif v.animation then
-			_name = sprintf("%s^[verticalframe:%u:0", v.name, v.animation.aspect_h)
+			_name = fmt("%s^[verticalframe:%u:0", v.name, v.animation.aspect_h)
 		end
 
 		t[#t + 1] = _name or v.name or v
@@ -1515,17 +1518,17 @@ local function get_header(fs, data)
 	local star_x, star_y, star_size = data.xoffset + 0.4, data.yoffset + 0.5, 0.4
 
 	if nfavs < MAX_FAVS or (nfavs == MAX_FAVS and fav) then
-		local fav_marked = sprintf("i3_fav%s.png", fav and "_off" or "")
+		local fav_marked = fmt("i3_fav%s.png", fav and "_off" or "")
 
-		fs(sprintf("style[fav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]",
-			sprintf("i3_fav%s.png", fav and "" or "_off"), fav_marked, fav_marked),
+		fs(fmt("style[fav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]",
+			fmt("i3_fav%s.png", fav and "" or "_off"), fav_marked, fav_marked),
 		   fmt("image_button", star_x, star_y, star_size, star_size, "", "fav", ""),
-		   sprintf("tooltip[fav;%s]", fav and ES"Unmark this item" or ES"Mark this item"))
+		   fmt("tooltip[fav;%s]", fav and ES"Unmark this item" or ES"Mark this item"))
 	else
-		fs(sprintf("style[nofav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]",
+		fs(fmt("style[nofav;fgimg=%s;fgimg_hovered=%s;fgimg_pressed=%s]",
 			"i3_fav_off.png", PNG.cancel, PNG.cancel),
 		   fmt("image_button", star_x, star_y, star_size, star_size, "", "nofav", ""),
-		   sprintf("tooltip[nofav;%s]", ES"Cannot mark this item. Bookmark limit reached."))
+		   fmt("tooltip[nofav;%s]", ES"Cannot mark this item. Bookmark limit reached."))
 	end
 
 	local desc_lim, name_lim = 32, 34
@@ -1563,11 +1566,11 @@ local function get_export_fs(fs, data, panel, is_recipe, is_usage, max_stacks_rc
 	local name = is_recipe and "rcp" or "usg"
 	local show_export = (is_recipe and data.export_rcp) or (is_usage and data.export_usg)
 
-	fs(sprintf("style[export_%s;fgimg=%s;fgimg_hovered=%s]",
-		name, sprintf("%s", show_export and PNG.export_hover or PNG.export), PNG.export_hover),
+	fs(fmt("style[export_%s;fgimg=%s;fgimg_hovered=%s]",
+		name, fmt("%s", show_export and PNG.export_hover or PNG.export), PNG.export_hover),
 	   fmt("image_button",
-		data.xoffset + 7.35, data.yoffset + 0.2, 0.45, 0.45, "", sprintf("export_%s", name), ""),
-	   sprintf("tooltip[export_%s;%s]", name, ES"Quick crafting"))
+		data.xoffset + 7.35, data.yoffset + 0.2, 0.45, 0.45, "", fmt("export_%s", name), ""),
+	   fmt("tooltip[export_%s;%s]", name, ES"Quick crafting"))
 
 	if not show_export then return end
 
@@ -1584,13 +1587,11 @@ local function get_export_fs(fs, data, panel, is_recipe, is_usage, max_stacks_rc
 		end
 	end
 
-	fs(sprintf("style[scrbar_%s;noclip=true]", name),
-	   sprintf("scrollbaroptions[min=1;max=%u;smallstep=1]", craft_max),
-	   fmt("scrollbar",
-		data.xoffset + 8.1, data.yoffset, 3, 0.35, sprintf("scrbar_%s", name), stack_fs),
-	   fmt("button", data.xoffset + 8.1, data.yoffset + 0.4, 3, 0.7, sprintf("craft_%s", name),
-		sprintf("%s", sprintf(stack_fs > 1 and ES"Craft %u items" or ES"Craft %u item",
-			stack_fs))))
+	fs(fmt("style[scrbar_%s;noclip=true]", name),
+	   fmt("scrollbaroptions[min=1;max=%u;smallstep=1]", craft_max),
+	   fmt("scrollbar", data.xoffset + 8.1, data.yoffset, 3, 0.35, fmt("scrbar_%s", name), stack_fs),
+	   fmt("button", data.xoffset + 8.1, data.yoffset + 0.4, 3, 0.7, fmt("craft_%s", name),
+		fmt("%s", fmt(stack_fs > 1 and ES"Craft %u items" or ES"Craft %u item", stack_fs))))
 end
 
 local function get_rcp_extra(player, fs, data, panel, is_recipe, is_usage)
@@ -1626,8 +1627,7 @@ local function get_rcp_extra(player, fs, data, panel, is_recipe, is_usage)
 		get_rcp_lbl(fs, data, panel, rn, is_recipe)
 	else
 		local lbl = is_recipe and ES"No recipes" or ES"No usages"
-		fs(fmt("button",
-			data.xoffset + 0.1, data.yoffset + (panel.height / 2) - 0.5,
+		fs(fmt("button", data.xoffset + 0.1, data.yoffset + (panel.height / 2) - 0.5,
 			7.8, 1, "no_rcp", lbl))
 	end
 end
@@ -1685,7 +1685,7 @@ local function get_item_list(fs, data, full_height)
 	local filtered = data.filter ~= ""
 
 	fs("box[0.2,0.2;4.55,0.6;#bababa25]", "set_focus[filter]")
-	fs(sprintf("field[0.3,0.2;%f,0.6;filter;;%s]", filtered and 3.45 or 3.9, ESC(data.filter)))
+	fs(fmt("field[0.3,0.2;%f,0.6;filter;;%s]", filtered and 3.45 or 3.9, ESC(data.filter)))
 	fs("field_close_on_enter[filter;false]")
 
 	if filtered then
@@ -1699,9 +1699,8 @@ local function get_item_list(fs, data, full_height)
 
 	data.pagemax = max(1, ceil(#data.items / IPP))
 
-	fs(fmt("button",
-		data.xoffset - 2.4, 0.14, 1.88, 0.7, "pagenum",
-		sprintf("%s / %u", clr("#ff0", data.pagenum), data.pagemax)))
+	fs(fmt("button", data.xoffset - 2.4, 0.14, 1.88, 0.7, "pagenum",
+		fmt("%s / %u", clr("#ff0", data.pagenum), data.pagemax)))
 
 	if #data.items == 0 then
 		local lbl = ES"No item to show"
@@ -1729,12 +1728,12 @@ local function get_item_list(fs, data, full_height)
 			fs(fmt("image", X, Y, 1, 1, PNG.slot))
 		end
 
-		fs(fmt("item_image_button", X, Y, 1, 1, item, sprintf("%s_inv", item), ""))
+		fs(fmt("item_image_button", X, Y, 1, 1, item, fmt("%s_inv", item), ""))
 	end
 end
 
 local function add_subtitle(fs, title, x, y, ctn_len, font_size)
-	fs(sprintf("style_type[label;font=bold;font_size=%s]", font_size), fmt("label", x, y, title),
+	fs(fmt("style_type[label;font=bold;font_size=%s]", font_size), fmt("label", x, y, title),
 	   "style_type[label;font=normal;font_size=+0]", fmt("box", x, y + 0.3, ctn_len, 0.05, "#666"))
 end
 
@@ -1745,9 +1744,9 @@ local function get_award_list(fs, ctn_len, yextra, award_list, awards_unlocked,
 		yextra = yextra + 3.5
 	end
 
-	local percent = sprintf("%.1f%%", (awards_unlocked * 100) / award_list_nb):gsub(".0", "")
+	local percent = fmt("%.1f%%", (awards_unlocked * 100) / award_list_nb):gsub(".0", "")
 
-	add_subtitle(fs, sprintf("%s: %u of %u (%s)", ES"Achievements",
+	add_subtitle(fs, fmt("%s: %u of %u (%s)", ES"Achievements",
 		awards_unlocked, award_list_nb, percent), 0, yextra, ctn_len, "+2")
 
 	for i = 1, award_list_nb do
@@ -1780,7 +1779,7 @@ local function get_award_list(fs, ctn_len, yextra, award_list, awards_unlocked,
 		local icon = def.icon or "awards_unknown.png"
 
 		if not award.unlocked then
-			icon = sprintf("%s^\\[colorize:#000:180", icon)
+			icon = fmt("%s^\\[colorize:#000:180", icon)
 		end
 
 		fs(fmt("image", 0, y + 0.01, icon_size, icon_size, icon),
@@ -1793,7 +1792,7 @@ local function get_award_list(fs, ctn_len, yextra, award_list, awards_unlocked,
 			fs(fmt("box", icon_size + 0.1, y + 0.8, box_len, 0.3, "#101010"),
 			   fmt("box", icon_size + 0.1, y + 0.8, curr_bar, 0.3, "#9dc34c"),
 			   "style_type[label;font_size=-2]",
-			   fmt("label", icon_size + 0.5, y + 0.97, sprintf("%u / %u", current, target)))
+			   fmt("label", icon_size + 0.5, y + 0.97, fmt("%u / %u", current, target)))
 
 			y = y - 0.14
 		end
@@ -1820,22 +1819,22 @@ local function get_ctn_content(fs, data, player, xoffset, yoffset, ctn_len, awar
 			(half == 1 and i == floor(hearts)) and "i3_heart_half.png" or "i3_heart.png"))
 	end
 
-	fs(sprintf("list[current_player;craft;%f,%f;3,3;]", xoffset, yoffset + 1.45),
+	fs(fmt("list[current_player;craft;%f,%f;3,3;]", xoffset, yoffset + 1.45),
 	   fmt("image", xoffset + 3.64, yoffset + 2.88, 0.7, 0.7, PNG.arrow),
-	   sprintf("list[current_player;craftpreview;%f,%f;1,1;]", xoffset + 4.45, yoffset + 2.7),
+	   fmt("list[current_player;craftpreview;%f,%f;1,1;]", xoffset + 4.45, yoffset + 2.7),
 	   "listring[detached:i3_trash;main]",
-	   sprintf("list[detached:i3_trash;main;%f,%f;1,1;]", xoffset + 4.45, yoffset + 3.95),
+	   fmt("list[detached:i3_trash;main;%f,%f;1,1;]", xoffset + 4.45, yoffset + 3.95),
 	   fmt("image", xoffset + 4.45, yoffset + 3.95, 1, 1, PNG.trash))
 
 	if __3darmor then
 		add_subtitle(fs, ES"Armor", 0, yextra, ctn_len, "+2")
 
-		fs(sprintf("list[detached:%s_armor;armor;0,%f;3,2;]", name, yextra + 0.6))
+		fs(fmt("list[detached:%s_armor;armor;0,%f;3,2;]", name, yextra + 0.6))
 
 		local armor_def = armor.def[name]
 
-		fs(fmt("label", 3.75, yextra + 1.55, sprintf("%s: %s", ES"Level", armor_def.level)),
-		   fmt("label", 3.75, yextra + 1.95, sprintf("%s: %s", ES"Heal", armor_def.heal)))
+		fs(fmt("label", 3.75, yextra + 1.55, fmt("%s: %s", ES"Level", armor_def.level)),
+		   fmt("label", 3.75, yextra + 1.95, fmt("%s: %s", ES"Heal", armor_def.heal)))
 	end
 
 	if __skinsdb then
@@ -1850,7 +1849,7 @@ local function get_ctn_content(fs, data, player, xoffset, yoffset, ctn_len, awar
 
 		add_subtitle(fs, ES"Skins", 0, yextra, ctn_len, "+2")
 
-		fs(sprintf("dropdown[0,%f;3.55,0.6;skins;%s;%u;true]",
+		fs(fmt("dropdown[0,%f;3.55,0.6;skins;%s;%u;true]",
 			yextra + 0.6, concat(t, ","), data.skin_id or 1))
 	end
 
@@ -1880,7 +1879,7 @@ local function get_inventory_mode(player, fs, data, full_height)
 
 		fs(fmt("model", (__3darmor or __skinsdb) and 0.2 or 0, 0.2, 4, 5.5, "player_model",
 			props.mesh, concat(props.textures, ","), "0,-150", "false", "false",
-			sprintf("%u,%u", anim.x, anim.y)))
+			fmt("%u,%u", anim.x, anim.y)))
 	else
 		local size = 2.5
 		fs(fmt("image", 0.7, 0.2, size, size * props.visual_size.y, props.textures[1]))
@@ -1921,14 +1920,14 @@ local function get_inventory_mode(player, fs, data, full_height)
 			max_val = max_val + (award_list_nb * 13.2)
 		end
 
-		fs(sprintf([[
+		fs(fmt([[
 			scrollbaroptions[arrows=hide;thumbsize=%u;max=%u]
 			scrollbar[9.69,0.2;0.3,5.5;vertical;scrbar_inv;%u]
 			scrollbaroptions[arrows=default;thumbsize=0;max=1000]
 		]],
 		(max_val * 3) / 15, max_val, data.scrbar_inv or 0))
 
-		fs(sprintf("scroll_container[3.9,0.2;%f,5.5;scrbar_inv;vertical]", ctn_len))
+		fs(fmt("scroll_container[3.9,0.2;%f,5.5;scrbar_inv;vertical]", ctn_len))
 	end
 
 	get_ctn_content(fs, data, player, xoffset, yoffset, ctn_len, award_list, awards_unlocked,
@@ -1951,7 +1950,7 @@ local function get_inventory_mode(player, fs, data, full_height)
 		fs(fmt("image_button", i + 3.447 - (i * 0.4),
 			full_height - 0.6, 0.35, 0.35, "", btn_name, ""))
 
-		fs(sprintf("tooltip[%s;%s]", btn_name, tooltip))
+		fs(fmt("tooltip[%s;%s]", btn_name, tooltip))
 	end
 end
 
@@ -1966,11 +1965,11 @@ local function make_fs(player, data)
 	data.xoffset = ROWS + 1.2
 	local full_height = LINES + 1.73
 
-	fs(sprintf("formspec_version[%u]size[%f,%f]no_prepend[]bgcolor[#0000]",
+	fs(fmt("formspec_version[%u]size[%f,%f]no_prepend[]bgcolor[#0000]",
 		MIN_FORMSPEC_VERSION, data.xoffset + (data.query_item and 8 or 0), full_height), styles)
 
-	fs(sprintf("style[guide_mode;fgimg=%s]", data.inv_mode and PNG.tab or PNG.tab_hover))
-	fs(sprintf("style[inv_mode;fgimg=%s]", data.inv_mode and PNG.tab_hover or PNG.tab))
+	fs(fmt("style[guide_mode;fgimg=%s]", data.inv_mode and PNG.tab or PNG.tab_hover))
+	fs(fmt("style[inv_mode;fgimg=%s]", data.inv_mode and PNG.tab_hover or PNG.tab))
 
 	fs(fmt("image_button", 2.05, full_height, 3, 0.5, "", "guide_mode", ES"Crafting Guide"))
 	fs(fmt("image_button", 5.15, full_height, 3, 0.5, "", "inv_mode", ES"Inventory"))
@@ -1985,7 +1984,7 @@ local function make_fs(player, data)
 		get_panels(player, fs, data)
 	end
 
-	--print("make_fs()", sprintf("%.2f ms", (os.clock() - start) * 1000))
+	--print("make_fs()", fmt("%.2f ms", (os.clock() - start) * 1000))
 	return concat(fs)
 end
 
@@ -2097,7 +2096,7 @@ local function search(data)
 		local item = data.items_raw[i]
 		local def = reg_items[item]
 		local desc = lower(translate(data.lang_code, def and def.description)) or ""
-		local search_in = sprintf("%s %s", item, desc)
+		local search_in = fmt("%s %s", item, desc)
 		local to_add
 
 		if search_filter then