diff --git a/src/libslic3r/Arachne/WallToolPaths.cpp b/src/libslic3r/Arachne/WallToolPaths.cpp
index 14c5b9c03..104c780f5 100644
--- a/src/libslic3r/Arachne/WallToolPaths.cpp
+++ b/src/libslic3r/Arachne/WallToolPaths.cpp
@@ -455,6 +455,9 @@ void removeColinearEdges(Polygons &thiss, const double max_deviation_angle = 0.0
 
 const std::vector<VariableWidthLines> &WallToolPaths::generate()
 {
+    if (this->inset_count < 1)
+        return toolpaths;
+
     const coord_t smallest_segment = Slic3r::Arachne::meshfix_maximum_resolution;
     const coord_t allowed_distance = Slic3r::Arachne::meshfix_maximum_deviation;
     const coord_t epsilon_offset = (allowed_distance / 2) - 1;
diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp
index 1c77688eb..60c21ffba 100644
--- a/src/libslic3r/PerimeterGenerator.cpp
+++ b/src/libslic3r/PerimeterGenerator.cpp
@@ -313,16 +313,8 @@ void PerimeterGenerator::process_arachne()
         ExPolygons last        = offset_ex(surface.expolygon.simplify_p(m_scaled_resolution), - float(ext_perimeter_width / 2. - ext_perimeter_spacing / 2.));
         Polygons   last_p      = to_polygons(last);
 
-        coord_t bead_width_0 = ext_perimeter_spacing;
-        coord_t bead_width_x = perimeter_spacing;
-        coord_t wall_0_inset = 0;
-
-        Arachne::WallToolPaths wallToolPaths(last_p, bead_width_0, bead_width_x, coord_t(loop_number + 1), wall_0_inset, *this->object_config, *this->print_config);
-        wallToolPaths.generate();
-
+        Arachne::WallToolPaths wallToolPaths(last_p, ext_perimeter_spacing, perimeter_spacing, coord_t(loop_number + 1), 0, *this->object_config, *this->print_config);
         std::vector<Arachne::VariableWidthLines> perimeters = wallToolPaths.getToolPaths();
-        if (perimeters.empty())
-            continue;
 
         int start_perimeter = int(perimeters.size()) - 1;
         int end_perimeter   = -1;
@@ -357,7 +349,7 @@ void PerimeterGenerator::process_arachne()
         }
 
         std::vector<bool> processed(all_extrusions.size(), false);                // Indicate that the extrusion was already processed.
-        Point             current_position = all_extrusions.front()->junctions.front().p; // Some starting position.
+        Point             current_position = all_extrusions.empty() ? Point::Zero() : all_extrusions.front()->junctions.front().p; // Some starting position.
         std::vector<const Arachne::ExtrusionLine *> ordered_extrusions;                   // To store our result in. At the end we'll std::swap.
         ordered_extrusions.reserve(all_extrusions.size());