diff --git a/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp b/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp
index a013510dac50c9b25a128a1b3031419780f0a865..1a607b76b112b984195974492172d410ba514cc5 100644
--- a/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp
+++ b/xtt/lib/glow/gtk/glow_curvewidget_gtk.cpp
@@ -287,8 +287,10 @@ static void curvewidgetgtk_destroy( GtkObject *object)
     curvew->destroyed = 1;
     if ( curvew->scroll_timerid)
       g_source_remove( curvew->scroll_timerid);
-    if ( curvew->is_navigator && curvew->curve_ctx)
-      ((CurveCtx *)curvew->curve_ctx)->no_nav = 1;
+    if ( curvew->is_navigator) {
+	if ( curvew->curve_ctx && !((CurveWidgetGtk *)curvew->main_curve_widget)->destroyed)
+          ((CurveCtx *)curvew->curve_ctx)->no_nav = 1;
+    }
     else
       delete (GlowDrawGtk *)curvew->draw_ctx;
   }
diff --git a/xtt/lib/glow/gtk/glow_draw_gtk.cpp b/xtt/lib/glow/gtk/glow_draw_gtk.cpp
index 23a6b4b7b5e44a9310fdaf25a7525abdf7b5c765..e3cc1f8a8cb28ddff05ec1c66d208cfbc3ed55e0 100644
--- a/xtt/lib/glow/gtk/glow_draw_gtk.cpp
+++ b/xtt/lib/glow/gtk/glow_draw_gtk.cpp
@@ -859,20 +859,28 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	    if (       (event.button.state & GDK_SHIFT_MASK) && 
 		       !(event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1ClickShift, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if ( !(event.button.state & GDK_SHIFT_MASK) && 
 		      (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1ClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if (  (event.button.state & GDK_SHIFT_MASK) && 
 		       (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1ClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else {
 	      sts = ctx->event_handler( glow_eEvent_MB1Click, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    break;
@@ -880,20 +888,28 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	    if (       (event.button.state & GDK_SHIFT_MASK) && 
 		       !(event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2ClickShift, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if ( !(event.button.state & GDK_SHIFT_MASK) && 
 		      (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2ClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if (  (event.button.state & GDK_SHIFT_MASK) && 
 		       (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2ClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else {
 	      sts = ctx->event_handler( glow_eEvent_MB2Click, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    break;
@@ -911,6 +927,8 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	    else
 #endif
 	      sts = ctx->event_handler( glow_eEvent_MB3Click, (int)event.button.x, (int)event.button.y, 0, 0);
+	    if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    	      return 1;
 	    click_sensitivity = 0;
 	    break;
 	  }
@@ -919,6 +937,8 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	  /* Button release */
 // cout << "Button release detected" << endl;
 	  sts = ctx->event_handler( glow_eEvent_ButtonRelease, (int)event.button.x, (int)event.button.y, 0, 0);
+	  if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    	    return 1;
 	}        
       }
       else {
@@ -945,20 +965,28 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	    if ( (event.button.state & GDK_SHIFT_MASK) && 
 		 !(event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1DoubleClickShift, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if ( !(event.button.state & GDK_SHIFT_MASK) && 
 		      (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1DoubleClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if (  (event.button.state & GDK_SHIFT_MASK) && 
 		       (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB1DoubleClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else {
 	      sts = ctx->event_handler( glow_eEvent_MB1DoubleClick, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    break;
@@ -966,20 +994,28 @@ int GlowDrawGtk::event_handler( GdkEvent event)
 	    if ( (event.button.state & GDK_SHIFT_MASK) && 
 		 !(event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2DoubleClickShift, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if ( !(event.button.state & GDK_SHIFT_MASK) && 
 		      (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2DoubleClickCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else if (  (event.button.state & GDK_SHIFT_MASK) && 
 		       (event.button.state & GDK_CONTROL_MASK)) {
 	      sts = ctx->event_handler( glow_eEvent_MB2DoubleClickShiftCtrl, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    else {
 	      sts = ctx->event_handler( glow_eEvent_MB2DoubleClick, (int)event.button.x, (int)event.button.y, 0, 0);
+	      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+    		return 1;
 	      click_sensitivity = 0;
 	    }
 	    break;
diff --git a/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp b/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp
index 1ebea62d355a70a82a07d363cbc046c5165a8455..c1ce5f1201d345be1ae0000b9e8bd48db9d45397 100644
--- a/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp
+++ b/xtt/lib/glow/gtk/glow_growwidget_gtk.cpp
@@ -291,8 +291,10 @@ static void growwidgetgtk_destroy( GtkObject *object)
     grow->destroyed = 1;
     if ( grow->scroll_timerid)
       g_source_remove( grow->scroll_timerid);
-    if ( grow->is_navigator && grow->grow_ctx)
-      ((GrowCtx *)grow->grow_ctx)->no_nav = 1;
+    if ( grow->is_navigator) {
+      if ( grow->grow_ctx && !((GrowWidgetGtk *)grow->main_grow_widget)->destroyed)
+        ((GrowCtx *)grow->grow_ctx)->no_nav = 1;
+    }
     else
       delete (GlowDrawGtk *)grow->draw_ctx;
   }
diff --git a/xtt/lib/glow/src/glow_growctx.cpp b/xtt/lib/glow/src/glow_growctx.cpp
index 4b7a43433d79454434d55c0e0980c4fb66dad714..0694b26f5d4662c46b2f88324faad694b57ab99a 100644
--- a/xtt/lib/glow/src/glow_growctx.cpp
+++ b/xtt/lib/glow/src/glow_growctx.cpp
@@ -266,7 +266,9 @@ int GrowCtx::event_handler( glow_eEvent event, int x, int y, int w, int h)
     case glow_eEvent_MB1Up:
     case glow_eEvent_MB1Click:
       sts = a[a.a_size-1]->event_handler( &mw, event, x, y, fx, fy);
-      if ( sts)
+      if ( sts == GLOW__TERMINATED || sts == GLOW__DESTROYED)
+	return sts;
+      else if ( sts)
 	return 1;
       break;
     default: ;