diff --git a/main.lisp b/main.lisp
index 7879332ad4fb97fc938332741047f7b538930f84..a41ffad08ce30b60d35b12a4a12684e44bf584bf 100644
--- a/main.lisp
+++ b/main.lisp
@@ -1,10 +1,11 @@
 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*-
 (in-package :cl-site)
+(require :asdf)
 
 ;; Locations for various files
-(defparameter *PAGES-DIR* "content/")
-(defparameter *LAYOUT-DIR* "layout/templates/")
-(defparameter *OUTPUT-DIR* "output/")
+(defparameter *PAGES-DIR* (asdf:system-relative-pathname :cl-site "content/"))
+(defparameter *LAYOUT-DIR* (asdf:system-relative-pathname :cl-site "layout/templates/"))
+(defparameter *OUTPUT-DIR* (asdf:system-relative-pathname :cl-site "output/"))
 
 (defparameter *PRIVATE-KEYS* '(:slug :content))
 (defparameter *PAGES* 
@@ -18,8 +19,11 @@
 
 
 (defun make-path (prefix page)
-  (pathname (concatenate 'string 
-    prefix (cdr (assoc :content page)))))
+  (let ((path (cdr (assoc :content page))))
+    (if (pathnamep prefix)
+        (merge-pathnames path prefix)
+        (pathname (concatenate 'string 
+                               prefix path)))))
 
 (defun file-to-string (filepath)
   (with-open-file (stream filepath)
@@ -40,7 +44,6 @@
         (mustache:render template-path page-context output-stream))))
 
 (defun make-site () 
-  (let 
-      ((template-path (pathname (concatenate 'string *LAYOUT-DIR* *DEFAULT-PAGE-TEMPLATE*))))
-  (loop for page in *PAGES*
-	do (render-page page template-path))))
+  (let ((template-path (pathname (merge-pathnames *LAYOUT-DIR* *DEFAULT-PAGE-TEMPLATE*))))
+    (loop for page in *PAGES*
+       do (render-page page template-path))))