diff --git a/Fltk/contextWindow.cpp b/Fltk/contextWindow.cpp
index b5e713e6193e5d38a3ffabad8015b0bebbd1c24b..ece8e5659b19778e86a8ae3296f51ba4a615a9a2 100644
--- a/Fltk/contextWindow.cpp
+++ b/Fltk/contextWindow.cpp
@@ -55,6 +55,67 @@ static void elementary_add_circle_cb(Fl_Widget *w, void *data)
   drawContext::global()->draw();
 }
 
+static void elementary_add_ellipse_cb(Fl_Widget *w, void *data)
+{
+  add_ellipse(GModel::current()->getFileName(),
+              FlGui::instance()->elementaryContext->input[14]->value(),
+              FlGui::instance()->elementaryContext->input[15]->value(),
+              FlGui::instance()->elementaryContext->input[16]->value(),
+              FlGui::instance()->elementaryContext->input[17]->value(),
+              FlGui::instance()->elementaryContext->input[18]->value(),
+              FlGui::instance()->elementaryContext->input[19]->value(),
+              FlGui::instance()->elementaryContext->input[20]->value());
+  FlGui::instance()->resetVisibility();
+  GModel::current()->setSelection(0);
+  SetBoundingBox();
+  drawContext::global()->draw();
+}
+
+static void elementary_add_disk_cb(Fl_Widget *w, void *data)
+{
+  add_disk(GModel::current()->getFileName(),
+           FlGui::instance()->elementaryContext->input[21]->value(),
+           FlGui::instance()->elementaryContext->input[22]->value(),
+           FlGui::instance()->elementaryContext->input[23]->value(),
+           FlGui::instance()->elementaryContext->input[24]->value(),
+           FlGui::instance()->elementaryContext->input[25]->value());
+  FlGui::instance()->resetVisibility();
+  GModel::current()->setSelection(0);
+  SetBoundingBox();
+  drawContext::global()->draw();
+}
+
+static void elementary_add_rectangle_cb(Fl_Widget *w, void *data)
+{
+  add_rectangle(GModel::current()->getFileName(),
+                FlGui::instance()->elementaryContext->input[26]->value(),
+                FlGui::instance()->elementaryContext->input[27]->value(),
+                FlGui::instance()->elementaryContext->input[28]->value(),
+                FlGui::instance()->elementaryContext->input[29]->value(),
+                FlGui::instance()->elementaryContext->input[30]->value(),
+                FlGui::instance()->elementaryContext->input[31]->value());
+  FlGui::instance()->resetVisibility();
+  GModel::current()->setSelection(0);
+  SetBoundingBox();
+  drawContext::global()->draw();
+}
+
+static void elementary_add_sphere_cb(Fl_Widget *w, void *data)
+{
+  add_sphere(GModel::current()->getFileName(),
+             FlGui::instance()->elementaryContext->input[32]->value(),
+             FlGui::instance()->elementaryContext->input[33]->value(),
+             FlGui::instance()->elementaryContext->input[34]->value(),
+             FlGui::instance()->elementaryContext->input[35]->value(),
+             FlGui::instance()->elementaryContext->input[36]->value(),
+             FlGui::instance()->elementaryContext->input[37]->value(),
+             FlGui::instance()->elementaryContext->input[38]->value());
+  FlGui::instance()->resetVisibility();
+  GModel::current()->setSelection(0);
+  SetBoundingBox();
+  drawContext::global()->draw();
+}
+
 static void elementary_switch_tabs_cb(Fl_Widget *w, void *data)
 {
   if(FlGui::instance()->elementaryContext->tab1->visible()){
@@ -79,7 +140,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
   FL_NORMAL_SIZE -= deltaFontSize;
 
   int width = 31 * FL_NORMAL_SIZE;
-  int height = 4 * WB + 8 * BH;
+  int height = 4 * WB + 9 * BH;
 
   win = new paletteWindow(width, height, CTX::instance()->nonModalWindows ? true : false,
                           "Elementary Entity Context");
@@ -101,7 +162,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       for(int i = 0; i < 4; i++)   input[i]->align(FL_ALIGN_RIGHT);
       {
         Fl_Return_Button *o = new Fl_Return_Button
-          (width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
         o->callback(elementary_add_parameter_cb);
       }
       group[0]->end();
@@ -136,7 +197,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       }
       {
         Fl_Return_Button *o = new Fl_Return_Button
-          (width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
         o->callback(elementary_add_point_cb);
       }
       group[1]->end();
@@ -161,7 +222,7 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
         input[i]->align(FL_ALIGN_RIGHT);
       {
         Fl_Return_Button *o = new Fl_Return_Button
-          (width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
         o->callback(elementary_add_circle_cb);
       }
       group[2]->end();
@@ -186,6 +247,11 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       input[20]->value("");
       for(int i = 14; i < 21; i++)
         input[i]->align(FL_ALIGN_RIGHT);
+      {
+        Fl_Return_Button *o = new Fl_Return_Button
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
+        o->callback(elementary_add_ellipse_cb);
+      }
       group[3]->end();
     }
     // 4: Disk
@@ -200,10 +266,15 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       input[23]->value("0");
       input[24] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "X radius");
       input[24]->value("1");
-      input[25] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Y radius");
+      input[25] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Y radius");
       input[25]->value("0.5");
       for(int i = 21; i < 26; i++)
         input[i]->align(FL_ALIGN_RIGHT);
+      {
+        Fl_Return_Button *o = new Fl_Return_Button
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
+        o->callback(elementary_add_disk_cb);
+      }
       group[4]->end();
     }
     // 5: Rectangle
@@ -216,14 +287,19 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
       input[27]->value("0");
       input[28] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Bottom left Z coordinate");
       input[28]->value("0");
-      input[29] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Width");
+      input[29] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Width");
       input[29]->value("1");
-      input[30] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Height");
+      input[30] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Height");
       input[30]->value("0.5");
-      input[31] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Rounded radius");
+      input[31] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Rounded radius");
       input[31]->value("");
       for(int i = 26; i < 32; i++)
         input[i]->align(FL_ALIGN_RIGHT);
+      {
+        Fl_Return_Button *o = new Fl_Return_Button
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
+        o->callback(elementary_add_rectangle_cb);
+      }
       group[5]->end();
     }
     tab1->end();
@@ -234,6 +310,27 @@ elementaryContextWindow::elementaryContextWindow(int deltaFontSize)
     {
       group[6] = new Fl_Group
         (WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Sphere");
+      input[32] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Center X coordinate");
+      input[32]->value("0");
+      input[33] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Center Y coordinate");
+      input[33]->value("0");
+      input[34] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Center Z coordinate");
+      input[34]->value("0");
+      input[35] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Radius");
+      input[35]->value("1");
+      input[36] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Angle 1");
+      input[36]->value("");
+      input[37] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Angle 2");
+      input[37]->value("");
+      input[38] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle 3");
+      input[38]->value("");
+      for(int i = 32; i < 39; i++)
+        input[i]->align(FL_ALIGN_RIGHT);
+      {
+        Fl_Return_Button *o = new Fl_Return_Button
+          (width - BB - 2 * WB, 2 * WB + 8 * BH, BB, BH, "Add");
+        o->callback(elementary_add_sphere_cb);
+      }
       group[6]->end();
     }
     // 7: Cylinder
@@ -298,6 +395,10 @@ void elementaryContextWindow::updatePoint(double pt[3], int which)
       if(which == 1){
         input[4 + i]->value(str);
         input[8 + i]->value(str);
+        input[14 + i]->value(str);
+        input[21 + i]->value(str);
+        input[26 + i]->value(str);
+        input[32 + i]->value(str);
       }
     }
   }
diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index e64d583c09d09218dcfe44f53d4e3dd965902cc3..289a515591a2e8614e9925590317614fb331ef0d 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -709,11 +709,15 @@ static void add_new_point_based_entity(const std::string &what, int pane)
         break;
       case 6:
         add_sphere(GModel::current()->getFileName(),
-                   FlGui::instance()->elementaryContext->input[4]->value(),
-                   FlGui::instance()->elementaryContext->input[5]->value(),
-                   FlGui::instance()->elementaryContext->input[6]->value(),
-                   FlGui::instance()->elementaryContext->input[7]->value(),
-                   "", "", "");
+                   FlGui::instance()->elementaryContext->input[32]->value(),
+                   FlGui::instance()->elementaryContext->input[33]->value(),
+                   FlGui::instance()->elementaryContext->input[34]->value(),
+                   FlGui::instance()->elementaryContext->input[35]->value(),
+                   FlGui::instance()->elementaryContext->input[36]->value(),
+                   FlGui::instance()->elementaryContext->input[37]->value(),
+                   FlGui::instance()->elementaryContext->input[38]->value());
+        break;
+      case 7:
         break;
       }
       FlGui::instance()->resetVisibility();