diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp
index 1fc75a579..d1e5bbac6 100644
--- a/src/slic3r/GUI/GLCanvas3D.cpp
+++ b/src/slic3r/GUI/GLCanvas3D.cpp
@@ -2204,6 +2204,9 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
 
 void GLCanvas3D::on_char(wxKeyEvent& evt)
 {
+    if (!m_initialized)
+        return;
+
     // see include/wx/defs.h enum wxKeyCode
     int keyCode = evt.GetKeyCode();
     int ctrlMask = wxMOD_CONTROL;
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
index 67abfdd35..8c8f24ba0 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp
@@ -47,11 +47,9 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S
 {
     if (selection.is_empty()) {
         m_model_object = nullptr;
-        m_old_model_object = nullptr;
         return;
     }
 
-    m_old_model_object = m_model_object;
     m_model_object = model_object;
     m_active_instance = selection.get_instance_idx();
 
@@ -62,9 +60,6 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S
             editing_mode_reload_cache();
         }
 
-        if (m_model_object != m_old_model_object)
-            m_editing_mode = false;
-
         if (m_editing_mode_cache.empty() && m_model_object->sla_points_status != sla::PointsStatus::UserModified)
             get_data_from_backend();
 
@@ -241,10 +236,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
 bool GLGizmoSlaSupports::is_mesh_update_necessary() const
 {
     return ((m_state == On) && (m_model_object != nullptr) && !m_model_object->instances.empty())
-        && ((m_model_object != m_old_model_object) || m_V.size()==0);
-
-    //if (m_state != On || !m_model_object || m_model_object->instances.empty() || ! m_instance_matrix.isApprox(m_source_data.matrix))
-    //    return false;
+        && ((m_model_object->id() != m_current_mesh_model_id) || m_V.size()==0);
 }
 
 void GLGizmoSlaSupports::update_mesh()
@@ -267,6 +259,8 @@ void GLGizmoSlaSupports::update_mesh()
         F(i, 1) = 3*i+1;
         F(i, 2) = 3*i+2;
     }
+    m_current_mesh_model_id = m_model_object->id();
+    m_editing_mode = false;
 
     m_AABB = igl::AABB<Eigen::MatrixXf,3>();
     m_AABB.init(m_V, m_F);
@@ -740,10 +734,6 @@ std::string GLGizmoSlaSupports::on_get_name() const
 
 void GLGizmoSlaSupports::on_set_state()
 {
-    // Following is called through CallAfter, because otherwise there was a problem
-    // on OSX with the wxMessageDialog being shown several times when clicked into.
-
-    wxGetApp().CallAfter([this]() {
         if (m_state == On && m_old_state != On) { // the gizmo was just turned on
 
             if (is_mesh_update_necessary())
@@ -762,23 +752,26 @@ void GLGizmoSlaSupports::on_set_state()
             m_new_point_head_diameter = static_cast<const ConfigOptionFloat*>(cfg.option("support_head_front_diameter"))->value;
         }
         if (m_state == Off && m_old_state != Off) { // the gizmo was just turned Off
-            if (m_model_object) {
-                if (m_unsaved_changes) {
-                    wxMessageDialog dlg(GUI::wxGetApp().mainframe, _(L("Do you want to save your manually edited support points ?\n")),
-                                        _(L("Save changes?")), wxICON_QUESTION | wxYES | wxNO);
-                    if (dlg.ShowModal() == wxID_YES)
-                        editing_mode_apply_changes();
-                    else
-                        editing_mode_discard_changes();
+        wxGetApp().CallAfter([this]() {
+               // Following is called through CallAfter, because otherwise there was a problem
+                // on OSX with the wxMessageDialog being shown several times when clicked into.
+                if (m_model_object) {
+                    if (m_unsaved_changes) {
+                        wxMessageDialog dlg(GUI::wxGetApp().mainframe, _(L("Do you want to save your manually edited support points ?\n")),
+                                            _(L("Save changes?")), wxICON_QUESTION | wxYES | wxNO);
+                        if (dlg.ShowModal() == wxID_YES)
+                            editing_mode_apply_changes();
+                        else
+                            editing_mode_discard_changes();
+                    }
                 }
-            }
 
-            m_parent.toggle_model_objects_visibility(true);
-            m_editing_mode = false; // so it is not active next time the gizmo opens
-            m_editing_mode_cache.clear();
+                m_parent.toggle_model_objects_visibility(true);
+                m_editing_mode = false; // so it is not active next time the gizmo opens
+                m_editing_mode_cache.clear();
+            });
         }
         m_old_state = m_state;
-    });
 }
 
 
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp
index c8abf15f2..0b66ed529 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp
@@ -21,7 +21,7 @@ class GLGizmoSlaSupports : public GLGizmoBase
 {
 private:
     ModelObject* m_model_object = nullptr;
-    ModelObject* m_old_model_object = nullptr;
+    ModelID m_current_mesh_model_id = 0;
     int m_active_instance = -1;
     std::pair<Vec3f, Vec3f> unproject_on_mesh(const Vec2d& mouse_pos);
 
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 0095b1630..daab7818e 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -2598,25 +2598,21 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent &evt)
         this->statusbar()->set_progress(evt.status.percent);
         this->statusbar()->set_status_text(_(L(evt.status.text)) + wxString::FromUTF8("…"));
     }
-    if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SCENE) {
+    if (evt.status.flags & (PrintBase::SlicingStatus::RELOAD_SCENE || PrintBase::SlicingStatus::RELOAD_SLA_SUPPORT_POINTS)) {
         switch (this->printer_technology) {
         case ptFFF:
             this->update_fff_scene();
             break;
         case ptSLA:
+            // If RELOAD_SLA_SUPPORT_POINTS, then the SLA gizmo is updated (reload_scene calls update_gizmos_data)
             if (view3D->is_dragging())
                 delayed_scene_refresh = true;
             else
                 this->update_sla_scene();
             break;
         }
-    }
-    if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_SUPPORT_POINTS) {
-        // Update SLA gizmo  (reload_scene calls update_gizmos_data)
-        q->canvas3D()->reload_scene(true);
-    }
-    if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
-        // Update the SLA preview
+    } else if (evt.status.flags & PrintBase::SlicingStatus::RELOAD_SLA_PREVIEW) {
+        // Update the SLA preview. Only called if not RELOAD_SLA_SUPPORT_POINTS, as the block above will refresh the preview anyways.
         this->preview->reload_print();
     }
 }