diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index 77f00e9501706fe1639bf97f8416034a47e0a1c0..718c969a84c95c3c86fae41eb9d7a1a0ca548352 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -111,14 +111,24 @@ void status_xyz1p_cb(Fl_Widget *w, void *data)
 
   for(unsigned int i = 0; i < gls.size(); i++){
     drawContext *ctx = gls[i]->getDrawContext();
-    if(!strcmp(str, "r")){ // rotate 90 degress around axis perp to the screen
+    if(!strcmp(str, "r")){
+      // rotate +90 or -90 (shift) degress around axis perp to the
+      // screen, or sync rotation with first window (alt)
       double axis[3] = {0., 0., 1.};
-      if(!Fl::event_state(FL_SHIFT))
+      if(Fl::event_state(FL_ALT)){
+        if(i != 0){
+          drawContext *ctx0 = gls[0]->getDrawContext();
+          ctx->setQuaternion(ctx0->quaternion[0], ctx0->quaternion[1], 
+                             ctx0->quaternion[2], ctx0->quaternion[3]);
+        }
+      }
+      else if(!Fl::event_state(FL_SHIFT))
         ctx->addQuaternionFromAxisAndAngle(axis, -90.);
       else
         ctx->addQuaternionFromAxisAndAngle(axis, 90.);
     }
-    else if(!strcmp(str, "x")){ // X pointing out or into the screen
+    else if(!strcmp(str, "x")){
+      // set X-axis pointing out or into (shift) the screen
       if(!Fl::event_state(FL_SHIFT)){
         ctx->r[0] = -90.; ctx->r[1] = 0.; ctx->r[2] = -90.;
       }
@@ -127,7 +137,8 @@ void status_xyz1p_cb(Fl_Widget *w, void *data)
       }
       ctx->setQuaternionFromEulerAngles();
     }
-    else if(!strcmp(str, "y")){ // Y pointing out or into the screen
+    else if(!strcmp(str, "y")){
+      // set Y-axis pointing out or into (shift) the screen
       if(!Fl::event_state(FL_SHIFT)){
         ctx->r[0] = -90.; ctx->r[1] = 0.; ctx->r[2] = 180.;
       }
@@ -136,7 +147,8 @@ void status_xyz1p_cb(Fl_Widget *w, void *data)
       }
       ctx->setQuaternionFromEulerAngles();
     }
-    else if(!strcmp(str, "z")){ // Z pointing out or into the screen
+    else if(!strcmp(str, "z")){ 
+      // set Z-axis pointing out or into (shift) the screen
       if(!Fl::event_state(FL_SHIFT)){
         ctx->r[0] = 0.; ctx->r[1] = 0.; ctx->r[2] = 0.;
       }
@@ -145,11 +157,25 @@ void status_xyz1p_cb(Fl_Widget *w, void *data)
       }
       ctx->setQuaternionFromEulerAngles();
     }
-    else if(!strcmp(str, "1:1")){ // reset translation and scaling
-      ctx->t[0] = ctx->t[1] = ctx->t[2] = 0.;
-      ctx->s[0] = ctx->s[1] = ctx->s[2] = 1.;
+    else if(!strcmp(str, "1:1")){
+      // reset translation and scaling, or sync translation and
+      // scaling with the first window (alt)
+      if(Fl::event_state(FL_ALT)){
+        if(i != 0){
+          drawContext *ctx0 = gls[0]->getDrawContext();
+          for(int j = 0; j < 3; j++){
+            ctx->t[j] = ctx0->t[j];
+            ctx->s[j] = ctx0->s[j];
+          }
+        }
+      }
+      else{
+        ctx->t[0] = ctx->t[1] = ctx->t[2] = 0.;
+        ctx->s[0] = ctx->s[1] = ctx->s[2] = 1.;
+      }
     }
-    else if(!strcmp(str, "reset")){ // reset everything
+    else if(!strcmp(str, "reset")){ 
+      // reset everything
       ctx->t[0] = ctx->t[1] = ctx->t[2] = 0.;
       ctx->s[0] = ctx->s[1] = ctx->s[2] = 1.;
       ctx->r[0] = ctx->r[1] = ctx->r[2] = 0.;
@@ -360,11 +386,11 @@ graphicWindow::graphicWindow(bool main, int numTiles)
   x += sw;  
   butt[4] = new Fl_Button(x, glheight + 2, sw, sht, "@-1gmsh_rotate");
   butt[4]->callback(status_xyz1p_cb, (void *)"r");
-  butt[4]->tooltip("Rotate +90 or -90 degrees");
+  butt[4]->tooltip("Rotate +90 or -90 (Shift) degrees, or sync rotations (Alt)");
   x += sw;  
   butt[3] = new Fl_Button(x, glheight + 2, 2 * FL_NORMAL_SIZE, sht, "1:1");
   butt[3]->callback(status_xyz1p_cb, (void *)"1:1");
-  butt[3]->tooltip("Set unit scale");
+  butt[3]->tooltip("Set unit scale, or sync scale (Alt)");
   x += 2 * FL_NORMAL_SIZE;  
   butt[8] = new Fl_Button(x, glheight + 2, sw, sht, "@-1gmsh_ortho");
   butt[8]->callback(status_options_cb, (void *)"p");
diff --git a/doc/TODO.txt b/doc/TODO.txt
index d46d1dbe9ff0717c214d967df3ef9b49a662ddee..19ea4e51ba64bb1071f99310c65084bfb449b125 100644
--- a/doc/TODO.txt
+++ b/doc/TODO.txt
@@ -1,4 +1,9 @@
-$Id: TODO.txt,v 1.17 2009-02-05 06:47:19 geuzaine Exp $
+$Id: TODO.txt,v 1.18 2009-03-01 18:27:01 geuzaine Exp $
+
+********************************************************************
+
+Store Octree in PViewDataList and modify OctreePost to use it (the
+same way PViewDataGModel uses the Octree stored in GModel)
 
 ********************************************************************