    (list
     (make-danny--framed-ivy-source :prompt (format "Action on (%s): " (f-filename fpath))
                                    :collection (lambda (str pred v)
-                                                 (-concat (list "Open"
-                                                                "Move...")
+                                                 (-concat (list (cons "Open" (lambda ()
+                                                                               (unless (f-exists-p fpath)
+                                                                                 (error "File not found: %s" fpath))
+                                                                               (find-file fpath)))
+                                                                (cons "Move..." (lambda ()
+                                                                                  (danny--handle-file-created fpath))))
                                                           (-map
-                                                           (lambda (item)
-                                                             (format "Move to %s" item))
+                                                           (lambda (destination)
+                                                             (cons (format "Move to %s" destination)
+                                                                   (lambda ()
+                                                                     (danny--move-file (f-filename fpath) destination))))
                                                            (danny--last-destinations))))
                                    :action (lambda (item)
-                                             (cond ((equal item "Open")
-                                                    (unless (f-exists-p fpath)
-                                                      (error "File not found: %s" fpath))
-                                                    (find-file fpath))
-                                                   ((equal item "Move...")
-                                                    (danny--handle-file-created fpath))))
+                                             (funcall (cdr item)))
                                    :unwind (lambda ()
                                              (delete-frame)
                                              (kill-buffer "*danny*")

                                                                                :initial-input ivy-text))))
    (with-current-buffer (get-buffer-create "*danny*")
      (let* ((collection (funcall (danny--framed-ivy-source-collection source)
                                              nil nil nil))
             (lines-count (+ (length (s-split "\n" (danny--framed-ivy-source-prompt source)))
                             (length collection)))
             (frame (make-frame

               (f-file-p fpath))
      (danny--choose-action fpath))))

(defun danny--move-file (src-fpath dst-dpath)
  (let ((dst-fpath (f-join dst-dpath
                           (danny--read-string (format "Save as (%s): " (f-filename src-fpath))
                                               (f-filename src-fpath)
                                               20))))
    (when (equal src-fpath dst-fpath)
      (error "Moving to same location"))
    (if (f-exists-p dst-fpath)
        (progn
          (unless (danny--y-or-n (format "Override? %s\n" dst-fpath))
            (error "Aborted"))
          (rename-file src-fpath dst-fpath t)
          (danny--add-destination-dir dst-dpath))
      (rename-file src-fpath dst-fpath t)
      (danny--add-destination-dir dst-dpath))))

(defun danny--create-move-action-fun (src-fpath)
  (lambda (dst-dpath)
    (danny--move-file src-fpath dst-dpath)))

(defun danny--create-open-action-fun (file-path)
  (lambda (ignored)
