diff --git a/hp.asd b/hp.asd
index 6099a5d..4b5d019 100644
--- a/hp.asd
+++ b/hp.asd
@@ -7,4 +7,4 @@
   :depends-on ("hp/app")
   :in-order-to ((test-op (test-op "hp-tests"))))
 
-(register-system-packages "lack-middleware-accesslog" '(:lack.middleware.accesslog))
+(register-system-packages "lack-middleware-static" '(:lack.middleware.static))
diff --git a/src/app.lisp b/src/app.lisp
index a46a420..c0b1eb6 100644
--- a/src/app.lisp
+++ b/src/app.lisp
@@ -6,8 +6,7 @@
   (:local-nicknames (#:pi #:piccolo))
   (:local-nicknames (#:view #:hp/view))
   (:local-nicknames (#:cmp #:hp/components/**/*))
-  (:import-from #:lack.middleware.accesslog
-                #:*lack-middleware-accesslog*)
+  (:local-nicknames (#:mw #:hp/middleware))
   (:export #:start
            #:stop
            #:update))
@@ -24,8 +23,7 @@
 
 (defun update ()
   (jg:clear-middlewares *app*)
-  (jg:install-middleware *app* *lack-middleware-accesslog*)
-  (jg:static-path *app* "/public/" "public/")
+  (jg:install-middleware *app* mw:*public-files*)
   (fbr:assign-routes *app*
                      :system "hp"
                      :directory "src/routes"))
diff --git a/src/middleware.lisp b/src/middleware.lisp
new file mode 100644
index 0000000..918041d
--- /dev/null
+++ b/src/middleware.lisp
@@ -0,0 +1,21 @@
+(defpackage #:hp/middleware
+  (:use #:cl)
+  (:local-nicknames (#:jg #:jingle))
+  (:import-from #:lack.middleware.static
+                #:*lack-middleware-static*)
+  (:export #:*public-files*))
+(in-package #:hp/middleware)
+
+(defun exist-public-file-p (path)
+  (let ((pathname (probe-file (concatenate 'string "public" path))))
+    (and pathname (pathname-name pathname))))
+
+(defparameter *public-files*
+  (lambda (app)
+    (funcall *lack-middleware-static*
+             app
+             :path (lambda (path)
+                     (if (exist-public-file-p path) 
+                         path
+                         nil))
+             :root (asdf:system-relative-pathname :hp "public/"))))