diff --git a/Src/Kernels/Taylor/FTaylorKernel.hpp b/Src/Kernels/Taylor/FTaylorKernel.hpp
index 27f69155175b4092b23ba86bac96e4fbe6630e79..d055d60b6689cbfcbd74db30a5a93291066acdf2 100644
--- a/Src/Kernels/Taylor/FTaylorKernel.hpp
+++ b/Src/Kernels/Taylor/FTaylorKernel.hpp
@@ -802,10 +802,16 @@ public:
   
   /**
    *@brief Translate the local expansion of parent cell to child cell
+
+   * Sur une cellule,  \f$\mathcal{C}_l\f$, du niveau \f$l\f$ de centre \f$\mathbf{x}_p\f$, on a le développement local du potentiel suivant
    * \f[
-   * L_{son} = \sum_{i=k}^{l} L_{i} (x_{son}-x_{father})^{i-k} \binom{i}{k}
-   *\f]
+   * V(x) = \sum_{\mathbf{k}=0}^{P}{O_\mathbf{k}\; (\mathbf{x}-\mathbf{x}_p)^\mathbf{k}}.\f]
+   *Soit \f$\mathbf{x}_f\f$ le centre d'une cellule fille de  \f$\mathcal{C}_l\f$, le potentiel s'écrit alors
+   * \f[ V(x) = \sum_{\mathbf{n}=0}^{P}{L_\mathbf{n} (\mathbf{x}-\mathbf{x}_f)^\mathbf{n}} \f]
+   * avec 
+   * \f[ L_\mathbf{n} = \sum_{\mathbf{k}=\mathbf{n}}^{\mathbf{p}}{C^\mathbf{n}_\mathbf{k}  O_\mathbf{k-n}\;(\mathbf{x}_f-\mathbf{x}_p)^\mathbf{k-n}}.\f] 
    */
+<<<<<<< HEAD
   void L2L(const CellClass* const FRestrict local, 
 	   CellClass* FRestrict * const FRestrict child, 
 	   const int inLevel)
@@ -824,18 +830,51 @@ public:
 	b=0;
 	c=0;
 	FPoint childCenter = getCellCenter(child[idxChild]->getCoordinate(),inLevel+1);
+=======
+  void L2L(const CellClass* const FRestrict fatherCell, 
+	   CellClass* FRestrict * const FRestrict childCell, 
+	   const int /*inLevel*/)
+  {
+    FPoint locCenter = getLeafCenter(fatherCell->getCoordinate());
+    // Get father local expansion
+    const FReal*   fatherExpansion = fatherCell->getLocal()  ;
+    FReal dx,  dy,  dz, coeff;
+    int ap, bp, cp,af, bf, cf ;
+    //
+    // For all children
+    for(int idxChild = 0 ; idxChild < 8 ; ++idxChild){
+      // if child exists
+      if(childCell[idxChild]){
+	FReal*   childExpansion = childCell[idxChild]->getLocal() ;
+	FPoint childCenter = getLeafCenter(childCell[idxChild]->getCoordinate());
+>>>>>>> 36e56db26445e1f6668fde3fc25c87666917299d
 	//Set the distance between centers of cells
+	// Child - father
 	dx = childCenter.getX()-locCenter.getX();
 	dy = childCenter.getY()-locCenter.getY();
 	dz = childCenter.getZ()-locCenter.getZ();
+	// Precompute the  arrays of dx^i
+	arrayDX[0] = 1.0 ;
+	arrayDY[0] = 1.0 ;
+	arrayDZ[0] = 1.0 ;
+	for (int i = 1 ; i <= P ; ++i) 	{
+	  arrayDX[i] = dx * arrayDX[i-1] ;
+	  arrayDY[i] = dy * arrayDY[i-1] ; 
+	  arrayDZ[i] = dz * arrayDZ[i-1] ;
+	}
+	//
 	//iterator over child's local expansion (to be filled)
-	for(int k=0 ; k<SizeVector ; k++){
-	  
+	af=0;	bf=0;	cf=0;
+	for(int k=0 ; k<SizeVector ; ++k){
+	  //	  
 	  //Iterator over parent's local array
-	  for(int i=k ; i<SizeVector ; i++){
-	    (child[idxChild]->getLocal())[k] = (local->getLocal())[i]*FMath::pow(dx,a)*FMath::pow(dy,b)*FMath::pow(dz,c)*combin(i,k);
+	  ap=0;	bp=0;	cp=0;
+	  for(int i=k ; i<SizeVector ; ++i){
+	    coeff = combin(ap,af)* combin(bp,bf)* combin(cp,cf);
+	    childExpansion[k] += coeff*fatherExpansion[i-k]*arrayDX[ap]*arrayDY[bp]*arrayDZ[cp] ;
+	    incPowers(&ap,&bp,&cp);
 	  }
-	  incPowers(&a,&b,&c);
+	  incPowers(&af,&bf,&cf);
 	}	
       }
     }