diff --git a/asdf-install.lisp b/asdf-install.lisp
index b8b3840df46be0d34dea31d626ac77511c586cc4..b66a5d8b6b8e18090203e24f9d3f3b65afded4ab 100644
--- a/asdf-install.lisp
+++ b/asdf-install.lisp
@@ -135,8 +135,12 @@ an immediate concern
 				  (subseq line (1+ colon))))))
        stream))))
 
-(defun download (package-name file-name)
-  (let ((url (format nil "http://www.cliki.net/~A?download" package-name)))
+(defun download (package-name-or-url file-name)
+  (let ((url
+	 (if (string-equal package-name-or-url "http://"
+			   :end1 7)
+	     package-name-or-url
+	     (format nil "http://www.cliki.net/~A?download" package-name))))
     (destructuring-bind (response headers stream)
 	(block got
 	  (loop
@@ -249,8 +253,14 @@ an immediate concern
 
 (defvar *temporary-files*)
 (defun temp-file-name (p)
-  (merge-pathnames (make-pathname :type "asdf-install-tmp")
-		   (merge-pathnames p)))
+  (let* ((pos-slash (position #\/ p :from-end t))
+	 (pos-dot (position #\. p :start (or pos-slash 0))))
+    (merge-pathnames
+     (make-pathname
+      :name (subseq p (if pos-slash (1+ pos-slash) 0) pos-dot)
+      :type "asdf-install-tmp"))))
+		     
+
 
 (defun run (&optional (packages (cdr *posix-argv*)))
   (destructuring-bind (source system name) (where)