diff --git a/asdf.lisp b/asdf.lisp
index 530468b89c9211daed98d955d602f5ff834f6dcc..19812e352a1cda9d8106e8085dd9703f6ae0bd76 100644
--- a/asdf.lisp
+++ b/asdf.lisp
@@ -542,7 +542,15 @@ actually-existing directory."
   "Converts the non-wild pathname designator PATHSPEC to directory form."
   (cond
    ((stringp pathspec)
-    (pathname (concatenate 'string pathspec "/")))
+    (pathname
+     (let ((lastchar (aref pathspec (1- (length pathspec)))))
+       (cond ((or (eql lastchar #\;) (eql lastchar #\/)) pathspec)
+             ((find #\; pathspec)
+              (concatenate 'string pathspec ";"))
+             (t
+              ;; guess it's a string that's not a logical
+              ;; pathname string
+              (concatenate 'string pathspec "/"))))))
    ((not (pathnamep pathspec))
     (error "Invalid pathname designator ~S" pathspec))
    ((wild-pathname-p pathspec)