diff --git a/Src/Kernels/Chebyshev/FAbstractChebKernel.hpp b/Src/Kernels/Chebyshev/FAbstractChebKernel.hpp
index 09b051eff9345100f40e4887aeff5a67b5d1caae..c65e4a598d7fdde90ad9a09456c723d7fd587ea9 100755
--- a/Src/Kernels/Chebyshev/FAbstractChebKernel.hpp
+++ b/Src/Kernels/Chebyshev/FAbstractChebKernel.hpp
@@ -22,12 +22,10 @@
 
 #include "../../Components/FAbstractKernels.hpp"
 
-#include "../P2P/FP2P.hpp"
-
+#include "FChebP2PKernels.hpp"
 #include "./FChebInterpolator.hpp"
 
-class FTreeCoordinate;
-template <KERNEL_FUNCCTION_IDENTIFIER Identifier, int NVALS> struct DirectInteactionComputer;
+#include "../../Containers/FTreeCoordinate.hpp"
 
 /**
  * @author Matthias Messner(matthias.messner@inria.fr)
@@ -126,113 +124,20 @@ public:
 	
 	
 
-	void P2P(const FTreeCoordinate& /* LeafCellCoordinate */, // needed for periodic boundary conditions
+    virtual void P2P(const FTreeCoordinate& /* LeafCellCoordinate */, // needed for periodic boundary conditions
 					 ContainerClass* const FRestrict TargetParticles,
                      const ContainerClass* const FRestrict /*SourceParticles*/,
 					 ContainerClass* const NeighborSourceParticles[27],
-					 const int /* size */)
-	{
-        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2P(TargetParticles,NeighborSourceParticles);
-	}
+                     const int /* size */) = 0;
 
 
-    void P2PRemote(const FTreeCoordinate& /*inPosition*/,
+    virtual void P2PRemote(const FTreeCoordinate& /*inPosition*/,
                    ContainerClass* const FRestrict inTargets, const ContainerClass* const FRestrict /*inSources*/,
-                   ContainerClass* const inNeighbors[27], const int /*inSize*/){
-        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2PRemote(inTargets,inNeighbors,27);
-    }
-
-};
-
-
-///////////////////////////////////////////////////////
-// P2P Wrappers
-///////////////////////////////////////////////////////
+                   ContainerClass* const inNeighbors[27], const int /*inSize*/) = 0;
 
-/*! Specialization for Laplace potential */
-template <>
-struct DirectInteactionComputer<ONE_OVER_R, 1>
-{
-    template <typename ContainerClass>
-    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
-                     ContainerClass* const NeighborSourceParticles[27]){
-        FP2P::FullMutual(TargetParticles,NeighborSourceParticles,14);
-    }
-
-    template <typename ContainerClass>
-    static void P2PRemote( ContainerClass* const FRestrict inTargets,
-                           ContainerClass* const inNeighbors[27],
-                           const int inSize){
-        FP2P::FullRemote(inTargets,inNeighbors,inSize);
-    }
 };
 
 
-/*! Specialization for Leonard-Jones potential */
-template <>
-struct DirectInteactionComputer<LEONARD_JONES_POTENTIAL, 1>
-{
-    template <typename ContainerClass>
-    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
-                     ContainerClass* const NeighborSourceParticles[27]){
-        FP2P::FullMutualLJ(TargetParticles,NeighborSourceParticles,14);
-    }
-
-    template <typename ContainerClass>
-    static void P2PRemote( ContainerClass* const FRestrict inTargets,
-                           ContainerClass* const inNeighbors[27],
-                           const int inSize){
-        FP2P::FullRemoteLJ(inTargets,inNeighbors,inSize);
-    }
-};
-
-///////////////////////////////////////////////////////
-// In case of multi right hand side
-///////////////////////////////////////////////////////
-
-template <int NVALS>
-struct DirectInteactionComputer<ONE_OVER_R, NVALS>
-{
-    template <typename ContainerClass>
-    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
-                     ContainerClass* const NeighborSourceParticles[27]){
-        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
-            FP2P::FullMutual(TargetParticles,NeighborSourceParticles,14);
-        }
-    }
-
-    template <typename ContainerClass>
-    static void P2PRemote( ContainerClass* const FRestrict inTargets,
-                           ContainerClass* const inNeighbors[27],
-                           const int inSize){
-        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
-            FP2P::FullRemote(inTargets,inNeighbors,inSize);
-        }
-    }
-};
-
-
-/*! Specialization for Leonard-Jones potential */
-template <int NVALS>
-struct DirectInteactionComputer<LEONARD_JONES_POTENTIAL, NVALS>
-{
-    template <typename ContainerClass>
-    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
-                     ContainerClass* const NeighborSourceParticles[27]){
-        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
-            FP2P::FullMutualLJ(TargetParticles,NeighborSourceParticles,14);
-        }
-    }
-
-    template <typename ContainerClass>
-    static void P2PRemote( ContainerClass* const FRestrict inTargets,
-                           ContainerClass* const inNeighbors[27],
-                           const int inSize){
-        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
-            FP2P::FullRemoteLJ(inTargets,inNeighbors,inSize);
-        }
-    }
-};
 
 
 
diff --git a/Src/Kernels/Chebyshev/FChebKernel.hpp b/Src/Kernels/Chebyshev/FChebKernel.hpp
index 579abcfe99ddeda01f288197ee265b58973b6242..c064d568d882628154dd3862d7327b5e386abc15 100755
--- a/Src/Kernels/Chebyshev/FChebKernel.hpp
+++ b/Src/Kernels/Chebyshev/FChebKernel.hpp
@@ -203,6 +203,22 @@ public:
         }
 	}
 
+    void P2P(const FTreeCoordinate& /* LeafCellCoordinate */, // needed for periodic boundary conditions
+                     ContainerClass* const FRestrict TargetParticles,
+                     const ContainerClass* const FRestrict /*SourceParticles*/,
+                     ContainerClass* const NeighborSourceParticles[27],
+                     const int /* size */)
+    {
+        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2P(TargetParticles,NeighborSourceParticles);
+    }
+
+
+    void P2PRemote(const FTreeCoordinate& /*inPosition*/,
+                   ContainerClass* const FRestrict inTargets, const ContainerClass* const FRestrict /*inSources*/,
+                   ContainerClass* const inNeighbors[27], const int /*inSize*/){
+        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2PRemote(inTargets,inNeighbors,27);
+    }
+
 };
 
 
diff --git a/Src/Kernels/Chebyshev/FChebP2PKernels.hpp b/Src/Kernels/Chebyshev/FChebP2PKernels.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..f54b41c669e098477460e2388b83d6ad6a47c340
--- /dev/null
+++ b/Src/Kernels/Chebyshev/FChebP2PKernels.hpp
@@ -0,0 +1,101 @@
+#ifndef FCHEBP2PKERNELS_HPP
+#define FCHEBP2PKERNELS_HPP
+
+
+#include "../P2P/FP2P.hpp"
+
+template <KERNEL_FUNCCTION_IDENTIFIER Identifier, int NVALS>
+struct DirectInteactionComputer;
+
+///////////////////////////////////////////////////////
+// P2P Wrappers
+///////////////////////////////////////////////////////
+
+/*! Specialization for Laplace potential */
+template <>
+struct DirectInteactionComputer<ONE_OVER_R, 1>
+{
+    template <typename ContainerClass>
+    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
+                     ContainerClass* const NeighborSourceParticles[27]){
+        FP2P::FullMutual(TargetParticles,NeighborSourceParticles,14);
+    }
+
+    template <typename ContainerClass>
+    static void P2PRemote( ContainerClass* const FRestrict inTargets,
+                           ContainerClass* const inNeighbors[27],
+                           const int inSize){
+        FP2P::FullRemote(inTargets,inNeighbors,inSize);
+    }
+};
+
+
+/*! Specialization for Leonard-Jones potential */
+template <>
+struct DirectInteactionComputer<LEONARD_JONES_POTENTIAL, 1>
+{
+    template <typename ContainerClass>
+    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
+                     ContainerClass* const NeighborSourceParticles[27]){
+        FP2P::FullMutualLJ(TargetParticles,NeighborSourceParticles,14);
+    }
+
+    template <typename ContainerClass>
+    static void P2PRemote( ContainerClass* const FRestrict inTargets,
+                           ContainerClass* const inNeighbors[27],
+                           const int inSize){
+        FP2P::FullRemoteLJ(inTargets,inNeighbors,inSize);
+    }
+};
+
+///////////////////////////////////////////////////////
+// In case of multi right hand side
+///////////////////////////////////////////////////////
+
+
+
+template <int NVALS>
+struct DirectInteactionComputer<ONE_OVER_R, NVALS>
+{
+    template <typename ContainerClass>
+    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
+                     ContainerClass* const NeighborSourceParticles[27]){
+        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
+            FP2P::FullMutual(TargetParticles,NeighborSourceParticles,14);
+        }
+    }
+
+    template <typename ContainerClass>
+    static void P2PRemote( ContainerClass* const FRestrict inTargets,
+                           ContainerClass* const inNeighbors[27],
+                           const int inSize){
+        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
+            FP2P::FullRemote(inTargets,inNeighbors,inSize);
+        }
+    }
+};
+
+
+/*! Specialization for Leonard-Jones potential */
+template <int NVALS>
+struct DirectInteactionComputer<LEONARD_JONES_POTENTIAL, NVALS>
+{
+    template <typename ContainerClass>
+    static void P2P(		 ContainerClass* const FRestrict TargetParticles,
+                     ContainerClass* const NeighborSourceParticles[27]){
+        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
+            FP2P::FullMutualLJ(TargetParticles,NeighborSourceParticles,14);
+        }
+    }
+
+    template <typename ContainerClass>
+    static void P2PRemote( ContainerClass* const FRestrict inTargets,
+                           ContainerClass* const inNeighbors[27],
+                           const int inSize){
+        for(int idxRhs = 0 ; idxRhs < NVALS ; ++idxRhs){
+            FP2P::FullRemoteLJ(inTargets,inNeighbors,inSize);
+        }
+    }
+};
+
+#endif // FCHEBP2PKERNELS_HPP
diff --git a/Src/Kernels/Chebyshev/FChebSymKernel.hpp b/Src/Kernels/Chebyshev/FChebSymKernel.hpp
index a9181c68f39baef449bf5d1a6fbc2add1a3c045c..b54556a86e095806d7084380a59a5e63671f0a24 100755
--- a/Src/Kernels/Chebyshev/FChebSymKernel.hpp
+++ b/Src/Kernels/Chebyshev/FChebSymKernel.hpp
@@ -448,6 +448,21 @@ public:
         }
 	}
 
+    void P2P(const FTreeCoordinate& /* LeafCellCoordinate */, // needed for periodic boundary conditions
+                     ContainerClass* const FRestrict TargetParticles,
+                     const ContainerClass* const FRestrict /*SourceParticles*/,
+                     ContainerClass* const NeighborSourceParticles[27],
+                     const int /* size */)
+    {
+        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2P(TargetParticles,NeighborSourceParticles);
+    }
+
+
+    void P2PRemote(const FTreeCoordinate& /*inPosition*/,
+                   ContainerClass* const FRestrict inTargets, const ContainerClass* const FRestrict /*inSources*/,
+                   ContainerClass* const inNeighbors[27], const int /*inSize*/){
+        DirectInteactionComputer<MatrixKernelClass::Identifier, NVALS>::P2PRemote(inTargets,inNeighbors,27);
+    }
 
 };