diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 83b907f01..e2aa6fb7b 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -4427,12 +4427,11 @@ bool GLCanvas3D::_init_main_toolbar()
     arrow_data.top = 0;
     arrow_data.right = 0;
     arrow_data.bottom = 0;
-
     if (!m_main_toolbar.init_arrow(arrow_data))
     {
         BOOST_LOG_TRIVIAL(error) << "Main toolbar failed to load arrow texture.";
     }
-
+    // m_gizmos is created at constructor, thus we can init arrow here.
     if (!m_gizmos.init_arrow(arrow_data))
     {
         BOOST_LOG_TRIVIAL(error) << "Gizmos manager failed to load arrow texture.";
@@ -4643,6 +4642,18 @@ bool GLCanvas3D::_init_undoredo_toolbar()
         return true;
     }
 
+    // init arrow
+    BackgroundTexture::Metadata arrow_data;
+    arrow_data.filename = "toolbar_arrow.svg";
+    arrow_data.left = 0;
+    arrow_data.top = 0;
+    arrow_data.right = 0;
+    arrow_data.bottom = 0;
+    if (!m_undoredo_toolbar.init_arrow(arrow_data))
+    {
+        BOOST_LOG_TRIVIAL(error) << "Undo/Redo toolbar failed to load arrow texture.";
+    }
+
 //    m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Vertical);
     m_undoredo_toolbar.set_layout_type(GLToolbar::Layout::Horizontal);
     m_undoredo_toolbar.set_horizontal_orientation(GLToolbar::Layout::HO_Left);
@@ -5376,6 +5387,10 @@ void GLCanvas3D::_render_undoredo_toolbar()
 
     m_undoredo_toolbar.set_position(top, left);
     m_undoredo_toolbar.render(*this);
+    if (m_toolbar_highlighter.m_render_arrow)
+    {
+        m_undoredo_toolbar.render_arrow(*this, m_toolbar_highlighter.m_toolbar_item);
+    }
 }
 
 void GLCanvas3D::_render_collapse_toolbar() const
diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp
index cea68eaaa..86827442d 100644
--- a/src/slic3r/GUI/GLToolbar.cpp
+++ b/src/slic3r/GUI/GLToolbar.cpp
@@ -1143,6 +1143,10 @@ void GLToolbar::render_background(float left, float top, float right, float bott
 
 void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighted_item)
 {
+    // arrow texture not initialized
+    if (m_arrow_texture.texture.get_id() == 0)
+        return;
+
     float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom();
     float factor = inv_zoom * m_layout.scale;
 
@@ -1157,6 +1161,7 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte
     float left = m_layout.left;
     float top = m_layout.top - icon_stride;
 
+    bool found = false;
     for (const GLToolbarItem* item : m_items) {
         if (!item->is_visible())
             continue;
@@ -1164,11 +1169,15 @@ void GLToolbar::render_arrow(const GLCanvas3D& parent, GLToolbarItem* highlighte
         if (item->is_separator())
             left += separator_stride;
         else {   
-            if (item->get_name() == highlighted_item->get_name())
+            if (item->get_name() == highlighted_item->get_name()) {
+                found = true;
                 break;
+            }
             left += icon_stride;
         }
     }
+    if (!found)
+        return;
 
     left += border;
     top -= separator_stride;