Index: /XIOS/trunk/src/config/grid_attribute.conf
===================================================================
--- /XIOS/trunk/src/config/grid_attribute.conf	(revision 540)
+++ /XIOS/trunk/src/config/grid_attribute.conf	(revision 541)
@@ -1,6 +1,6 @@
 DECLARE_ATTRIBUTE(StdString, name)
 DECLARE_ATTRIBUTE(StdString, description)
-DECLARE_ATTRIBUTE(StdString, domain_ref)
-DECLARE_ATTRIBUTE(StdString, axis_ref)
+//DECLARE_ATTRIBUTE(StdString, domain_ref)
+//DECLARE_ATTRIBUTE(StdString, axis_ref)
 DECLARE_ARRAY(bool, 3 , mask)
 
@@ -8,4 +8,2 @@
 // An array contains order of axis and domains composing of the grid
 DECLARE_ARRAY(int, 1 , axisDomOrder)
-//DECLARE_ARRAY(StdString, 1 , axisList)
-//DECLARE_ARRAY(StdString, 1 , domainList)
Index: /XIOS/trunk/src/interface/c_attr/icgrid_attr.cpp
===================================================================
--- /XIOS/trunk/src/interface/c_attr/icgrid_attr.cpp	(revision 540)
+++ /XIOS/trunk/src/interface/c_attr/icgrid_attr.cpp	(revision 541)
@@ -18,25 +18,24 @@
   typedef xios::CGrid*  grid_Ptr;
   
-  void cxios_set_grid_axis_ref(grid_Ptr grid_hdl, const char * axis_ref, int axis_ref_size)
+  void cxios_set_grid_axisDomOrder(grid_Ptr grid_hdl, int* axisDomOrder, int extent1)
   {
-    std::string axis_ref_str;
-    if(!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
-     CTimer::get("XIOS").resume();
-    grid_hdl->axis_ref.setValue(axis_ref_str);
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(axisDomOrder,shape(extent1),neverDeleteData) ;
+    grid_hdl->axisDomOrder.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
   
-  void cxios_get_grid_axis_ref(grid_Ptr grid_hdl, char * axis_ref, int axis_ref_size)
+  void cxios_get_grid_axisDomOrder(grid_Ptr grid_hdl, int* axisDomOrder, int extent1)
   {
-     CTimer::get("XIOS").resume();
-    if(!string_copy(grid_hdl->axis_ref.getInheritedValue(),axis_ref , axis_ref_size))
-      ERROR("void cxios_get_grid_axis_ref(grid_Ptr grid_hdl, char * axis_ref, int axis_ref_size)", <<"Input string is to short");
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(axisDomOrder,shape(extent1),neverDeleteData) ;
+    tmp=grid_hdl->axisDomOrder.getInheritedValue() ;
      CTimer::get("XIOS").suspend();
   }
   
-  bool cxios_is_defined_grid_axis_ref(grid_Ptr grid_hdl )
+  bool cxios_is_defined_grid_axisDomOrder(grid_Ptr grid_hdl )
   {
      CTimer::get("XIOS").resume();
-    return grid_hdl->axis_ref.hasInheritedValue();
+    return grid_hdl->axisDomOrder.hasInheritedValue();
      CTimer::get("XIOS").suspend();
   }
@@ -65,30 +64,4 @@
      CTimer::get("XIOS").resume();
     return grid_hdl->description.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-  }
-  
-  
-  
-  void cxios_set_grid_domain_ref(grid_Ptr grid_hdl, const char * domain_ref, int domain_ref_size)
-  {
-    std::string domain_ref_str;
-    if(!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
-     CTimer::get("XIOS").resume();
-    grid_hdl->domain_ref.setValue(domain_ref_str);
-     CTimer::get("XIOS").suspend();
-  }
-  
-  void cxios_get_grid_domain_ref(grid_Ptr grid_hdl, char * domain_ref, int domain_ref_size)
-  {
-     CTimer::get("XIOS").resume();
-    if(!string_copy(grid_hdl->domain_ref.getInheritedValue(),domain_ref , domain_ref_size))
-      ERROR("void cxios_get_grid_domain_ref(grid_Ptr grid_hdl, char * domain_ref, int domain_ref_size)", <<"Input string is to short");
-     CTimer::get("XIOS").suspend();
-  }
-  
-  bool cxios_is_defined_grid_domain_ref(grid_Ptr grid_hdl )
-  {
-     CTimer::get("XIOS").resume();
-    return grid_hdl->domain_ref.hasInheritedValue();
      CTimer::get("XIOS").suspend();
   }
Index: /XIOS/trunk/src/interface/c_attr/icgridgroup_attr.cpp
===================================================================
--- /XIOS/trunk/src/interface/c_attr/icgridgroup_attr.cpp	(revision 540)
+++ /XIOS/trunk/src/interface/c_attr/icgridgroup_attr.cpp	(revision 541)
@@ -18,25 +18,24 @@
   typedef xios::CGridGroup*  gridgroup_Ptr;
   
-  void cxios_set_gridgroup_axis_ref(gridgroup_Ptr gridgroup_hdl, const char * axis_ref, int axis_ref_size)
+  void cxios_set_gridgroup_axisDomOrder(gridgroup_Ptr gridgroup_hdl, int* axisDomOrder, int extent1)
   {
-    std::string axis_ref_str;
-    if(!cstr2string(axis_ref, axis_ref_size, axis_ref_str)) return;
-     CTimer::get("XIOS").resume();
-    gridgroup_hdl->axis_ref.setValue(axis_ref_str);
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(axisDomOrder,shape(extent1),neverDeleteData) ;
+    gridgroup_hdl->axisDomOrder.reference(tmp.copy());
      CTimer::get("XIOS").suspend();
   }
   
-  void cxios_get_gridgroup_axis_ref(gridgroup_Ptr gridgroup_hdl, char * axis_ref, int axis_ref_size)
+  void cxios_get_gridgroup_axisDomOrder(gridgroup_Ptr gridgroup_hdl, int* axisDomOrder, int extent1)
   {
-     CTimer::get("XIOS").resume();
-    if(!string_copy(gridgroup_hdl->axis_ref.getInheritedValue(),axis_ref , axis_ref_size))
-      ERROR("void cxios_get_gridgroup_axis_ref(gridgroup_Ptr gridgroup_hdl, char * axis_ref, int axis_ref_size)", <<"Input string is to short");
+    CTimer::get("XIOS").resume();
+    CArray<int,1> tmp(axisDomOrder,shape(extent1),neverDeleteData) ;
+    tmp=gridgroup_hdl->axisDomOrder.getInheritedValue() ;
      CTimer::get("XIOS").suspend();
   }
   
-  bool cxios_is_defined_gridgroup_axis_ref(gridgroup_Ptr gridgroup_hdl )
+  bool cxios_is_defined_gridgroup_axisDomOrder(gridgroup_Ptr gridgroup_hdl )
   {
      CTimer::get("XIOS").resume();
-    return gridgroup_hdl->axis_ref.hasInheritedValue();
+    return gridgroup_hdl->axisDomOrder.hasInheritedValue();
      CTimer::get("XIOS").suspend();
   }
@@ -65,30 +64,4 @@
      CTimer::get("XIOS").resume();
     return gridgroup_hdl->description.hasInheritedValue();
-     CTimer::get("XIOS").suspend();
-  }
-  
-  
-  
-  void cxios_set_gridgroup_domain_ref(gridgroup_Ptr gridgroup_hdl, const char * domain_ref, int domain_ref_size)
-  {
-    std::string domain_ref_str;
-    if(!cstr2string(domain_ref, domain_ref_size, domain_ref_str)) return;
-     CTimer::get("XIOS").resume();
-    gridgroup_hdl->domain_ref.setValue(domain_ref_str);
-     CTimer::get("XIOS").suspend();
-  }
-  
-  void cxios_get_gridgroup_domain_ref(gridgroup_Ptr gridgroup_hdl, char * domain_ref, int domain_ref_size)
-  {
-     CTimer::get("XIOS").resume();
-    if(!string_copy(gridgroup_hdl->domain_ref.getInheritedValue(),domain_ref , domain_ref_size))
-      ERROR("void cxios_get_gridgroup_domain_ref(gridgroup_Ptr gridgroup_hdl, char * domain_ref, int domain_ref_size)", <<"Input string is to short");
-     CTimer::get("XIOS").suspend();
-  }
-  
-  bool cxios_is_defined_gridgroup_domain_ref(gridgroup_Ptr gridgroup_hdl )
-  {
-     CTimer::get("XIOS").resume();
-    return gridgroup_hdl->domain_ref.hasInheritedValue();
      CTimer::get("XIOS").suspend();
   }
Index: /XIOS/trunk/src/node/context.cpp
===================================================================
--- /XIOS/trunk/src/node/context.cpp	(revision 540)
+++ /XIOS/trunk/src/node/context.cpp	(revision 541)
@@ -356,5 +356,5 @@
      if (hasClient)
      {
-       std::cout << "Current context " << *this << std::endl;
+//       std::cout << "Current context " << *this << std::endl;
        // After xml is parsed, there are some more works with post processing
        postProcessing();
@@ -715,5 +715,5 @@
    {
       postProcessing();
-      std::cout << "server context " << *this << std::endl;
+//      std::cout << "server context " << *this << std::endl;
    }
 
Index: /XIOS/trunk/src/node/field.cpp
===================================================================
--- /XIOS/trunk/src/node/field.cpp	(revision 540)
+++ /XIOS/trunk/src/node/field.cpp	(revision 541)
@@ -506,9 +506,15 @@
       CDomain* domain;
       CAxis* axis;
+      std::vector<CDomain*> vecDom;
+      std::vector<CAxis*> vecAxis;
+     std::vector<std::string> domList, axisList;
 
       if (!domain_ref.isEmpty())
       {
          if (CDomain::has(domain_ref.getValue()))
-            domain = CDomain::get(domain_ref.getValue()) ;
+         {
+           domain = CDomain::get(domain_ref.getValue()) ;
+           vecDom.push_back(domain);
+         }
          else
             ERROR("CField::solveGridReference(void)",
@@ -520,5 +526,8 @@
       {
          if (CAxis::has(axis_ref.getValue()))
-            axis = CAxis::get(axis_ref.getValue()) ;
+         {
+           axis = CAxis::get(axis_ref.getValue()) ;
+           vecAxis.push_back(axis);
+         }
          else
             ERROR("CField::solveGridReference(void)",
@@ -530,5 +539,9 @@
       {
          if (CGrid::has(grid_ref.getValue()))
-            this->grid = CGrid::get(grid_ref.getValue()) ;
+         {
+           this->grid = CGrid::get(grid_ref.getValue()) ;
+           domList = grid->getDomainList();
+           axisList = grid->getAxisList();
+         }
          else
             ERROR("CField::solveGridReference(void)",
@@ -562,17 +575,6 @@
 //     CArray<std::string,1> axisListTmp = grid->axisList.getValue();
 
-     std::vector<std::string> domList, axisList;
-     if (0 != grid)
-     {
-       domList = grid->getDomainList();
-       axisList = grid->getAxisList();
-     }
-
      if (domList.empty() && axisList.empty())
      {
-       std::vector<CDomain*> vecDom;
-       if (0 != domain) vecDom.push_back(domain);
-       std::vector<CAxis*> vecAxis;
-       if (0 != axis) vecAxis.push_back(axis);
        this->grid = CGrid::createGrid(vecDom, vecAxis);
      }
Index: /XIOS/trunk/src/test/test_new_features.f90
===================================================================
--- /XIOS/trunk/src/test/test_new_features.f90	(revision 540)
+++ /XIOS/trunk/src/test/test_new_features.f90	(revision 541)
@@ -13,6 +13,6 @@
   TYPE(xios_time)      :: dtime
   TYPE(xios_context) :: ctx_hdl
-  INTEGER,PARAMETER :: ni_glo=5
-  INTEGER,PARAMETER :: nj_glo=5
+  INTEGER,PARAMETER :: ni_glo=100
+  INTEGER,PARAMETER :: nj_glo=100
   INTEGER,PARAMETER :: llm=5
   DOUBLE PRECISION  :: lval(llm)=1
@@ -80,5 +80,5 @@
   CALL xios_set_context_attr("test",calendar_type="Gregorian")
   CALL xios_set_axis_attr("axis_A",size=llm ,value=lval) ;
-  CALL xios_set_axis_attr("axis_B",size=llm ,value=lval2) ;
+!  CALL xios_set_axis_attr("axis_B",size=llm ,value=lval2) ;
   CALL xios_set_domain_attr("domain_A",ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, ni=ni,jbegin=jbegin,nj=nj)
   CALL xios_set_domain_attr("domain_A",data_dim=2, data_ibegin=-1, data_ni=ni+2, data_jbegin=-2, data_nj=nj+4)
