                   (and (eq dir -1) (eq start pos)))
           (throw 'emc-region-found region))))))
 
+;; (eq cmd 'abc)
+;; (eq cmd 'abc)
+;; (eq cmd 'abc)
+;; (eq cmd 'abc)
+;; (eq cmd 'abc)
+;; (eq cmd 'abc)
+
 (defun emc-refresh-region (region orig)
   "Refresh the visual REGION when point moved from ORIG to current location."
-  (let ((mark (or (and region (emc-get-region-mark region)) orig)))
-    (when region (delete-overlay region))
-    (cond ((and (< mark (point))) (emc-make-region-overlay mark (1+ (point))))
-          ((and (< (point) mark)) (emc-make-region-overlay mark (point)))
+  (let ((mark (emc-get-region-mark region)))
+    (message "mark %s orig %s point %s" mark orig (point))
+    (unless mark (setq mark orig))
+    (cond ((and (eq orig mark) (< (point) mark)) (setq mark (1+ mark)))
+          ((and (< orig mark) (<= mark (point))) (setq mark (1- mark))))
+    (cond ((< mark (point)) (emc-make-region-overlay mark (1+ (point))))
+          ((< (point) mark) (emc-make-region-overlay mark (point)))
           (t (emc-make-region-overlay (point) (1+ (point)))))))
 
 (defun emc-exchange-point-and-mark (region)
   "Exchange point and mark for a fake REGION."
-  (let* ((region (emc-find-region (point)))
-         (mark (emc-get-region-mark region))
+  (let* ((mark (emc-get-region-mark region))
          (point (emc-get-region-point region)))
     (when region
       (let (new-region new-cursor)

  (unless (or emc-running-command (not emc-command-info))
    (let ((emc-running-command t))
      (evil-with-single-undo
        (save-excursion
          (let ((cursor-list nil)
                (region-list nil))
            (dotimes (index (length emc-cursor-list))
              ;; TODO optimize this loop
              ;; (message "INDEX %s CURSORS %s" index emc-cursor-list)

            ((eq cmd 'evil-invert-char) (evil-invert-char (point) (1+ (point))) (evil-forward-char))
            ((eq cmd 'evil-upcase) (execute-kbd-macro (apply 'concat keys)))
            ((eq cmd 'evil-downcase) (execute-kbd-macro (apply 'concat keys)))
            ((eq cmd 'keyboard-quit) nil)
            ((eq cmd 'evil-visual-char) (evil-force-normal-state))

            ((eq cmd 'evil-delete)
             (if region
