diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index 9b638e2e4f19780bae2a206d2cb66c54fdc45eeb..2fc0566ad5d59c102843853a12b121840dd13686 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -1710,13 +1710,22 @@ static void mesh_inspect_cb(Fl_Widget *w, void *data)
   Msg::StatusBar(3, false, "");
 }
 
+static void mesh_change_order_cb(Fl_Widget *w, void *data)
+{
+  FlGui::instance()->menu->setContext(menu_mesh_degree, 0);
+}
+
+
 static void mesh_degree_cb(Fl_Widget *w, void *data)
 {
   if((long)data == 2)
     SetOrderN(GModel::current(), 2, CTX::instance()->mesh.secondOrderLinear, 
               CTX::instance()->mesh.secondOrderIncomplete);
-  else
+  else if ((long)data == 1)
     SetOrder1(GModel::current());
+  else // For now, use the same options as for second order meshes
+    SetOrderN(GModel::current(), (long)data, CTX::instance()->mesh.secondOrderLinear, 
+              CTX::instance()->mesh.secondOrderIncomplete);
   CTX::instance()->mesh.changed |= (ENT_LINE | ENT_SURFACE | ENT_VOLUME);
   drawContext::global()->draw();
   Msg::StatusBar(2, false, " ");
@@ -2461,8 +2470,7 @@ contextItem menu_mesh[] = {
   {"1D",           (Fl_Callback *)mesh_1d_cb} ,
   {"2D",           (Fl_Callback *)mesh_2d_cb} , 
   {"3D",           (Fl_Callback *)mesh_3d_cb} , 
-  {"First order",  (Fl_Callback *)mesh_degree_cb, (void*)1 } , 
-  {"Second order", (Fl_Callback *)mesh_degree_cb, (void*)2 } , 
+  {"Set order",  (Fl_Callback *)mesh_change_order_cb} , 
   {"Refine by splitting", (Fl_Callback *)mesh_refine_cb} ,
   {"Optimize",     (Fl_Callback *)mesh_optimize_cb} , 
 #if defined(HAVE_NETGEN)
@@ -2502,6 +2510,15 @@ contextItem menu_mesh[] = {
     {"Volumes",  (Fl_Callback *)mesh_delete_parts_cb, (void*)"volumes"} ,
     {""} 
   };  
+  contextItem menu_mesh_degree[] = {
+    {"1Mesh> Set order"} ,
+    {"1",  (Fl_Callback *)mesh_degree_cb, (void*)1},
+    {"2",  (Fl_Callback *)mesh_degree_cb, (void*)2},
+    {"3",  (Fl_Callback *)mesh_degree_cb, (void*)3},
+    {"4",  (Fl_Callback *)mesh_degree_cb, (void*)4},
+    {"5",  (Fl_Callback *)mesh_degree_cb, (void*)5},
+    {""} 
+  };  
 
 contextItem menu_solver[] = {
   {"2Solver"} ,
diff --git a/Fltk/menuWindow.h b/Fltk/menuWindow.h
index ec528ebd7d35576474930a156d7db82b1825639d..c7a7bf056f9fb6eaddd266abb14d4aa8a7e71f54 100644
--- a/Fltk/menuWindow.h
+++ b/Fltk/menuWindow.h
@@ -49,7 +49,8 @@ extern contextItem menu_mesh[];
 extern    contextItem menu_mesh_edit[]; 
 extern        contextItem menu_mesh_delete[]; 
 extern    contextItem menu_mesh_define[]; 
-extern        contextItem menu_mesh_define_transfinite[]; 
+extern        contextItem menu_mesh_define_transfinite[];
+extern    contextItem menu_mesh_degree[];
 extern contextItem menu_solver[]; 
 extern contextItem menu_post[];