diff --git a/utils/solvers/c++/pend.cpp b/utils/solvers/c++/pend.cpp
index e0be4e691eb58bc68e5e785793074f1b129282f4..4e51952198c9156b84031dc5d5034d176fb4c462 100644
--- a/utils/solvers/c++/pend.cpp
+++ b/utils/solvers/c++/pend.cpp
@@ -40,13 +40,12 @@ void exportIter(int iter, double t, double x1, double y1, double x2, double y2)
 }
 
 double defineNumber(onelab::client *c, const std::string &name, double value,
-                    const std::string &label,
                     const std::map<std::string, std::string> &attributes)
 {
   std::vector<onelab::number> ns;
   c->get(ns, name);
   if(ns.empty()){ // define new parameter
-    onelab::number n(name, value, label);
+    onelab::number n(name, value);
     if(attributes.size()) n.setAttributes(attributes);
     c->set(n);
     return value;
@@ -101,14 +100,14 @@ int main(int argc, char **argv)
 
   std::map<std::string, std::string> attr;
 
-  double l = defineNumber(c, "Geom/Length", 1.0, "Arm length [m]", attr);
-  double time = defineNumber(c, "Dyna/time", 0., "time [s]", attr);
-  double dt = defineNumber(c, "Dyna/dt", 0.001, "time step [s]", attr);
-  double tmax = defineNumber(c, "Dyna/tmax", 20, "max time [s]", attr);
-  double refresh = defineNumber(c, "Dyna/refresh", 0.05, "refresh interval [s]", attr);
+  double l = defineNumber(c, "Geom/arm length [m]", 1.0, attr);
+  double time = defineNumber(c, "Dyna/time [s]", 0., attr);
+  double dt = defineNumber(c, "Dyna/time step [s]", 0.001, attr);
+  double tmax = defineNumber(c, "Dyna/max time [s]", 20, attr);
+  double refresh = defineNumber(c, "Dyna/refresh interval [s]", 0.05, attr);
   attr["Highlight"] = "Pink";
-  double theta0 = defineNumber(c, "Init/theta", 10, "Initial theta angle [deg]", attr);
-  double phi0 = defineNumber(c, "Init/phi", 180, "Initial phi angle [deg]", attr);
+  double theta0 = defineNumber(c, "Init/initial theta angle [deg]", 10, attr);
+  double phi0 = defineNumber(c, "Init/initial phi angle [deg]", 180, attr);
 
   // we're done if we are not in the compute phase
   if(action != "compute"){
@@ -163,15 +162,15 @@ int main(int argc, char **argv)
     if(refr >= refresh){
       refr = 0;
       setNumber(c, name + "/Progress", time, 0, tmax, false);
-      setNumber(c, "Dyna/time", time);
+      setNumber(c, "Dyna/time [s]", time);
       setNumber(c, "Solu/phi", phi);
       addNumberChoice(c, "Solu/phi", phi);
       setNumber(c, "Solu/theta",  theta);
       addNumberChoice(c, "Solu/theta", theta);
-      setNumber(c, "Solu/phi_dot", phi_dot);
-      addNumberChoice(c, "Solu/phi_dot", phi_dot);
-      setNumber(c, "Solu/theta_dot", theta_dot);
-      addNumberChoice(c, "Solu/theta_dot", theta_dot);
+      setNumber(c, "Solu/phi dot", phi_dot);
+      addNumberChoice(c, "Solu/phi dot", phi_dot);
+      setNumber(c, "Solu/theta dot", theta_dot);
+      addNumberChoice(c, "Solu/theta dot", theta_dot);
 
       // ask Gmsh to refresh
       onelab::string s("Gmsh/Action", "refresh");
diff --git a/utils/solvers/python/pend.py b/utils/solvers/python/pend.py
index 15ac4b2a37e17997e0f19e7a0e8557a75b9fd01d..7ce01c88ea5f18dab0784f8c87f3c67b78d9eece 100755
--- a/utils/solvers/python/pend.py
+++ b/utils/solvers/python/pend.py
@@ -7,9 +7,6 @@
 import onelab
 import math, os
 
-# import sys
-# sys.stderr = open('ErrorLog.txt', 'wt')
-
 def exportMsh(le1,le2):
    mshFile = open(onelab.path(__file__, "pend.msh"),'w')
    mshFile.write('$MeshFormat\n2.2 0 8\n$EndMeshFormat\n')
@@ -32,23 +29,23 @@ def exportIter(iter,t,x1,y1,x2,y2):
    mshFile.write('\t3\n\t1 0 0 0\n\t2 %f %f 0\n\t3 %f %f 0\n$EndNodeData\n' %(x1,y1,x2,y2))
    mshFile.close()
 
-OL = onelab.client()
+c = onelab.client()
 
 g = 9.8	# acceleration of gravity
 m = 0.3 # mass of pendulum balls
 
-l = OL.defineNumber('Geom/Length', value=1.0, label='Arm length [m]')
-time = OL.defineNumber('Dyna/time', value=0.0, label='time [s]')
-dt = OL.defineNumber('Dyna/dt', value=0.001, label='time step [s]')
-tmax = OL.defineNumber('Dyna/tmax', value=20, label='max time [s]')
-refresh = OL.defineNumber('Dyna/refresh', value=0.05, label='refresh interval [s]')
-theta0 = OL.defineNumber('Init/theta', value=10, label='Initial theta angle [deg]', 
+l = c.defineNumber('Geom/arm length [m]', value=1.0)
+time = c.defineNumber('Dyna/time [s]', value=0.0)
+dt = c.defineNumber('Dyna/time step [s]', value=0.001)
+tmax = c.defineNumber('Dyna/max time [s]', value=20)
+refresh = c.defineNumber('Dyna/refresh interval [s]', value=0.05)
+theta0 = c.defineNumber('Init/initial theta angle [deg]', value=10, 
                          attributes={'Highlight':'Pink'})
-phi0 = OL.defineNumber('Init/phi', value=180, label='Initial phi angle [deg]',
+phi0 = c.defineNumber('Init/initial phi angle [deg]', value=180,
                        attributes={'Highlight':'Pink'})
 
 # we're done if we are in the "check" phase
-if OL.action == 'check' :
+if c.action == 'check' :
    exit(0)
 
 l1 = l;
@@ -97,46 +94,27 @@ while (time < tmax):
 
    if refr >= refresh:
       refr = 0
-      OL.setNumber(OL.name + '/Progress', value=time, min=0, max=tmax, visible=0)
-      OL.setNumber('Dyna/time', value=time)
-      OL.setNumber('Solu/phi', value=phi)
-      OL.addNumberChoice('Solu/phi', phi)
-      OL.setNumber('Solu/theta', value=theta)
-      OL.addNumberChoice('Solu/theta', theta)
-      OL.setNumber('Solu/phi_dot', value=phi_dot)
-      OL.addNumberChoice('Solu/phi_dot', phi_dot)
-      OL.setNumber('Solu/theta_dot', value=theta_dot)
-      OL.addNumberChoice('Solu/theta_dot', theta_dot)
+      c.setNumber(c.name + '/Progress', value=time, min=0, max=tmax, visible=0)
+      c.setNumber('Dyna/time [s]', value=time)
+      c.setNumber('Solu/phi', value=phi)
+      c.addNumberChoice('Solu/phi', phi)
+      c.setNumber('Solu/theta', value=theta)
+      c.addNumberChoice('Solu/theta', theta)
+      c.setNumber('Solu/phi dot', value=phi_dot)
+      c.addNumberChoice('Solu/phi dot', phi_dot)
+      c.setNumber('Solu/theta dot', value=theta_dot)
+      c.addNumberChoice('Solu/theta dot', theta_dot)
 
       # ask Gmsh to refresh
-      OL.setString('Gmsh/Action', value='refresh')
+      c.setString('Gmsh/Action', value='refresh')
 
       # stop if we are asked to (by Gmsh)
-      if(OL.getString(OL.name + '/Action') == 'stop'):
+      if(c.getString(c.name + '/Action') == 'stop'):
          break;
 
       exportMsh(l1, l2)
       exportIter(iter, time, x1, y1+l1, x2, y2+l1+l2)
-      OL.mergeFile(onelab.path(__file__, 'pend.msh'))
+      c.mergeFile(onelab.path(__file__, 'pend.msh'))
       iter += 1
 
-OL.setNumber(OL.name + '/Progress', value=0)
-
-# comment the following lines out if you do not have gnuplot on your system
-# OL.preProcess(onelab.path(__file__,'pend.plt.ol'))
-# os.system('gnuplot pend.plt')
-
-# run a subclient
-# OL.run('subclient', './sub.py','')
-
-# A = OL.defineNumber('A', value=10)
-# B = OL.defineNumber('Group/B', value=0, min = -10, max = 10, step = 1)
-# C = OL.defineNumber('Group/C', value=2, choices = [0, 1, 2, 3], 
-#                     attributes={'Highlight':'Pink'})
-# D = OL.defineNumber('Group/D', value=3, labels = {0:'zero', 1:'un', 2:'deux', 
-#                     3:'trois'}, attributes={'Highlight':'Blue'})
-
-# UTF-8 is allowed everywhere (should be prefixed by 'u' in python 2, not 
-# required in python 3)
-# Omega = OL.getString(u'Ω', u'∫(∂φ/∂α)³dx', help=u'ask someone@universe.org',
-#                      choices = ['oui', 'non', u'peut-être'])
+c.setNumber(c.name + '/Progress', value=0)