                (cond ((null region)
                       (unless (eq point (point-at-bol))
                         (evil-forward-char))
-                      (execute-kbd-macro keys-vector))
+                      (execute-kbd-macro keys-vector-with-register))
                      ((emc-char-region-p region)
                       (emc-with-region region
                                        (lambda (start end)
                                          (evil-forward-char)
-                                         (evil-delete start end))))
+                                         (evil-delete start end nil evil-this-register))))
                      ((emc-line-region-p region)
                       (evil-forward-char)
-                      (execute-kbd-macro "cc"))))))
+                      (execute-kbd-macro (vconcat keys-register [?c ?c])))))))
 
           ((eq cmd 'evil-next-line)
            (setq next-column prev-column)


          ((eq cmd 'evil-delete-char)
           (emc-with-region region 'evil-delete-char
                            (execute-kbd-macro keys-vector)))

          ((eq cmd 'evil-delete-line) (execute-kbd-macro keys-vector))
          ((eq cmd 'evil-join) (execute-kbd-macro keys-vector))

          ((eq cmd 'evil-insert-line) (evil-insert-line 1))

         ;; TODO need to have state per command
         ;; dabbrev should be persisted only for evil-complete functions
         ;; the property names should match the full value name
         (dabbrev--friend-buffer-list (emc-get-cursor-property cursor :dabbrev--friend-buffer-list))
         (dabbrev--last-buffer (emc-get-cursor-property cursor :dabbrev--last-buffer))
         (dabbrev--last-buffer-found (emc-get-cursor-property cursor :dabbrev--last-buffer-found))
         (dabbrev--last-table (emc-get-cursor-property cursor :dabbrev--last-table))
         (dabbrev--last-abbrev-location (emc-get-cursor-property cursor :dabbrev--last-abbrev-location))
         (dabbrev--last-abbreviation (emc-get-cursor-property cursor :dabbrev--last-abbreviation))
         (dabbrev--last-expansion (emc-get-cursor-property cursor :dabbrev--last-expansion))
         (dabbrev--last-expansion-location (emc-get-cursor-property cursor :dabbrev--last-expansion-location))
         (dabbrev--last-direction (emc-get-cursor-property cursor :dabbrev--last-direction))

         (evil-last-paste (emc-get-cursor-property cursor :evil-last-paste))
         (evil-last-register (emc-get-cursor-property cursor :evil-last-register))
