       (with-current-buffer (get-buffer-create mk-proj-fib-name)
         (buffer-disable-undo) ;; this is a large change we don't need to undo
         (setq buffer-read-only nil))
-      (message "project-index cmd: \"%s\"" find-cmd)
+      (message "project-indexing cmd: \"%s\"" find-cmd)
       (message "Refreshing %s buffer..." mk-proj-fib-name)
-      (start-process-shell-command proc-name mk-proj-fib-name find-cmd)
+      (start-file-process proc-name mk-proj-fib-name find-cmd)
       (set-process-sentinel (get-process proc-name) 'mk-proj-fib-cb))))
 
 (defun mk-proj-fib-matches (regex)
-  "Return list of files in *file-index* matching regex. 
+  "Return list of files in *file-index* matching regex.
 
 If regex is nil, return all files. Returned file paths are
 relative to the project's basedir."
   (let ((files '()))
     (with-current-buffer mk-proj-fib-name
       (goto-char (point-min))
-      (while 
-          (progn
-            (let ((raw-file (buffer-substring (line-beginning-position) (line-end-position))))
-              (when (> (length raw-file) 0)
-                ;; file names in buffer can be absolute or relative to basedir
-                (let ((file (if (file-name-absolute-p raw-file) 
-                                (file-relative-name raw-file mk-proj-basedir)
-                              raw-file)))
-                  (if regex
-                      (when (string-match regex file) (add-to-list 'files file))
-                    (add-to-list 'files file)))
-                (= (forward-line) 0))))) ; loop test
-      files)))
+      (while
+        (progn
+          (let ((raw-file (mk-proj-normalize-drive-letter
+                            (buffer-substring
+                              (line-beginning-position) (line-end-position)))))
+            (when (> (length raw-file) 0)
+              ;; file names in buffer can be absolute or relative to basedir
+              (let ((file (if (file-name-absolute-p raw-file)
+                              (file-relative-name raw-file mk-proj-basedir)
+                            raw-file)))
+                (if regex
+                    (when (string-match regex file) (add-to-list 'files file))
+                  (add-to-list 'files file)))
+              (= (forward-line) 0))))) ; loop test
+      (sort files #'string-lessp))))
+
+(defun mk-proj-normalize-drive-letter (file)
+  "Convert drive letters to lowercase to be compatible with
+file-relative-name, file-name-as-directory"
+  (if (or (null file) (< (length file) 2))
+      file
+    (let ((c1 (aref file 0))
+          (c2 (aref file 1)))
+      (if (and (= (aref ":" 0) c2)
+               (and (>= c1 (aref "A" 0)) (<= c1 (aref "Z" 0))))
+          (concat (char-to-string (+ c1 32)) (substring file 1))
+        file))))
 
 (defun* project-find-file (regex)
   "Find file in the current project matching the given regex.

    (maybe-set-var 'file-list-cache #'expand-file-name)
    (maybe-set-var 'open-files-cache #'expand-file-name)))

(defun project-load ()
  "Load a project's settings."
  (interactive)
  (catch 'project-load
    (let ((oldname mk-proj-name)
          (name (if (mk-proj-use-ido)
                    (ido-completing-read "Project Name (ido): " (mk-proj-names))
                  (completing-read "Project Name: " (mk-proj-names)))))
      (unless (string= oldname name)
        (project-unload))
      (let ((proj-config (mk-proj-find-config name)))

;; Grep
;; ---------------------------------------------------------------------

(defun project-grep (&optional phrase from-current-dir)
  "Run find-grep on the project's basedir, excluding files in 
mk-proj-ignore-patterns, tag files, etc.

If the phrase argument is not included, it will prompt for a
search phrase.  If the from-current-dir argument is true, or with
C-u prefix, start from the current directory."
  (interactive)
  (mk-proj-assert-proj)
  (let* ((wap (word-at-point))
         (regex (or phrase
                    (if wap (read-string (concat "Grep project for (default \"" wap "\"): ") nil nil wap)
                      (read-string "Grep project for: "))))
         (find-cmd "find . -type f")
         (grep-cmd (concat "grep -i -n \"" regex "\""))
         (default-directory (file-name-as-directory
                             (if (or from-current-dir (mk-proj-has-univ-arg))
                                 default-directory
                               mk-proj-basedir))))
    (when mk-proj-ignore-patterns
