diff --git a/mesh_snap_utilities_line.py b/mesh_snap_utilities_line.py
index f582c70114d123432e00cf94befb5435f21aea22..a74c747947a5c52284ab9e6d72875ff387554bc5 100644
--- a/mesh_snap_utilities_line.py
+++ b/mesh_snap_utilities_line.py
@@ -127,7 +127,7 @@ def out_Location(rv3d, region, orig, vector):
     return hit
 
 
-def get_closest_edge(bm, point, dist_sq):
+def get_closest_edge(bm, point, dist):
     r_edge = None
     for edge in bm.edges:
         v1 = edge.verts[0].co
@@ -151,9 +151,9 @@ def get_closest_edge(bm, point, dist_sq):
             else:
                 tmp = ret[0]
 
-            new_dist_sq = (point - tmp).length_squared
-            if new_dist_sq <= dist_sq:
-                dist_sq = new_dist_sq
+            new_dist = (point - tmp).length
+            if new_dist <= dist:
+                dist = new_dist
                 r_edge = edge
 
     return r_edge
@@ -206,6 +206,10 @@ def snap_utilities(
         is_increment = True
         r_type = 'OUT'
         r_loc = out_Location(rv3d, region, orig, view_vector)
+        if constrain:
+            t_loc = intersect_point_line(r_loc, constrain[0], constrain[1])[0]
+            if t_loc:
+                r_loc = t_loc
 
     elif snp_obj.data[0] != obj: #OUT
         r_loc = loc
@@ -759,7 +763,7 @@ class SnapUtilitiesLine(Operator):
                 point = self.obj_matinv * self.location
                 # with constraint the intersection can be in a different element of the selected one
                 if self.vector_constrain and self.geom:
-                    geom2 = get_closest_edge(self.bm, point, 1e-06)
+                    geom2 = get_closest_edge(self.bm, point, 0.001)
                 else:
                     geom2 = self.geom