diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 93af50f8e8bd49f37d34e07b37a95f84d53a3a2f..4accfe32501831b6ee60c26d2cc79b59b2b31264 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -80,7 +80,7 @@ GUI::GUI(int argc, char **argv)
   // since the shortcuts should be valid even for hidden windows, and
   // we don't want to test for widget existence every time
   menu = new menuWindow();
-  graph.push_back(new graphicWindow(CTX.num_tiles));
+  graph.push_back(new graphicWindow(true, CTX.num_tiles));
 
 #if defined(WIN32)
   graph[0]->win->icon
@@ -121,7 +121,7 @@ GUI::GUI(int argc, char **argv)
 
   // create additional graphic windows
   for(int i = 1; i < CTX.num_windows; i++){
-    graph.push_back(new graphicWindow(CTX.num_tiles));
+    graph.push_back(new graphicWindow(false, CTX.num_tiles));
     graph.back()->win->size(400, 400);
     graph.back()->win->show();
   }
diff --git a/Fltk/Makefile b/Fltk/Makefile
index f403a3078588c085518a5c7ba86744af198de6df..8d5a2ca6c5a969ca8b5a0250e9e53d106070ddc3 100644
--- a/Fltk/Makefile
+++ b/Fltk/Makefile
@@ -108,11 +108,11 @@ GUI${OBJEXT}: GUI.cpp GUI.h graphicWindow.h openglWindow.h \
   ../Mesh/PartitionOptions.h
 graphicWindow${OBJEXT}: graphicWindow.cpp GUI.h graphicWindow.h openglWindow.h \
   ../Graphics/drawContext.h ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h \
-  menuWindow.h popupButton.h messageWindow.h manipWindow.h extraDialogs.h \
-  Draw.h ../Post/PView.h ../Post/PViewData.h ../Numeric/GmshMatrix.h \
-  ../Common/GmshMessage.h ../Common/OS.h ../Common/Options.h \
-  ../Post/ColorTable.h ../Common/Context.h ../Geo/CGNSOptions.h \
-  ../Mesh/PartitionOptions.h
+  dialogWindow.h mainWindow.h menuWindow.h popupButton.h messageWindow.h \
+  manipWindow.h extraDialogs.h Draw.h ../Post/PView.h ../Post/PViewData.h \
+  ../Numeric/GmshMatrix.h ../Common/GmshMessage.h ../Common/OS.h \
+  ../Common/Options.h ../Post/ColorTable.h ../Common/Context.h \
+  ../Geo/CGNSOptions.h ../Mesh/PartitionOptions.h
 openglWindow${OBJEXT}: openglWindow.cpp openglWindow.h ../Graphics/drawContext.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h graphicWindow.h manipWindow.h \
   contextWindow.h ../Common/GmshDefines.h ../Common/GmshMessage.h \
@@ -131,24 +131,25 @@ openglWindow${OBJEXT}: openglWindow.cpp openglWindow.h ../Graphics/drawContext.h
   ../Numeric/GmshMatrix.h GUI.h ../Common/VertexArray.h \
   ../Common/Context.h ../Geo/CGNSOptions.h ../Mesh/PartitionOptions.h
 menuWindow${OBJEXT}: menuWindow.cpp GUI.h Draw.h menuWindow.h popupButton.h \
-  dialogWindow.h graphicWindow.h openglWindow.h ../Graphics/drawContext.h \
+  mainWindow.h graphicWindow.h openglWindow.h ../Graphics/drawContext.h \
   ../Geo/SBoundingBox3d.h ../Geo/SPoint3.h optionWindow.h \
   spherePositionWidget.h colorbarWindow.h ../Post/ColorTable.h \
   statisticsWindow.h messageWindow.h contextWindow.h visibilityWindow.h \
   clippingWindow.h manipWindow.h fieldWindow.h pluginWindow.h \
   solverWindow.h aboutWindow.h fileDialogs.h partitionDialog.h \
-  projectionEditor.h ../Geo/fourierProjectionFace.h ../Geo/GModel.h \
-  ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h ../Geo/SPoint3.h \
-  ../Geo/SBoundingBox3d.h ../Geo/GPoint.h ../Geo/SPoint2.h ../Geo/GEdge.h \
-  ../Geo/GEntity.h ../Geo/GVertex.h ../Geo/SVector3.h ../Geo/SPoint3.h \
-  ../Geo/SPoint3.h ../Geo/SPoint2.h ../Geo/GFace.h ../Geo/GEntity.h \
-  ../Geo/GPoint.h ../Geo/GEdgeLoop.h ../Geo/GEdge.h ../Geo/SPoint2.h \
-  ../Geo/SVector3.h ../Geo/Pair.h ../Geo/GRegion.h ../Geo/GEntity.h \
-  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/Range.h \
-  classificationEditor.h ../Geo/MElement.h ../Common/GmshDefines.h \
-  ../Geo/MVertex.h ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h \
-  ../Geo/MVertex.h ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h \
-  ../Geo/SVector3.h ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
+  projectionEditor.h dialogWindow.h ../Geo/fourierProjectionFace.h \
+  ../Geo/GModel.h ../Geo/GVertex.h ../Geo/GEntity.h ../Geo/Range.h \
+  ../Geo/SPoint3.h ../Geo/SBoundingBox3d.h ../Geo/GPoint.h \
+  ../Geo/SPoint2.h ../Geo/GEdge.h ../Geo/GEntity.h ../Geo/GVertex.h \
+  ../Geo/SVector3.h ../Geo/SPoint3.h ../Geo/SPoint3.h ../Geo/SPoint2.h \
+  ../Geo/GFace.h ../Geo/GEntity.h ../Geo/GPoint.h ../Geo/GEdgeLoop.h \
+  ../Geo/GEdge.h ../Geo/SPoint2.h ../Geo/SVector3.h ../Geo/Pair.h \
+  ../Geo/GRegion.h ../Geo/GEntity.h ../Geo/SPoint3.h \
+  ../Geo/SBoundingBox3d.h ../Geo/Range.h classificationEditor.h \
+  ../Geo/MElement.h ../Common/GmshDefines.h ../Geo/MVertex.h \
+  ../Geo/SPoint2.h ../Geo/SPoint3.h ../Geo/MEdge.h ../Geo/MVertex.h \
+  ../Geo/SVector3.h ../Geo/MFace.h ../Geo/MVertex.h ../Geo/SVector3.h \
+  ../Common/GmshMessage.h ../Numeric/FunctionSpace.h \
   ../Numeric/GmshMatrix.h ../Numeric/Gauss.h ../Common/Options.h \
   Solvers.h ../Common/CommandLine.h ../Mesh/Generator.h \
   ../Mesh/HighOrder.h ../Post/PView.h ../Post/PViewData.h \
diff --git a/Fltk/dialogWindow.h b/Fltk/dialogWindow.h
index c0dbea7ee1ed0d39bd0c7198ea31b0c730e7ddcb..4c5f57edc09ceb9474e079be384ff38004b56421 100644
--- a/Fltk/dialogWindow.h
+++ b/Fltk/dialogWindow.h
@@ -8,7 +8,6 @@
 
 #include <FL/Fl.H>
 #include <FL/Fl_Double_Window.H>
-#include <FL/fl_ask.H>
 
 // Derive special windows from Fl_Double_Window to correctly process
 // the OS-specific shorcuts (Esc & Cmd-w on Mac, Alt+F4 on Windows)
diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index 9d4e8ad1807917bebe1e4ed6bf4ee51581981c82..60b1e3a651163a3509acafb3a6d3988b130fbe0e 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -8,6 +8,8 @@
 #include <FL/fl_ask.H>
 #include "GUI.h"
 #include "graphicWindow.h"
+#include "dialogWindow.h"
+#include "mainWindow.h"
 #include "menuWindow.h"
 #include "messageWindow.h"
 #include "manipWindow.h"
@@ -277,11 +279,6 @@ static void status_stepforward_cb(Fl_Widget *w, void *data)
 
 static void remove_graphic_window_cb(Fl_Widget *w, void *data)
 {
-  if(GUI::instance()->graph.size() == 1){
-    file_quit_cb(0, 0);
-    return;
-  }
-
   std::vector<graphicWindow*> graph2;
   graphicWindow *deleteMe = 0;
   for(unsigned int i = 0; i < GUI::instance()->graph.size(); i++){
@@ -297,39 +294,6 @@ static void remove_graphic_window_cb(Fl_Widget *w, void *data)
   }
 }
 
-// We derive the window from Fl_Window instead of Fl_Double_Window: it
-// shows up faster this way (and the opengl subwindow is
-// double-buffered on its own anyway)
-class normalWindow : public Fl_Window {
- private:
-  int handle(int event)
-  {
-    switch (event) {
-    case FL_SHORTCUT:
-    case FL_KEYBOARD:
-#if defined(__APPLE__)
-      if(Fl::test_shortcut(FL_META+'w')){
-#elif defined(WIN32)
-      if(Fl::test_shortcut(FL_ALT+FL_F+4)){
-#else
-      if(Fl::test_shortcut(FL_CTRL+'w')){
-#endif
-        if(GUI::instance()->graph.size() == 1){
-          if(fl_choice("Do you really want to quit?", "Cancel", "Quit", 0))
-            do_callback();
-        }
-        else
-          do_callback();
-        return 1;
-      }
-      break;
-    }
-    return Fl_Window::handle(event);
-  }
- public:
-  normalWindow(int w, int h, const char *l=0) : Fl_Window(w, h, l) {}
-};
-
 // This dummy box class permits to define a box widget that will not
 // eat the FL_ENTER/FL_LEAVE events (the new Box widget in fltk > 1.1
 // does that, so that gl->handle() was not called when the mouse
@@ -341,7 +305,7 @@ class dummyBox : public Fl_Box {
   dummyBox(int x, int y, int w, int h, const char *l=0) : Fl_Box(x, y, w, h, l) {}
 };
 
-graphicWindow::graphicWindow(int numTiles)
+graphicWindow::graphicWindow(bool main, int numTiles)
 {
   static bool first = true;
   if(first){
@@ -364,8 +328,14 @@ graphicWindow::graphicWindow(int numTiles)
   
   // the graphic window should be a "normal" window (neither modal nor
   // non-modal)
-  win = new normalWindow(width, height);
-  win->callback(remove_graphic_window_cb);
+  if(main){
+    win = new mainWindow(width, height, false);
+    win->callback(file_quit_cb);
+  }
+  else{
+    win = new dialogWindow(width, height, false);
+    win->callback(remove_graphic_window_cb);
+  }
 
   // bottom button bar
   bottom = new Fl_Box(0, glheight, width, sh);
diff --git a/Fltk/graphicWindow.h b/Fltk/graphicWindow.h
index 0e1d0fea447507f9f5e75dd8f222b6f69f64dbd9..4ceace8f1190daa1c18092b57216119ef08de968 100644
--- a/Fltk/graphicWindow.h
+++ b/Fltk/graphicWindow.h
@@ -22,7 +22,7 @@ class graphicWindow{
   Fl_Button *butt[12];
   Fl_Box *label[2];
  public:
-  graphicWindow(int numTiles=1);
+  graphicWindow(bool main=true, int numTiles=1);
   ~graphicWindow();
   void split(openglWindow *g, char how);
   void setAnimButtons(int mode);
diff --git a/Fltk/mainWindow.h b/Fltk/mainWindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..195a70e6b61eb5c77f73c1b557073d396d366f2b
--- /dev/null
+++ b/Fltk/mainWindow.h
@@ -0,0 +1,49 @@
+// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// bugs and problems to <gmsh@geuz.org>.
+
+#ifndef _MAIN_WINDOW_H
+#define _MAIN_WINDOW_H
+
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+#include <FL/fl_ask.H>
+
+// Derive the main window from Fl_Window (it shows up faster that way)
+class mainWindow : public Fl_Window {
+ private:
+  int handle(int event)
+  {
+    switch (event) {
+    case FL_SHORTCUT:
+    case FL_KEYBOARD:
+#if defined(__APPLE__)
+      if(Fl::test_shortcut(FL_META+'w')){
+#elif defined(WIN32)
+      if(Fl::test_shortcut(FL_ALT+FL_F+4)){
+#else
+      if(Fl::test_shortcut(FL_CTRL+'w')){
+#endif
+        if(fl_choice("Do you really want to quit?", "Cancel", "Quit", 0))
+          do_callback();
+        return 1;
+      }
+      break;
+    }
+    return Fl_Window::handle(event);
+  }
+ public:
+  mainWindow(int w, int h, bool nonmodal=false, const char *l=0) 
+    : Fl_Window(w, h, l) 
+  {
+    if(nonmodal) set_non_modal();
+  }
+  void show()
+  {
+    if(non_modal() && !shown()) Fl_Window::show(); // fix ordering
+    Fl_Window::show();
+  }
+};
+
+#endif
diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index 6215b13ad640f46812b2529d04118ab961902b62..61363e69c5e92cc9a0f287d701762f3d8db8d0d9 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -11,7 +11,7 @@
 #include "GUI.h"
 #include "Draw.h"
 #include "menuWindow.h"
-#include "dialogWindow.h"
+#include "mainWindow.h"
 #include "graphicWindow.h"
 #include "optionWindow.h"
 #include "statisticsWindow.h"
@@ -153,7 +153,7 @@ static void file_window_cb(Fl_Widget *w, void *data)
   std::string str((const char*)data);
   if(str == "new"){
     graphicWindow *g1 = GUI::instance()->graph.back();
-    graphicWindow *g2 = new graphicWindow(CTX.num_tiles);
+    graphicWindow *g2 = new graphicWindow(false, CTX.num_tiles);
     GUI::instance()->graph.push_back(g2);
     g2->win->label(g1->win->label());
     g2->win->resize(g1->win->x() + 10, g1->win->y() + 10,
@@ -2441,42 +2441,6 @@ contextItem menu_post[] = {
   {0} 
 };
 
-// Derive the main window from Fl_Window (it shows up faster that way)
-class mainWindow : public Fl_Window {
- private:
-  int handle(int event)
-  {
-    switch (event) {
-    case FL_SHORTCUT:
-    case FL_KEYBOARD:
-#if defined(__APPLE__)
-      if(Fl::test_shortcut(FL_META+'w')){
-#elif defined(WIN32)
-      if(Fl::test_shortcut(FL_ALT+FL_F+4)){
-#else
-      if(Fl::test_shortcut(FL_CTRL+'w')){
-#endif
-        if(fl_choice("Do you really want to quit?", "Cancel", "Quit", 0))
-          do_callback();
-        return 1;
-      }
-      break;
-    }
-    return Fl_Window::handle(event);
-  }
- public:
-  mainWindow(int w, int h, bool nonmodal=false, const char *l=0) 
-    : Fl_Window(w, h, l) 
-  {
-    if(nonmodal) set_non_modal();
-  }
-  void show()
-  {
-    if(non_modal() && !shown()) Fl_Window::show(); // fix ordering
-    Fl_Window::show();
-  }
-};
-
 menuWindow::menuWindow()
 {
   int width = 14 * FL_NORMAL_SIZE;
diff --git a/Fltk/openglWindow.cpp b/Fltk/openglWindow.cpp
index accae25c8aee78113e19b0bedbd4727d16f2f635..f0071d57eb910f1c01139223923c1754825e6147 100644
--- a/Fltk/openglWindow.cpp
+++ b/Fltk/openglWindow.cpp
@@ -125,8 +125,12 @@ void openglWindow::drawBorder()
       Fl::get_color(FL_BACKGROUND_COLOR, r, g, b);
     */
     glColor3ub(r, g, b);
+    glLineWidth(1);
+#if defined(__APPLE__)
     int ww = 1;
-    glLineWidth(ww);
+#else
+    int ww = 0;
+#endif
     glBegin(GL_LINE_LOOP);
     glVertex2d(_ctx->viewport[0], _ctx->viewport[1]);
     glVertex2d(_ctx->viewport[2] - ww, _ctx->viewport[1]);