diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index e2145a86ebc1fe1686eab6bf6bbe0bade6e1fb88..af36f2fd17d6ba095eff1622465d2dd9e67a2b57 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.465 2006-11-01 22:19:26 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.466 2006-11-02 00:56:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -2135,13 +2135,47 @@ void clip_num_cb(CALLBACK_ARGS)
 
 void clip_update_cb(CALLBACK_ARGS)
 {
-  int idx = WID->clip_choice->value();
-  CTX.clip[idx] = 0;
-  for(int i = 0; i < WID->clip_browser->size(); i++)
-    if(WID->clip_browser->selected(i+1))
-      CTX.clip[idx] += (1<<i);
-  for(int i = 0; i < 4; i++)
-    CTX.clip_plane[idx][i] = WID->clip_value[i]->value();
+  if(WID->clip_group[0]->visible()){ // clipping planes
+    int idx = WID->clip_choice->value();
+    CTX.clip[idx] = 0;
+    for(int i = 0; i < WID->clip_browser->size(); i++)
+      if(WID->clip_browser->selected(i+1))
+	CTX.clip[idx] += (1<<i);
+    for(int i = 0; i < 4; i++)
+      CTX.clip_plane[idx][i] = WID->clip_value[i]->value();
+  }
+  else{ // clipping box
+    for(int idx = 0; idx < 6; idx++){
+      CTX.clip[idx] = 0;
+      for(int i = 0; i < WID->clip_browser->size(); i++)
+	if(WID->clip_browser->selected(i+1))
+	  CTX.clip[idx] += (1<<i);
+    }
+    double c[3] = {WID->clip_value[4]->value(),
+		   WID->clip_value[5]->value(),
+		   WID->clip_value[6]->value()};
+    double d[3] = {WID->clip_value[7]->value(),
+		   WID->clip_value[8]->value(),
+		   WID->clip_value[9]->value()};
+    // left
+    CTX.clip_plane[0][0] = 1.;  CTX.clip_plane[0][1] = 0.;  CTX.clip_plane[0][2] = 0.;
+    CTX.clip_plane[0][3] = -(c[0] - d[0] / 2.);
+    // right
+    CTX.clip_plane[1][0] = -1.; CTX.clip_plane[1][1] = 0.; CTX.clip_plane[1][2] = 0.;
+    CTX.clip_plane[1][3] = (c[0] + d[0] / 2.);
+    // top
+    CTX.clip_plane[2][0] = 0.; CTX.clip_plane[2][1] = 1.; CTX.clip_plane[2][2] = 0.;
+    CTX.clip_plane[2][3] = -(c[1] - d[1] / 2.);
+    // bottom
+    CTX.clip_plane[3][0] = 0.; CTX.clip_plane[3][1] = -1.; CTX.clip_plane[3][2] = 0.;
+    CTX.clip_plane[3][3] = (c[1] + d[1] / 2.);
+    // near
+    CTX.clip_plane[4][0] = 0.; CTX.clip_plane[4][1] = 0.; CTX.clip_plane[4][2] = 1.;
+    CTX.clip_plane[4][3] = -(c[2] - d[2] / 2.);
+    // far
+    CTX.clip_plane[5][0] = 0.; CTX.clip_plane[5][1] = 0.; CTX.clip_plane[5][2] = -1.;
+    CTX.clip_plane[5][3] = (c[2] + d[2] / 2.);
+  }
 
   int old = CTX.draw_bbox;
   CTX.draw_bbox = 1;
@@ -2171,48 +2205,6 @@ void clip_reset_cb(CALLBACK_ARGS)
   Draw();
 }
 
-void clip_update_box_cb(CALLBACK_ARGS)
-{
-  for(int idx = 0; idx < 6; idx++){
-    CTX.clip[idx] = 0;
-    for(int i = 0; i < WID->clip_browser->size(); i++)
-      if(WID->clip_browser->selected(i+1))
-	CTX.clip[idx] += (1<<i);
-  }
-  double c[3] = {WID->clip_value[4]->value(),
-		 WID->clip_value[5]->value(),
-		 WID->clip_value[6]->value()};
-  double d[3] = {WID->clip_value[7]->value(),
-		 WID->clip_value[8]->value(),
-		 WID->clip_value[9]->value()};
-  // left
-  CTX.clip_plane[0][0] = 1.;  CTX.clip_plane[0][1] = 0.;  CTX.clip_plane[0][2] = 0.;
-  CTX.clip_plane[0][3] = -(c[0] - d[0] / 2.);
-  // right
-  CTX.clip_plane[1][0] = -1.; CTX.clip_plane[1][1] = 0.; CTX.clip_plane[1][2] = 0.;
-  CTX.clip_plane[1][3] = (c[0] + d[0] / 2.);
-  // top
-  CTX.clip_plane[2][0] = 0.; CTX.clip_plane[2][1] = 1.; CTX.clip_plane[2][2] = 0.;
-  CTX.clip_plane[2][3] = -(c[1] - d[1] / 2.);
-  // bottom
-  CTX.clip_plane[3][0] = 0.; CTX.clip_plane[3][1] = -1.; CTX.clip_plane[3][2] = 0.;
-  CTX.clip_plane[3][3] = (c[1] + d[1] / 2.);
-  // near
-  CTX.clip_plane[4][0] = 0.; CTX.clip_plane[4][1] = 0.; CTX.clip_plane[4][2] = 1.;
-  CTX.clip_plane[4][3] = -(c[2] - d[2] / 2.);
-  // far
-  CTX.clip_plane[5][0] = 0.; CTX.clip_plane[5][1] = 0.; CTX.clip_plane[5][2] = -1.;
-  CTX.clip_plane[5][3] = (c[2] + d[2] / 2.);
-
-  int old = CTX.draw_bbox;
-  CTX.draw_bbox = 1;
-  if(CTX.fast_redraw)
-    CTX.post.draw = CTX.mesh.draw = 0;
-  Draw();
-  CTX.draw_bbox = old;
-  CTX.post.draw = CTX.mesh.draw = 1;
-}
-
 // Manipulator menu
 
 void manip_cb(CALLBACK_ARGS)
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 85921b125390e0cbc6a0207a4d9df2e40b997b23..ba2a26a9d0f880d6b0fe75785c58ec67879edf9a 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -161,7 +161,6 @@ void visibility_delete_cb(CALLBACK_ARGS);
 
 void clip_cb(CALLBACK_ARGS);
 void clip_update_cb(CALLBACK_ARGS);
-void clip_update_box_cb(CALLBACK_ARGS);
 void clip_invert_cb(CALLBACK_ARGS);
 void clip_num_cb(CALLBACK_ARGS);
 void clip_reset_cb(CALLBACK_ARGS);
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 573cb7b3c7fba53b5b9a9b94c24be5fa888fec75..bf0aefc05a85a7c65ef229e420b9c7d6b5ae654e 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.555 2006-10-31 20:20:21 geuzaine Exp $
+// $Id: GUI.cpp,v 1.556 2006-11-02 00:56:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -4088,9 +4088,9 @@ void GUI::create_clip_window()
   };
 
   int width = 3 * BB + 4 * WB;
-  int height = 7 * BH + 5 * WB;
+  int height = 8 * BH + 5 * WB;
   int brw = 105;
-  int BW = width - brw - 3 * WB - 2 * fontsize;
+  int BW = width - brw - 3 * WB - 3 * fontsize;
 
   clip_window = new Dialog_Window(width, height, "Clipping Planes");
   clip_window->box(GMSH_WINDOW_BOX);
@@ -4100,7 +4100,7 @@ void GUI::create_clip_window()
 
   Fl_Tabs *o = new Fl_Tabs(2 * WB + brw, WB, width - 3 * WB - brw, height - 3 * WB - BH);
   {
-    Fl_Group *o = new Fl_Group(2 * WB + brw, WB + BH, width - 3 * WB - brw, height - 3 * WB - 2 * BH, "Planes");
+    clip_group[0] = new Fl_Group(2 * WB + brw, WB + BH, width - 3 * WB - brw, height - 3 * WB - 2 * BH, "Planes");
 
     int ii = fontsize;
     Fl_Button *invert = new Fl_Button(3 * WB + brw, 2 * WB + 2 * BH, ii, 4*BH, "-");
@@ -4120,28 +4120,24 @@ void GUI::create_clip_window()
       clip_value[i]->callback(clip_update_cb);
     }
 
-    o->end();
+    clip_group[0]->end();
   }
   {
-    Fl_Group *o = new Fl_Group(2 * WB + brw, WB + BH, width - 3 * WB - brw, height - 3 * WB - 2 * BH, "Box");
-    o->hide();
-
-    Fl_Box *b1 = new Fl_Box(FL_NO_BOX, 3 * WB + brw, 2 * WB + 1 * BH, BW, BH, "Center:");
-    b1->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
-    Fl_Box *b2 = new Fl_Box(FL_NO_BOX, 3 * WB + brw, 2 * WB + 3 * BH, BW, BH, "Dimensions:");
-    b2->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT);
-
-    clip_value[4] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 2 * BH, BW / 3, BH);
-    clip_value[5] = new Fl_Value_Input(3 * WB + brw + BW / 3, 2 * WB + 2 * BH, BW / 3, BH);
-    clip_value[6] = new Fl_Value_Input(3 * WB + brw + 2 * BW / 3, 2 * WB + 2 * BH, BW - 2 * BW / 3, BH);
-    clip_value[7] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 4 * BH, BW / 3, BH);
-    clip_value[8] = new Fl_Value_Input(3 * WB + brw + BW / 3, 2 * WB + 4 * BH, BW / 3, BH);
-    clip_value[9] = new Fl_Value_Input(3 * WB + brw + 2 * BW / 3, 2 * WB + 4 * BH, BW - 2 * BW / 3, BH);
+    clip_group[1] = new Fl_Group(2 * WB + brw, WB + BH, width - 3 * WB - brw, height - 3 * WB - 2 * BH, "Box");
+    clip_group[1]->hide();
+
+    clip_value[4] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 1 * BH, BW, BH, "Cx");
+    clip_value[5] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 2 * BH, BW, BH, "Cy");
+    clip_value[6] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 3 * BH, BW, BH, "Cz");
+    clip_value[7] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 4 * BH, BW, BH, "Wx");
+    clip_value[8] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 5 * BH, BW, BH, "Wy");
+    clip_value[9] = new Fl_Value_Input(3 * WB + brw, 2 * WB + 6 * BH, BW, BH, "Wz");
     for(int i = 4; i < 10; i++){
-      clip_value[i]->callback(clip_update_box_cb);
+      clip_value[i]->align(FL_ALIGN_RIGHT);
+      clip_value[i]->callback(clip_update_cb);
     }
 
-    o->end();
+    clip_group[1]->end();
   }
   o->callback(clip_reset_cb);
   o->end();
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 67b33d7871c0f3ef3acc0c09910adc7dafd0b238..92de01ce3162cd6f1e79d2dbaca273cfda41d2d6 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -243,6 +243,7 @@ public:
   Fl_Multi_Browser *clip_browser;
   Fl_Value_Input   *clip_value[10];
   Fl_Check_Button  *clip_butt[2];
+  Fl_Group         *clip_group[2];
 
   // manipulator window
   Fl_Window        *manip_window;