diff --git a/libaegisub/common/parser.cpp b/libaegisub/common/parser.cpp
index c855c7e20f4b9501294ff8aa07ab7b492c40dd5e..ef53ed0d20a91da684784cb2431404eae733ce91 100644
--- a/libaegisub/common/parser.cpp
+++ b/libaegisub/common/parser.cpp
@@ -206,10 +206,12 @@ namespace parser {
 
 namespace ass {
 	std::vector<DialogueToken> TokenizeDialogueBody(std::string const& str, bool karaoke_templater) {
-		dialogue_tokens<lex::lexertl::actor_lexer<>> tokenizer(karaoke_templater);
+		static const dialogue_tokens<lex::lexertl::actor_lexer<>> kt(true);
+		static const dialogue_tokens<lex::lexertl::actor_lexer<>> not_kt(false);
+		auto const& tokenizer = karaoke_templater ? kt : not_kt;
 
-		char const* first = str.c_str();
-		char const* last = first + str.size();
+		char const *first = str.c_str();
+		char const *last = first + str.size();
 		std::vector<DialogueToken> data;
 		auto it = tokenizer.begin(first, last), end = tokenizer.end();