diff --git a/Tests/noDist/AlgoLoaderThreadBalance.hpp b/Tests/noDist/AlgoLoaderThreadBalance.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..8df2597758a95b18027dd65cbd60d4d3ce54549a
--- /dev/null
+++ b/Tests/noDist/AlgoLoaderThreadBalance.hpp
@@ -0,0 +1,60 @@
+// ==== CMAKE ====
+// Keep in private GIT
+// @SCALFMM_PRIVATE
+
+#ifndef _ALGOLOADERTHREADBALANCE_HPP_
+#define _ALGOLOADERTHREADBALANCE_HPP_
+
+#include <memory>
+#include <sstream>
+
+#include "PerfTestUtils.hpp"
+
+#include "Core/FFmmAlgorithmThreadBalance.hpp"
+
+
+template <class _TreeLoader, template<typename> class _KernelLoader>
+class AlgoLoaderThreadBalance : public FAlgoLoader<_TreeLoader, _KernelLoader> {
+public:
+    using TreeLoader     = _TreeLoader;
+    using KernelLoader   = _KernelLoader<TreeLoader>;
+
+    using FReal          = typename TreeLoader::FReal;
+    using CellClass      = typename TreeLoader::CellClass;
+    using ContainerClass = typename TreeLoader::ContainerClass;
+    using LeafClass      = typename TreeLoader::LeafClass;
+    using OctreeClass    = typename TreeLoader::OctreeClass;
+    using KernelClass    = typename KernelLoader::KernelClass;
+
+    using FMMClass = FFmmAlgorithmThreadBalance<OctreeClass, CellClass, ContainerClass, KernelClass, LeafClass>;
+    
+    TreeLoader& _treeLoader;
+    KernelLoader& _kernelLoader;
+
+    std::unique_ptr<FMMClass> _algo;
+
+    AlgoLoaderThreadBalance(FPerfTestParams& params,
+                     TreeLoader& treeLoader,
+                     KernelLoader& kernelLoader) :
+        _treeLoader(treeLoader),
+        _kernelLoader(kernelLoader),
+        _algo(nullptr) {
+        
+    }
+
+    void run() {
+        _algo = std::unique_ptr<FMMClass>(
+            new FMMClass(&(_treeLoader._tree), &(_kernelLoader._kernel)));
+
+        _algo->execute();
+    }
+
+
+    virtual std::string getRunInfoString() const {
+        return "";
+    }
+
+
+};
+
+#endif
diff --git a/Tests/noDist/PerfTest.cpp b/Tests/noDist/PerfTest.cpp
index e988bb3be2c134cf5aed9fb9ae3f07e7c3bd5447..ee40ffb219a1e07cad4c963ac971d8a074a4ecec 100644
--- a/Tests/noDist/PerfTest.cpp
+++ b/Tests/noDist/PerfTest.cpp
@@ -31,6 +31,7 @@
 #include "AlgoLoaderTask.hpp"
 #include "AlgoLoaderSectionTask.hpp"
 #include "AlgoLoaderCostZones.hpp"
+#include "AlgoLoaderThreadBalance.hpp"
 
 /**
  * \brief Runs a generic sequence of actions to use an algorithm.
@@ -115,6 +116,8 @@ int main (int argc, char** argv)
         runperf<TreeLoaderFCheb<>, KernelLoaderFChebSym, AlgoLoaderCostZones>(params);
     } else if ( "sectiontask" == params.algo ) {
         runperf<TreeLoaderFCheb<>, KernelLoaderFChebSym, AlgoLoaderSectionTask>(params);
+    } else if ( "autobalance" == params.algo ) {
+        runperf<TreeLoaderFCheb<>, KernelLoaderFChebSym, AlgoLoaderThreadBalance>(params);
     } else {
         std::cout << "Unknown algorithm: " << params.algo << std::endl;
     }