diff --git a/Fltk/GUI_Projection.cpp b/Fltk/GUI_Projection.cpp
index 9ec590d14ce260ff4d53f3e475efdffab73d5a31..ab71c64ef1fa297054412b6793285e7176cfa107 100644
--- a/Fltk/GUI_Projection.cpp
+++ b/Fltk/GUI_Projection.cpp
@@ -148,7 +148,7 @@ projectionEditor::projectionEditor(std::vector<FProjectionFace*> &faces)
 {
   // construct GUI in terms of standard sizes
   const int BH = 2 * GetFontSize() + 1, BB = 7 * GetFontSize(), WB = 7;
-  const int width = (int)(3.5 * BB), height = 18 * BH;
+  const int width = (int)(3.5 * BB), height = 22 * BH;
   
   // create all widgets (we construct this once, we never deallocate!)
   _window = new Dialog_Window(width, height, "Reparameterize");
@@ -189,9 +189,33 @@ projectionEditor::projectionEditor(std::vector<FProjectionFace*> &faces)
 		      width - 3 * WB - brw, 5 * BH, BB, BH, this));
   }
   
+  int hard = 8;
+  new Fl_Toggle_Button(WB, 3 * WB + 8 * BH + hard, 
+		       hard, height - 5 * WB - 12 * BH - 2 * hard);
+  new Fl_Toggle_Button(width - WB - hard, 3 * WB + 8 * BH + hard, 
+		       hard, height - 5 * WB - 12 * BH - 2 * hard);
+  new Fl_Toggle_Button(WB + hard, 3 * WB + 8 * BH, 
+		       width - 2 * WB - 2 * hard, hard);
+  new Fl_Toggle_Button(WB + hard, 3 * WB + 8 * BH + height - 5 * WB - 12 * BH - hard,
+		       width - 2 * WB - 2 * hard, hard);
+
   _uvPlot = 
-    new uvPlot(WB, 3 * WB + 8 * BH, width - 2 * WB, height - 5 * WB - 9 * BH);
+    new uvPlot(WB + hard, 3 * WB + 8 * BH + hard, 
+	       width - 2 * WB - 2 * hard, height - 5 * WB - 12 * BH - 2 * hard);
   _uvPlot->end();
+  
+  modes[0] = new Fl_Value_Input(WB, height - WB - 4 * BH, BB  / 2, BH);
+  modes[1] = new Fl_Value_Input(WB + BB / 2, height - WB - 4 * BH, BB  / 2, BH, 
+				"Fourier modes along u and v");
+  modes[2] = new Fl_Value_Input(WB, height - WB - 3 * BH, BB  / 2, BH);
+  modes[3] = new Fl_Value_Input(WB + BB / 2, height - WB - 3 * BH, BB  / 2, BH, 
+				"Chebychev modes along u and v");
+  for(int i = 0; i < 4; i++){
+    modes[i]->maximum(128);
+    modes[i]->minimum(1);
+    modes[i]->step(1);
+    modes[i]->align(FL_ALIGN_RIGHT);
+  }    
 
   Fl_Button *b3 = new Fl_Button(width - 2 * WB - 2 * BB, height - WB - BH, 
 				BB, BH, "Compute");
@@ -448,6 +472,7 @@ void compute_cb(Fl_Widget *w, void *data)
 		    (ve->z() - p[2]) * n[2]);
       }
     }
+    // get options: e->modes[i]->value()
     Patch* patch = new FPatch(0,ps,u,v,f,3);
     patch->SetMinU(0.0);
     patch->SetMaxU(0.5);
diff --git a/Fltk/GUI_Projection.h b/Fltk/GUI_Projection.h
index 436f0ed5efcc391cd90a646164773b0db1279691..ac1366e453c70c239a07f73ea967e6e9cb6a8abc 100644
--- a/Fltk/GUI_Projection.h
+++ b/Fltk/GUI_Projection.h
@@ -70,6 +70,7 @@ class projectionEditor {
   projectionEditor(std::vector<FProjectionFace*> &faces);
   void show(){ _window->show(); select_cb(0, this); }
   uvPlot *uv() { return _uvPlot; }
+  Fl_Value_Input* modes[4];
   std::vector<MElement*> &getElements() { return _elements; }
   std::vector<GEntity*> &getEntities() { return _entities; }
   std::vector<projection*> &getProjections() { return _projections; }