diff --git a/Fltk/contextWindow.cpp b/Fltk/contextWindow.cpp
index 836bb882c8dff40c14c912790a8fdaabb99ecf9a..784f656024055055cb015dcfb93257adaad4a7a9 100644
--- a/Fltk/contextWindow.cpp
+++ b/Fltk/contextWindow.cpp
@@ -90,6 +90,10 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       input[3]->value("0");
       input[4] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate");
       input[4]->value("0");
+      for(int i = 0; i < 3; i++)
+        _butt[i] = new Fl_Check_Button
+          (width - 2 * WB - IW, 2 * WB + (i+1) * BH, IW, BH, "Freeze");
+
       input[5] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
                               "Prescribed mesh element size at point");
       input[5]->value("1.0");
@@ -203,6 +207,23 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
   FL_NORMAL_SIZE += deltaFontSize;
 }
 
+bool elementaryContextWindow::frozenPointCoord(int coord)
+{
+  if(coord < 0 || coord > 2) return false;
+  return _butt[coord]->value() ? true : false;
+}
+
+void elementaryContextWindow::updatePoint(double pt[3])
+{
+  for(int i = 0; i < 3; i++){
+    if(!frozenPointCoord(i)){
+      char str[32];
+      sprintf(str, "%g", pt[i]);
+      input[2 + i]->value(str);
+    }
+  }
+}
+
 void elementaryContextWindow::show(int pane)
 {
   for(int i = 0; i < 6; i++)
diff --git a/Fltk/contextWindow.h b/Fltk/contextWindow.h
index 25777d054d8a8aed12824ea51e82caafdcc22a69..d72cdd572dc276d8ff0195f605048f6081da62de 100644
--- a/Fltk/contextWindow.h
+++ b/Fltk/contextWindow.h
@@ -20,9 +20,12 @@ class elementaryContextWindow{
   Fl_Input *input[30];
   Fl_Value_Input *value[10];
   Fl_Group *group[10];
+  Fl_Check_Button *_butt[3];
  public:
   elementaryContextWindow(int deltaFontSize=0);
   void show(int pane);
+  void updatePoint(double pt[3]);
+  bool frozenPointCoord(int coord);
 };
 
 class physicalContextWindow{
diff --git a/Fltk/openglWindow.cpp b/Fltk/openglWindow.cpp
index 9bb13c10cd0334a7c4e33e253cf42724804260c8..baf3730f8ddc5428087b47ef734aa49c5838448d 100644
--- a/Fltk/openglWindow.cpp
+++ b/Fltk/openglWindow.cpp
@@ -625,22 +625,18 @@ int openglWindow::handle(int event)
                      CTX::instance()->cg[2] - p[2]}, t;
       prosca(r, d, &t);
       for(int i = 0; i < 3; i++){
-        _point[i] = p[i] + t * d[i];
-        if(CTX::instance()->geom.snap[i]){
-          double d = _point[i] / CTX::instance()->geom.snap[i];
-          double f = floor(d);
-          double c = ceil(d);
-          double n = (d - f < c - d) ? f : c;
-          _point[i] = n * CTX::instance()->geom.snap[i];
+        if(!FlGui::instance()->elementaryContext->frozenPointCoord(i)){
+          _point[i] = p[i] + t * d[i];
+          if(CTX::instance()->geom.snap[i]){
+            double d = _point[i] / CTX::instance()->geom.snap[i];
+            double f = floor(d);
+            double c = ceil(d);
+            double n = (d - f < c - d) ? f : c;
+            _point[i] = n * CTX::instance()->geom.snap[i];
+          }
         }
       }
-      char str[32];
-      sprintf(str, "%g", _point[0]);
-      FlGui::instance()->elementaryContext->input[2]->value(str);
-      sprintf(str, "%g", _point[1]);
-      FlGui::instance()->elementaryContext->input[3]->value(str);
-      sprintf(str, "%g", _point[2]);
-      FlGui::instance()->elementaryContext->input[4]->value(str);
+      FlGui::instance()->elementaryContext->updatePoint(_point);
       redraw();
     }
     else{ // hover mode