Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.cpp	(revision 2270)
@@ -5,5 +5,5 @@
 {
 
-  CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, int slots, CGridAlgorithm* algo, int nrecords, bool detectMissingValues, double defaultValue)
+  CTemporalTransformFilter::CTemporalTransformFilter(CGarbageCollector& gc, int slots, shared_ptr<CGridAlgorithm> algo, int nrecords, bool detectMissingValues, double defaultValue)
   : CTransformFilter(gc, slots, algo, detectMissingValues, defaultValue), nrecords_(nrecords), graphCycleCompleted(true)
   {
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_transform_filter.hpp	(revision 2270)
@@ -14,5 +14,5 @@
     public:
 
-      CTemporalTransformFilter(CGarbageCollector& gc, int slots, CGridAlgorithm* algo, int nrecords, bool detectMissingValues, double defaultValue) ;
+      CTemporalTransformFilter(CGarbageCollector& gc, int slots, shared_ptr<CGridAlgorithm> algo, int nrecords, bool detectMissingValues, double defaultValue) ;
 
     protected:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp	(revision 2270)
@@ -5,5 +5,5 @@
 {
   
-  CTransformFilter::CTransformFilter( CGarbageCollector& gc, int slots, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) 
+  CTransformFilter::CTransformFilter( CGarbageCollector& gc, int slots, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) 
                                     : CFilter(gc, slots, this), algorithm_(algo), 
                                       detectMissingValues_(detectMissingValues), defaultValue_(defaultValue)
@@ -35,5 +35,5 @@
   }
 
-  void CTransformFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, CGridAlgorithm* algorithm)
+  void CTransformFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, shared_ptr<CGridAlgorithm> algorithm)
   {
     if(this->graphEnabled)
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp	(revision 2270)
@@ -15,5 +15,5 @@
     public:
 
-      CTransformFilter(CGarbageCollector& gc, int slots, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
+      CTransformFilter(CGarbageCollector& gc, int slots, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) ;
 
     protected:
@@ -22,9 +22,9 @@
       */
       CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data) ;
-      void buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, CGridAlgorithm* algorithm);
+      void buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, shared_ptr<CGridAlgorithm> algorithm);
       
 //      void apply(const CArray<double, 1>& dataSrc, CArray<double,1>& dataDest);
      
-      CGridAlgorithm* algorithm_ ;
+      shared_ptr<CGridAlgorithm> algorithm_ ;
       bool detectMissingValues_ ;
       bool defaultValue_ ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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 2269)
+++ /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,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.cpp	(revision 2270)
@@ -10,7 +10,7 @@
   }
   
-  CGridAlgorithm* CAlgorithmTransformationNoDataModification::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos)
+  shared_ptr<CGridAlgorithm> CAlgorithmTransformationNoDataModification::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos)
   {
-    return new CGridAlgorithmNoDataModification(this) ;
+    return make_shared<CGridAlgorithmNoDataModification>(static_pointer_cast<CAlgorithmTransformationNoDataModification>(shared_from_this())) ;
   }
 }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/algorithm_transformation_no_data_modification.hpp	(revision 2270)
@@ -15,5 +15,5 @@
       virtual ~CAlgorithmTransformationNoDataModification() {};
       virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut);
-      virtual CGridAlgorithm* createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ;
+      virtual shared_ptr<CGridAlgorithm> createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ;
   };
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.cpp	(revision 2270)
@@ -12,5 +12,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmDuplicateScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmDuplicateScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CAxis>* transformation,
                                                                      int elementPositionInGrid,
@@ -30,5 +30,5 @@
   int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmDuplicateScalar(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], duplicateScalar));
+  return make_shared<CAxisAlgorithmDuplicateScalar>(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], duplicateScalar);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_duplicate_scalar.hpp	(revision 2270)
@@ -34,5 +34,5 @@
   virtual StdString getAlgoName() {return "\\nduplicate_scalar";}
 
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.cpp	(revision 2270)
@@ -10,5 +10,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                            CTransformation<CAxis>* transformation,
                                                            int elementPositionInGrid,
@@ -28,5 +28,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmExtract(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], extractAxis));
+  return make_shared<CAxisAlgorithmExtract>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], extractAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract.hpp	(revision 2270)
@@ -48,5 +48,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.cpp	(revision 2270)
@@ -15,6 +15,8 @@
 #include "reduction.hpp"
 
-namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmExtractDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+namespace xios
+{
+
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmExtractDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CAxis>* transformation,
                                                                      int elementPositionInGrid,
@@ -34,5 +36,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmExtractDomain(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], extractDomain));
+  return make_shared<CAxisAlgorithmExtractDomain>(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], extractDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_extract_domain.hpp	(revision 2270)
@@ -49,5 +49,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.cpp	(revision 2270)
@@ -20,5 +20,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                    CTransformation<CAxis>* transformation,
                                                                    int elementPositionInGrid,
@@ -38,5 +38,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmInterpolate(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis));
+  return make_shared<CAxisAlgorithmInterpolate>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate.hpp	(revision 2270)
@@ -52,5 +52,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.cpp	(revision 2270)
@@ -23,5 +23,5 @@
 namespace xios
 {
-  CGenericAlgorithmTransformation* CAxisAlgorithmInterpolateCoordinate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmInterpolateCoordinate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CAxis>* transformation,
                                                                      int elementPositionInGrid,
@@ -41,5 +41,5 @@
     int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-    return (new CAxisAlgorithmInterpolateCoordinate(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis));
+    return make_shared<CAxisAlgorithmInterpolateCoordinate>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], interpolateAxis);
   }
   CATCH
@@ -138,5 +138,5 @@
   CATCH
 
-  CTransformFilter* CAxisAlgorithmInterpolateCoordinate::createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue)
+  CTransformFilter* CAxisAlgorithmInterpolateCoordinate::createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue)
   {
     if (hasCoordinateSrc_ && hasCoordinateDest_) return new CTransformFilter(gc, 3, algo, detectMissingValues, defaultValue) ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_interpolate_coordinate.hpp	(revision 2270)
@@ -37,5 +37,5 @@
   static bool registerTrans();
   virtual StdString getAlgoName() {return "\\ninterpolate_axis";}
-  virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
+  virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) ;
   
 private:
@@ -59,5 +59,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.cpp	(revision 2270)
@@ -18,5 +18,5 @@
 namespace xios {
 
-CGenericAlgorithmTransformation* CAxisAlgorithmInverse::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmInverse::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                CTransformation<CAxis>* transformation,
                                                                int elementPositionInGrid,
@@ -36,5 +36,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmInverse(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], inverseAxis));
+  return make_shared<CAxisAlgorithmInverse>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], inverseAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_inverse.hpp	(revision 2270)
@@ -38,5 +38,5 @@
 
 public:
- static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+ static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.cpp	(revision 2270)
@@ -15,5 +15,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                    CTransformation<CAxis>* transformation,
                                                                    int elementPositionInGrid,
@@ -33,5 +33,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmReduceAxis(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], reduceAxis));
+  return make_shared<CAxisAlgorithmReduceAxis>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], reduceAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_axis.hpp	(revision 2270)
@@ -35,5 +35,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.cpp	(revision 2270)
@@ -16,5 +16,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                    CTransformation<CAxis>* transformation,
                                                                    int elementPositionInGrid,
@@ -34,5 +34,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmReduceDomain(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], reduceDomain));
+  return make_shared<CAxisAlgorithmReduceDomain>(isSource, axisListDestP[axisDstIndex], domainListSrcP[domainSrcIndex], reduceDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_reduce_domain.hpp	(revision 2270)
@@ -48,5 +48,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.cpp	(revision 2270)
@@ -13,5 +13,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmTemporalSplitting::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmTemporalSplitting::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CAxis>* transformation,
                                                                      int elementPositionInGrid,
@@ -31,5 +31,5 @@
   int scalarSrcIndex = elementPositionInGridSrc2ScalarPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmTemporalSplitting(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting));
+  return make_shared<CAxisAlgorithmTemporalSplitting>(isSource, axisListDestP[axisDstIndex], scalarListSrcP[scalarSrcIndex], temporalSplitting);
 }
 CATCH
@@ -49,5 +49,5 @@
 }
 
-CTransformFilter* CAxisAlgorithmTemporalSplitting::createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue)
+CTransformFilter* CAxisAlgorithmTemporalSplitting::createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue)
 {
   return new CTemporalTransformFilter(gc, 1, algo, nrecords_, detectMissingValues, defaultValue) ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_temporal_splitting.hpp	(revision 2270)
@@ -31,7 +31,7 @@
       virtual StdString getAlgoName() {return "\\ntemporal_splitting";}
 
-      virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
+      virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) ;
 
-      static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+      static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                      CTransformation<CAxis>* transformation,
                                                      int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.cpp	(revision 2270)
@@ -10,5 +10,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CAxisAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CAxisAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                            CTransformation<CAxis>* transformation,
                                                            int elementPositionInGrid,
@@ -28,5 +28,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CAxisAlgorithmZoom(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], zoomAxis));
+  return make_shared<CAxisAlgorithmZoom>(isSource, axisListDestP[axisDstIndex], axisListSrcP[axisSrcIndex], zoomAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/axis_algorithm/axis_algorithm_zoom.hpp	(revision 2270)
@@ -48,5 +48,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CAxis>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.cpp	(revision 2270)
@@ -15,5 +15,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmComputeConnectivity::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmComputeConnectivity::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CDomain>* transformation,
                                                                      int elementPositionInGrid,
@@ -33,5 +33,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmComputeConnectivity(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain));
+  return make_shared<CDomainAlgorithmComputeConnectivity>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_compute_connectivity.hpp	(revision 2270)
@@ -37,5 +37,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.cpp	(revision 2270)
@@ -17,5 +17,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmExpand::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmExpand::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                CTransformation<CDomain>* transformation,
                                                                int elementPositionInGrid,
@@ -35,5 +35,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmExpand(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], expandDomain));
+  return make_shared<CDomainAlgorithmExpand>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], expandDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_expand.hpp	(revision 2270)
@@ -46,5 +46,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp	(revision 2270)
@@ -7,5 +7,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmExtract::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                              CTransformation<CDomain>* transformation,
                                                              int elementPositionInGrid,
@@ -25,5 +25,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmExtract(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], extractDomain));
+  return make_shared<CDomainAlgorithmExtract>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], extractDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.hpp	(revision 2270)
@@ -43,5 +43,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.cpp	(revision 2270)
@@ -18,5 +18,5 @@
 
 
-CGenericAlgorithmTransformation* CDomainAlgorithmGenerateRectilinear::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmGenerateRectilinear::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CDomain>* transformation,
                                                                      int elementPositionInGrid,
@@ -36,5 +36,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmGenerateRectilinear(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], gridDst, gridSrc, transform));
+  return make_shared<CDomainAlgorithmGenerateRectilinear>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], gridDst, gridSrc, transform);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_generate_rectilinear.hpp	(revision 2270)
@@ -45,5 +45,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.cpp	(revision 2270)
@@ -22,5 +22,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmInterpolate::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CDomain>* transformation,
                                                                      int elementPositionInGrid,
@@ -40,5 +40,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmInterpolate(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], interpolateDomain));
+  return make_shared<CDomainAlgorithmInterpolate>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], interpolateDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_interpolate.hpp	(revision 2270)
@@ -87,5 +87,5 @@
 public:
 
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2270)
@@ -10,5 +10,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmReorder::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmReorder::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                              CTransformation<CDomain>* transformation,
                                                              int elementPositionInGrid,
@@ -28,5 +28,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmReorder(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], reorderDomain));
+  return make_shared<CDomainAlgorithmReorder>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], reorderDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.hpp	(revision 2270)
@@ -30,5 +30,5 @@
   
     public:
-      static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+      static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                      CTransformation<CDomain>* transformation,
                                                      int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.cpp	(revision 2270)
@@ -7,5 +7,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CDomainAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CDomainAlgorithmZoom::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                              CTransformation<CDomain>* transformation,
                                                              int elementPositionInGrid,
@@ -25,5 +25,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CDomainAlgorithmZoom(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], zoomDomain));
+  return make_shared<CDomainAlgorithmZoom>(isSource, domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], zoomDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_zoom.hpp	(revision 2270)
@@ -46,5 +46,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CDomain>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.cpp	(revision 2270)
@@ -33,12 +33,12 @@
 ///////////////////////////////////////////////////////////////
 
-CGridAlgorithm* CGenericAlgorithmTransformation::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos)
+shared_ptr<CGridAlgorithm> CGenericAlgorithmTransformation::createGridAlgorithm(CGrid* gridSrc, CGrid* gridDst, int pos)
 {
-  return new CGridAlgorithmGeneric(gridSrc, gridDst, pos, this) ;
+  return make_shared<CGridAlgorithmGeneric>(gridSrc, gridDst, pos, shared_from_this()) ;
 }
 
 
 
-CTransformFilter* CGenericAlgorithmTransformation::createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue)
+CTransformFilter* CGenericAlgorithmTransformation::createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue)
 {
   return new CTransformFilter(gc, 1, algo, detectMissingValues, defaultValue) ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/generic_algorithm_transformation.hpp	(revision 2270)
@@ -32,10 +32,10 @@
   This class defines the interface for all other inherited algorithms class
   */
-class CGenericAlgorithmTransformation
+class CGenericAlgorithmTransformation : public std::enable_shared_from_this<CGenericAlgorithmTransformation>
 {
   public : 
     CGenericAlgorithmTransformation(bool isSource) ;
-    virtual CGridAlgorithm* createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ;
-    virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, CGridAlgorithm* algo, bool detectMissingValues, double defaultValue) ;
+    virtual shared_ptr<CGridAlgorithm> createGridAlgorithm(CGrid* gridSrc, CGrid* newGrid, int pos) ;
+    virtual CTransformFilter* createTransformFilter(CGarbageCollector& gc, shared_ptr<CGridAlgorithm> algo, bool detectMissingValues, double defaultValue) ;
     virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut) { abort() ;} //=0
     virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, const vector<CArray<double,1>>& auxData, CArray<double,1>& dataOut) { abort() ;} //=0
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.cpp	(revision 2270)
@@ -7,5 +7,5 @@
   CTransformFilter* CGridAlgorithm::createTransformFilter(CGarbageCollector& gc, bool detectMissingValues, double defaultValue)
   {  
-    return algorithm_->createTransformFilter(gc, this, detectMissingValues, defaultValue) ;
+    return algorithm_->createTransformFilter(gc, shared_from_this(), detectMissingValues, defaultValue) ;
   }
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm.hpp	(revision 2270)
@@ -19,8 +19,8 @@
 class CGarbageCollector ;
 
-class CGridAlgorithm
+class CGridAlgorithm : public std::enable_shared_from_this<CGridAlgorithm>
 {
   public:
-    CGridAlgorithm(CGenericAlgorithmTransformation* algorithm) : algorithm_(algorithm)  {} ;
+    CGridAlgorithm(shared_ptr<CGenericAlgorithmTransformation> algorithm) : algorithm_(algorithm)  {} ;
     virtual ~CGridAlgorithm() {} ;
     virtual void apply(const CArray<double,1>& dataIn, CArray<double,1>& dataOut) { abort(); } //=0
@@ -31,5 +31,5 @@
    
     protected:
-      CGenericAlgorithmTransformation* algorithm_=nullptr ;
+      shared_ptr<CGenericAlgorithmTransformation> algorithm_=nullptr ;
 };
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.cpp	(revision 2270)
@@ -10,5 +10,5 @@
 {
 
-  CGridAlgorithmGeneric::CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos,  CGenericAlgorithmTransformation* algo)
+  CGridAlgorithmGeneric::CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos,  shared_ptr<CGenericAlgorithmTransformation> algo)
   : CGridAlgorithm(algo), gridSrc_(gridSrc), gridDst_(gridDst), pos_(pos)
   {
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_generic.hpp	(revision 2270)
@@ -23,5 +23,5 @@
 {
   public:
-    CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos,  CGenericAlgorithmTransformation* algo) ;
+    CGridAlgorithmGeneric(CGrid* gridSrc, CGrid* gridDst, int pos,  shared_ptr<CGenericAlgorithmTransformation> algo) ;
     virtual ~CGridAlgorithmGeneric() {} ;
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_no_data_modification.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_no_data_modification.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_algorithm_no_data_modification.hpp	(revision 2270)
@@ -19,5 +19,5 @@
 {
   public:
-    CGridAlgorithmNoDataModification(CGenericAlgorithmTransformation* algo) : CGridAlgorithm(algo) {}
+    CGridAlgorithmNoDataModification(shared_ptr<CGenericAlgorithmTransformation> algo) : CGridAlgorithm(algo) {}
     ~CGridAlgorithmNoDataModification(void) {};
     void computeAlgorithm(void) {} ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_transformation_factory_impl.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_transformation_factory_impl.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/grid_transformation_factory_impl.hpp	(revision 2270)
@@ -33,5 +33,5 @@
   virtual ~CGridTransformationFactory() {}
 
-  static CGenericAlgorithmTransformation* createTransformation(ETranformationType transType, bool isSource,
+  static shared_ptr<CGenericAlgorithmTransformation> createTransformation(ETranformationType transType, bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                CTransformation<T>* transformation,
@@ -45,5 +45,5 @@
 
 public:
-  typedef CGenericAlgorithmTransformation* (*CreateTransformationCallBack)(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  typedef shared_ptr<CGenericAlgorithmTransformation> (*CreateTransformationCallBack)(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                            CTransformation<T>* transformation,
                                                                            int elementPositionInGrid,
@@ -68,5 +68,5 @@
 
 template<typename T>
-CGenericAlgorithmTransformation* CGridTransformationFactory<T>::createTransformation(ETranformationType transType, bool isSource,
+shared_ptr<CGenericAlgorithmTransformation> CGridTransformationFactory<T>::createTransformation(ETranformationType transType, bool isSource,
                                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                                CTransformation<T>* transformation,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.cpp	(revision 2270)
@@ -17,5 +17,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CScalarAlgorithmExtractAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CScalarAlgorithmExtractAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CScalar>* transformation,
                                                                      int elementPositionInGrid,
@@ -35,5 +35,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CScalarAlgorithmExtractAxis(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], extractAxis));
+  return make_shared<CScalarAlgorithmExtractAxis>(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], extractAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_extract_axis.hpp	(revision 2270)
@@ -39,5 +39,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CScalar>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.cpp	(revision 2270)
@@ -18,5 +18,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CScalarAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CScalarAlgorithmReduceAxis::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CScalar>* transformation,
                                                                      int elementPositionInGrid,
@@ -36,5 +36,5 @@
   int axisSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CScalarAlgorithmReduceAxis(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis));
+  return make_shared<CScalarAlgorithmReduceAxis>(isSource, scalarListDestP[scalarDstIndex], axisListSrcP[axisSrcIndex], reduceAxis);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_axis.hpp	(revision 2270)
@@ -37,5 +37,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CScalar>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.cpp	(revision 2270)
@@ -15,5 +15,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CScalarAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CScalarAlgorithmReduceDomain::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CScalar>* transformation,
                                                                      int elementPositionInGrid,
@@ -33,5 +33,5 @@
   int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
 
-  return (new CScalarAlgorithmReduceDomain(isSource, scalarListDestP[scalarDstIndex], domainListSrcP[domainSrcIndex], reduceDomain));
+  return make_shared<CScalarAlgorithmReduceDomain>(isSource, scalarListDestP[scalarDstIndex], domainListSrcP[domainSrcIndex], reduceDomain);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_domain.hpp	(revision 2270)
@@ -40,5 +40,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CScalar>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.cpp	(revision 2270)
@@ -13,5 +13,5 @@
 
 namespace xios {
-CGenericAlgorithmTransformation* CScalarAlgorithmReduceScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+shared_ptr<CGenericAlgorithmTransformation> CScalarAlgorithmReduceScalar::create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                                      CTransformation<CScalar>* transformation,
                                                                      int elementPositionInGrid,
@@ -31,5 +31,5 @@
   int scalarSrcIndex = elementPositionInGridSrc2AxisPosition[elementPositionInGrid];
 
-  return (new CScalarAlgorithmReduceScalar(isSource, scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], reduceScalar));
+  return make_shared<CScalarAlgorithmReduceScalar>(isSource, scalarListDestP[scalarDstIndex], scalarListSrcP[scalarSrcIndex], reduceScalar);
 }
 CATCH
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/scalar_algorithm/scalar_algorithm_reduce_scalar.hpp	(revision 2270)
@@ -33,5 +33,5 @@
 
 public:
-  static CGenericAlgorithmTransformation* create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
+  static shared_ptr<CGenericAlgorithmTransformation> create(bool isSource, CGrid* gridDst, CGrid* gridSrc,
                                                 CTransformation<CScalar>* transformation,
                                                 int elementPositionInGrid,
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/transformation.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/transformation.hpp	(revision 2269)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/transformation.hpp	(revision 2270)
@@ -40,5 +40,5 @@
       virtual const string& getName(void) { ERROR("string Transformation<T>::getId())",<< "unimplemented virtual function for child"); } ;
       virtual const string& getDefName(void) { ERROR("string Transformation<T>::getId())",<< "unimplemented virtual function for child"); } ;
-      virtual CGenericAlgorithmTransformation* createAlgorithm(bool isSource,
+      virtual shared_ptr<CGenericAlgorithmTransformation> createAlgorithm(bool isSource,
                                                                CGrid* gridDst, CGrid* gridSrc,
                                                                int elementPositionInGrid,
