       (let* ((dir (file-name-directory path))
              (file-portion (file-name-nondirectory path))
              (normalized-dir (lusty-normalize-dir dir)))
-        (unless (string= dir normalized-dir)
-          ;; Clean up the path in the minibuffer.
-          (lusty-set-minibuffer-text normalized-dir file-portion)))
-      (lusty-update-matches-buffer t))))
-
-; STEVE rename?
-(defun lusty-buffer-explorer-minibuffer-tab-complete ()
-  (lusty-update-matches-buffer t))
+        ;; Clean up the path when selecting in case we recurse
+        (lusty-set-minibuffer-text normalized-dir entry)
+        (if (file-directory-p (concat normalized-dir entry))
+            (lusty-update-matches-buffer)
+          (minibuffer-complete-and-exit))))))
+
+(defun lusty--buffer-explorer-select (entry)
+  (lusty-set-minibuffer-text entry)
+  (minibuffer-complete-and-exit))
 
 ;; This may seem overkill, but it's the only way I've found to update the
 ;; matches list for every edit to the minibuffer.  Wrapping the keymap can't

    (define-key map "\C-p" 'lusty-highlight-previous)
    (define-key map "\t" 'lusty-select-entry)
    ;; STEVE ^ entry for <Enter> as well?
    map)
  "Minibuffer keymap for `lusty-file-explorer' and `lusty-buffer-explorer'.")


  "Launch the file/directory mode of LustyExplorer"
  (interactive)
  (let* ((lusty--active-mode :file-explorer)
         (lusty--ignored-extensions
          (mapcar (lambda (ext) (concat (regexp-quote ext) "$"))
                  completion-ignored-extensions))
         (file (lusty--run 'read-file-name)))
