diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs
index 55ca875d..bc0e8ebe 100644
--- a/helix-term/src/commands.rs
+++ b/helix-term/src/commands.rs
@@ -4181,7 +4181,7 @@ pub fn completion(cx: &mut Context) {
     iter.reverse();
     let offset = iter.take_while(|ch| chars::char_is_word(*ch)).count();
     let start_offset = cursor.saturating_sub(offset);
-    doc.savepoint();
+    doc.savepoint(&view);
 
     cx.callback(
         future,
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs
index 85931fe3..179a8cf8 100644
--- a/helix-term/src/ui/completion.rs
+++ b/helix-term/src/ui/completion.rs
@@ -235,7 +235,7 @@ impl Completion {
                     );
 
                     // initialize a savepoint
-                    doc.savepoint();
+                    doc.savepoint(&view);
                     doc.apply(&transaction, view.id);
 
                     editor.last_completion = Some(CompleteAction {
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 2ea1b714..62f04cc9 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -914,8 +914,8 @@ impl EditorView {
                                 doc.apply(&tx, view.id);
                             }
                             InsertEvent::TriggerCompletion => {
-                                let (_, doc) = current!(cxt.editor);
-                                doc.savepoint();
+                                let (view, doc) = current!(cxt.editor);
+                                doc.savepoint(view);
                             }
                         }
                     }
diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs
index 4d3586f1..13ffe794 100644
--- a/helix-view/src/document.rs
+++ b/helix-view/src/document.rs
@@ -941,7 +941,8 @@ impl Document {
     }
 
     pub fn savepoint(&mut self) {
-        self.savepoint = Some(Transaction::new(self.text()));
+        self.savepoint =
+            Some(Transaction::new(self.text()).with_selection(self.selection(view.id).clone()));
     }
 
     pub fn restore(&mut self, view: &mut View) {