              (if (eq acme-last-command 'paste)
                  (undo)
                (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)
-                 (kill-region (mark) (point))))
+               (acme-select-region)
+               (kill-region (mark) (point)))
              (setq acme-last-command 'cut))))
 
 (defun acme-mouse-2 ()

        (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)))
          ('cut (undo)
                (set-mark acme-start)
                (goto-char acme-end)))

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

(global-set-key [(double-mouse-1)] 'acme-double-mouse-1)
(defun acme-double-mouse-1 (click)
  (interactive "e")
  (setq acme-mouse-state 'none)
  (setq deactivate-mark nil)
  ;; if we were just selecting, and not chording, pass to the regular click handler
  (if (eq acme-last-command 'none)
      (progn (mouse-set-point click)
             (acme-select-region)))
  (setq transient-mark-mode (cons 'only t))
  (setq acme-last-command 'none))

(defun acme-select-region ()
  (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)))

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