diff --git a/hp.asd b/hp.asd
index da3b510..b4e7bf4 100644
--- a/hp.asd
+++ b/hp.asd
@@ -4,7 +4,7 @@
   :defsystem-depends-on ("wild-package-inferred-system")
   :class "winfer:wild-package-inferred-system"
   :pathname "src"
-  :depends-on ("hp/app")
+  :depends-on ("hp/main")
   :in-order-to ((test-op (test-op "hp-tests"))))
 
 (register-system-packages "lack-middleware-static" '(:lack.middleware.static))
diff --git a/qlfile.lock b/qlfile.lock
index 1df4c9c..c82a172 100644
--- a/qlfile.lock
+++ b/qlfile.lock
@@ -17,7 +17,7 @@
 ("hsx" .
  (:class qlot/source/git:source-git
   :initargs (:remote-url "https://github.com/skyizwhite/hsx.git")
-  :version "git-7f276120aa40d26b5e2b23901890d2994438518b"))
+  :version "git-7ce7751900ce6eacb9264b3109402bcc17aa40b2"))
 ("ningle-fbr" .
  (:class qlot/source/git:source-git
   :initargs (:remote-url "https://github.com/skyizwhite/ningle-fbr.git")
diff --git a/src/app.lisp b/src/app.lisp
index 77a8004..ace2fd6 100644
--- a/src/app.lisp
+++ b/src/app.lisp
@@ -1,42 +1,19 @@
-(defpackage #:hp
-  (:nicknames #:hp/app)
+(defpackage #:hp/app
   (:use #:cl)
   (:local-nicknames (#:jg #:jingle))
   (:local-nicknames (#:fbr #:ningle-fbr))
   (:local-nicknames (#:env #:hp/env))
   (:local-nicknames (#:mw #:hp/middlewares/*))
   (:import-from #:hp/renderer)
-  (:export #:start
-           #:stop
-           #:update))
-(in-package #:hp)
-
-(defparameter *watch-process* nil)
+  (:export #:*app*))
+(in-package #:hp/app)
 
 (defparameter *app* (jg:make-app :address "localhost"
                                  :port env:*port*))
 
-(defun start ()
-  (when (env:dev-mode-p)
-    (setf *watch-process* (uiop:launch-program "make watch")))
-  (jg:start *app*))
-
-(defun stop ()
-  (when (env:dev-mode-p)
-    (uiop:terminate-process *watch-process*))
-  (jg:stop *app*))
-
-(defun setup ()
-  (jg:clear-middlewares *app*)
-  (jg:clear-routing-rules *app*)
-  (fbr:assign-routes *app* :system "hp" :directory "src/routes")
-  (jg:install-middleware *app* mw:*path-normalizer*)
-  (jg:install-middleware *app* mw:*public-server*)
-  (jg:install-middleware *app* mw:*recoverer*))
-
-(defun update ()
-  (stop)
-  (ql:quickload :hp)
-  (start))
-
-(setup)
+(jg:clear-middlewares *app*)
+(jg:clear-routing-rules *app*)
+(fbr:assign-routes *app* :system "hp" :directory "src/routes")
+(jg:install-middleware *app* mw:*recoverer*)
+(jg:install-middleware *app* mw:*path-normalizer*)
+(jg:install-middleware *app* mw:*public-server*)
diff --git a/src/main.lisp b/src/main.lisp
new file mode 100644
index 0000000..b334566
--- /dev/null
+++ b/src/main.lisp
@@ -0,0 +1,28 @@
+(defpackage #:hp
+  (:nicknames #:hp/main)
+  (:use #:cl)
+  (:local-nicknames (#:jg #:jingle))
+  (:local-nicknames (#:env #:hp/env))
+  (:import-from #:hp/app
+                #:*app*)
+  (:export #:start
+           #:stop
+           #:update))
+(in-package #:hp)
+
+(defparameter *watch-process* nil)
+
+(defun start ()
+  (when (env:dev-mode-p)
+    (setf *watch-process* (uiop:launch-program "make watch")))
+  (jg:start *app*))
+
+(defun stop ()
+  (when (env:dev-mode-p)
+    (uiop:terminate-process *watch-process*))
+  (jg:stop *app*))
+
+(defun update ()
+  (stop)
+  (ql:quickload :hp/app)
+  (start))