diff --git a/src/libslic3r/SLA/BranchingTreeSLA.cpp b/src/libslic3r/SLA/BranchingTreeSLA.cpp
index 7d6f0b95d..1ad0fd93f 100644
--- a/src/libslic3r/SLA/BranchingTreeSLA.cpp
+++ b/src/libslic3r/SLA/BranchingTreeSLA.cpp
@@ -128,8 +128,8 @@ public:
 
     void report_unroutable(const branchingtree::Node &j) override
     {
-        BOOST_LOG_TRIVIAL(error) << "Cannot route junction at " << j.pos.x()
-                                 << " " << j.pos.y() << " " << j.pos.z();
+        BOOST_LOG_TRIVIAL(warning) << "Cannot route junction at " << j.pos.x()
+                                   << " " << j.pos.y() << " " << j.pos.z();
 
         // Discard all the support points connecting to this branch.
         discard_subtree(j.id);
diff --git a/src/libslic3r/SLA/SupportTreeUtils.hpp b/src/libslic3r/SLA/SupportTreeUtils.hpp
index 41a1968b4..2d0fd859e 100644
--- a/src/libslic3r/SLA/SupportTreeUtils.hpp
+++ b/src/libslic3r/SLA/SupportTreeUtils.hpp
@@ -591,8 +591,9 @@ GroundConnection deepsearch_ground_connection(
         if (bridge_len > EPSILON)
             conn.path.emplace_back(Junction{bridge_end, bridge_r});
 
-        conn.pillar_base =
-            Pedestal{gp, sm.cfg.base_height_mm, base_r, end_radius};
+        if (bridge_end.z() >= gndlvl)
+            conn.pillar_base =
+                Pedestal{gp, sm.cfg.base_height_mm, base_r, end_radius};
     }
 
     return conn;
diff --git a/tests/sla_print/sla_supptreeutils_tests.cpp b/tests/sla_print/sla_supptreeutils_tests.cpp
index d529eefb5..8d1029152 100644
--- a/tests/sla_print/sla_supptreeutils_tests.cpp
+++ b/tests/sla_print/sla_supptreeutils_tests.cpp
@@ -263,6 +263,24 @@ TEST_CASE("Avoid disk below junction with barrier on the side", "[suptreeutils]"
     }
 }
 
+TEST_CASE("Find ground route just above ground", "[suptreeutils]") {
+    using namespace Slic3r;
+
+    sla::SupportTreeConfig cfg;
+    cfg.object_elevation_mm = 0.;
+
+    sla::Junction j{Vec3d{0., 0., 2. * cfg.head_back_radius_mm}, cfg.head_back_radius_mm};
+
+    sla::SupportableMesh sm{{}, sla::SupportPoints{}, cfg};
+
+    sla::GroundConnection conn =
+        sla::deepsearch_ground_connection(ex_seq, sm, j, Geometry::spheric_to_dir(3 * PI/ 4, PI));
+
+    REQUIRE(conn);
+
+    REQUIRE(conn.pillar_base->pos.z() >= Approx(ground_level(sm)));
+}
+
 TEST_CASE("BranchingSupports::MergePointFinder", "[suptreeutils]") {
     using namespace Slic3r;
 
diff --git a/tests/sla_print/sla_test_utils.cpp b/tests/sla_print/sla_test_utils.cpp
index e097a3bb7..b601cef11 100644
--- a/tests/sla_print/sla_test_utils.cpp
+++ b/tests/sla_print/sla_test_utils.cpp
@@ -181,6 +181,18 @@ void test_supports(const std::string          &obj_filename,
     if (std::abs(supportcfg.object_elevation_mm) < EPSILON)
         allowed_zmin = zmin - 2 * supportcfg.head_back_radius_mm;
 
+#ifndef NDEBUG
+    if (!(obb.min.z() >= Approx(allowed_zmin)) || !(obb.max.z() <= Approx(zmax)))
+    {
+        indexed_triangle_set its;
+        treebuilder.retrieve_full_mesh(its);
+        TriangleMesh m{its};
+        m.merge(mesh);
+        m.WriteOBJFile((Catch::getResultCapture().getCurrentTestName() + "_" +
+                        obj_filename).c_str());
+    }
+#endif
+
     REQUIRE(obb.min.z() >= Approx(allowed_zmin));
     REQUIRE(obb.max.z() <= Approx(zmax));