diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf
index b8a8fc899b..faabf773f4 100644
--- a/addons/interact_menu/XEH_clientInit.sqf
+++ b/addons/interact_menu/XEH_clientInit.sqf
@@ -3,6 +3,8 @@
if (!hasInterface) exitWith {};
+GVAR(ParsedTextCached) = [];
+
//Setup text/shadow color matrix
[] call FUNC(setupTextColors);
["SettingChanged", {
diff --git a/addons/interact_menu/XEH_preInit.sqf b/addons/interact_menu/XEH_preInit.sqf
index 65d5dd4305..7e86646b79 100644
--- a/addons/interact_menu/XEH_preInit.sqf
+++ b/addons/interact_menu/XEH_preInit.sqf
@@ -8,6 +8,7 @@ PREP(compileMenu);
PREP(compileMenuSelfAction);
PREP(collectActiveActionTree);
PREP(createAction);
+PREP(ctrlSetParsedTextCached);
PREP(findActionNode);
PREP(handlePlayerChanged);
PREP(isSubPath);
diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf
new file mode 100644
index 0000000000..16ff9311de
--- /dev/null
+++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf
@@ -0,0 +1,13 @@
+// by commy2
+#include "script_component.hpp"
+
+private ["_ctrl", "_index", "_text"];
+
+_ctrl = _this select 0;
+_index = _this select 1;
+_text = _this select 2;
+
+if (_text != ARR_SELECT(GVAR(ParsedTextCached),_index,"")) then {
+ GVAR(ParsedTextCached) set [_index, _text];
+ _ctrl ctrlSetStructuredText parseText _text;
+};
diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf
index 9107b6d998..ccfe67ac77 100644
--- a/addons/interact_menu/functions/fnc_renderIcon.sqf
+++ b/addons/interact_menu/functions/fnc_renderIcon.sqf
@@ -33,12 +33,12 @@ if(_icon == "") then {
};
_text = if (GVAR(UseListMenu)) then {
- format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text]
+ format ["%5", _icon, _iconColor, _textColor, _shadowColor, _text]
} else {
- format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
+ format ["
%5", _icon, _iconColor, _textColor, _shadowColor, "ace_breakLine" callExtension _text];
};
-_ctrl ctrlSetStructuredText (parseText _text);
+[_ctrl, GVAR(iconCount), _text] call FUNC(ctrlSetParsedTextCached);
_text = if (GVAR(UseListMenu)) then {
_ctrl ctrlSetPosition [(_sPos select 0)-(0.0095*SafeZoneW), (_sPos select 1)-(0.0095*SafeZoneW), 0.20*SafeZoneW, 0.035*SafeZoneW];
} else {