diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp
index 61fb4de..5726164 100644
--- a/src/graphicswin.cpp
+++ b/src/graphicswin.cpp
@@ -911,7 +911,8 @@ void GraphicsWindow::MenuEdit(int id) {
                     SS.MarkGroupDirty(ep->group);
                 } else if(s->constraint.v) {
                     Constraint *c = SK.GetConstraint(s->constraint);
-                    c->disp.offset = SS.GW.SnapToGrid(c->disp.offset);
+                    Vector refp = c->GetReferencePos();
+                    c->disp.offset = c->disp.offset.Plus(SS.GW.SnapToGrid(refp).Minus(refp));
                 }
             }
             // Regenerate, with these points marked as dragged so that they