diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index d45bdf685..d3d5320c1 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2317,11 +2317,15 @@ bool GLCanvas3D::Gizmos::init(GLCanvas3D& parent)
     m_gizmos.insert(GizmosMap::value_type(Flatten, gizmo));
 
     gizmo = new GLGizmoCut(parent);
-    if (! gizmo->init()) {
+    if (gizmo == nullptr)
+        return false;
+
+    if (!gizmo->init()) {
+        _reset();
         return false;
     }
 
-    m_gizmos.insert({ Cut, gizmo });
+    m_gizmos.insert(GizmosMap::value_type(Cut, gizmo));
 
     gizmo = new GLGizmoSlaSupports(parent);
     if (gizmo == nullptr)
@@ -2359,7 +2363,7 @@ std::string GLCanvas3D::Gizmos::update_hover_state(const GLCanvas3D& canvas, con
     float top_y = 0.5f * (cnv_h - height);
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
-        if (it->second == nullptr)
+        if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
         float tex_size = (float)it->second->get_textures_size() * OverlayTexturesScale;
@@ -2389,7 +2393,7 @@ void GLCanvas3D::Gizmos::update_on_off_state(const GLCanvas3D& canvas, const Vec
     float top_y = 0.5f * (cnv_h - height);
     for (GizmosMap::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
-        if (it->second == nullptr)
+        if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
         float tex_size = (float)it->second->get_textures_size() * OverlayTexturesScale;
@@ -2487,7 +2491,7 @@ bool GLCanvas3D::Gizmos::overlay_contains_mouse(const GLCanvas3D& canvas, const
     float top_y = 0.5f * (cnv_h - height);
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
-        if (it->second == nullptr)
+        if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
 
         float tex_size = (float)it->second->get_textures_size() * OverlayTexturesScale;
@@ -2739,8 +2743,9 @@ void GLCanvas3D::Gizmos::_render_overlay(const GLCanvas3D& canvas) const
     float scaled_gap_y = OverlayGapY * inv_zoom;
     for (GizmosMap::const_iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
     {
-        if (it->first == SlaSupports && wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA)
+        if ((it->second == nullptr) || !it->second->is_selectable())
             continue;
+
         float tex_size = (float)it->second->get_textures_size() * OverlayTexturesScale * inv_zoom;
         GLTexture::render_texture(it->second->get_texture_id(), top_x, top_x + tex_size, top_y - tex_size, top_y);
         top_y -= (tex_size + scaled_gap_y);
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index cf7c84085..a45ceb846 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -565,8 +565,8 @@ private:
             Scale,
             Rotate,
             Flatten,
-            SlaSupports,
             Cut,
+            SlaSupports,
             Num_Types
         };
 
diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp
index 54dd1427d..3f7dc6cac 100644
--- a/src/slic3r/GUI/GLGizmo.cpp
+++ b/src/slic3r/GUI/GLGizmo.cpp
@@ -1779,6 +1779,11 @@ bool GLGizmoSlaSupports::on_is_activable(const GLCanvas3D::Selection& selection)
     return (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA);
 }
 
+bool GLGizmoSlaSupports::on_is_selectable() const
+{
+    return (wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA);
+}
+
 std::string GLGizmoSlaSupports::on_get_name() const
 {
     return L("SLA Support Points");
diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp
index 376c28690..feebc00e3 100644
--- a/src/slic3r/GUI/GLGizmo.hpp
+++ b/src/slic3r/GUI/GLGizmo.hpp
@@ -101,6 +101,7 @@ public:
     void set_state(EState state) { m_state = state; on_set_state(); }
 
     bool is_activable(const GLCanvas3D::Selection& selection) const { return on_is_activable(selection); }
+    bool is_selectable() const { return on_is_selectable(); }
 
     unsigned int get_texture_id() const { return m_textures[m_state].get_id(); }
     int get_textures_size() const { return m_textures[Off].get_width(); }
@@ -134,6 +135,7 @@ protected:
     virtual void on_set_state() {}
     virtual void on_set_hover_id() {}
     virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const { return true; }
+    virtual bool on_is_selectable() const { return true; }
     virtual void on_enable_grabber(unsigned int id) {}
     virtual void on_disable_grabber(unsigned int id) {}
     virtual void on_start_dragging(const GLCanvas3D::Selection& selection) {}
@@ -454,8 +456,9 @@ protected:
         }
     }
 
-    std::string on_get_name() const override;
-    bool on_is_activable(const GLCanvas3D::Selection& selection) const override;
+    virtual std::string on_get_name() const;
+    virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const;
+    virtual bool on_is_selectable() const;
 };