Index: /XMLIO_V2/dev/dev_rv/Makefile.wk
===================================================================
--- /XMLIO_V2/dev/dev_rv/Makefile.wk	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/Makefile.wk	(revision 172)
@@ -16,5 +16,5 @@
 GUI       = no
 NPROC     = 1
-CSUITE    = intel
+CSUITE    = gnu
 PFORME    = fedora-wk
 FORTEXT   = .f90
Index: /XMLIO_V2/dev/dev_rv/src/xmlio/attribute.cpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/xmlio/attribute.cpp	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/src/xmlio/attribute.cpp	(revision 172)
@@ -13,21 +13,37 @@
       CAttribute::CAttribute(const CAttribute & attribut)
          : CObject(attribut.getId())
-      { this->value = attribut.getAnyValue(); }
+      { 
+         this->value = attribut.getAnyValue(); 
+      }
+      
+      CAttribute::~CAttribute(void)
+      { /* Ne rien faire de plus */ }
+      
+      ///--------------------------------------------------------------
 
       const boost::any & CAttribute::getAnyValue(void) const
-      { return (this->value); }
+      { 
+         return (this->value); 
+      }
 
 
       void CAttribute::setAnyValue(const boost::any & value)
-      { this->value = value; }
+      { 
+         this->value = value; 
+      }
 
-      CAttribute::~CAttribute(void)
-      { /* Ne rien faire de plus */ }
+      //---------------------------------------------------------------
 
       bool CAttribute::isEmpty(void) const
-      { return (this->value.empty()); }
+      { 
+         return (this->value.empty()); 
+      }
 
       const StdString & CAttribute::getName(void) const
-      { return (this->getId()); }
+      { 
+         return (this->getId()); 
+      }
+      
+      ///--------------------------------------------------------------
 
    } // namespace tree
Index: /XMLIO_V2/dev/dev_rv/src/xmlio/group_template.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/xmlio/group_template.hpp	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/src/xmlio/group_template.hpp	(revision 172)
@@ -38,4 +38,7 @@
          virtual StdString toString(void) const;
          virtual void fromString(const StdString & str);
+         
+         virtual void toBinary  (StdOStream & os) const;
+         virtual void fromBinary(StdIStream & is);
 
          virtual void parse(xml::CXMLNode & node);
Index: /XMLIO_V2/dev/dev_rv/src/xmlio/group_template_impl.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/xmlio/group_template_impl.hpp	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/src/xmlio/group_template_impl.hpp	(revision 172)
@@ -25,4 +25,131 @@
       CGroupTemplate<U, V, W>::~CGroupTemplate(void)
    { /* Ne rien faire de plus */ }
+   
+   ///--------------------------------------------------------------
+   
+   template <class U, class V, class W>
+      void CGroupTemplate<U, V, W>::toBinary(StdOStream & os) const
+   {
+      SuperClass::toBinary(os);
+      
+      const StdSize grpnb = this->groupList.size();
+      const StdSize chdnb = this->childList.size();
+      tree::ENodeType cenum = U::GetType();
+      tree::ENodeType genum = V::GetType();
+      
+      os.write (reinterpret_cast<const char*>(&grpnb) , sizeof(StdSize));
+      os.write (reinterpret_cast<const char*>(&chdnb) , sizeof(StdSize));      
+      
+      typename std::vector<boost::shared_ptr<V> >::const_iterator 
+         itg = this->groupList.begin(), endg = this->groupList.end();
+      typename std::vector<boost::shared_ptr<U> >::const_iterator 
+         itc = this->childList.begin(), endc = this->childList.end();
+            
+      for (; itg != endg; itg++)
+      { 
+         boost::shared_ptr<V> group = *itg;
+         bool hid = group->hasId();
+         
+         os.write (reinterpret_cast<const char*>(&genum), sizeof(tree::ENodeType));      
+         os.write (reinterpret_cast<const char*>(&hid), sizeof(bool));
+         
+         if (hid)
+         {
+            const StdString & id = group->getId();
+            const StdSize size   = id.size();
+               
+            os.write (reinterpret_cast<const char*>(&size), sizeof(StdSize));
+            os.write (id.data(), size * sizeof(char));         
+         }              
+         group->toBinary(os);
+      }
+            
+      for (; itc != endc; itc++)
+      { 
+         boost::shared_ptr<U> child = *itc;
+         bool hid = child->hasId();
+         
+         os.write (reinterpret_cast<const char*>(&cenum), sizeof(tree::ENodeType));
+         os.write (reinterpret_cast<const char*>(&hid), sizeof(bool));
+         
+         if (hid)
+         {
+            const StdString & id = child->getId();
+            const StdSize size   = id.size();
+               
+            os.write (reinterpret_cast<const char*>(&size), sizeof(StdSize));
+            os.write (id.data(), size * sizeof(char));         
+         }         
+         child->toBinary(os);
+      }
+      
+   }
+   
+   template <class U, class V, class W>
+      void CGroupTemplate<U, V, W>::fromBinary(StdIStream & is)
+   {
+      SuperClass::fromBinary(is);
+      
+      boost::shared_ptr<V> group_ptr = (this->hasId())
+         ? CObjectFactory::GetObject<V>(this->getId())
+         : CObjectFactory::GetObject(boost::polymorphic_downcast<V*>(this));
+      
+      StdSize grpnb = 0;
+      StdSize chdnb = 0;
+      tree::ENodeType renum = Unknown;
+      
+      is.read (reinterpret_cast<char*>(&grpnb), sizeof(StdSize));
+      is.read (reinterpret_cast<char*>(&chdnb), sizeof(StdSize));
+      
+      for (StdSize i = 0; i < grpnb; i++)
+      {
+         bool hid = false;
+         is.read (reinterpret_cast<char*>(&renum), sizeof(tree::ENodeType));
+         is.read (reinterpret_cast<char*>(&hid), sizeof(bool));
+         
+         if (renum != V::GetType())
+            ERROR("CGroupTemplate<U, V, W>::fromBinary(StdIStream & is)",
+                  << "[ renum = " << renum << "] Bad type !");
+                        
+         if (hid)
+         {
+            StdSize size  = 0;
+            is.read (reinterpret_cast<char*>(&size), sizeof(StdSize));
+            StdString id(size, ' ');
+            is.read (const_cast<char *>(id.data()), size * sizeof(char));
+            CGroupFactory::CreateGroup(group_ptr, id)->fromBinary(is);
+         }
+         else
+         {
+            CGroupFactory::CreateGroup(group_ptr)->fromBinary(is);
+         }
+      }
+      
+      for (StdSize j = 0; j < chdnb; j++)
+      {
+         bool hid = false;
+         is.read (reinterpret_cast<char*>(&renum), sizeof(tree::ENodeType));
+         is.read (reinterpret_cast<char*>(&hid), sizeof(bool));
+         
+         if (renum != U::GetType())
+            ERROR("CGroupTemplate<U, V, W>::fromBinary(StdIStream & is)",
+                  << "[ renum = " << renum << "] Bad type !");
+                  
+         if (hid)
+         {
+            StdSize size  = 0;
+            is.read (reinterpret_cast<char*>(&size), sizeof(StdSize));
+            StdString id(size, ' ');
+            is.read (const_cast<char *>(id.data()), size * sizeof(char));
+            CGroupFactory::CreateChild(group_ptr, id)->fromBinary(is);            
+         }
+         else
+         {
+            CGroupFactory::CreateChild(group_ptr)->fromBinary(is);
+         }   
+      }
+   }
+
+   //--------------------------------------------------------------
 
    template <class U, class V, class W>
@@ -31,6 +158,5 @@
       StdOStringStream oss;
       StdString name = (this->getId().compare(V::GetDefName()) != 0)
-                     ? V::GetName()
-                     : V::GetDefName();
+                     ? V::GetName() : V::GetDefName();
 
       oss << "< " << name << " ";
@@ -75,4 +201,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       StdString CGroupTemplate<U, V, W>::GetName(void)
@@ -86,4 +214,6 @@
       return (U::GetName().append("_definition")); 
    }
+   
+   //---------------------------------------------------------------   
 
    template <class U, class V, class W>
@@ -94,4 +224,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       const xios_map<StdString, boost::shared_ptr<V> >&
@@ -101,4 +233,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       bool CGroupTemplate<U, V, W>::hasChild(void) const
@@ -107,4 +241,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       void CGroupTemplate<U, V, W>::parse(xml::CXMLNode & node)
@@ -112,4 +248,6 @@
       this->parse(node, true); 
    }
+   
+   //---------------------------------------------------------------
    
    template <class U, class V, class W>
@@ -138,4 +276,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       void CGroupTemplate<U, V, W>::getAllChildren(std::vector<boost::shared_ptr<U> > & allc) const
@@ -152,4 +292,6 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       std::vector<boost::shared_ptr<U> > CGroupTemplate<U, V, W>::getAllChildren(void) const
@@ -160,8 +302,12 @@
    }
 
+   //---------------------------------------------------------------
+
    template <class U, class V, class W>
       void CGroupTemplate<U, V, W>::solveRefInheritance(void)
    { /* Ne rien faire de plus */ }
 
+   ///--------------------------------------------------------------
+
 } // namespace xmlioserver
 
Index: /XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp	(revision 172)
@@ -29,4 +29,7 @@
          virtual StdString toString(void) const;
          virtual void fromString(const StdString & str);
+
+         virtual void toBinary  (StdOStream & os) const;
+         virtual void fromBinary(StdIStream & is);
 
          virtual void parse(xml::CXMLNode & node);
@@ -62,5 +65,5 @@
          static xios_map<StdString,
                 xios_map<StdString,
-                boost::shared_ptr<DerivedType> > > AllMapObj;
+                boost::shared_ptr<DerivedType> > > AllMapObj; 
          static xios_map<StdString,
                 std::vector<boost::shared_ptr<DerivedType> > > AllVectObj;
Index: /XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp
===================================================================
--- /XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp	(revision 171)
+++ /XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp	(revision 172)
@@ -27,6 +27,6 @@
 
    template <class T>
-      CObjectTemplate<T>::CObjectTemplate(const CObjectTemplate<T> & object,
-                                          bool withAttrList, bool withId)
+      CObjectTemplate<T>::CObjectTemplate
+         (const CObjectTemplate<T> & object, bool withAttrList, bool withId)
          : tree::CAttributeMap()
          , CObject()
@@ -36,14 +36,20 @@
       ERROR("CObjectTemplate<T> construtor 3", << "Not completly implemented yet !");
    }
+   
+   template <class T>
+      CObjectTemplate<T>::~CObjectTemplate(void)
+   { /* Ne rien faire de plus */ }
+
+   ///--------------------------------------------------------------
 
    template <class T>
       std::vector<boost::shared_ptr<T> > &
          CObjectTemplate<T>::GetAllVectobject(const StdString & contextId)
-   { return (CObjectTemplate<T>::AllVectObj[contextId]); }
-
-   template <class T>
-      CObjectTemplate<T>::~CObjectTemplate(void)
-   { /* Ne rien faire de plus */ }
-
+   { 
+      return (CObjectTemplate<T>::AllVectObj[contextId]); 
+   }
+   
+   //---------------------------------------------------------------
+   
    template <class T>
       StdString CObjectTemplate<T>::toString(void) const
@@ -59,6 +65,24 @@
    template <class T>
       void CObjectTemplate<T>::fromString(const StdString & str)
-   { ERROR("CObjectTemplate<T>::fromString(str)",
-            << "[ str = " << str << "] Not implemented yet !"); }
+   { 
+      ERROR("CObjectTemplate<T>::fromString(str)",
+            << "[ str = " << str << "] Not implemented yet !"); 
+   }
+   
+   //---------------------------------------------------------------
+   
+   template <class T>
+      void CObjectTemplate<T>::toBinary(StdOStream & os) const
+   {
+      SuperClassMap::toBinary(os);    
+   }
+      
+   template <class T>
+      void CObjectTemplate<T>::fromBinary(StdIStream & is)
+   {
+      SuperClassMap::fromBinary(is); 
+   }
+   
+   //---------------------------------------------------------------
 
    template <class T>
@@ -68,5 +92,7 @@
       CAttributeMap::setAttributes(attributes);
    }
-   
+
+   //---------------------------------------------------------------
+
    template <class T>
       tree::ENodeType CObjectTemplate<T>::getType(void) const
@@ -74,12 +100,22 @@
       return (T::GetType());
    }
+   
+   //---------------------------------------------------------------
 
    template <class T>
       bool CObjectTemplate<T>::hasChild(void) const
-   { return (false); }
+   { 
+      return (false); 
+   }
+
+   //---------------------------------------------------------------
 
    template <class T>
       void CObjectTemplate<T>::solveDescInheritance(const CAttributeMap * const parent)
-   { SuperClassMap::setAttributes(parent); }
+   { 
+      SuperClassMap::setAttributes(parent); 
+   }
+
+   ///--------------------------------------------------------------
 
 } // namespace xmlioserver
