diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 045c27747c40492b684f35ffd9879e2bc30deae6..507202b7550de6b7c9e10e50b771939ace97c15a 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -621,10 +621,7 @@ void GUI::callForSolverPlugin(int dim)
   if(sp) sp->popupPropertiesForPhysicalEntity(dim);
 }
 
-char GUI::selectEntity(int type, 
-                       std::vector<GVertex*> &vertices, std::vector<GEdge*> &edges,
-                       std::vector<GFace*> &faces, std::vector<GRegion*> &regions,
-                       std::vector<MElement*> &elements)
+char GUI::selectEntity(int type)
 {
   unsigned int index = 0;
   if(graph.size() > 1)
@@ -634,7 +631,8 @@ char GUI::selectEntity(int type,
           goto done;
  done:
   return graph[index]->gl->selectEntity
-    (type, vertices, edges, faces, regions, elements);
+    (type, selectedVertices, selectedEdges, selectedFaces, selectedRegions,
+     selectedElements);
 }
 
 // Callbacks
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 3ddde31bb2b0de225c9a35ea1742725a8b7d47f3..bcbb0109db3a93c7519c344d1eb91522b7e51455 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -44,6 +44,11 @@ class GUI{
   static GUI *_instance;
  public:
   char onscreen_buffer[2][256];
+  std::vector<GVertex*> selectedVertices;
+  std::vector<GEdge*> selectedEdges;
+  std::vector<GFace*> selectedFaces;
+  std::vector<GRegion*> selectedRegions;
+  std::vector<MElement*> selectedElements;
  public:
   std::vector<graphicWindow*> graph;
   menuWindow *menu;
@@ -97,10 +102,7 @@ class GUI{
   // create the window for physical context dependant definitions
   void callForSolverPlugin(int dim);
   // select an entity in the most recent graphic window
-  char selectEntity(int type, 
-                    std::vector<GVertex*> &vertices, std::vector<GEdge*> &edges,
-                    std::vector<GFace*> &faces, std::vector<GRegion*> &regions, 
-                    std::vector<MElement*> &elements);
+  char selectEntity(int type);
 };
 
 // callbacks
diff --git a/Fltk/classificationEditor.cpp b/Fltk/classificationEditor.cpp
index 89cdc3245868f70ee8cd68d8c20c54296bead866..edee9e5e628e0eea0d404bcda5c7bfb34c3ab39c 100644
--- a/Fltk/classificationEditor.cpp
+++ b/Fltk/classificationEditor.cpp
@@ -48,12 +48,7 @@ static void ElementsSelectedMode(classificationEditor *e)
 static void class_selectgface_cb(Fl_Widget *w, void *data)
 {
   classificationEditor *e = (classificationEditor*)data;
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
   std::vector<GFace*> temp;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
 
   opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1);
 
@@ -64,12 +59,11 @@ static void class_selectgface_cb(Fl_Widget *w, void *data)
     Msg::StatusBar(3, false, "Select Model Face\n"
         "[Press 'e' to end selection or 'q' to abort]");
     
-    char ib = GUI::instance()->selectEntity
-      (ENT_SURFACE, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_SURFACE);
     if(ib == 'l') {
-      for(unsigned int i = 0; i < faces.size(); i++){
-        faces[i]->setSelection(1);
-        temp.push_back(faces[i]);
+      for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++){
+        GUI::instance()->selectedFaces[i]->setSelection(1);
+        temp.push_back(GUI::instance()->selectedFaces[i]);
       }
     }
     // ok store the list of gfaces !
@@ -94,11 +88,6 @@ static void class_selectgface_cb(Fl_Widget *w, void *data)
 static void class_deleteedge_cb(Fl_Widget *w, void *data)
 {
   classificationEditor *e = (classificationEditor*)data;
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<MLine*> ele;
   
   CTX.pick_elements = 1;
@@ -110,20 +99,20 @@ static void class_deleteedge_cb(Fl_Widget *w, void *data)
     Msg::StatusBar(3, false, "Select Elements\n"
         "[Press 'e' to end selection or 'q' to abort]");
     
-    char ib = GUI::instance()->selectEntity
-      (ENT_ALL, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_ALL);
     if(ib == 'l') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++){
-          if(elements[i]->getNumEdges() == 1 && elements[i]->getVisibility() != 2){
-            elements[i]->setVisibility(2); ele.push_back((MLine*)elements[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++){
+          MElement *me = GUI::instance()->selectedElements[i];
+          if(me->getNumEdges() == 1 && me->getVisibility() != 2){
+            me->setVisibility(2); ele.push_back((MLine*)me);
           }
         }
       }
     }
     if(ib == 'r') {
-      for(unsigned int i = 0; i < elements.size(); i++)
-        elements[i]->setVisibility(1);
+      for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++)
+        GUI::instance()->selectedElements[i]->setVisibility(1);
     }
     // ok, we compute edges !
     if(ib == 'e') {
@@ -143,15 +132,13 @@ static void class_deleteedge_cb(Fl_Widget *w, void *data)
   std::vector<MLine*> temp = e->temporary->lines;
   e->temporary->lines.clear();
        
-  for(unsigned int i=0;i<temp.size();i++)
-    {      
-      std::vector<MLine*>::iterator it = std::find(ele.begin(),ele.end(),temp[i]);
-      if(it != ele.end())
-        {
-          delete temp[i];
-        }
-      else e->temporary->lines.push_back(temp[i]);
+  for(unsigned int i = 0; i < temp.size(); i++){      
+    std::vector<MLine*>::iterator it = std::find(ele.begin(), ele.end(), temp[i]);
+    if(it != ele.end()){
+      delete temp[i];
     }
+    else e->temporary->lines.push_back(temp[i]);
+  }
   
   CTX.mesh.changed = ENT_ALL;
   CTX.pick_elements = 0;
@@ -449,11 +436,6 @@ static void buildListOfEdgeAngle(e2t_cont adj, std::vector<edge_angle> &edges_de
 static void class_select_cb(Fl_Widget *w, void *data)
 {
   classificationEditor *e = (classificationEditor*)data;
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<MTriangle*> &ele(e->getElements());
 
   CTX.pick_elements = 1;
@@ -465,20 +447,20 @@ static void class_select_cb(Fl_Widget *w, void *data)
     Msg::StatusBar(3, false, "Select Elements\n"
         "[Press 'e' to end selection or 'q' to abort]");
     
-    char ib = GUI::instance()->selectEntity
-      (ENT_ALL, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_ALL);
     if(ib == 'l') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++){
-          if(elements[i]->getNumEdges() == 3 && elements[i]->getVisibility() != 2){
-            elements[i]->setVisibility(2); ele.push_back((MTriangle*)elements[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++){
+          MElement *me = GUI::instance()->selectedElements[i];
+          if(me->getNumEdges() == 3 && me->getVisibility() != 2){
+            me->setVisibility(2); ele.push_back((MTriangle*)me);
           }
         }
       }
     }
     if(ib == 'r') {
-      for(unsigned int i = 0; i < elements.size(); i++)
-        elements[i]->setVisibility(1);
+      for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++)
+        GUI::instance()->selectedElements[i]->setVisibility(1);
     }
     // ok, we compute edges !
     if(ib == 'e') {
diff --git a/Fltk/fieldWindow.cpp b/Fltk/fieldWindow.cpp
index d6a4e32680cc2dd2a874b6ee427c877d1bc83c83..dbec54e5e986fcfab1c24acc63b2882c4b9a5dff 100644
--- a/Fltk/fieldWindow.cpp
+++ b/Fltk/fieldWindow.cpp
@@ -99,21 +99,15 @@ static void field_select_node_cb(Fl_Widget *w, void *data)
   const char *help = "vertices";
   CTX.pick_elements = 1;
   Draw();  
-  std::vector<GVertex*> vertices, vertices_old;
-  std::vector<GEdge*> edges, edges_old;
-  std::vector<GFace*> faces, faces_old;
-  std::vector<GRegion*> regions, regions_old;
-  std::vector<MElement*> elements, elements_old;
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   while(1) {
     Msg::StatusBar(3, false, "Select %s\n[Press %s'q' to abort]", 
-        help, mode ? "" : "'u' to undo or ");
-    
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+                   help, mode ? "" : "'u' to undo or ");
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     printf("char = %c\n", ib);
     if(ib == 'q'){
-      for(std::vector<GVertex*>::iterator it = vertices.begin(); it != vertices.end(); it++){
+      for(std::vector<GVertex*>::iterator it = GUI::instance()->selectedVertices.begin();
+          it != GUI::instance()->selectedVertices.end(); it++){
 	printf("%p\n", *it);
       }
       break;
diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index 9721ed01a264019e309255c13480e23223add13c..3be33213a3a535d2548dc488f55fc9c939c8c845 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -535,13 +535,7 @@ static void add_new_point()
     Msg::StatusBar(3, false, "Move mouse and/or enter coordinates\n"
                    "[Press 'Shift' to hold position, 'e' to add point "
                    "or 'q' to abort]");
-    std::vector<GVertex*> vertices;
-    std::vector<GEdge*> edges;
-    std::vector<GFace*> faces;
-    std::vector<GRegion*> regions;
-    std::vector<MElement*> elements;
-    char ib = GUI::instance()->selectEntity
-      (ENT_NONE, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_NONE);
     if(ib == 'e'){
       add_point(CTX.filename,
                 GUI::instance()->geoContext->input[2]->value(),
@@ -563,13 +557,7 @@ static void add_new_point()
 
 static void add_new_multiline(std::string type)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<int> p;
-
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
@@ -582,12 +570,11 @@ static void add_new_multiline(std::string type)
       Msg::StatusBar(3, false, "Select control points\n"
                      "[Press 'e' to end selection, 'u' to undo last selection "
                      "or 'q' to abort]");
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     if(ib == 'l') {
-      for(unsigned int i = 0; i < vertices.size(); i++){
-        vertices[i]->setSelection(1);
-        p.push_back(vertices[i]->tag());
+      for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++){
+        GUI::instance()->selectedVertices[i]->setSelection(1);
+        p.push_back(GUI::instance()->selectedVertices[i]->tag());
       }
       Draw();
     }
@@ -622,13 +609,7 @@ static void add_new_multiline(std::string type)
 
 static void add_new_line()
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<int> p;
-
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
@@ -640,12 +621,11 @@ static void add_new_line()
     if(p.size() == 1)
       Msg::StatusBar(3, false, "Select end point\n"
                      "[Press 'u' to undo last selection or 'q' to abort]");
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     if(ib == 'l') {
-      vertices[0]->setSelection(1);
+      GUI::instance()->selectedVertices[0]->setSelection(1);
       Draw();
-      p.push_back(vertices[0]->tag());
+      p.push_back(GUI::instance()->selectedVertices[0]->tag());
     }
     if(ib == 'r') {
       Msg::Warning("Entity de-selection not supported yet during line creation");
@@ -677,13 +657,7 @@ static void add_new_line()
 
 static void add_new_circle()
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<int> p;
-
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
@@ -698,12 +672,11 @@ static void add_new_circle()
     if(p.size() == 2)
       Msg::StatusBar(3, false, "Select end point\n"
                      "[Press 'u' to undo last selection or 'q' to abort]");
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     if(ib == 'l') {
-      vertices[0]->setSelection(1);
+      GUI::instance()->selectedVertices[0]->setSelection(1);
       Draw();
-      p.push_back(vertices[0]->tag());
+      p.push_back(GUI::instance()->selectedVertices[0]->tag());
     }
     if(ib == 'r') {
       Msg::Warning("Entity de-selection not supported yet during circle creation");
@@ -735,13 +708,7 @@ static void add_new_circle()
 
 static void add_new_ellipse()
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<int> p;
-
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
@@ -759,12 +726,11 @@ static void add_new_ellipse()
     if(p.size() == 3)
       Msg::StatusBar(3, false, "Select end point\n"
                      "[Press 'u' to undo last selection or 'q' to abort]");
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     if(ib == 'l') {
-      vertices[0]->setSelection(1);
+      GUI::instance()->selectedVertices[0]->setSelection(1);
       Draw();
-      p.push_back(vertices[0]->tag());
+      p.push_back(GUI::instance()->selectedVertices[0]->tag());
     }
     if(ib == 'r') {
       Msg::Warning("Entity de-selection not supported yet during ellipse creation");
@@ -823,13 +789,7 @@ static int select_contour(int type, int num, List_T * List)
 
 static void add_new_surface_volume(int mode)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   int type, num;
-
   List_T *List1 = List_Create(10, 10, sizeof(int));
   List_T *List2 = List_Create(10, 10, sizeof(int));
 
@@ -867,8 +827,7 @@ static void add_new_surface_volume(int mode)
                          "[Press 'u' to undo last selection or 'q' to abort]");
       }
       
-      char ib = GUI::instance()->selectEntity
-        (type, vertices, edges, faces, regions, elements);
+      char ib = GUI::instance()->selectEntity(type);
       if(ib == 'q') {
         GModel::current()->setSelection(0);
         Draw();
@@ -894,7 +853,9 @@ static void add_new_surface_volume(int mode)
                      "surface/volume creation");
       }
       if(ib == 'l') {
-        int num = (type == ENT_LINE) ? edges[0]->tag() : faces[0]->tag();
+        int num = (type == ENT_LINE) ?
+          GUI::instance()->selectedEdges[0]->tag() :
+          GUI::instance()->selectedFaces[0]->tag();
         if(select_contour(type, num, List1)) {
           if(type == ENT_LINE)
             add_lineloop(List1, CTX.filename, &num);
@@ -912,8 +873,7 @@ static void add_new_surface_volume(int mode)
                 (3, false, "Select hole boundaries\n"
                  "[Press 'e' to end selection, 'u' to undo last selection "
                  "or 'q' to abort]");
-            ib = GUI::instance()->selectEntity
-              (type, vertices, edges, faces, regions, elements);
+            ib = GUI::instance()->selectEntity(type);
             if(ib == 'q') {
               GModel::current()->setSelection(0);
               Draw();
@@ -941,7 +901,9 @@ static void add_new_surface_volume(int mode)
               }
             }
             if(ib == 'l') {
-              num = (type == ENT_LINE) ? edges[0]->tag() : faces[0]->tag();
+              num = (type == ENT_LINE) ? 
+                GUI::instance()->selectedEdges[0]->tag() :
+                GUI::instance()->selectedFaces[0]->tag();
               if(select_contour(type, num, List1)) {
                 if(type == ENT_LINE)
                   add_lineloop(List1, CTX.filename, &num);
@@ -1017,47 +979,37 @@ static void split_selection()
   Draw();
   Msg::StatusBar(3, false, "Select a line to split\n"
                  "[Press 'q' to abort]");
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
-  GEdge* edge_to_split = NULL;
+  GEdge* edge_to_split = 0;
   while(1){
-    char ib = GUI::instance()->selectEntity
-      (ENT_LINE, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_LINE);
     if(ib == 'q')
       break;
-    if(!edges.empty()){
-      edge_to_split = edges[0];
-      edges[0]->setSelection(1);
+    if(!GUI::instance()->selectedEdges.empty()){
+      edge_to_split = GUI::instance()->selectedEdges[0];
+      edge_to_split->setSelection(1);
       break;
     }
   }
   Msg::StatusBar(3, false, "");
-  if(edges.empty())
-    return;
+  if(GUI::instance()->selectedEdges.empty()) return;
   List_T *List1 = List_Create(5, 5, sizeof(int));
   Msg::StatusBar(3, false, "Select break points\n"
                  "[Press 'e' to end selection or 'q' to abort]");
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
   while(1){
-    char ib = GUI::instance()->selectEntity
-      (ENT_POINT, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_POINT);
     if(ib == 'q')
       break;
     if(ib == 'e'){
       split_edge(edge_to_split->tag(), List1, CTX.filename);
       break;
     }
-    if(!vertices.empty()){
-      for(unsigned int i = 0; i < vertices.size(); i++){
-        int tag = vertices[i]->tag();
-        int index = List_ISearchSeq(List1, &tag, fcmp_int); 
-        if(index < 0) List_Add(List1, &tag);
-        vertices[i]->setSelection(1);
-      }
+    for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++){
+      int tag = GUI::instance()->selectedVertices[i]->tag();
+      int index = List_ISearchSeq(List1, &tag, fcmp_int); 
+      if(index < 0) List_Add(List1, &tag);
+      GUI::instance()->selectedVertices[i]->setSelection(1);
     }
   }
   Msg::StatusBar(3, false, "");
@@ -1068,11 +1020,6 @@ static void split_selection()
 
 static void action_point_line_surface_volume(int action, int mode, const char *what)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   int type;
   const char *str;
 
@@ -1117,8 +1064,7 @@ static void action_point_line_surface_volume(int action, int mode, const char *w
                      "[Press 'e' to end selection, 'u' to undo last selection "
                      "or 'q' to abort]", str);
     
-    char ib = GUI::instance()->selectEntity
-      (type, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(type);
     if(ib == 'l') {
       // we don't use List_Insert in order to keep the original
       // ordering (this is slower, but this way undo works as
@@ -1126,33 +1072,33 @@ static void action_point_line_surface_volume(int action, int mode, const char *w
       int tag;
       switch (type) {
       case ENT_POINT: 
-        for(unsigned int i = 0; i < vertices.size(); i++){
-          vertices[i]->setSelection(1);
-          tag = vertices[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++){
+          GUI::instance()->selectedVertices[i]->setSelection(1);
+          tag = GUI::instance()->selectedVertices[i]->tag();
           if(List_ISearchSeq(List1, &tag, fcmp_int) < 0)
             List_Add(List1, &tag);
         }
         break;
       case ENT_LINE:
-        for(unsigned int i = 0; i < edges.size(); i++){
-          edges[i]->setSelection(1);
-          tag = edges[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedEdges.size(); i++){
+          GUI::instance()->selectedEdges[i]->setSelection(1);
+          tag = GUI::instance()->selectedEdges[i]->tag();
           if(List_ISearchSeq(List1, &tag, fcmp_int) < 0)
             List_Add(List1, &tag);
         }
         break;
       case ENT_SURFACE:
-        for(unsigned int i = 0; i < faces.size(); i++){
-          faces[i]->setSelection(1);
-          tag = faces[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++){
+          GUI::instance()->selectedFaces[i]->setSelection(1);
+          tag = GUI::instance()->selectedFaces[i]->tag();
           if(List_ISearchSeq(List1, &tag, fcmp_int) < 0)
             List_Add(List1, &tag);
         }
         break;
       case ENT_VOLUME:
-        for(unsigned int i = 0; i < regions.size(); i++){
-          regions[i]->setSelection(1);
-          tag = regions[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedRegions.size(); i++){
+          GUI::instance()->selectedRegions[i]->setSelection(1);
+          tag = GUI::instance()->selectedRegions[i]->tag();
           if(List_ISearchSeq(List1, &tag, fcmp_int) < 0)
             List_Add(List1, &tag);
         }
@@ -1167,35 +1113,35 @@ static void action_point_line_surface_volume(int action, int mode, const char *w
       int index, tag;
       switch (type) {
       case ENT_POINT:
-        for(unsigned int i = 0; i < vertices.size(); i++){
-          tag = vertices[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++){
+          tag = GUI::instance()->selectedVertices[i]->tag();
           index = List_ISearchSeq(List1, &tag, fcmp_int); 
           if(index >= 0) List_PSuppress(List1, index);
-          vertices[i]->setSelection(0);
+          GUI::instance()->selectedVertices[i]->setSelection(0);
         }
         break;
       case ENT_LINE:
-        for(unsigned int i = 0; i < edges.size(); i++){
-          tag = edges[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedEdges.size(); i++){
+          tag = GUI::instance()->selectedEdges[i]->tag();
           index = List_ISearchSeq(List1, &tag, fcmp_int); 
           if(index >= 0) List_PSuppress(List1, index);
-          edges[i]->setSelection(0);
+          GUI::instance()->selectedEdges[i]->setSelection(0);
         }
         break;
       case ENT_SURFACE:
-        for(unsigned int i = 0; i < faces.size(); i++){
-          tag = faces[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++){
+          tag = GUI::instance()->selectedFaces[i]->tag();
           index = List_ISearchSeq(List1, &tag, fcmp_int); 
           if(index >= 0) List_PSuppress(List1, index);
-          faces[i]->setSelection(0);
+          GUI::instance()->selectedFaces[i]->setSelection(0);
         }
         break;
       case ENT_VOLUME:
-        for(unsigned int i = 0; i < regions.size(); i++){
-          tag = regions[i]->tag();
+        for(unsigned int i = 0; i < GUI::instance()->selectedRegions.size(); i++){
+          tag = GUI::instance()->selectedRegions[i]->tag();
           index = List_ISearchSeq(List1, &tag, fcmp_int); 
           if(index >= 0) List_PSuppress(List1, index);
-          regions[i]->setSelection(0);
+          GUI::instance()->selectedRegions[i]->setSelection(0);
         }
         break;
       }
@@ -1526,12 +1472,6 @@ static void mesh_delete_parts_cb(Fl_Widget *w, void *data)
   else
     return;
 
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
-
   std::vector<MElement*> ele;
   std::vector<GEntity*> ent;
 
@@ -1547,46 +1487,49 @@ static void mesh_delete_parts_cb(Fl_Widget *w, void *data)
       Msg::StatusBar(3, false, "Select %s\n"
                      "[Press 'e' to end selection or 'q' to abort]", str);
 
-    char ib = GUI::instance()->selectEntity
-      (what, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(what);
     if(ib == 'l') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++){
-          if(elements[i]->getVisibility() != 2){
-            elements[i]->setVisibility(2); ele.push_back(elements[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++){
+          if(GUI::instance()->selectedElements[i]->getVisibility() != 2){
+            GUI::instance()->selectedElements[i]->setVisibility(2); 
+            ele.push_back(GUI::instance()->selectedElements[i]);
           }
         }
       }
       else{
-        for(unsigned int i = 0; i < edges.size(); i++){
-          if(edges[i]->getSelection() != 1){
-            edges[i]->setSelection(1); ent.push_back(edges[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedEdges.size(); i++){
+          if(GUI::instance()->selectedEdges[i]->getSelection() != 1){
+            GUI::instance()->selectedEdges[i]->setSelection(1); 
+            ent.push_back(GUI::instance()->selectedEdges[i]);
           }
         }
-        for(unsigned int i = 0; i < faces.size(); i++){
-          if(faces[i]->getSelection() != 1){
-            faces[i]->setSelection(1); ent.push_back(faces[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++){
+          if(GUI::instance()->selectedFaces[i]->getSelection() != 1){
+            GUI::instance()->selectedFaces[i]->setSelection(1); 
+            ent.push_back(GUI::instance()->selectedFaces[i]);
           }
         }
-        for(unsigned int i = 0; i < regions.size(); i++){
-          if(regions[i]->getSelection() != 1){
-            regions[i]->setSelection(1); ent.push_back(regions[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedRegions.size(); i++){
+          if(GUI::instance()->selectedRegions[i]->getSelection() != 1){
+            GUI::instance()->selectedRegions[i]->setSelection(1);
+            ent.push_back(GUI::instance()->selectedRegions[i]);
           }
         }
       }
     }
     if(ib == 'r') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++)
-          elements[i]->setVisibility(1);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++)
+          GUI::instance()->selectedElements[i]->setVisibility(1);
       }
       else{
-        for(unsigned int i = 0; i < edges.size(); i++)
-          edges[i]->setSelection(0);
-        for(unsigned int i = 0; i < faces.size(); i++)
-          faces[i]->setSelection(0);
-        for(unsigned int i = 0; i < regions.size(); i++)
-          regions[i]->setSelection(0);
+        for(unsigned int i = 0; i < GUI::instance()->selectedEdges.size(); i++)
+          GUI::instance()->selectedEdges[i]->setSelection(0);
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++)
+          GUI::instance()->selectedFaces[i]->setSelection(0);
+        for(unsigned int i = 0; i < GUI::instance()->selectedRegions.size(); i++)
+          GUI::instance()->selectedRegions[i]->setSelection(0);
       }
     }
     if(ib == 'u') {
@@ -1640,45 +1583,39 @@ static void mesh_remesh_cb(Fl_Widget *w, void *data)
 
 static void mesh_inspect_cb(Fl_Widget *w, void *data)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
-
   CTX.pick_elements = 1;
   CTX.mesh.changed = ENT_ALL;
   Draw();
 
   while(1) {
     Msg::StatusBar(3, false, "Select element\n[Press 'q' to abort]");
-    char ib = GUI::instance()->selectEntity
-      (ENT_ALL, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_ALL);
     if(ib == 'l') {
-      if(elements.size()){
+      if(GUI::instance()->selectedElements.size()){
+        MElement *ele = GUI::instance()->selectedElements[0];
         GModel::current()->setSelection(0);
-        elements[0]->setVisibility(2);
-        Msg::Direct("Element %d:", elements[0]->getNum());
-	int type = elements[0]->getTypeForMSH();
+        ele->setVisibility(2);
+        Msg::Direct("Element %d:", ele->getNum());
+	int type = ele->getTypeForMSH();
 	const char *name;
 	MElement::getInfoMSH(type, &name);
         Msg::Direct("  Type: %d ('%s')", type, name); 
-        Msg::Direct("  Dimension: %d", elements[0]->getDim());
-        Msg::Direct("  Order: %d", elements[0]->getPolynomialOrder()); 
-        Msg::Direct("  Partition: %d", elements[0]->getPartition()); 
+        Msg::Direct("  Dimension: %d", ele->getDim());
+        Msg::Direct("  Order: %d", ele->getPolynomialOrder()); 
+        Msg::Direct("  Partition: %d", ele->getPartition()); 
         char tmp1[32], tmp2[512];
         sprintf(tmp2, "  Vertices:");
-        for(int i = 0; i < elements[0]->getNumVertices(); i++){
-          sprintf(tmp1, " %d", elements[0]->getVertex(i)->getNum());
+        for(int i = 0; i < ele->getNumVertices(); i++){
+          sprintf(tmp1, " %d", ele->getVertex(i)->getNum());
           strcat(tmp2, tmp1);
         }
         Msg::Direct(tmp2);
-        SPoint3 pt = elements[0]->barycenter();
+        SPoint3 pt = ele->barycenter();
         Msg::Direct("  Barycenter: (%g,%g,%g)", pt[0], pt[1], pt[2]);
-        Msg::Direct("  Rho: %g", elements[0]->rhoShapeMeasure());
-        Msg::Direct("  Gamma: %g", elements[0]->gammaShapeMeasure());
-        Msg::Direct("  Eta: %g", elements[0]->etaShapeMeasure());
-        Msg::Direct("  Disto: %g", elements[0]->distoShapeMeasure());
+        Msg::Direct("  Rho: %g", ele->rhoShapeMeasure());
+        Msg::Direct("  Gamma: %g", ele->gammaShapeMeasure());
+        Msg::Direct("  Eta: %g", ele->etaShapeMeasure());
+        Msg::Direct("  Disto: %g", ele->distoShapeMeasure());
         CTX.mesh.changed = ENT_ALL;
         Draw();
         GUI::instance()->messages->show();
@@ -1766,11 +1703,6 @@ static void mesh_define_transfinite_cb(Fl_Widget *w, void *data)
 
 static void add_transfinite(int dim)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
   std::vector<int> p;
   char ib;
 
@@ -1792,18 +1724,15 @@ static void add_transfinite(int dim)
         Msg::StatusBar(3, false, "Select lines\n"
                        "[Press 'e' to end selection, 'u' to undo last selection "
                        "or 'q' to abort]");
-      ib = GUI::instance()->selectEntity
-        (ENT_LINE, vertices, edges, faces, regions, elements);
+      ib = GUI::instance()->selectEntity(ENT_LINE);
       break;
     case 2:
       Msg::StatusBar(3, false, "Select surface\n[Press 'q' to abort]");
-      ib = GUI::instance()->selectEntity
-        (ENT_SURFACE, vertices, edges, faces, regions, elements);
+      ib = GUI::instance()->selectEntity(ENT_SURFACE);
       break;
     case 3:
       Msg::StatusBar(3, false, "Select volume\n[Press 'q' to abort]");
-      ib = GUI::instance()->selectEntity
-        (ENT_VOLUME, vertices, edges, faces, regions, elements);
+      ib = GUI::instance()->selectEntity(ENT_VOLUME);
       break;
     default:
       ib = 'l';
@@ -1844,23 +1773,23 @@ static void add_transfinite(int dim)
     if(ib == 'l') {
       switch (dim) {
       case 1:
-        for(unsigned int i = 0; i < edges.size(); i++){
-          edges[i]->setSelection(1);
-          p.push_back(edges[i]->tag());
+        for(unsigned int i = 0; i < GUI::instance()->selectedEdges.size(); i++){
+          GUI::instance()->selectedEdges[i]->setSelection(1);
+          p.push_back(GUI::instance()->selectedEdges[i]->tag());
         }
         Draw();
         break;
       case 2:
       case 3:
         if(dim == 2){
-          faces[0]->setSelection(1);
+          GUI::instance()->selectedFaces[0]->setSelection(1);
           Draw();
-          p.push_back(faces[0]->tag());
+          p.push_back(GUI::instance()->selectedFaces[0]->tag());
         }
         else{
-          regions[0]->setSelection(1);
+          GUI::instance()->selectedRegions[0]->setSelection(1);
           Draw();
-          p.push_back(regions[0]->tag());
+          p.push_back(GUI::instance()->selectedRegions[0]->tag());
         }
         while(1) {
           if(p.size() == 1)
@@ -1870,12 +1799,11 @@ static void add_transfinite(int dim)
             Msg::StatusBar(3, false, "Select (ordered) boundary points\n"
                            "[Press 'e' to end selection, 'u' to undo last selection "
                            "or 'q' to abort]");
-          ib = GUI::instance()->selectEntity
-            (ENT_POINT, vertices, edges, faces, regions, elements);
+          ib = GUI::instance()->selectEntity(ENT_POINT);
           if(ib == 'l') {
-            vertices[0]->setSelection(1);
+            GUI::instance()->selectedVertices[0]->setSelection(1);
             Draw();
-            p.push_back(vertices[0]->tag());
+            p.push_back(GUI::instance()->selectedVertices[0]->tag());
           }
           if(ib == 'u') {
             if(p.size() > 1){
diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp
index 03040508fcc3e8ed3f5291c3df6ccf618fc93630..da8673c3b8edb23cf9736a915e71fb3fe4d60e0c 100644
--- a/Fltk/optionWindow.cpp
+++ b/Fltk/optionWindow.cpp
@@ -166,27 +166,22 @@ static void general_options_color_scheme_cb(Fl_Widget *w, void *data)
 
 static void general_options_rotation_center_select_cb(Fl_Widget *w, void *data)
 {
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
-
   Msg::StatusBar(3, false, "Select entity\n[Press 'q' to abort]");
-  char ib = GUI::instance()->selectEntity
-    (ENT_ALL, vertices, edges, faces, regions, elements);
+  char ib = GUI::instance()->selectEntity(ENT_ALL);
   if(ib == 'l') {
     SPoint3 pc(0., 0., 0.);
-    if(vertices.size())
-      pc.setPosition(vertices[0]->x(), vertices[0]->y(), vertices[0]->z());
-    else if(edges.size())
-      pc = edges[0]->bounds().center();
-    else if(faces.size())
-      pc = faces[0]->bounds().center();
-    else if(regions.size())
-      pc = regions[0]->bounds().center();
-    else if(elements.size())
-      pc = elements[0]->barycenter();
+    if(GUI::instance()->selectedVertices.size())
+      pc.setPosition(GUI::instance()->selectedVertices[0]->x(),
+                     GUI::instance()->selectedVertices[0]->y(),
+                     GUI::instance()->selectedVertices[0]->z());
+    else if(GUI::instance()->selectedEdges.size())
+      pc = GUI::instance()->selectedEdges[0]->bounds().center();
+    else if(GUI::instance()->selectedFaces.size())
+      pc = GUI::instance()->selectedFaces[0]->bounds().center();
+    else if(GUI::instance()->selectedRegions.size())
+      pc = GUI::instance()->selectedRegions[0]->bounds().center();
+    else if(GUI::instance()->selectedElements.size())
+      pc = GUI::instance()->selectedElements[0]->barycenter();
     opt_general_rotation_center_cg
       (0, GMSH_SET, GUI::instance()->options->general.butt[15]->value());
     opt_general_rotation_center0(0, GMSH_SET|GMSH_GUI, pc.x());
diff --git a/Fltk/projectionEditor.cpp b/Fltk/projectionEditor.cpp
index 2a48880ab605fe937a6554962f06f8deea374ec6..32d2c6d09d6a1c9f72f81b9c42f6aff5b2d5856d 100644
--- a/Fltk/projectionEditor.cpp
+++ b/Fltk/projectionEditor.cpp
@@ -233,26 +233,20 @@ static void set_position_cb(Fl_Widget *w, void *data)
   projectionEditor *e = (projectionEditor*)data;
   projection *p = e->getCurrentProjection();
   if(p){
-    std::vector<GVertex*> vertices;
-    std::vector<GEdge*> edges;
-    std::vector<GFace*> faces;
-    std::vector<GRegion*> regions;
-    std::vector<MElement*> elements;
-    char ib = GUI::instance()->selectEntity
-      (ENT_ALL, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(ENT_ALL);
     if(ib == 'l'){
-      if(vertices.size()){
-        p->parameters[0]->value(vertices[0]->x());
-        p->parameters[1]->value(vertices[0]->y());
-        p->parameters[2]->value(vertices[0]->z());
+      if(GUI::instance()->selectedVertices.size()){
+        p->parameters[0]->value(GUI::instance()->selectedVertices[0]->x());
+        p->parameters[1]->value(GUI::instance()->selectedVertices[0]->y());
+        p->parameters[2]->value(GUI::instance()->selectedVertices[0]->z());
       }
-      else if(elements.size()){
-        SPoint3 pc = elements[0]->barycenter();
+      else if(GUI::instance()->selectedElements.size()){
+        SPoint3 pc = GUI::instance()->selectedElements[0]->barycenter();
         p->parameters[0]->value(pc.x());
         p->parameters[1]->value(pc.y());
         p->parameters[2]->value(pc.z());
-        if(elements[0]->getNumFaces()){
-          MFace f = elements[0]->getFace(0);
+        if(GUI::instance()->selectedElements[0]->getNumFaces()){
+          MFace f = GUI::instance()->selectedElements[0]->getFace(0);
           SVector3 n = f.normal();
           p->parameters[3]->value(n[0]);
           p->parameters[4]->value(n[1]);
@@ -279,12 +273,6 @@ static void select_cb(Fl_Widget *w, void *data)
   default: return;
   }
 
-  std::vector<GVertex*> vertices;
-  std::vector<GEdge*> edges;
-  std::vector<GFace*> faces;
-  std::vector<GRegion*> regions;
-  std::vector<MElement*> elements;
-
   std::vector<MElement*> &ele(e->getElements());
   std::vector<GEntity*> &ent(e->getEntities());
 
@@ -299,39 +287,41 @@ static void select_cb(Fl_Widget *w, void *data)
       Msg::StatusBar(3, false, "Select %s\n"
 		  "[Press 'e' to end selection or 'q' to abort]", str);
 
-    char ib = GUI::instance()->selectEntity
-      (what, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(what);
     if(ib == 'l') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++){
-          if(elements[i]->getVisibility() != 2){
-            elements[i]->setVisibility(2); ele.push_back(elements[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++){
+          if(GUI::instance()->selectedElements[i]->getVisibility() != 2){
+            GUI::instance()->selectedElements[i]->setVisibility(2); 
+            ele.push_back(GUI::instance()->selectedElements[i]);
           }
         }
       }
       else{
-        for(unsigned int i = 0; i < vertices.size(); i++){
-          if(vertices[i]->getSelection() != 1){
-            vertices[i]->setSelection(1); ent.push_back(vertices[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++){
+          if(GUI::instance()->selectedVertices[i]->getSelection() != 1){
+            GUI::instance()->selectedVertices[i]->setSelection(1);
+            ent.push_back(GUI::instance()->selectedVertices[i]);
           }
         }
-        for(unsigned int i = 0; i < faces.size(); i++){
-          if(faces[i]->getSelection() != 1){
-            faces[i]->setSelection(1); ent.push_back(faces[i]);
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++){
+          if(GUI::instance()->selectedFaces[i]->getSelection() != 1){
+            GUI::instance()->selectedFaces[i]->setSelection(1);
+            ent.push_back(GUI::instance()->selectedFaces[i]);
           }
         }
       }
     }
     if(ib == 'r') {
       if(CTX.pick_elements){
-        for(unsigned int i = 0; i < elements.size(); i++)
-          elements[i]->setVisibility(1);
+        for(unsigned int i = 0; i < GUI::instance()->selectedElements.size(); i++)
+          GUI::instance()->selectedElements[i]->setVisibility(1);
       }
       else{
-        for(unsigned int i = 0; i < vertices.size(); i++)
-          vertices[i]->setSelection(0);
-        for(unsigned int i = 0; i < faces.size(); i++)
-          faces[i]->setSelection(0);
+        for(unsigned int i = 0; i < GUI::instance()->selectedVertices.size(); i++)
+          GUI::instance()->selectedVertices[i]->setSelection(0);
+        for(unsigned int i = 0; i < GUI::instance()->selectedFaces.size(); i++)
+          GUI::instance()->selectedFaces[i]->setSelection(0);
       }
     }
     if(ib == 'u') {
@@ -692,14 +682,10 @@ static void action_cb(Fl_Widget *w, void *data)
   }
   else if(what == "delete_select" || what == "save_select"){
     Msg::StatusBar(3, false, "Select Surface\n[Press 'e' to end selection 'q' to abort]");
-    std::vector<GVertex*> vertices;
-    std::vector<GEdge*> edges;
-    std::vector<GFace*> faces;
-    std::vector<GRegion*> regions;
-    std::vector<MElement*> elements;
-    char ib = GUI::instance()->selectEntity
-      (ENT_SURFACE, vertices, edges, faces, regions, elements);
-    if(ib == 'l') faces.insert(faces.end(), faces.begin(), faces.end());
+    char ib = GUI::instance()->selectEntity(ENT_SURFACE);
+    if(ib == 'l') faces.insert(faces.end(), 
+                               GUI::instance()->selectedFaces.begin(), 
+                               GUI::instance()->selectedFaces.end());
     Msg::StatusBar(3, false, "");
   }
 
diff --git a/Fltk/visibilityWindow.cpp b/Fltk/visibilityWindow.cpp
index 4d1a2ebf8f4db5654d4b5a6d72054fab7def2d05..928382d0901bd22f26cb1ab0b24a828c84b7530b 100644
--- a/Fltk/visibilityWindow.cpp
+++ b/Fltk/visibilityWindow.cpp
@@ -363,11 +363,11 @@ static void visibility_interactive_cb(Fl_Widget *w, void *data)
   else
     return;
 
-  std::vector<GVertex*> vertices, vertices_old;
-  std::vector<GEdge*> edges, edges_old;
-  std::vector<GFace*> faces, faces_old;
-  std::vector<GRegion*> regions, regions_old;
-  std::vector<MElement*> elements, elements_old;
+  std::vector<GVertex*> vertices;
+  std::vector<GEdge*> edges;
+  std::vector<GFace*> faces;
+  std::vector<GRegion*> regions;
+  std::vector<MElement*> elements;
 
   while(1) {
     if(what == ENT_ALL) 
@@ -376,20 +376,18 @@ static void visibility_interactive_cb(Fl_Widget *w, void *data)
     Msg::StatusBar(3, false, "Select %s\n[Press %s'q' to abort]", 
                    help, mode ? "" : "'u' to undo or ");
 
-    char ib = GUI::instance()->selectEntity
-      (what, vertices, edges, faces, regions, elements);
+    char ib = GUI::instance()->selectEntity(what);
     if(ib == 'l') {
-      apply_visibility(mode, vertices, edges, faces, regions, elements);
       // store for possible undo later
-      vertices_old = vertices;
-      edges_old = edges;
-      faces_old = faces;
-      regions_old = regions;
-      elements_old = elements;
+      vertices = GUI::instance()->selectedVertices;
+      edges = GUI::instance()->selectedEdges;
+      faces = GUI::instance()->selectedFaces;
+      regions = GUI::instance()->selectedRegions;
+      elements = GUI::instance()->selectedElements;
+      apply_visibility(mode, vertices, edges, faces, regions, elements);
     }
     if(ib == 'u' && !mode){ // undo only in hide mode
-      apply_visibility(2, vertices_old, edges_old, faces_old, 
-                       regions_old, elements_old);
+      apply_visibility(2, vertices, edges, faces, regions, elements);
     }
     if(ib == 'q'){
       break;
diff --git a/Graphics/drawContext.cpp b/Graphics/drawContext.cpp
index 9cf2dbce3d1dfde54fbaec0ea303f1465d8272e5..29956737927e4447cc96b13b69c12c45cd35426e 100644
--- a/Graphics/drawContext.cpp
+++ b/Graphics/drawContext.cpp
@@ -451,10 +451,10 @@ void drawContext::unproject(double x, double y, double p[3], double d[3])
   p[0] = x0;
   p[1] = y0;
   p[2] = z0;
-  d[0] = x1-x0;
-  d[1] = y1-y0;
-  d[2] = z1-z0;
-  double len = sqrt(d[0]*d[0] + d[1]*d[1] + d[2]*d[2]);
+  d[0] = x1 - x0;
+  d[1] = y1 - y0;
+  d[2] = z1 - z0;
+  double len = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
   d[0] /= len;
   d[1] /= len;
   d[2] /= len;