diff --git a/CMakeLists.txt b/CMakeLists.txt
index f80b8e977697e1ab11c8bfcffea3e7e068724a09..7f2eab40b2c21b365065edb196c710259e2c1929 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -248,7 +248,6 @@ SET(HDRS_UTILS
   include/core/utils/check_log.h
   include/core/utils/converter.h
   include/core/utils/eigen_assert.h
-  include/core/utils/graph_search.h
   include/core/utils/loader.h
   include/core/utils/logging.h
   include/core/utils/params_server.h
@@ -346,7 +345,6 @@ SET(SRCS_TREE_MANAGER
 SET(SRCS_UTILS
   src/utils/check_log.cpp
   src/utils/converter_utils.cpp
-  src/utils/graph_search.cpp
   src/utils/loader.cpp
   src/utils/params_server.cpp
   )
diff --git a/include/core/utils/graph_search.h b/include/core/utils/graph_search.h
deleted file mode 100644
index 549c1f1dec8f5b45579904ac5ec1f0adebbca593..0000000000000000000000000000000000000000
--- a/include/core/utils/graph_search.h
+++ /dev/null
@@ -1,65 +0,0 @@
-//--------LICENSE_START--------
-//
-// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
-// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
-// All rights reserved.
-//
-// This file is part of WOLF
-// WOLF is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-//--------LICENSE_END--------
-#ifndef GRAPH_SEARCH_H
-#define GRAPH_SEARCH_H
-
-#include "core/common/wolf.h"
-#include "core/frame/frame_base.h"
-#include "core/factor/factor_base.h"
-
-#include <map>
-
-namespace wolf
-{
-
-class GraphSearch
-{
-    private:
-
-        std::map<FrameBasePtr, std::pair<FactorBasePtr,FrameBasePtr>> parents_;
-
-    public:
-
-        GraphSearch();
-
-        ~GraphSearch();
-
-        FactorBasePtrList computeShortestPath(FrameBasePtr frm1,
-                                              FrameBasePtr frm2,
-                                              const unsigned int max_graph_dist = 0);
-
-        std::set<FrameBasePtr> getNeighborFrames(const std::set<FrameBasePtr>& frms);
-
-        static FactorBasePtrList shortestPath(FrameBasePtr frm1,
-                                              FrameBasePtr frm2,
-                                              const unsigned int max_graph_dist = 0)
-        {
-            GraphSearch graph_search;
-
-            return graph_search.computeShortestPath(frm1, frm2, max_graph_dist);
-        }
-
-};
-
-
-}  // namespace wolf
-#endif
diff --git a/src/utils/graph_search.cpp b/src/utils/graph_search.cpp
deleted file mode 100644
index 20dc65e0e7040cfe92c7d6a39b14f66092ef3f14..0000000000000000000000000000000000000000
--- a/src/utils/graph_search.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-//--------LICENSE_START--------
-//
-// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
-// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
-// All rights reserved.
-//
-// This file is part of WOLF
-// WOLF is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-//--------LICENSE_END--------
-#include "core/utils/graph_search.h"
-
-using namespace wolf;
-
-GraphSearch::GraphSearch() :
-                    parents_()
-{
-
-}
-
-GraphSearch::~GraphSearch()
-{
-
-}
-
-FactorBasePtrList GraphSearch::computeShortestPath(FrameBasePtr frm1,
-                                                   FrameBasePtr frm2,
-                                                   const unsigned int max_graph_dist)
-{
-    //WOLF_INFO("GraphSearch::computeShortestPath: from frame ", frm1->id(), " to frame ", frm2->id());
-
-    std::set<FrameBasePtr> frm_neigs({frm1});
-    parents_[frm1] = std::pair<FactorBasePtr,FrameBasePtr>(nullptr, nullptr);
-    unsigned int depth = 0;
-
-    //WOLF_INFO(frm1->id());
-
-    while (not frm_neigs.empty())
-    {
-        frm_neigs = getNeighborFrames(frm_neigs);
-        depth++;
-
-        //if (not frm_neigs.empty())
-        //{
-        //    std::string frm_neigs_str(depth, '.');
-        //    for (auto frm : frm_neigs)
-        //        frm_neigs_str += std::to_string(frm->id()) + std::string(" ");
-        //    WOLF_INFO(frm_neigs_str);
-        //}
-
-        // finish
-        if (frm_neigs.count(frm2) != 0)
-        {
-            //WOLF_INFO("Frame ", frm2->id(), " found!");
-
-            assert(parents_.count(frm2) != 0);
-            FactorBasePtrList factor_path;
-            auto frm_it = frm2;
-
-            while (frm_it != frm1)
-            {
-                factor_path.push_back(parents_.at(frm_it).first);
-                frm_it = parents_.at(frm_it).second;
-            }
-
-            return factor_path;
-        }
-
-        // stop
-        if (max_graph_dist > 0 and depth == max_graph_dist)
-            break;
-    }
-    //WOLF_INFO("Path to frame ", frm2->id(), " NOT found!");
-
-    return FactorBasePtrList();
-}
-
-std::set<FrameBasePtr> GraphSearch::getNeighborFrames(const std::set<FrameBasePtr>& frms)
-{
-    std::set<FrameBasePtr> frm_neigs;
-
-    for (auto frm : frms)
-    {
-        // get constrained by factors
-        FactorBasePtrList facs_by = frm->getConstrainedByList();
-
-        // Iterate over all factors_by
-        for (auto && fac_by : facs_by)
-        {
-            //WOLF_INFO_COND(fac_by, "fac_by: ", fac_by->id());
-            //WOLF_INFO_COND(fac_by->getFrame(), "fac_by->getFrame(): ", fac_by->getFrame()->id());
-            if (fac_by and
-                fac_by->getFrame() and
-                parents_.count(fac_by->getFrame()) == 0)
-            {
-                //WOLF_INFO("registering");
-                frm_neigs.insert(fac_by->getFrame());
-                parents_[fac_by->getFrame()] = std::pair<FactorBasePtr,FrameBasePtr>(fac_by, frm);
-            }
-        }
-
-        // get the factors of this frame
-        FactorBasePtrList facs_own;
-        frm->getFactorList(facs_own);
-
-        // Iterate over all factors_own
-        for (auto && fac_own : facs_own)
-        {
-            //WOLF_INFO_COND(fac_own, "fac_own: ", fac_own->id());
-            //WOLF_INFO_COND(fac_own->getFrameOtherList().empty(), "fac_own->getFrameOtherList() is empty");
-            if (fac_own and not fac_own->getFrameOtherList().empty())
-                for (auto frm_other_w : fac_own->getFrameOtherList())
-                {
-                    auto frm_other = frm_other_w.lock();
-                    //WOLF_INFO_COND(frm_other, "frm_other ", frm_other->id());
-                    if (frm_other and
-                        parents_.count(frm_other) == 0)
-                    {
-                        //WOLF_INFO("registering");
-                        frm_neigs.insert(frm_other);
-                        parents_[frm_other] = std::pair<FactorBasePtr,FrameBasePtr>(fac_own, frm);
-                    }
-                }
-        }
-    }
-
-    return frm_neigs;
-}
-
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 29fc45531a4b0de27c1c227883260b71913c96ab..b0396e22fd240af38382d5bcfcd058e691c1116b 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -80,10 +80,6 @@ target_link_libraries(gtest_feature_base ${PLUGIN_NAME})
 wolf_add_gtest(gtest_frame_base gtest_frame_base.cpp)
 target_link_libraries(gtest_frame_base ${PLUGIN_NAME})
 
-# GraphSearch class test
-wolf_add_gtest(gtest_graph_search gtest_graph_search.cpp)
-target_link_libraries(gtest_graph_search ${PLUGIN_NAME})
-
 # HasStateBlocks classes test
 wolf_add_gtest(gtest_has_state_blocks gtest_has_state_blocks.cpp)
 target_link_libraries(gtest_has_state_blocks ${PLUGIN_NAME})
diff --git a/test/gtest_graph_search.cpp b/test/gtest_graph_search.cpp
deleted file mode 100644
index 43d4b57242a3bb7d1e4532b893d34fcb47fcfcb2..0000000000000000000000000000000000000000
--- a/test/gtest_graph_search.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-//--------LICENSE_START--------
-//
-// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
-// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
-// All rights reserved.
-//
-// This file is part of WOLF
-// WOLF is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Lesser General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-//--------LICENSE_END--------
-/*
- * gtest_graph_search.cpp
- *
- *  Created on: Jul, 2021
- *      Author: jvallve
- */
-
-#include "core/utils/utils_gtest.h"
-
-#include "core/problem/problem.h"
-#include "core/capture/capture_void.h"
-#include "core/factor/factor_relative_pose_2d.h"
-#include "core/utils/graph_search.h"
-
-#include <iostream>
-#include <thread>
-
-using namespace wolf;
-using namespace Eigen;
-
-class GraphSearchTest : public testing::Test
-{
-    public:
-        ProblemPtr problem;
-
-        void SetUp() override
-        {
-            problem = Problem::create("PO", 2);
-        }
-
-        FrameBasePtr emplaceFrame(const TimeStamp& ts)
-        {
-            return problem->emplaceFrame(ts, Vector3d::Zero());
-        }
-
-        FactorBasePtr createFactor(FrameBasePtr frm1, FrameBasePtr frm2)
-        {
-            auto C12 = CaptureBase::emplace<CaptureVoid>(frm2, frm2->getTimeStamp(), nullptr);
-            auto f12 = FeatureBase::emplace<FeatureBase>(C12, "odom", Vector3d::Zero(), Matrix3d::Identity());
-            return FactorBase::emplace<FactorRelativePose2d>(f12, f12, frm1, nullptr, false, TOP_MOTION);
-        }
-};
-
-TEST_F(GraphSearchTest, setup)
-{
-    ASSERT_TRUE(problem->check());
-}
-
-TEST_F(GraphSearchTest, nonsense11)
-{
-    auto F1 = emplaceFrame(1);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F1, 10);
-
-    ASSERT_TRUE(fac_list.empty());
-}
-
-TEST_F(GraphSearchTest, single12)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto fac12 = createFactor(F1,F2);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F2, 10);
-
-    ASSERT_EQ(fac_list.size(), 1);
-    ASSERT_EQ(fac_list.front(), fac12);
-}
-
-TEST_F(GraphSearchTest, single21)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto fac12 = createFactor(F1,F2);
-
-    auto fac_list = GraphSearch::shortestPath(F2, F1, 10);
-
-    ASSERT_EQ(fac_list.size(), 1);
-    ASSERT_EQ(fac_list.front(), fac12);
-}
-
-TEST_F(GraphSearchTest, double12)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto fac12 = createFactor(F1,F2);
-    auto fac12b = createFactor(F1,F2);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F2, 10);
-
-    ASSERT_EQ(fac_list.size(), 1);
-    ASSERT_TRUE(fac_list.front() == fac12 or fac_list.front() == fac12b);
-}
-
-TEST_F(GraphSearchTest, no_solution12)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto F3 = emplaceFrame(3);
-    auto fac23 = createFactor(F2,F3);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F2, 10);
-
-    ASSERT_TRUE(fac_list.empty());
-}
-
-TEST_F(GraphSearchTest, no_solution21)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto F3 = emplaceFrame(3);
-    auto fac23 = createFactor(F2,F3);
-
-    auto fac_list = GraphSearch::shortestPath(F2, F1, 10);
-
-    ASSERT_TRUE(fac_list.empty());
-}
-
-TEST_F(GraphSearchTest, large)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto F3 = emplaceFrame(3);
-    auto F4 = emplaceFrame(4);
-    auto F5 = emplaceFrame(5);
-    auto F6 = emplaceFrame(6);
-    auto F7 = emplaceFrame(7);
-    auto F8 = emplaceFrame(8);
-    auto F9 = emplaceFrame(9);
-
-    auto fac12 = createFactor(F1,F2);
-    auto fac23 = createFactor(F2,F3);
-    auto fac34 = createFactor(F3,F4);
-    auto fac45 = createFactor(F4,F5);
-    auto fac56 = createFactor(F5,F6);
-    auto fac67 = createFactor(F6,F7);
-    auto fac78 = createFactor(F7,F8);
-    auto fac89 = createFactor(F8,F9);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F9, 8);
-
-    ASSERT_EQ(fac_list.size(), 8);
-
-    auto fac_list_2 = GraphSearch::shortestPath(F1, F9, 7);
-
-    ASSERT_EQ(fac_list_2.size(), 0);
-}
-
-TEST_F(GraphSearchTest, large_no_solution)
-{
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto F3 = emplaceFrame(3);
-    auto F4 = emplaceFrame(4);
-    auto F5 = emplaceFrame(5);
-    auto F6 = emplaceFrame(6);
-    auto F7 = emplaceFrame(7);
-    auto F8 = emplaceFrame(8);
-    auto F9 = emplaceFrame(9);
-
-    auto fac12 = createFactor(F1,F2);
-    auto fac23 = createFactor(F2,F3);
-    auto fac34 = createFactor(F3,F4);
-    auto fac45 = createFactor(F4,F5);
-
-    auto fac67 = createFactor(F6,F7);
-    auto fac78 = createFactor(F7,F8);
-    auto fac89 = createFactor(F8,F9);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F9, 10);
-
-    ASSERT_EQ(fac_list.size(), 0);
-
-    auto fac_list_2 = GraphSearch::shortestPath(F9, F1, 10);
-
-    ASSERT_EQ(fac_list_2.size(), 0);
-}
-
-TEST_F(GraphSearchTest, large_dense)
-{
-    /*  -------         ---------------
-     * |       |       |               |
-     * 1---2---3---4---5---6---7---8---9
-     *         |           |
-     *          -----------
-     */
-
-    auto F1 = emplaceFrame(1);
-    auto F2 = emplaceFrame(2);
-    auto F3 = emplaceFrame(3);
-    auto F4 = emplaceFrame(4);
-    auto F5 = emplaceFrame(5);
-    auto F6 = emplaceFrame(6);
-    auto F7 = emplaceFrame(7);
-    auto F8 = emplaceFrame(8);
-    auto F9 = emplaceFrame(9);
-
-    auto fac12 = createFactor(F1,F2);
-    auto fac13 = createFactor(F1,F3);
-    auto fac23 = createFactor(F2,F3);
-    auto fac34 = createFactor(F3,F4);
-    auto fac36 = createFactor(F3,F6);
-    auto fac45 = createFactor(F4,F5);
-    auto fac56 = createFactor(F5,F6);
-    auto fac59 = createFactor(F5,F9);
-    auto fac67 = createFactor(F6,F7);
-    auto fac78 = createFactor(F7,F8);
-    auto fac89 = createFactor(F8,F9);
-
-    auto fac_list = GraphSearch::shortestPath(F1, F9, 10);
-
-    ASSERT_EQ(fac_list.size(), 4);
-
-    auto fac_list_2 = GraphSearch::shortestPath(F9, F1, 10);
-
-    ASSERT_EQ(fac_list_2.size(), 4);
-}
-
-int main(int argc, char **argv)
-{
-    testing::InitGoogleTest(&argc, argv);
-    return RUN_ALL_TESTS();
-}
-
-