diff --git a/contrib/arc/highlevel.h b/contrib/arc/highlevel.h
index 3db3f5777b3dcaf1564d358ec8bfaa2c8f27b0d1..1a848828991e7046e8ab0d060198f2fb3ecf7d84 100644
--- a/contrib/arc/highlevel.h
+++ b/contrib/arc/highlevel.h
@@ -21,6 +21,7 @@
 #include "SVector3.h"
 #include "MElement.h"
 #include "MVertex.h"
+#include "functionSpace.h"
 
 
 
@@ -28,6 +29,7 @@ typedef SVector3 Vector;
 class Tensor2{};
 class Tensor4{};
 
+/*
 template<class T> struct TensorialTraits
 {
   typedef T ValType;
@@ -44,14 +46,14 @@ template<> struct TensorialTraits<double>
   static const int nb_basis_vectors=1; // scalaire
 };
 
-/*
-template<> struct TensorialTraits<Vector>
-{
-  typedef Vector ValType;
-  typedef Tensor2 GradType;
-  typedef Tensor3 HessType;
-  static const int nb_basis_vectors=3; // trois vecteurs de base linéairement indépendants.
-};
+
+// template<> struct TensorialTraits<Vector>
+// {
+//   typedef Vector ValType;
+//   typedef Tensor2 GradType;
+//   typedef Tensor3 HessType;
+//   static const int nb_basis_vectors=3; // trois vecteurs de base linéairement indépendants.
+// };
 */
 
 template<class T> class Function  // Fonction au sens EF du terme.
@@ -84,7 +86,7 @@ template<class T> class LagrangeShapeFunction: public Function<T>
 
 
 
-
+/*
 class SpaceBase // renvoie des clefs des dofs
 {
 protected:
@@ -163,6 +165,9 @@ public:
   }
 };
 
+*/
+
+
 template<class T> class Field : public Function<T> // renvoie des valeurs de champ (ff*valeurs dofs), gradient , etc...
 {
 public: 
@@ -217,8 +222,8 @@ template <class Term,class SpaceL,class SpaceR> class FormBilinear : public Form
   void func2(void) { }
   void getDofs(MElement *e) 
   {
-    _spacel->getDofs(e,Dofsl);
-    _spacer->getDofs(e,Dofsr);
+    _spacel->getKeys(e,Dofsl);
+    _spacer->getKeys(e,Dofsr);
   };
   void getFuncs(MElement *e,const double uvw[3]) {};
   void getGradFuncs(MElement *e,const double uvw[3]) {};
diff --git a/contrib/arc/mainElasticity.cpp b/contrib/arc/mainElasticity.cpp
index 99b08ca69a7c04d80e117d95e7f74148c2b2892d..3beaa921c86d9a9324cdf8ceed7dfba56a09fc12 100644
--- a/contrib/arc/mainElasticity.cpp
+++ b/contrib/arc/mainElasticity.cpp
@@ -3,34 +3,63 @@
 #include "PView.h"
 #include "PViewData.h"
 #include "highlevel.h"
+#include "groupOfElements.h"
+#include <iterator>
 int main (int argc, char* argv[])
 {
   
   if (argc != 2){
     printf("usage : elasticity input_file_name\n");
     return -1;
-  } 
+  }
 
-  MElement *e;
-  const double uvw[3]={0.,0.,0.};
-  SpaceLagrange<double> L(123);
-  FormBilinear<TermBilinearMeca,SpaceLagrange<double>,SpaceLagrange<double> > f(L,L);
-  f.func();
-  f.Accumulate(e,uvw);
-
-
-  FormBilinear<TermBilinearMecaNL,SpaceLagrange<double>,SpaceLagrange<double> > fnl(L,L);
-  fnl.func();
-    
-  // globals are still present in Gmsh
-  GmshInitialize(argc, argv);
   
+  GmshInitialize(argc, argv);
+  // globals are still present in Gmsh
+ 
   // instanciate a solver
   elasticitySolver mySolver (1000);
   
   // read some input file
   mySolver.readInputFile(argv[1]);
+
+
+  groupOfElements *g = new groupOfElements (2, 7);
+
+  MElement *e=*(g->begin());
+  std::cout << e->getNumPrimaryVertices() << "vertices" << std::endl;
+  const double uvw[3]={0.,0.,0.};
+  std::vector<Dof> dofs;
+  std::vector<double> vals;
+  std::ostream_iterator< double > output( std::cout, " " );
+  ScalarLagrangeFunctionSpace L(100);
+  std::cout << L.getNumKeys(e) << "fonctions de formes L" << std::endl;
+  L.f(e,0.1,0.1,0,vals);
+  std::copy(vals.begin(),vals.end(),output);
   
+  VectorLagrangeFunctionSpace L1(101,VectorLagrangeFunctionSpace::VECTOR_X);
+  std::cout << L1.getNumKeys(e) << "fonctions de formes L1" << std::endl;
+  VectorLagrangeFunctionSpace L2(102,VectorLagrangeFunctionSpace::VECTOR_Y);
+  VectorLagrangeFunctionSpace L3(103,VectorLagrangeFunctionSpace::VECTOR_Z);
+
+  ProductFunctionSpace<VectorLagrangeFunctionSpace::ValType> P123(L1,L2,L3);
+  std::cout << P123.getNumKeys(e) << "fonctions de formes P123" << std::endl;
+  P123.getKeys(e,dofs);
+  std::cout << dofs.size() << std::endl;
+
+  FormBilinear<TermBilinearMeca,ScalarLagrangeFunctionSpace,ScalarLagrangeFunctionSpace > f(L,L);
+  f.func();
+  f.Accumulate(e,uvw);
+
+
+  FormBilinear<TermBilinearMecaNL,ScalarLagrangeFunctionSpace,ScalarLagrangeFunctionSpace > fnl(L,L);
+  fnl.func();
+  
+
+
+
+
+ 
   // solve the problem
   mySolver.solve();