diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp
index 46d4be0b1..883d9d080 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp
@@ -1406,10 +1406,18 @@ void GLGizmoEmboss::init_face_names() {
     // to reload fonts from system, when install new one
     wxFontEnumerator::InvalidateCache();
 
+    auto create_truncated_names = [&facenames = m_face_names, &width = m_gui_cfg->face_name_max_width]() {
+        for (FaceName &face : facenames.faces) {
+            std::string name_str(face.wx_name.ToUTF8().data());
+            face.name_truncated = ImGuiWrapper::trunc(name_str, width);
+        }
+    };
+
     // try load cache
     // Only not OS enumerated face has hash value 0
     if (m_face_names.hash == 0) {
         load(m_face_names);
+        create_truncated_names();
     }
 
     using namespace std::chrono;
@@ -1479,6 +1487,7 @@ void GLGizmoEmboss::init_face_names() {
         }
     }
     assert(std::is_sorted(m_face_names.bad.begin(), m_face_names.bad.end()));
+    create_truncated_names();
     store(m_face_names);
 }
 
@@ -1638,13 +1647,7 @@ void GLGizmoEmboss::draw_font_list()
             if (ImGui::IsItemHovered())
                 ImGui::SetTooltip("%s", wx_face_name.ToUTF8().data());
             if (is_selected) ImGui::SetItemDefaultFocus();
-            bool is_visible = ImGui::IsItemVisible();
-            if (is_visible && face.name_truncated.empty()) {
-                float width = m_gui_cfg->face_name_max_width;
-                std::string name_str(face.wx_name.ToUTF8().data());
-                face.name_truncated = ImGuiWrapper::trunc(name_str, width);
-            }
-            draw_font_preview(face, is_visible);
+            draw_font_preview(face, ImGui::IsItemVisible());
         }        
 #ifdef SHOW_FONT_COUNT
         ImGui::TextColored(ImGuiWrapper::COL_GREY_LIGHT, "Count %d",
diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp
index 729357c97..17709788d 100644
--- a/src/slic3r/GUI/ImGuiWrapper.cpp
+++ b/src/slic3r/GUI/ImGuiWrapper.cpp
@@ -1326,24 +1326,20 @@ std::string ImGuiWrapper::trunc(const std::string &text,
     text_width = calc_text_size(result_text).x;
     if (text_width < allowed_width) {
         // increase letter count
-        while (true) {
+        while (count_letter < text.length()) {
             ++count_letter;
             std::string_view act_text = text_.substr(0, count_letter);
             text_width = calc_text_size(act_text).x;
-            if (text_width < allowed_width) { 
-                result_text = std::move(act_text);
-                break; 
-            }            
+            if (text_width > allowed_width) break;
+            result_text = act_text;
         }
     } else {
         // decrease letter count
-        while (true) {
+        while (count_letter > 1) {
             --count_letter;
             result_text = text_.substr(0, count_letter);
             text_width  = calc_text_size(result_text).x;
-            if (text_width > allowed_width) break;
-            if (count_letter == 1) return "Error: No letters left. Can't return only tail.";
-            
+            if (text_width < allowed_width) break;            
         } 
     }
     return std::string(result_text) + tail;