         (setq acme-mouse-state 'left-right)
         (case acme-last-command
           ('none (mouse-set-point click)
-                 (let ((range (mouse-start-end (mark) (point) mouse-selection-click-count)))
-                   (setq acme-start (car range))
-                   (setq acme-end (nth 1 range))
-                   (set-mark acme-start)
-                   (goto-char acme-end)
-                   (delete-region (mark) (point))
-                   (yank arg)))
+                 (acme-select-region)
+                 (delete-region (mark) (point))
+                 (yank arg))
           ('cut (undo)
                 (set-mark acme-start)
                 (goto-char acme-end)))

      (mouse-set-region click))
  (acme-mouse-1 click))

(defun acme-down-mouse-2 (click)
  (interactive "e")
  (if (eq acme-mouse-state 'left)

             (if (eq acme-last-command 'paste)
                 (undo)
               (mouse-set-point click)
               (acme-select-region)
               (kill-region (mark) (point)))
             (setq acme-last-command 'cut))))

(defun acme-mouse-2 ()
