diff --git a/hemlock/tty-display.lisp b/hemlock/tty-display.lisp
index a3dc628179a907ccd7f2d69f1042c30c6217f8d7..f6c326b072f0ee9527dcf761dd9ea4247335c467 100644
--- a/hemlock/tty-display.lisp
+++ b/hemlock/tty-display.lisp
@@ -784,7 +784,8 @@
 				  hunk dl-len dl-pos)))))
 	       (t
 		(if (and (tty-device-insert-string device)
-			 (worth-using-insert-mode device (- dindex sindex)))
+			 (worth-using-insert-mode device (- dindex sindex)
+						  (- dl-len sindex)))
 		    (funcall (tty-device-insert-string device)
 			     hunk sindex dl-pos dl-chars sindex dindex)
 		    (funcall (tty-device-display-string device)
@@ -1043,7 +1044,7 @@
     (setf (tty-device-cursor-x device)
 	  (the fixnum (+ x (the fixnum (- end start)))))))
 
-(defun worth-using-insert-mode (device insert-char-num)
+(defun worth-using-insert-mode (device insert-char-num chars-saved)
   (let* ((init-string (tty-device-insert-init-string device))
 	 (char-init-string (tty-device-insert-char-init-string device))
 	 (char-end-string (tty-device-insert-char-end-string device))
@@ -1058,7 +1059,7 @@
 							char-end-string))
 					   0)))))
     (when end-string (incf cost (length (the simple-string end-string))))
-    (< cost insert-char-num)))
+    (< cost chars-saved)))
 
 (defun delete-char (hunk x y &optional (n 1))
   (declare (fixnum x y n))