diff --git a/Fltk/GUI_Projection.cpp b/Fltk/GUI_Projection.cpp
index 0eeb9248807c524d3fb6841eeee6ab10f416c7eb..d6766ef6ebb378a84b5f63c560a80c1bef8097dd 100644
--- a/Fltk/GUI_Projection.cpp
+++ b/Fltk/GUI_Projection.cpp
@@ -16,8 +16,11 @@ void uvPlot::draw()
   // draw points
   fl_color(FL_BLACK);
   if(_u.size() != _v.size()) return;
-  for(unsigned int i = 0; i < _u.size(); i++)
-    fl_rect(_u[i] * w(), _v[i] * h(), 3, 3);
+  for(unsigned int i = 0; i < _u.size(); i++){
+    int x = (int)(_u[i] * w());
+    int y = (int)(_v[i] * h());
+    fl_rect(x, y, 3, 3);
+  }
 
   fl_font(FL_HELVETICA, 14);
   fl_draw("Hello", w() / 2, h() / 2);
@@ -28,18 +31,18 @@ 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 = 3.5 * BB, height = 18 * BH;
+  const int width = (int)(3.5 * BB), height = 18 * BH;
   
   // create all widgets (we construct this once, we never deallocate!)
   _window = new Dialog_Window(width, height, "Reparameterize");
   
-  new Fl_Box(WB, WB + BH, 0.5 * BB, BH, "Select:");
+  new Fl_Box(WB, WB + BH, BB / 2, BH, "Select:");
 
   Fl_Group *o = new Fl_Group(WB, WB, 2 * BB, 3 * BH);
-  _select[0] = new Fl_Round_Button(2 * WB + 0.5 * BB, WB, BB, BH, "Points");
+  _select[0] = new Fl_Round_Button(2 * WB + BB / 2, WB, BB, BH, "Points");
   _select[0]->value(1);
-  _select[1] = new Fl_Round_Button(2 * WB + 0.5 * BB, WB + BH, BB, BH, "Elements");
-  _select[2] = new Fl_Round_Button(2 * WB + 0.5 * BB, WB + 2 * BH, BB, BH, "Surfaces");
+  _select[1] = new Fl_Round_Button(2 * WB + BB / 2, WB + BH, BB, BH, "Elements");
+  _select[2] = new Fl_Round_Button(2 * WB + BB / 2, WB + 2 * BH, BB, BH, "Surfaces");
   for(int i = 0; i < 3; i++){
     _select[i]->callback(select_cb, this);
     _select[i]->type(FL_RADIO_BUTTON);
@@ -47,28 +50,26 @@ projectionEditor::projectionEditor(std::vector<FProjectionFace*> &faces)
   o->end();
   
   Fl_Toggle_Button *b1 = 
-    new Fl_Toggle_Button(width - WB - 1.5 * BB, WB, 1.5 * BB, BH, "Hide unselected");
+    new Fl_Toggle_Button(width - WB - (int)(1.5 * BB), WB, (int)(1.5 * BB), BH, "Hide unselected");
   b1->callback(hide_cb);
 
   Fl_Button *b2 = 
-    new Fl_Button(width - WB - 1.5 * BB, WB + BH, 1.5 * BB, BH, "Save selection");
+    new Fl_Button(width - WB - (int)(1.5 * BB), WB + BH, (int)(1.5 * BB), BH, "Save selection");
   b2->callback(save_cb, this);
 
   _browser = new Fl_Hold_Browser(WB, 2 * WB + 3 * BH, BB, 5 * BH);
   _browser->callback(browse_cb, this);
   for(unsigned int i = 0; i < _faces.size(); i++){
-    _browser->add("test");
+    ProjectionSurface *ps = _faces[i]->GetProjectionSurface();
+    _browser->add(ps->GetName().c_str());
   }
 
   Fl_Scroll *s = new Fl_Scroll(2 * WB + BB, 2 * WB + 3 * BH, width - 3 * WB - BB, 5 * BH);
-  for(int i = 0; i < 20; i++){
+  for(int i = 0; i < MAX_PROJECTION_PARAMETERS; i++){
     _input[i] = new Fl_Value_Input(2 * WB + BB, 2 * WB + (i + 3) * BH, BB, BH);
     _input[i]->align(FL_ALIGN_RIGHT);
     _input[i]->callback(update_cb, this);
-    _input[i]->minimum(0.);
-    _input[i]->maximum(1.);
-    _input[i]->step(0.01);
-    //_input[i]->hide();
+    _input[i]->hide();
   }
   s->end();
 
@@ -86,7 +87,7 @@ projectionEditor::projectionEditor(std::vector<FProjectionFace*> &faces)
   _window->end();
   _window->hotspot(_window);
   _window->resizable(_uvPlot);
-  _window->size_range(width, 0.75 * height);
+  _window->size_range(width, (int)(0.75 * height));
 }
 
 int projectionEditor::getSelectionMode() 
@@ -98,16 +99,62 @@ int projectionEditor::getSelectionMode()
   return ENT_ALL;
 }
 
+FProjectionFace *projectionEditor::getCurrentProjectionFace()
+{
+  for(int i = 1; i <= _browser->size(); i++)
+    if(_browser->selected(i)) return _faces[i - 1];
+  return 0;
+}
+
+Fl_Value_Input *projectionEditor::getValueInput(int i)
+{
+  if(i < 0 || i > MAX_PROJECTION_PARAMETERS - 1) return 0;
+  return _input[i];
+}
+
 void browse_cb(Fl_Widget *w, void *data)
 {
   projectionEditor *e = (projectionEditor*)data;
   SBoundingBox3d bounds = GMODEL->bounds();
 
-  // change active projection face 
-  //e->face()->setVisibility(true);
-
-  // set and show parameters accordingly
+  std::vector<FProjectionFace*> &faces(e->getProjectionFaces());
+  for(unsigned int i = 0; i < faces.size(); i++)
+    faces[i]->setVisibility(false);
 
+  for(int i = 0; i < MAX_PROJECTION_PARAMETERS; i++)  
+    e->getValueInput(i)->hide();
+
+  FProjectionFace *f = e->getCurrentProjectionFace();
+  if(f){
+    f->setVisibility(true);
+    ProjectionSurface *ps = f->GetProjectionSurface();
+    for(int i = 0; i < 9; i++){
+      e->getValueInput(i)->show();
+      if(i < 3){ // scaling
+	e->getValueInput(i)->maximum(CTX.lc * 10.);
+	e->getValueInput(i)->minimum(CTX.lc / 100.);
+	e->getValueInput(i)->step(CTX.lc / 100.);
+	e->getValueInput(i)->label((i == 0) ? "X scale" : (i == 1) ? "Y scale" : "Z scale");
+	e->getValueInput(i)->value(1.); // FIXME
+      }
+      else if(i < 6){ //rotation
+	e->getValueInput(i)->maximum(-180.);
+	e->getValueInput(i)->minimum(180.);
+	e->getValueInput(i)->step(0.1);
+      }
+      else{ // translation
+	e->getValueInput(i)->maximum(bounds.max()[i] + CTX.lc);
+	e->getValueInput(i)->minimum(bounds.min()[i] - CTX.lc);
+	e->getValueInput(i)->step(CTX.lc / 100.);
+      }
+    }
+    for(int i = 9; i < 9 + ps->GetNumParameters(); i++){
+      e->getValueInput(i)->show();
+      e->getValueInput(i)->label("My nice label");
+      e->getValueInput(i)->value(ps->GetParameter(i - 9));
+    }
+  }
+  Draw();
 }
 
 void update_cb(Fl_Widget *w, void *data)
@@ -115,6 +162,22 @@ void update_cb(Fl_Widget *w, void *data)
   projectionEditor *e = (projectionEditor*)data;
 
   // get all parameters from GUI and modify projection surface accordingly
+  FProjectionFace *f = e->getCurrentProjectionFace();
+  if(f){
+    ProjectionSurface *ps = f->GetProjectionSurface();
+    ps->Rescale(e->getValueInput(0)->value(),
+		e->getValueInput(1)->value(),
+		e->getValueInput(2)->value());
+    ps->Rotate(e->getValueInput(3)->value(),
+	       e->getValueInput(4)->value(),
+	       e->getValueInput(5)->value());
+    ps->Translate(e->getValueInput(6)->value(),
+		  e->getValueInput(7)->value(),
+		  e->getValueInput(8)->value());
+    for(int i = 9; i < 9 + ps->GetNumParameters(); i++)
+      ps->SetParameter(i - 9, e->getValueInput(i)->value());
+    Draw();
+  }
 
   // project all selected points and update u,v display
   std::vector<double> u, v;
diff --git a/Fltk/GUI_Projection.h b/Fltk/GUI_Projection.h
index 19dec1b44efdb29dbb2d4eba8563e1163cc33f46..d00f66debed72761fbbd86d276b75949f4c3d989 100644
--- a/Fltk/GUI_Projection.h
+++ b/Fltk/GUI_Projection.h
@@ -13,6 +13,8 @@
 #include <FL/Fl_Toggle_Button.H>
 #include <FL/Fl_Round_Button.H>
 
+#define MAX_PROJECTION_PARAMETERS 20
+
 void select_cb(Fl_Widget *w, void *data);
 void browse_cb(Fl_Widget *w, void *data);
 void update_cb(Fl_Widget *w, void *data);
@@ -36,7 +38,7 @@ class projectionEditor {
   std::vector<MElement*> _elements;
   std::vector<GEntity*> _entities;
   Fl_Window *_window;
-  Fl_Value_Input *_input[20];
+  Fl_Value_Input *_input[MAX_PROJECTION_PARAMETERS];
   Fl_Hold_Browser *_browser;
   Fl_Round_Button *_select[3];
   uvPlot *_uvPlot;
@@ -47,7 +49,9 @@ class projectionEditor {
   std::vector<MElement*> &getElements() { return _elements; }
   std::vector<GEntity*> &getEntities() { return _entities; }
   std::vector<FProjectionFace*> &getProjectionFaces() { return _faces; }
+  FProjectionFace *getCurrentProjectionFace();
   int getSelectionMode();
+  Fl_Value_Input *getValueInput(int i);
 };
 
 #endif