             ((or (eq cmd 'evil-inner-paren)
                  (eq cmd 'evil-a-paren))
              ;; TODO try this using evil-with-active-region
-             (evil-with-state normal
-               (let* ((limits (funcall cmd))
-                      (start (nth 0 limits))
-                      (end (1- (nth 1 limits))))
-                 (goto-char end)
-                 (list nil (emc-refresh-region region start)))))
+             ;; (evil-with-state normal)
+             (let* ((limits (funcall cmd))
+                    (start (nth 0 limits))
+                    (end (1- (nth 1 limits))))
+               (goto-char end)
+               (list nil (emc-refresh-region region start))))
             ((eq repeat-type 'motion)
              (let ((orig (point)))
-               (evil-with-state normal
-                 (funcall cmd)
-                 (list nil (emc-refresh-region region orig)))))
-            ((eq cmd 'evil-visual-char) (emc-delete-all-regions))
+               (funcall cmd)
+               (list nil (emc-refresh-region region orig))))
+            ((eq cmd 'evil-visual-char)
+             (unless region
+               (list nil (emc-refresh-region region (point)))))
             (t (message "not implemented"))))))
 
 (defun emc-run-last-command (cursor region)

    (list (if (overlayp cursor) cursor (emc-make-cursor-at-point))
          (if (overlayp region) region nil))))

(defun emc-execute-last-command (cursor region)
  "Executes the command stored in `emc-command-info' for CURSOR and REGION."
  (when (and emc-command-info (not emc-cursor-command))
    (when emc-debug
      (message "Executing %s command (running %s)" emc-command-info emc-running-command))
    (ignore-errors
      (condition-case error
          (funcall (emc-get-run-command) cursor region)
        (error (message "Command %s failed with error %s"
                        emc-command-info (error-message-string error))
               nil)))))

;; (emc-execute-last-command nil nil)
;; (setq emc-cursor-list (cons cursor emc-cursor-list)))

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