Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 2270)
@@ -152,8 +152,8 @@
         bool activateFieldWorkflow_done_=false ;
       private:
-        CGenericAlgorithmTransformation* transformationAlgorithm_ = nullptr ;
-      public:
-        void setTransformationAlgorithm(CGenericAlgorithmTransformation* transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
-        CGenericAlgorithmTransformation* getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
+        shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm_ = nullptr ;
+      public:
+        void setTransformationAlgorithm(shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
+        shared_ptr<CGenericAlgorithmTransformation> getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
       private:
         CTransformationPaths transformationPaths_ ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.cpp	(revision 2270)
@@ -52,5 +52,5 @@
   }
 
-  CGenericAlgorithmTransformation* CComputeConnectivityDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CComputeConnectivityDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/compute_connectivity_domain.hpp	(revision 2270)
@@ -64,5 +64,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 2270)
@@ -117,8 +117,8 @@
 
       private:
-        CGenericAlgorithmTransformation* transformationAlgorithm_ = nullptr ;
-      public:
-        void setTransformationAlgorithm(CGenericAlgorithmTransformation* transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
-        CGenericAlgorithmTransformation* getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
+        shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm_ = nullptr ;
+      public:
+        void setTransformationAlgorithm(shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
+        shared_ptr<CGenericAlgorithmTransformation> getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
       private:
         CTransformationPaths transformationPaths_ ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.cpp	(revision 2270)
@@ -45,5 +45,5 @@
   }
   
-  CGenericAlgorithmTransformation* CDuplicateScalarToAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CDuplicateScalarToAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/duplicate_scalar_to_axis.hpp	(revision 2270)
@@ -64,5 +64,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.cpp	(revision 2270)
@@ -49,5 +49,5 @@
   }
   
-  CGenericAlgorithmTransformation* CExpandDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CExpandDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/expand_domain.hpp	(revision 2270)
@@ -64,5 +64,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.cpp	(revision 2270)
@@ -78,5 +78,5 @@
   }
 
-  CGenericAlgorithmTransformation* CExtractAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CExtractAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.cpp	(revision 2270)
@@ -59,5 +59,5 @@
   }
 
-  CGenericAlgorithmTransformation* CExtractAxisToScalar::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CExtractAxisToScalar::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_axis_to_scalar.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CScalar>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.cpp	(revision 2270)
@@ -73,5 +73,5 @@
   }
 
-  CGenericAlgorithmTransformation* CExtractDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CExtractDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.cpp	(revision 2270)
@@ -88,5 +88,5 @@
   }
 
-  CGenericAlgorithmTransformation* CExtractDomainToAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CExtractDomainToAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/extract_domain_to_axis.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.cpp	(revision 2270)
@@ -139,5 +139,5 @@
   }
 
-  CGenericAlgorithmTransformation* CGenerateRectilinearDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CGenerateRectilinearDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/generate_rectilinear_domain.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2270)
@@ -1901,5 +1901,5 @@
     bool hasTransform=false ;
     bool hasRemainTransform=false ;
-    CGenericAlgorithmTransformation* algo ;
+    shared_ptr<CGenericAlgorithmTransformation> algo ;
     int pos ;
 
@@ -2192,5 +2192,5 @@
       if (!isSource)
       {
-        CGridAlgorithm* gridAlgorithm  ;
+        shared_ptr<CGridAlgorithm> gridAlgorithm  ;
         if (isNewGrid)
         { 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.hpp	(revision 2270)
@@ -222,8 +222,8 @@
                                                                                   double defaultValue, CGrid*& newGrid, bool graphEnabled=false, CField* field=0) ;
       private:
-        CGridAlgorithm* gridAlgorithm_ = nullptr ;
-      public:
-        void setGridAlgorithm(CGridAlgorithm* gridAlgorithm) {gridAlgorithm_ = gridAlgorithm;}
-        CGridAlgorithm* getGridAlgorithm(void) { return gridAlgorithm_ ;}
+        shared_ptr<CGridAlgorithm> gridAlgorithm_ = nullptr ;
+      public:
+        void setGridAlgorithm(shared_ptr<CGridAlgorithm> gridAlgorithm) {gridAlgorithm_ = gridAlgorithm;}
+        shared_ptr<CGridAlgorithm> getGridAlgorithm(void) { return gridAlgorithm_ ;}
        
         ///////////////////////////////////////////
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.cpp	(revision 2270)
@@ -136,5 +136,5 @@
   }
 
-  CGenericAlgorithmTransformation* CInterpolateAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CInterpolateAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_axis.hpp	(revision 2270)
@@ -65,5 +65,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.cpp	(revision 2270)
@@ -69,5 +69,5 @@
   }
 
-  CGenericAlgorithmTransformation* CInterpolateDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CInterpolateDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/interpolate_domain.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.cpp	(revision 2270)
@@ -40,5 +40,5 @@
   {}
 
-  CGenericAlgorithmTransformation* CInverseAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CInverseAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/inverse_axis.hpp	(revision 2270)
@@ -62,5 +62,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.cpp	(revision 2270)
@@ -57,5 +57,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReduceAxisToAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReduceAxisToAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_axis.hpp	(revision 2270)
@@ -62,5 +62,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.cpp	(revision 2270)
@@ -42,5 +42,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReduceAxisToScalar::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReduceAxisToScalar::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_axis_to_scalar.hpp	(revision 2270)
@@ -62,5 +62,5 @@
       static CTransformation<CScalar>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.cpp	(revision 2270)
@@ -88,5 +88,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReduceDomainToAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReduceDomainToAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_axis.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.cpp	(revision 2270)
@@ -43,5 +43,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReduceDomainToScalar::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReduceDomainToScalar::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_domain_to_scalar.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CScalar>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.cpp	(revision 2270)
@@ -42,5 +42,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReduceScalarToScalar::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReduceScalarToScalar::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reduce_scalar_to_scalar.hpp	(revision 2270)
@@ -62,5 +62,5 @@
       static CTransformation<CScalar>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.cpp	(revision 2270)
@@ -42,5 +42,5 @@
   }
 
-  CGenericAlgorithmTransformation* CReorderDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CReorderDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/reorder_domain.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp	(revision 2270)
@@ -126,8 +126,8 @@
         bool activateFieldWorkflow_done_=false ;
       private:
-        CGenericAlgorithmTransformation* transformationAlgorithm_ = nullptr ;
+        shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm_ = nullptr ;
       public:
-        void setTransformationAlgorithm(CGenericAlgorithmTransformation* transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
-        CGenericAlgorithmTransformation* getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
+        void setTransformationAlgorithm(shared_ptr<CGenericAlgorithmTransformation> transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;}
+        shared_ptr<CGenericAlgorithmTransformation> getTransformationAlgorithm(void) { return transformationAlgorithm_ ;}   
       private:
         CTransformationPaths transformationPaths_ ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.cpp	(revision 2270)
@@ -46,5 +46,5 @@
   }
 
-  CGenericAlgorithmTransformation* CTemporalSplitting::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CTemporalSplitting::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/temporal_splitting.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.cpp	(revision 2270)
@@ -78,5 +78,5 @@
   }
 
-  CGenericAlgorithmTransformation* CZoomAxis::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CZoomAxis::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_axis.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       static CTransformation<CAxis>* getTransformation(const StdString& id) { return SuperClass::get(id);}
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.cpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.cpp	(revision 2270)
@@ -73,5 +73,5 @@
   }
 
-  CGenericAlgorithmTransformation* CZoomDomain::createAlgorithm(bool isSource,
+  shared_ptr<CGenericAlgorithmTransformation> CZoomDomain::createAlgorithm(bool isSource,
                                                         CGrid* gridDst, CGrid* gridSrc,
                                                         int elementPositionInGrid,
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.hpp	(revision 2267)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/zoom_domain.hpp	(revision 2270)
@@ -63,5 +63,5 @@
       virtual void inheritFrom(SuperTransform* srcTransform) { solveDescInheritance(true, this->SuperClass::get((MyClass*)srcTransform)) ;}
       static CTransformation<CDomain>* getTransformation(const StdString& id) { return SuperClass::get(id);}
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
