diff --git a/Src/Utils/FGlobal.hpp b/Src/Utils/FGlobal.hpp
index 9f4f3b1a85f2dce59b36315c47fd949e4c150c92..34d6fe71c208ed0f1062a9db70af62e99b84f17d 100755
--- a/Src/Utils/FGlobal.hpp
+++ b/Src/Utils/FGlobal.hpp
@@ -95,5 +95,14 @@ typedef long long MortonIndex;
     #endif
 #endif
 
+
+///////////////////////////////////////////////////////
+// Test OMP4
+///////////////////////////////////////////////////////
+
+#if _OPENMP >= 201307
+#define ScalFMM_USE_OMP4
+#endif
+
 #endif //FGLOBAL_HPP
 
diff --git a/Tests/noDist/testBlockedAlgorithm.cpp b/Tests/noDist/testBlockedAlgorithm.cpp
index 6f0b945d4f93398e7341c8bfcebbabd16ec7b3b2..3f5ef766da129d7ddfbedc294f63d9d1437bcb3b 100644
--- a/Tests/noDist/testBlockedAlgorithm.cpp
+++ b/Tests/noDist/testBlockedAlgorithm.cpp
@@ -1,3 +1,5 @@
+#include "../../Src/Utils/FGlobal.hpp"
+
 #include "../../Src/GroupTree/FGroupTree.hpp"
 
 #include "../../Src/Components/FSimpleLeaf.hpp"
@@ -29,15 +31,23 @@ int main(int argc, char* argv[]){
         "The size of the block of the blocked tree"
     };
     FHelpDescribeAndExit(argc, argv, "Test the blocked tree by counting the particles.",
-                         FParameterDefinitions::OctreeHeight,
+                         FParameterDefinitions::OctreeHeight, FParameterDefinitions::NbThreads,
                          FParameterDefinitions::NbParticles, LocalOptionBlocSize);
     // Initialize the types
     typedef FTestCell                                                       GroupCellClass;
     typedef FGroupTestParticleContainer                                     GroupContainerClass;
     typedef FGroupTree< GroupCellClass, GroupContainerClass, 2, long long int>  GroupOctreeClass;
     typedef FTestKernels< GroupCellClass, GroupContainerClass >                       GroupKernelClass;
+#ifdef ScalFMM_USE_STARPU
+    typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#elif defined(ScalFMM_USE_OMP4)
+    // Set the number of threads
+    omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads()));
+    typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#else
     //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
-typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+    typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#endif
 
     typedef FTestCell                   CellClass;
     typedef FTestParticleContainer      ContainerClass;
diff --git a/Tests/noDist/testBlockedChebyshev.cpp b/Tests/noDist/testBlockedChebyshev.cpp
index 9d50299928be5c3b23f4e697c218e35835f08309..345d0e7f3a9ee1b68ec0f8eb5d8fba800726c44b 100644
--- a/Tests/noDist/testBlockedChebyshev.cpp
+++ b/Tests/noDist/testBlockedChebyshev.cpp
@@ -1,3 +1,4 @@
+#include "../../Src/Utils/FGlobal.hpp"
 
 #include "../../Src/GroupTree/FGroupTree.hpp"
 
@@ -42,8 +43,6 @@ int main(int argc, char* argv[]){
                          FParameterDefinitions::OctreeHeight,FParameterDefinitions::InputFile,
                          FParameterDefinitions::NbParticles, FParameterDefinitions::NbThreads,
                          LocalOptionBlocSize, LocalOptionNoValidate);
-    // Set the number of threads
-    omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads()));
 
     // Initialize the types
     static const int ORDER = 6;
@@ -52,9 +51,16 @@ int main(int argc, char* argv[]){
     typedef FP2PGroupParticleContainer<>          GroupContainerClass;
     typedef FGroupTree< GroupCellClass, GroupContainerClass, 5, FReal>  GroupOctreeClass;
     typedef FChebSymKernel<GroupCellClass,GroupContainerClass,MatrixKernelClass,ORDER> GroupKernelClass;
-    //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
-    //typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#ifdef ScalFMM_USE_STARPU
+    typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#elif defined(ScalFMM_USE_OMP4)
+    // Set the number of threads
+    omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads()));
     typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#else
+    //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+    typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#endif
 
     // Get params
     const int NbLevels      = FParameters::getValue(argc,argv,FParameterDefinitions::OctreeHeight.options, 5);
diff --git a/Tests/noDist/testBlockedRotation.cpp b/Tests/noDist/testBlockedRotation.cpp
index a85d2860c990742458c492c6981665885ca7d5c9..330b134e5f6a7a8f99248eb6343ec06299d5b9f3 100644
--- a/Tests/noDist/testBlockedRotation.cpp
+++ b/Tests/noDist/testBlockedRotation.cpp
@@ -1,3 +1,5 @@
+#include "../../Src/Utils/FGlobal.hpp"
+
 #include "../../Src/GroupTree/FGroupTree.hpp"
 
 #include "../../Src/Components/FSimpleLeaf.hpp"
@@ -41,19 +43,23 @@ int main(int argc, char* argv[]){
                           FParameterDefinitions::NbThreads,
                          FParameterDefinitions::NbParticles, LocalOptionBlocSize, LocalOptionNoValidate);
 
-    // Set the number of threads
-    omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads()));
-
-
     // Initialize the types
     static const int P = 9;
     typedef FRotationCell<P>               GroupCellClass;
     typedef FP2PGroupParticleContainer<>          GroupContainerClass;
     typedef FGroupTree< GroupCellClass, GroupContainerClass, 5, FReal>  GroupOctreeClass;
     typedef FRotationKernel< GroupCellClass, GroupContainerClass , P>   GroupKernelClass;
-    //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
-    //typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#ifdef ScalFMM_USE_STARPU
+    typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#elif defined(ScalFMM_USE_OMP4)
+    // Set the number of threads
+    omp_set_num_threads(FParameters::getValue(argc,argv,FParameterDefinitions::NbThreads.options, omp_get_max_threads()));
     typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#else
+    //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+    typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, GroupCellClass, GroupKernelClass, typename GroupOctreeClass::ParticleGroupClass, GroupContainerClass > GroupAlgorithm;
+#endif
+
 
     // Get params
     const int NbLevels      = FParameters::getValue(argc,argv,FParameterDefinitions::OctreeHeight.options, 5);
diff --git a/Tests/noDist/testBlockedTree.cpp b/Tests/noDist/testBlockedTree.cpp
index 9b67cefb033315c71e943c96bfd13bb02b56d2ad..2d0eb6a9d57edc60f7fd53e64f1351116f10d5b4 100644
--- a/Tests/noDist/testBlockedTree.cpp
+++ b/Tests/noDist/testBlockedTree.cpp
@@ -1,3 +1,4 @@
+#include "../../Src/Utils/FGlobal.hpp"
 
 #include "../../Src/GroupTree/FGroupTree.hpp"
 
@@ -24,6 +25,8 @@
 #include "../../Src/Files/FFmaGenericLoader.hpp"
 
 #include "../../Src/GroupTree/FGroupSeqAlgorithm.hpp"
+#include "../../Src/GroupTree/FGroupTaskAlgorithm.hpp"
+#include "../../Src/GroupTree/FGroupTaskDepAlgorithm.hpp"
 #include "../../Src/GroupTree/FP2PGroupParticleContainer.hpp"
 
 #include "../../Src/Utils/FParameterNames.hpp"
@@ -84,7 +87,14 @@ int main(int argc, char* argv[]){
 
 
     typedef FRotationKernel< CellClass, FP2PGroupParticleContainer<> , P>   KernelClass;
-    typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm;
+#ifdef ScalFMM_USE_STARPU
+    typedef FGroupStarPUAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm;
+#elif defined(ScalFMM_USE_OMP4)
+    typedef FGroupTaskDepAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm;
+#else
+    //typedef FGroupSeqAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm;
+    typedef FGroupTaskAlgorithm<GroupOctreeClass, typename GroupOctreeClass::CellGroupClass, CellClass, KernelClass, typename GroupOctreeClass::ParticleGroupClass, FP2PGroupParticleContainer<> > GroupAlgorithm;
+#endif
 
     KernelClass kernel(NbLevels, loader.getBoxWidth(), loader.getCenterOfBox());
     GroupAlgorithm algo(&groupedTree2,&kernel);