diff --git a/src/libslic3r/SLA/SLABasePool.cpp b/src/libslic3r/SLA/SLABasePool.cpp
index a819d16ca..598e6f66d 100644
--- a/src/libslic3r/SLA/SLABasePool.cpp
+++ b/src/libslic3r/SLA/SLABasePool.cpp
@@ -458,7 +458,7 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out,
                       const PoolConfig& cfg)
 {
 
-    double mergedist = 2*(1.8*cfg.min_wall_thickness_mm /*+ 4*cfg.edge_radius_mm*/)+
+    double mergedist = 2*(1.8*cfg.min_wall_thickness_mm + 4*cfg.edge_radius_mm)+
                        cfg.max_merge_distance_mm;
 
     auto concavehs = concave_hull(ground_layer, mergedist, cfg.throw_on_cancel);
@@ -470,12 +470,16 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out,
 
         const double thickness      = cfg.min_wall_thickness_mm;
         const double wingheight     = cfg.min_wall_height_mm;
-        const coord_t s_thickness   = mm(thickness);
-//        const coord_t s_eradius     = mm(cfg.edge_radius_mm);
-        const coord_t s_safety_dist = /*2*s_eradius +*/ coord_t(0.8*s_thickness);
-        // const coord_t wheight = mm(cfg.min_wall_height_mm);
+        const double fullheight     = wingheight + thickness;
         const double tilt = PI/4;
-        coord_t s_wingdist = mm(wingheight / std::tan(tilt));
+        const double wingdist       = wingheight / std::tan(tilt);
+
+        // scaled values
+        const coord_t s_thickness   = mm(thickness);
+        const coord_t s_eradius     = mm(cfg.edge_radius_mm);
+        const coord_t s_safety_dist = 2*s_eradius + coord_t(0.8*s_thickness);
+        // const coord_t wheight    = mm(cfg.min_wall_height_mm);
+        coord_t s_wingdist          = mm(wingdist);
 
         // Here lies the trick that does the smooting only with clipper offset
         // calls. The offset is configured to round edges. Inner edges will
@@ -500,10 +504,47 @@ void create_base_pool(const ExPolygons &ground_layer, TriangleMesh& out,
 
         Contour3D pool;
 
-        double fullheight = wingheight + thickness;
+        ExPolygon ob = outer_base; double wh = 0;
+
+        // now we will calculate the angle or portion of the circle from
+        // pi/2 that will connect perfectly with the bottom plate.
+        // this is a tangent point calculation problem and the equation can
+        // be found for example here:
+        // http://www.ambrsoft.com/TrigoCalc/Circles2/CirclePoint/CirclePointDistance.htm
+        // the y coordinate would be:
+        // y = cy + (r^2*py - r*px*sqrt(px^2 + py^2 - r^2) / (px^2 + py^2)
+        // where px and py are the coordinates of the point outside the circle
+        // cx and cy are the circle center, r is the radius
+        // to get the angle we use arcsin function and subtract 90 degrees then
+        // flip the sign to get the right input to the round_edge function.
+        double r = cfg.edge_radius_mm;
+        double cy = 0;
+        double cx = 0;
+        double px = thickness + wingdist;
+        double py = r - fullheight;
+
+        double pxcx = px - cx;
+        double pycy = py - cy;
+        double b_2 = pxcx*pxcx + pycy*pycy;
+        double r_2 = r*r;
+        double D = std::sqrt(b_2 - r_2);
+        double vy = (r_2*pycy - r*pxcx*D) / b_2;
+        double phi = -(std::asin(vy/r) * 180 / PI - 90);
+
+        auto curvedwalls = round_edges(ob,
+                                       r,
+                                       phi,  // 170 degrees
+                                       0,    // z position of the input plane
+                                       true,
+                                       cfg.throw_on_cancel,
+                                       ob, wh);
+
+        pool.merge(curvedwalls);
+
+
         auto& thrcl = cfg.throw_on_cancel;
 
-        auto pwalls = walls(top_poly, inner_base, 0, -fullheight, thrcl);
+        auto pwalls = walls(ob, inner_base, wh, -fullheight, thrcl);
         pool.merge(pwalls);
 
         auto cavitywalls = walls(inner_base, middle_base, -wingheight, 0, thrcl);