[libdancer2-perl] 01/05: Imported Upstream version 0.140001+dfsg

gregor herrmann gregoa at debian.org
Sat May 3 12:45:23 UTC 2014


This is an automated email from the git hooks/post-receive script.

gregoa pushed a commit to branch master
in repository libdancer2-perl.

commit 6a62b3e8d51fdc928080d948b629104d38a12c5e
Author: gregor herrmann <gregoa at debian.org>
Date:   Sat May 3 14:21:24 2014 +0200

    Imported Upstream version 0.140001+dfsg
---
 Build.PL                                           |  21 +-
 Changes                                            |  41 +++
 LICENSE                                            |   6 +-
 MANIFEST                                           |  31 ++-
 META.json                                          | 160 +++++------
 META.yml                                           | 155 +++++------
 Makefile.PL                                        |  21 +-
 README.md                                          |   4 +-
 lib/Dancer2.pm                                     |  26 +-
 lib/Dancer2/CLI.pm                                 |   9 +-
 lib/Dancer2/CLI/Command/gen.pm                     |   9 +-
 lib/Dancer2/CLI/Command/version.pm                 |  10 +-
 lib/Dancer2/Config.pod                             |  21 +-
 lib/Dancer2/Cookbook.pod                           |   8 +-
 lib/Dancer2/Core.pm                                |   9 +-
 lib/Dancer2/Core/App.pm                            | 231 +++++++++++++---
 lib/Dancer2/Core/Context.pm                        |   9 +-
 lib/Dancer2/Core/Cookie.pm                         |  11 +-
 lib/Dancer2/Core/DSL.pm                            |   9 +-
 lib/Dancer2/Core/Dispatcher.pm                     |  28 +-
 lib/Dancer2/Core/Error.pm                          |  11 +-
 lib/Dancer2/Core/Factory.pm                        |  11 +-
 lib/Dancer2/Core/HTTP.pm                           |   9 +-
 lib/Dancer2/Core/Hook.pm                           |  10 +-
 lib/Dancer2/Core/MIME.pm                           |   9 +-
 lib/Dancer2/Core/Request.pm                        |  76 +++---
 lib/Dancer2/Core/Request/Upload.pm                 |   9 +-
 lib/Dancer2/Core/Response.pm                       |  10 +-
 .../Core/Role/{Config.pm => ConfigReader.pm}       | 275 +++----------------
 lib/Dancer2/Core/Role/DSL.pm                       |  11 +-
 lib/Dancer2/Core/Role/Engine.pm                    |  11 +-
 lib/Dancer2/Core/Role/Handler.pm                   |  11 +-
 lib/Dancer2/Core/Role/Headers.pm                   |   9 +-
 lib/Dancer2/Core/Role/Hookable.pm                  |  11 +-
 lib/Dancer2/Core/Role/Logger.pm                    |  16 +-
 lib/Dancer2/Core/Role/Serializer.pm                |  21 +-
 lib/Dancer2/Core/Role/Server.pm                    | 191 -------------
 lib/Dancer2/Core/Role/SessionFactory.pm            |   9 +-
 lib/Dancer2/Core/Role/SessionFactory/File.pm       |   9 +-
 lib/Dancer2/Core/Role/StandardResponses.pm         |  11 +-
 lib/Dancer2/Core/Role/Template.pm                  |   9 +-
 lib/Dancer2/Core/Route.pm                          |   9 +-
 lib/Dancer2/Core/Runner.pm                         | 300 ++++++++++++---------
 lib/Dancer2/Core/Server/PSGI.pm                    |  60 -----
 lib/Dancer2/Core/Server/Standalone.pm              | 125 ---------
 lib/Dancer2/Core/Session.pm                        |   9 +-
 lib/Dancer2/Core/Time.pm                           |   9 +-
 lib/Dancer2/Core/Types.pm                          |   9 +-
 lib/Dancer2/FileUtils.pm                           |   9 +-
 lib/Dancer2/Handler/AutoPage.pm                    |  11 +-
 lib/Dancer2/Handler/File.pm                        |  11 +-
 lib/Dancer2/Logger/Capture.pm                      |  11 +-
 lib/Dancer2/Logger/Capture/Trap.pm                 |  11 +-
 lib/Dancer2/Logger/Console.pm                      |  12 +-
 lib/Dancer2/Logger/Diag.pm                         |  12 +-
 lib/Dancer2/Logger/File.pm                         |  11 +-
 lib/Dancer2/Logger/Note.pm                         |  12 +-
 lib/Dancer2/Logger/Null.pm                         |  11 +-
 lib/Dancer2/Manual.pod                             |   8 +-
 lib/Dancer2/Plugin.pm                              |   9 +-
 lib/Dancer2/Plugin/Ajax.pm                         |   9 +-
 lib/Dancer2/Plugins.pod                            |   6 +-
 lib/Dancer2/Serializer/Dumper.pm                   |   9 +-
 lib/Dancer2/Serializer/JSON.pm                     |  11 +-
 lib/Dancer2/Serializer/YAML.pm                     |  18 +-
 lib/Dancer2/Session/Simple.pm                      |  11 +-
 lib/Dancer2/Session/YAML.pm                        |  15 +-
 lib/Dancer2/Template/Implementation/ForkedTiny.pm  |   9 +-
 lib/Dancer2/Template/Simple.pm                     |  11 +-
 lib/Dancer2/Template/TemplateToolkit.pm            |   9 +-
 lib/Dancer2/Template/Tiny.pm                       |  19 +-
 lib/Dancer2/Test.pm                                |  11 +-
 lib/Dancer2/Tutorial.pod                           |   6 +-
 script/dancer2                                     |   4 +-
 t/00-compile.t                                     |  38 +--
 t/00-report-prereqs.t                              |   6 +-
 t/ajax_plugin.t                                    |   2 +-
 t/any.t                                            |   2 +-
 t/auto_page.t                                      |   3 +-
 t/charset_server.t                                 |   3 +-
 t/config.t                                         |  15 +-
 t/context.t                                        |   2 +-
 t/context_trigger.t                                |   4 +-
 t/custom_dsl.t                                     |   2 +-
 t/dancer-test.t                                    |  19 +-
 t/deserialize.t                                    | 101 ++++---
 t/dsl.t                                            |   2 +-
 t/dsl/halt.t                                       |   4 +-
 t/error.t                                          |   6 +-
 t/error_template.t                                 |   2 +-
 t/forward.t                                        |   2 +-
 t/forward_before_hook.t                            |   2 +-
 t/forward_test_tcp.t                               |  13 +-
 t/handler_file.t                                   |   2 +-
 t/hooks.t                                          |   3 +-
 t/http_methods.t                                   |   8 +-
 t/lib/FooPlugin.pm                                 |   2 +-
 t/plugin_import.t                                  |   2 +-
 t/plugin_multiple_apps.t                           |   2 +-
 t/plugin_syntax.t                                  |   8 +-
 t/redirect.t                                       |  20 +-
 t/release-distmeta.t                               |   5 +-
 t/release-pod-syntax.t                             |   5 +-
 t/request.t                                        |  12 +-
 t/roles/server.t                                   |  37 ---
 t/runner.t                                         |  17 +-
 t/serializer.t                                     |   2 +-
 t/server.t                                         |  30 ---
 t/server_standalone.t                              |   3 +-
 t/session_config.t                                 |   3 +-
 t/session_engines.t                                |   3 +-
 t/session_forward.t                                |   3 +-
 t/session_lifecycle.t                              |   3 +-
 t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml    |   2 +
 t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml    |   2 +
 t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml    |   2 +
 t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml    |   2 +
 t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml    |   2 +
 t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml    |   2 +
 t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml    |   2 +
 t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml    |   2 +
 t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml    |   2 +
 t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml    |   2 +
 t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml    |   2 +
 t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml    |   2 +
 t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml    |   2 +
 t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml    |   2 +
 t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml    |   2 +
 t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml    |   2 +
 t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml    |   2 +
 t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml    |   2 +
 t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml    |   2 +
 t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml    |   2 +
 t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml    |   2 +
 t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml    |   2 +
 t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml    |   2 +
 t/shared_engines.t                                 |   3 +-
 t/splat.t                                          |   2 +-
 t/template.t                                       |   2 +-
 t/template_default_tokens.t                        |   2 +-
 t/template_name.t                                  |   2 +-
 t/uri_for.t                                        |   2 +-
 t/vars.t                                           |   2 +-
 143 files changed, 1200 insertions(+), 1614 deletions(-)

diff --git a/Build.PL b/Build.PL
index 8ac75b6..945f08a 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,4 +1,5 @@
 
+# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v5.015.
 use strict;
 use warnings;
 
@@ -19,7 +20,7 @@ my %module_build_args = (
     "Dancer Core Developers"
   ],
   "dist_name" => "Dancer2",
-  "dist_version" => "0.12",
+  "dist_version" => "0.140001",
   "license" => "perl",
   "module_name" => "Dancer2",
   "recommends" => {
@@ -27,7 +28,6 @@ my %module_build_args = (
     "Crypt::URandom" => 0,
     "JSON::XS" => 0,
     "Math::Random::ISAAC::XS" => 0,
-    "Plack::Request" => 0,
     "Pod::Simple::Search" => 0,
     "Pod::Simple::SimpleTree" => 0,
     "Scope::Upper" => 0,
@@ -58,7 +58,7 @@ my %module_build_args = (
     "HTTP::Body" => 0,
     "HTTP::Date" => 0,
     "HTTP::Headers" => 0,
-    "HTTP::Server::Simple::PSGI" => 0,
+    "HTTP::Server::PSGI" => 0,
     "Hash::Merge::Simple" => 0,
     "IO::File" => 0,
     "JSON" => 0,
@@ -71,7 +71,8 @@ my %module_build_args = (
     "MooX::Types::MooseLike" => "0.16",
     "MooX::Types::MooseLike::Base" => 0,
     "POSIX" => 0,
-    "Plack::Request" => 0,
+    "Plack" => "1.0016",
+    "Plack::Builder" => 0,
     "Pod::Simple::Search" => 0,
     "Pod::Simple::SimpleTree" => 0,
     "Return::MultiLevel" => 0,
@@ -83,10 +84,10 @@ my %module_build_args = (
     "Test::More" => "0.92",
     "URI" => 0,
     "URI::Escape" => 0,
-    "YAML::Any" => 0,
+    "YAML" => 0,
     "overload" => 0,
     "parent" => 0,
-    "perl" => "5.00503",
+    "perl" => "5.006",
     "strict" => 0,
     "warnings" => 0
   },
@@ -99,12 +100,12 @@ my %module_build_args = (
   "test_requires" => {
     "Capture::Tiny" => "0.12",
     "ExtUtils::MakeMaker" => 0,
+    "File::Spec" => 0,
     "File::Temp" => "0.22",
     "FindBin" => 0,
     "HTTP::Body" => 0,
     "HTTP::Request" => 0,
     "HTTP::Request::Common" => 0,
-    "HTTP::Server::Simple::PSGI" => 0,
     "IO::Handle" => 0,
     "IPC::Open3" => 0,
     "LWP::Protocol::PSGI" => "0.06",
@@ -115,8 +116,8 @@ my %module_build_args = (
     "Test::Script" => 0,
     "Test::TCP" => "1.13",
     "YAML" => 0,
-    "YAML::Any" => 0,
     "lib" => 0,
+    "perl" => "5.006",
     "utf8" => 0,
     "vars" => 0
   }
@@ -126,12 +127,12 @@ my %module_build_args = (
 my %fallback_build_requires = (
   "Capture::Tiny" => "0.12",
   "ExtUtils::MakeMaker" => 0,
+  "File::Spec" => 0,
   "File::Temp" => "0.22",
   "FindBin" => 0,
   "HTTP::Body" => 0,
   "HTTP::Request" => 0,
   "HTTP::Request::Common" => 0,
-  "HTTP::Server::Simple::PSGI" => 0,
   "IO::Handle" => 0,
   "IPC::Open3" => 0,
   "LWP::Protocol::PSGI" => "0.06",
@@ -143,8 +144,8 @@ my %fallback_build_requires = (
   "Test::Script" => 0,
   "Test::TCP" => "1.13",
   "YAML" => 0,
-  "YAML::Any" => 0,
   "lib" => 0,
+  "perl" => "5.006",
   "utf8" => 0,
   "vars" => 0
 );
diff --git a/Changes b/Changes
index 4ed29a0..c7c7d95 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,44 @@
+0.140001  2014-05-01 10:49:25CEST+0200 Europe/Amsterdam
+
+    [ BUG FIXES ]
+    * Bugfix for extracting multiple cookies within a request.
+      (Cymon, Russell Jenkins)
+    * Require minimum version of Plack to make sure we can add the Head
+      middleware. Not exactly a bug, but not a feature. (Sawyer X)
+
+    [ DOCUMENTATION ]
+    * Correct reference to HTTP::Server::Simple::PSGI. (Russell Jenkins)
+
+0.140000  2014-04-28 23:14:31CEST+0200 Europe/Amsterdam
+
+    [ ENHANCEMENTS ]
+    * Replace Config role with better ConfigReader role.
+      (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+    * Move App-related attributes (engines) to App instead of config role.
+      (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+    * Untangle Runner-Server (removing Server entirely).
+      (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+    * Replace HTTP::Server::Simple::PSGI with HTTP::Server::PSGI.
+      (Mickey Nasriachi, Stefan Hornburg, Sawyer X)
+    * GH #527: Build request cookie objects from request headers, not env.
+      (Russell Jenkins)
+    * GH #569: Transform cookie using the HTTP_COOKIE header, per PSGI spec.
+      (Russell Jenkins)
+    * GH #559, #544: Use Plack middleware for HEAD request content removal.
+      (Russell Jenkins)
+    * GH #513, #483: Deserialize body content for DELETE requests.
+      (Russell Jenkins, Yanick Champoux, Sawyer X)
+
+0.13      2014-04-13 19:19:44CEST+0200 Europe/Amsterdam
+
+    [ ENHANCEMENTS ]
+    * GH #562: Change YAML::Any to YAML (Steven Humphrey, Russell Jenkins).
+
+    [ BUG FIXES ]
+    * GH #524: Double encoding for YAML sessions.
+    * GH #557: Switch to using YAML::Old.
+    * GH #548: Deserializer test failure.
+
 0.12      2014-04-07 22:42:12 Europe/Amsterdam
 
     [ ENHANCEMENTS ]
diff --git a/LICENSE b/LICENSE
index 705ca7d..be21fc2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
@@ -12,7 +12,7 @@ b) the "Artistic License"
 
 --- The GNU General Public License, Version 1, February 1989 ---
 
-This software is Copyright (c) 2013 by Alexis Sukrieh.
+This software is Copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software, licensed under:
 
@@ -272,7 +272,7 @@ That's all there is to it!
 
 --- The Artistic License 1.0 ---
 
-This software is Copyright (c) 2013 by Alexis Sukrieh.
+This software is Copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software, licensed under:
 
diff --git a/MANIFEST b/MANIFEST
index 5f28c2d..ea5891f 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,3 +1,4 @@
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.015.
 AUTHORS
 Build.PL
 Changes
@@ -28,7 +29,7 @@ lib/Dancer2/Core/MIME.pm
 lib/Dancer2/Core/Request.pm
 lib/Dancer2/Core/Request/Upload.pm
 lib/Dancer2/Core/Response.pm
-lib/Dancer2/Core/Role/Config.pm
+lib/Dancer2/Core/Role/ConfigReader.pm
 lib/Dancer2/Core/Role/DSL.pm
 lib/Dancer2/Core/Role/Engine.pm
 lib/Dancer2/Core/Role/Handler.pm
@@ -36,15 +37,12 @@ lib/Dancer2/Core/Role/Headers.pm
 lib/Dancer2/Core/Role/Hookable.pm
 lib/Dancer2/Core/Role/Logger.pm
 lib/Dancer2/Core/Role/Serializer.pm
-lib/Dancer2/Core/Role/Server.pm
 lib/Dancer2/Core/Role/SessionFactory.pm
 lib/Dancer2/Core/Role/SessionFactory/File.pm
 lib/Dancer2/Core/Role/StandardResponses.pm
 lib/Dancer2/Core/Role/Template.pm
 lib/Dancer2/Core/Route.pm
 lib/Dancer2/Core/Runner.pm
-lib/Dancer2/Core/Server/PSGI.pm
-lib/Dancer2/Core/Server/Standalone.pm
 lib/Dancer2/Core/Session.pm
 lib/Dancer2/Core/Time.pm
 lib/Dancer2/Core/Types.pm
@@ -175,13 +173,11 @@ t/request_upload.t
 t/response.t
 t/roles/headers.t
 t/roles/hook.t
-t/roles/server.t
 t/route-pod-coverage/route-pod-coverage.t
 t/route.t
 t/runner.t
 t/serializer.t
 t/serializer_json.t
-t/server.t
 t/server_standalone.t
 t/session_config.t
 t/session_engines.t
@@ -189,6 +185,29 @@ t/session_forward.t
 t/session_hooks.t
 t/session_lifecycle.t
 t/session_object.t
+t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
+t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
+t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
+t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
+t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
+t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
+t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
+t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
+t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
+t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
+t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
+t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
+t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
+t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
+t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
+t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
+t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
+t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
+t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
+t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
+t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
+t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
+t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
 t/sessions/Uf-CrAAAdd2mP4pJAIBzc6YRqXnqeNUt.yml
 t/sessions/Uf-GsQAANz9OaEztWyuSfJKegUq3zD1V.yml
 t/sessions/Uf-HDgAAPPOeyDGX2_IgTLzBg6iBsFkk.yml
diff --git a/META.json b/META.json
index ccfb736..fa82a4f 100644
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
       "Dancer Core Developers"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.120921",
+   "generated_by" : "Dist::Zilla version 5.015, CPAN::Meta::Converter version 2.120921",
    "license" : [
       "perl_5"
    ],
@@ -38,7 +38,6 @@
             "Crypt::URandom" : "0",
             "JSON::XS" : "0",
             "Math::Random::ISAAC::XS" : "0",
-            "Plack::Request" : "0",
             "Pod::Simple::Search" : "0",
             "Pod::Simple::SimpleTree" : "0",
             "Scope::Upper" : "0",
@@ -68,7 +67,7 @@
             "HTTP::Body" : "0",
             "HTTP::Date" : "0",
             "HTTP::Headers" : "0",
-            "HTTP::Server::Simple::PSGI" : "0",
+            "HTTP::Server::PSGI" : "0",
             "Hash::Merge::Simple" : "0",
             "IO::File" : "0",
             "JSON" : "0",
@@ -81,7 +80,8 @@
             "MooX::Types::MooseLike" : "0.16",
             "MooX::Types::MooseLike::Base" : "0",
             "POSIX" : "0",
-            "Plack::Request" : "0",
+            "Plack" : "1.0016",
+            "Plack::Builder" : "0",
             "Pod::Simple::Search" : "0",
             "Pod::Simple::SimpleTree" : "0",
             "Return::MultiLevel" : "0",
@@ -93,29 +93,29 @@
             "Test::More" : "0.92",
             "URI" : "0",
             "URI::Escape" : "0",
-            "YAML::Any" : "0",
+            "YAML" : "0",
             "overload" : "0",
             "parent" : "0",
-            "perl" : "5.00503",
+            "perl" : "5.006",
             "strict" : "0",
             "warnings" : "0"
          },
          "suggests" : {
             "Class::Load::XS" : "0",
             "Fcntl" : "0",
-            "YAML::Any" : "0"
+            "YAML" : "0"
          }
       },
       "test" : {
          "requires" : {
             "Capture::Tiny" : "0.12",
             "ExtUtils::MakeMaker" : "0",
+            "File::Spec" : "0",
             "File::Temp" : "0.22",
             "FindBin" : "0",
             "HTTP::Body" : "0",
             "HTTP::Request" : "0",
             "HTTP::Request::Common" : "0",
-            "HTTP::Server::Simple::PSGI" : "0",
             "IO::Handle" : "0",
             "IPC::Open3" : "0",
             "LWP::Protocol::PSGI" : "0.06",
@@ -126,8 +126,8 @@
             "Test::Script" : "0",
             "Test::TCP" : "1.13",
             "YAML" : "0",
-            "YAML::Any" : "0",
             "lib" : "0",
+            "perl" : "5.006",
             "utf8" : "0",
             "vars" : "0"
          }
@@ -136,263 +136,251 @@
    "provides" : {
       "Dancer2" : {
          "file" : "lib/Dancer2.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::CLI" : {
          "file" : "lib/Dancer2/CLI.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::CLI::Command::gen" : {
          "file" : "lib/Dancer2/CLI/Command/gen.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::CLI::Command::version" : {
          "file" : "lib/Dancer2/CLI/Command/version.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Config" : {
          "file" : "lib/Dancer2/Config.pod",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Cookbook" : {
          "file" : "lib/Dancer2/Cookbook.pod",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core" : {
          "file" : "lib/Dancer2/Core.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::App" : {
          "file" : "lib/Dancer2/Core/App.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Context" : {
          "file" : "lib/Dancer2/Core/Context.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Cookie" : {
          "file" : "lib/Dancer2/Core/Cookie.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::DSL" : {
          "file" : "lib/Dancer2/Core/DSL.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Dispatcher" : {
          "file" : "lib/Dancer2/Core/Dispatcher.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Error" : {
          "file" : "lib/Dancer2/Core/Error.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Factory" : {
          "file" : "lib/Dancer2/Core/Factory.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::HTTP" : {
          "file" : "lib/Dancer2/Core/HTTP.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Hook" : {
          "file" : "lib/Dancer2/Core/Hook.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::MIME" : {
          "file" : "lib/Dancer2/Core/MIME.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Request" : {
          "file" : "lib/Dancer2/Core/Request.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Request::Upload" : {
          "file" : "lib/Dancer2/Core/Request/Upload.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Response" : {
          "file" : "lib/Dancer2/Core/Response.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
-      "Dancer2::Core::Role::Config" : {
-         "file" : "lib/Dancer2/Core/Role/Config.pm",
-         "version" : "0.12"
+      "Dancer2::Core::Role::ConfigReader" : {
+         "file" : "lib/Dancer2/Core/Role/ConfigReader.pm",
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::DSL" : {
          "file" : "lib/Dancer2/Core/Role/DSL.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Engine" : {
          "file" : "lib/Dancer2/Core/Role/Engine.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Handler" : {
          "file" : "lib/Dancer2/Core/Role/Handler.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Headers" : {
          "file" : "lib/Dancer2/Core/Role/Headers.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Hookable" : {
          "file" : "lib/Dancer2/Core/Role/Hookable.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Logger" : {
          "file" : "lib/Dancer2/Core/Role/Logger.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Serializer" : {
          "file" : "lib/Dancer2/Core/Role/Serializer.pm",
-         "version" : "0.12"
-      },
-      "Dancer2::Core::Role::Server" : {
-         "file" : "lib/Dancer2/Core/Role/Server.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::SessionFactory" : {
          "file" : "lib/Dancer2/Core/Role/SessionFactory.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::SessionFactory::File" : {
          "file" : "lib/Dancer2/Core/Role/SessionFactory/File.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::StandardResponses" : {
          "file" : "lib/Dancer2/Core/Role/StandardResponses.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Role::Template" : {
          "file" : "lib/Dancer2/Core/Role/Template.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Route" : {
          "file" : "lib/Dancer2/Core/Route.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Runner" : {
          "file" : "lib/Dancer2/Core/Runner.pm",
-         "version" : "0.12"
-      },
-      "Dancer2::Core::Server::PSGI" : {
-         "file" : "lib/Dancer2/Core/Server/PSGI.pm",
-         "version" : "0.12"
-      },
-      "Dancer2::Core::Server::Standalone" : {
-         "file" : "lib/Dancer2/Core/Server/Standalone.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Session" : {
          "file" : "lib/Dancer2/Core/Session.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Time" : {
          "file" : "lib/Dancer2/Core/Time.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Core::Types" : {
          "file" : "lib/Dancer2/Core/Types.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::FileUtils" : {
          "file" : "lib/Dancer2/FileUtils.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Handler::AutoPage" : {
          "file" : "lib/Dancer2/Handler/AutoPage.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Handler::File" : {
          "file" : "lib/Dancer2/Handler/File.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Capture" : {
          "file" : "lib/Dancer2/Logger/Capture.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Capture::Trap" : {
          "file" : "lib/Dancer2/Logger/Capture/Trap.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Console" : {
          "file" : "lib/Dancer2/Logger/Console.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Diag" : {
          "file" : "lib/Dancer2/Logger/Diag.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::File" : {
          "file" : "lib/Dancer2/Logger/File.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Note" : {
          "file" : "lib/Dancer2/Logger/Note.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Logger::Null" : {
          "file" : "lib/Dancer2/Logger/Null.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Manual" : {
          "file" : "lib/Dancer2/Manual.pod",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Plugin" : {
          "file" : "lib/Dancer2/Plugin.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Plugin::Ajax" : {
          "file" : "lib/Dancer2/Plugin/Ajax.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Plugins" : {
          "file" : "lib/Dancer2/Plugins.pod",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Serializer::Dumper" : {
          "file" : "lib/Dancer2/Serializer/Dumper.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Serializer::JSON" : {
          "file" : "lib/Dancer2/Serializer/JSON.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Serializer::YAML" : {
          "file" : "lib/Dancer2/Serializer/YAML.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Session::Simple" : {
          "file" : "lib/Dancer2/Session/Simple.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Session::YAML" : {
          "file" : "lib/Dancer2/Session/YAML.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Template::Implementation::ForkedTiny" : {
          "file" : "lib/Dancer2/Template/Implementation/ForkedTiny.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Template::Simple" : {
          "file" : "lib/Dancer2/Template/Simple.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Template::TemplateToolkit" : {
          "file" : "lib/Dancer2/Template/TemplateToolkit.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Template::Tiny" : {
          "file" : "lib/Dancer2/Template/Tiny.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Test" : {
          "file" : "lib/Dancer2/Test.pm",
-         "version" : "0.12"
+         "version" : "0.140001"
       },
       "Dancer2::Tutorial" : {
          "file" : "lib/Dancer2/Tutorial.pod",
-         "version" : "0.12"
+         "version" : "0.140001"
       }
    },
    "release_status" : "stable",
@@ -405,6 +393,6 @@
          "url" : "https://github.com/PerlDancer/Dancer2"
       }
    },
-   "version" : "0.12"
+   "version" : "0.140001"
 }
 
diff --git a/META.yml b/META.yml
index e452904..f9069e4 100644
--- a/META.yml
+++ b/META.yml
@@ -5,12 +5,12 @@ author:
 build_requires:
   Capture::Tiny: 0.12
   ExtUtils::MakeMaker: 0
+  File::Spec: 0
   File::Temp: 0.22
   FindBin: 0
   HTTP::Body: 0
   HTTP::Request: 0
   HTTP::Request::Common: 0
-  HTTP::Server::Simple::PSGI: 0
   IO::Handle: 0
   IPC::Open3: 0
   LWP::Protocol::PSGI: 0.06
@@ -22,8 +22,8 @@ build_requires:
   Test::Script: 0
   Test::TCP: 1.13
   YAML: 0
-  YAML::Any: 0
   lib: 0
+  perl: 5.006
   utf8: 0
   vars: 0
 configure_requires:
@@ -31,7 +31,7 @@ configure_requires:
   File::ShareDir::Install: 0.03
   Module::Build: 0.3601
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.006, CPAN::Meta::Converter version 2.120921'
+generated_by: 'Dist::Zilla version 5.015, CPAN::Meta::Converter version 2.120921'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -40,205 +40,195 @@ name: Dancer2
 provides:
   Dancer2:
     file: lib/Dancer2.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::CLI:
     file: lib/Dancer2/CLI.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::CLI::Command::gen:
     file: lib/Dancer2/CLI/Command/gen.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::CLI::Command::version:
     file: lib/Dancer2/CLI/Command/version.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Config:
     file: lib/Dancer2/Config.pod
-    version: 0.12
+    version: 0.140001
   Dancer2::Cookbook:
     file: lib/Dancer2/Cookbook.pod
-    version: 0.12
+    version: 0.140001
   Dancer2::Core:
     file: lib/Dancer2/Core.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::App:
     file: lib/Dancer2/Core/App.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Context:
     file: lib/Dancer2/Core/Context.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Cookie:
     file: lib/Dancer2/Core/Cookie.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::DSL:
     file: lib/Dancer2/Core/DSL.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Dispatcher:
     file: lib/Dancer2/Core/Dispatcher.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Error:
     file: lib/Dancer2/Core/Error.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Factory:
     file: lib/Dancer2/Core/Factory.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::HTTP:
     file: lib/Dancer2/Core/HTTP.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Hook:
     file: lib/Dancer2/Core/Hook.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::MIME:
     file: lib/Dancer2/Core/MIME.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Request:
     file: lib/Dancer2/Core/Request.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Request::Upload:
     file: lib/Dancer2/Core/Request/Upload.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Response:
     file: lib/Dancer2/Core/Response.pm
-    version: 0.12
-  Dancer2::Core::Role::Config:
-    file: lib/Dancer2/Core/Role/Config.pm
-    version: 0.12
+    version: 0.140001
+  Dancer2::Core::Role::ConfigReader:
+    file: lib/Dancer2/Core/Role/ConfigReader.pm
+    version: 0.140001
   Dancer2::Core::Role::DSL:
     file: lib/Dancer2/Core/Role/DSL.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Engine:
     file: lib/Dancer2/Core/Role/Engine.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Handler:
     file: lib/Dancer2/Core/Role/Handler.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Headers:
     file: lib/Dancer2/Core/Role/Headers.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Hookable:
     file: lib/Dancer2/Core/Role/Hookable.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Logger:
     file: lib/Dancer2/Core/Role/Logger.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Serializer:
     file: lib/Dancer2/Core/Role/Serializer.pm
-    version: 0.12
-  Dancer2::Core::Role::Server:
-    file: lib/Dancer2/Core/Role/Server.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::SessionFactory:
     file: lib/Dancer2/Core/Role/SessionFactory.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::SessionFactory::File:
     file: lib/Dancer2/Core/Role/SessionFactory/File.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::StandardResponses:
     file: lib/Dancer2/Core/Role/StandardResponses.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Role::Template:
     file: lib/Dancer2/Core/Role/Template.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Route:
     file: lib/Dancer2/Core/Route.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Runner:
     file: lib/Dancer2/Core/Runner.pm
-    version: 0.12
-  Dancer2::Core::Server::PSGI:
-    file: lib/Dancer2/Core/Server/PSGI.pm
-    version: 0.12
-  Dancer2::Core::Server::Standalone:
-    file: lib/Dancer2/Core/Server/Standalone.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Session:
     file: lib/Dancer2/Core/Session.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Time:
     file: lib/Dancer2/Core/Time.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Core::Types:
     file: lib/Dancer2/Core/Types.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::FileUtils:
     file: lib/Dancer2/FileUtils.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Handler::AutoPage:
     file: lib/Dancer2/Handler/AutoPage.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Handler::File:
     file: lib/Dancer2/Handler/File.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Capture:
     file: lib/Dancer2/Logger/Capture.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Capture::Trap:
     file: lib/Dancer2/Logger/Capture/Trap.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Console:
     file: lib/Dancer2/Logger/Console.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Diag:
     file: lib/Dancer2/Logger/Diag.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::File:
     file: lib/Dancer2/Logger/File.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Note:
     file: lib/Dancer2/Logger/Note.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Logger::Null:
     file: lib/Dancer2/Logger/Null.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Manual:
     file: lib/Dancer2/Manual.pod
-    version: 0.12
+    version: 0.140001
   Dancer2::Plugin:
     file: lib/Dancer2/Plugin.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Plugin::Ajax:
     file: lib/Dancer2/Plugin/Ajax.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Plugins:
     file: lib/Dancer2/Plugins.pod
-    version: 0.12
+    version: 0.140001
   Dancer2::Serializer::Dumper:
     file: lib/Dancer2/Serializer/Dumper.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Serializer::JSON:
     file: lib/Dancer2/Serializer/JSON.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Serializer::YAML:
     file: lib/Dancer2/Serializer/YAML.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Session::Simple:
     file: lib/Dancer2/Session/Simple.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Session::YAML:
     file: lib/Dancer2/Session/YAML.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Template::Implementation::ForkedTiny:
     file: lib/Dancer2/Template/Implementation/ForkedTiny.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Template::Simple:
     file: lib/Dancer2/Template/Simple.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Template::TemplateToolkit:
     file: lib/Dancer2/Template/TemplateToolkit.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Template::Tiny:
     file: lib/Dancer2/Template/Tiny.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Test:
     file: lib/Dancer2/Test.pm
-    version: 0.12
+    version: 0.140001
   Dancer2::Tutorial:
     file: lib/Dancer2/Tutorial.pod
-    version: 0.12
+    version: 0.140001
 recommends:
   CGI::Deurl::XS: 0
   Crypt::URandom: 0
   JSON::XS: 0
   Math::Random::ISAAC::XS: 0
-  Plack::Request: 0
   Pod::Simple::Search: 0
   Pod::Simple::SimpleTree: 0
   Scope::Upper: 0
@@ -267,7 +257,7 @@ requires:
   HTTP::Body: 0
   HTTP::Date: 0
   HTTP::Headers: 0
-  HTTP::Server::Simple::PSGI: 0
+  HTTP::Server::PSGI: 0
   Hash::Merge::Simple: 0
   IO::File: 0
   JSON: 0
@@ -280,7 +270,8 @@ requires:
   MooX::Types::MooseLike: 0.16
   MooX::Types::MooseLike::Base: 0
   POSIX: 0
-  Plack::Request: 0
+  Plack: 1.0016
+  Plack::Builder: 0
   Pod::Simple::Search: 0
   Pod::Simple::SimpleTree: 0
   Return::MultiLevel: 0
@@ -292,14 +283,14 @@ requires:
   Test::More: 0.92
   URI: 0
   URI::Escape: 0
-  YAML::Any: 0
+  YAML: 0
   overload: 0
   parent: 0
-  perl: 5.00503
+  perl: 5.006
   strict: 0
   warnings: 0
 resources:
   bugtracker: https://github.com/PerlDancer/Dancer2/issues
   homepage: http://perldancer.org/
   repository: https://github.com/PerlDancer/Dancer2
-version: 0.12
+version: 0.140001
diff --git a/Makefile.PL b/Makefile.PL
index dcb2b6d..10dfb81 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -1,8 +1,9 @@
 
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.015.
 use strict;
 use warnings;
 
-use 5.005030;
+use 5.006;
 
 use ExtUtils::MakeMaker 6.30;
 
@@ -49,7 +50,7 @@ my %WriteMakefileArgs = (
     "HTTP::Body" => 0,
     "HTTP::Date" => 0,
     "HTTP::Headers" => 0,
-    "HTTP::Server::Simple::PSGI" => 0,
+    "HTTP::Server::PSGI" => 0,
     "Hash::Merge::Simple" => 0,
     "IO::File" => 0,
     "JSON" => 0,
@@ -62,7 +63,8 @@ my %WriteMakefileArgs = (
     "MooX::Types::MooseLike" => "0.16",
     "MooX::Types::MooseLike::Base" => 0,
     "POSIX" => 0,
-    "Plack::Request" => 0,
+    "Plack" => "1.0016",
+    "Plack::Builder" => 0,
     "Pod::Simple::Search" => 0,
     "Pod::Simple::SimpleTree" => 0,
     "Return::MultiLevel" => 0,
@@ -74,7 +76,7 @@ my %WriteMakefileArgs = (
     "Test::More" => "0.92",
     "URI" => 0,
     "URI::Escape" => 0,
-    "YAML::Any" => 0,
+    "YAML" => 0,
     "overload" => 0,
     "parent" => 0,
     "strict" => 0,
@@ -83,12 +85,12 @@ my %WriteMakefileArgs = (
   "TEST_REQUIRES" => {
     "Capture::Tiny" => "0.12",
     "ExtUtils::MakeMaker" => 0,
+    "File::Spec" => 0,
     "File::Temp" => "0.22",
     "FindBin" => 0,
     "HTTP::Body" => 0,
     "HTTP::Request" => 0,
     "HTTP::Request::Common" => 0,
-    "HTTP::Server::Simple::PSGI" => 0,
     "IO::Handle" => 0,
     "IPC::Open3" => 0,
     "LWP::Protocol::PSGI" => "0.06",
@@ -99,12 +101,11 @@ my %WriteMakefileArgs = (
     "Test::Script" => 0,
     "Test::TCP" => "1.13",
     "YAML" => 0,
-    "YAML::Any" => 0,
     "lib" => 0,
     "utf8" => 0,
     "vars" => 0
   },
-  "VERSION" => "0.12",
+  "VERSION" => "0.140001",
   "test" => {
     "TESTS" => "t/*.t t/dsl/*.t t/roles/*.t t/route-pod-coverage/*.t t/template_tiny/*.t"
   }
@@ -138,7 +139,7 @@ my %FallbackPrereqs = (
   "HTTP::Headers" => 0,
   "HTTP::Request" => 0,
   "HTTP::Request::Common" => 0,
-  "HTTP::Server::Simple::PSGI" => 0,
+  "HTTP::Server::PSGI" => 0,
   "Hash::Merge::Simple" => 0,
   "IO::File" => 0,
   "IO::Handle" => 0,
@@ -155,7 +156,8 @@ my %FallbackPrereqs = (
   "MooX::Types::MooseLike" => "0.16",
   "MooX::Types::MooseLike::Base" => 0,
   "POSIX" => 0,
-  "Plack::Request" => 0,
+  "Plack" => "1.0016",
+  "Plack::Builder" => 0,
   "Plack::Test" => 0,
   "Pod::Simple::Search" => 0,
   "Pod::Simple::SimpleTree" => 0,
@@ -173,7 +175,6 @@ my %FallbackPrereqs = (
   "URI" => 0,
   "URI::Escape" => 0,
   "YAML" => 0,
-  "YAML::Any" => 0,
   "lib" => 0,
   "overload" => 0,
   "parent" => 0,
diff --git a/README.md b/README.md
index adf05a5..99407d6 100644
--- a/README.md
+++ b/README.md
@@ -29,9 +29,9 @@ Now point your browser to [http://localhost:3000](http://localhost:3000) and voi
 * [Dancer's Website](http://perldancer.org)
 * [Most recent release on CPAN](https://metacpan.org/release/Dancer2)
 * [Builds status on Travis](https://travis-ci.org/PerlDancer/Dancer2)
-* [Our Mailing List](http://list.perldancer.org/cgi-bin/listinfo/dancer-users)
+* [Our Mailing List](http://lists.preshweb.co.uk/mailman/listinfo/dancer-users)
 * [Follow us on Twitter](https://twitter.com/perldancer)
-* [Find us on irc.perl.org #dancer](irc://irc.perl.org/#dancer)
+* [Find us on irc.perl.org #dancer](http://perldancer.org/irc)
 * [The Advent Calendar](http://advent.perldancer.org/)
 * [Contribution/Git Guide](https://github.com/PerlDancer/Dancer2/blob/master/GitGuide.md)
 
diff --git a/lib/Dancer2.pm b/lib/Dancer2.pm
index fa34631..d989c79 100644
--- a/lib/Dancer2.pm
+++ b/lib/Dancer2.pm
@@ -1,15 +1,12 @@
 package Dancer2;
-{
-  $Dancer2::VERSION = '0.12';
-}
 # ABSTRACT: Lightweight yet powerful web application framework
-
+$Dancer2::VERSION = '0.140001';
 use strict;
 use warnings;
 use Class::Load 'load_class';
 use Dancer2::Core;
-use Dancer2::Core::Runner;
 use Dancer2::Core::App;
+use Dancer2::Core::Runner;
 use Dancer2::FileUtils;
 
 our $AUTHORITY = 'SUKRIA';
@@ -17,7 +14,7 @@ our $AUTHORITY = 'SUKRIA';
 # set version in dist.ini now
 # but we still need a basic version for
 # the tests
-$Dancer2::VERSION ||= '0.09';    # 2.0.9
+$Dancer2::VERSION ||= '0.140001'; # 2.14.1
 
 our $runner;
 
@@ -46,8 +43,8 @@ sub import {
     }
 
     scalar(@final_args) % 2
-      and die
-      "parameters to 'use Dancer2' should be one of : 'key => value', ':script', or !<keyword>, where <keyword> is a DSL keyword you don't want to import";
+      and die q{parameters must be key/value pairs, ':script' or '!keyword'};
+
     my %final_args = @final_args;
 
     $final_args{dsl} ||= 'Dancer2::Core::DSL';
@@ -56,12 +53,9 @@ sub import {
     if ( not defined $runner ) {
 
         # TODO should support commandline options as well
-
-        $runner = Dancer2::Core::Runner->new( caller => $script, );
+        $runner = Dancer2::Core::Runner->new( caller => $script );
     }
 
-    my $server = $runner->server;
-
     # the app object
     # populating with the server's postponed hooks in advance
     my $app = Dancer2::Core::App->new(
@@ -69,13 +63,13 @@ sub import {
         environment     => $runner->environment,
         location        => $runner->location,
         runner_config   => $runner->config,
-        postponed_hooks => $server->postponed_hooks,
+        postponed_hooks => $runner->postponed_hooks,
     );
 
     _set_import_method_to_caller($caller);
 
     # register the app within the runner instance
-    $server->register_application($app);
+    $runner->register_application($app);
 
     # load the DSL, defaulting to Dancer2::Core::DSL
     load_class( $final_args{dsl} );
@@ -122,7 +116,7 @@ Dancer2 - Lightweight yet powerful web application framework
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -303,7 +297,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI.pm b/lib/Dancer2/CLI.pm
index 8495f56..f8d3468 100644
--- a/lib/Dancer2/CLI.pm
+++ b/lib/Dancer2/CLI.pm
@@ -1,9 +1,6 @@
 # ABSTRACT: Dancer2 cli application
 package Dancer2::CLI;
-{
-  $Dancer2::CLI::VERSION = '0.12';
-}
-
+$Dancer2::CLI::VERSION = '0.140001';
 use App::Cmd::Setup -app;
 
 1;
@@ -18,7 +15,7 @@ Dancer2::CLI - Dancer2 cli application
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -26,7 +23,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI/Command/gen.pm b/lib/Dancer2/CLI/Command/gen.pm
index b24dd90..1356a38 100644
--- a/lib/Dancer2/CLI/Command/gen.pm
+++ b/lib/Dancer2/CLI/Command/gen.pm
@@ -1,9 +1,6 @@
 # ABSTRACT: create new Dancer2 application
 package Dancer2::CLI::Command::gen;
-{
-  $Dancer2::CLI::Command::gen::VERSION = '0.12';
-}
-
+$Dancer2::CLI::Command::gen::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -280,7 +277,7 @@ Dancer2::CLI::Command::gen - create new Dancer2 application
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -288,7 +285,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/CLI/Command/version.pm b/lib/Dancer2/CLI/Command/version.pm
index 8350b9b..4dc4399 100644
--- a/lib/Dancer2/CLI/Command/version.pm
+++ b/lib/Dancer2/CLI/Command/version.pm
@@ -1,8 +1,6 @@
-# ABSTRACT: display version
 package Dancer2::CLI::Command::version;
-{
-  $Dancer2::CLI::Command::version::VERSION = '0.12';
-}
+# ABSTRACT: display version
+$Dancer2::CLI::Command::version::VERSION = '0.140001';
 use App::Cmd::Setup -command;
 
 sub description { 'Display version of Dancer2' }
@@ -29,7 +27,7 @@ Dancer2::CLI::Command::version - display version
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -37,7 +35,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Config.pod b/lib/Dancer2/Config.pod
index 37034cd..1c109c3 100644
--- a/lib/Dancer2/Config.pod
+++ b/lib/Dancer2/Config.pod
@@ -1,6 +1,6 @@
 package Dancer2::Config;
 # ABSTRACT: Configure Dancer2 to suit your needs
-
+$Dancer2::Config::VERSION = '0.140001';
 __END__
 
 =pod
@@ -11,15 +11,15 @@ Dancer2::Config - Configure Dancer2 to suit your needs
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
-The Dancer2 configuration (as implemented by L<Dancer2::Core::Role::Config>)
-handles reading and changing the configuration of your Dancer2 apps.  This
-document describes how to manipulate Dancer2's configuration settings (through
-code or by file), and to document the various settings that are available in
-Dancer2.
+The Dancer2 configuration (as implemented by
+L<Dancer2::Core::Role::ConfigReader>) handles reading and changing the
+configuration of your Dancer2 apps.  This document describes how to
+manipulate Dancer2's configuration settings (through code or by file),
+and to document the various settings that are available in Dancer2.
 
 =head1 MANIPULATING SETTINGS VIA CODE
 
@@ -137,11 +137,6 @@ The port Dancer2 will listen to.
 Default value is 3000. This setting can be changed on the command-line with the
 B<--port> switch.
 
-=head3 daemon (boolean)
-
-If set to true, runs the standalone webserver in the background.
-This setting can be changed on the command-line with the B<--daemon> flag.
-
 =head3 behind_proxy (boolean)
 
 If set to true, Dancer2 will look to C<X-Forwarded-Protocol> and
@@ -477,7 +472,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Cookbook.pod b/lib/Dancer2/Cookbook.pod
index 5fb0c66..8241edc 100644
--- a/lib/Dancer2/Cookbook.pod
+++ b/lib/Dancer2/Cookbook.pod
@@ -1,6 +1,6 @@
 package Dancer2::Cookbook;
 # ABSTRACT: Example-driven quick-start to the Dancer2 web framework
-
+$Dancer2::Cookbook::VERSION = '0.140001';
 __END__
 
 =pod
@@ -11,7 +11,7 @@ Dancer2::Cookbook - Example-driven quick-start to the Dancer2 web framework
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -845,7 +845,7 @@ The content of the error will be serialized using the appropriate serializer.
 =head2 Running stand-alone
 
 At the simplest, your Dancer2 app can run standalone, operating as its own
-webserver using L<HTTP::Server::Simple::PSGI>.
+webserver using L<HTTP::Server::PSGI>.
 
 Simply fire up your app:
 
@@ -1384,7 +1384,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core.pm b/lib/Dancer2/Core.pm
index 3649fd5..b899d1a 100644
--- a/lib/Dancer2/Core.pm
+++ b/lib/Dancer2/Core.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Core libraries for Dancer2 2.0
 
 package Dancer2::Core;
-{
-  $Dancer2::Core::VERSION = '0.12';
-}
-
+$Dancer2::Core::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -32,7 +29,7 @@ Dancer2::Core - Core libraries for Dancer2 2.0
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 FUNCTIONS
 
@@ -46,7 +43,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/App.pm b/lib/Dancer2/Core/App.pm
index c0f9689..930366c 100644
--- a/lib/Dancer2/Core/App.pm
+++ b/lib/Dancer2/Core/App.pm
@@ -1,9 +1,6 @@
 # ABSTRACT: encapsulation of Dancer2 packages
 package Dancer2::Core::App;
-{
-  $Dancer2::Core::App::VERSION = '0.12';
-}
-
+$Dancer2::Core::App::VERSION = '0.140001';
 use Moo;
 use File::Spec;
 use Scalar::Util 'blessed';
@@ -17,7 +14,189 @@ use Dancer2::Core::Hook;
 
 # we have hooks here
 with 'Dancer2::Core::Role::Hookable';
-with 'Dancer2::Core::Role::Config';
+with 'Dancer2::Core::Role::ConfigReader';
+
+sub supported_engines { [ qw<logger serializer session template> ] }
+
+has logger_engine => (
+    is      => 'ro',
+    isa     => Maybe[ConsumerOf['Dancer2::Core::Role::Logger']],
+    lazy    => 1,
+    builder => '_build_logger_engine',
+    writer  => 'set_logger_engine',
+);
+
+has session_engine => (
+    is      => 'ro',
+    isa     => Maybe[ConsumerOf['Dancer2::Core::Role::SessionFactory']],
+    lazy    => 1,
+    builder => '_build_session_engine',
+    writer  => 'set_session_engine',
+);
+
+has template_engine => (
+    is      => 'ro',
+    isa     => Maybe[ConsumerOf['Dancer2::Core::Role::Template']],
+    lazy    => 1,
+    builder => '_build_template_engine',
+    writer  => 'set_template_engine',
+);
+
+has serializer_engine => (
+    is      => 'ro',
+    isa     => Maybe[ConsumerOf['Dancer2::Core::Role::Serializer']],
+    lazy    => 1,
+    builder => '_build_serializer_engine',
+    writer  => 'set_serializer_engine',
+);
+
+has '+local_triggers' => (
+    default => sub {
+        my $self     = shift;
+        my $triggers = {
+            # general triggers we want to allow, besides engines
+            views => sub {
+                my ( $self, $value, $config ) = @_;
+                $self->template_engine->views($value);
+            },
+
+            layout => sub {
+                my ( $self, $value, $config ) = @_;
+                $self->template_engine->layout($value);
+            },
+        };
+
+        foreach my $engine ( @{ $self->supported_engines } ) {
+            $triggers->{$engine} = sub {
+                my ( $self, $value, $config ) = @_;
+
+                return $value if ref $value;
+
+                my $build_method    = "_build_${engine}_engine";
+                my $setter_method   = "set_${engine}_engine";
+                my $engine_instance = $self->$build_method( $value, $config );
+
+                # set the engine with the new value from the builder
+                $self->$setter_method($engine_instance);
+
+                return $engine_instance;
+            };
+        }
+
+        return $triggers;
+    },
+);
+
+sub _build_logger_engine {
+    my ($self, $value, $config) = @_;
+
+    $config = $self->config     if !defined $config;
+    $value  = $config->{logger} if !defined $value;
+
+    return $value if ref($value);
+
+    # XXX This is needed for the tests that create an app without
+    # a runner.
+    $value = 'console' if !defined $value;
+
+    my $engine_options =
+        $self->_get_config_for_engine( logger => $value, $config );
+
+    my $logger = Dancer2::Core::Factory->create(
+        logger => $value,
+        %{$engine_options},
+        app_name        => $self->name,
+        postponed_hooks => $self->get_postponed_hooks
+    );
+
+    $logger->log_level($config->{log}) if exists $config->{log};
+
+    return $logger;
+}
+
+sub _build_session_engine {
+    my ($self, $value, $config)  = @_;
+
+    $config = $self->config        if !defined $config;
+    $value  = $config->{'session'} if !defined $value;
+
+    $value = 'simple' if !defined $value;
+    return $value     if ref($value);
+
+    my $engine_options =
+          $self->_get_config_for_engine( session => $value, $config );
+
+    return Dancer2::Core::Factory->create(
+        session => $value,
+        %{$engine_options},
+        postponed_hooks => $self->get_postponed_hooks,
+    );
+}
+
+sub _build_template_engine {
+    my ($self, $value, $config)  = @_;
+
+    $config = $self->config         if !defined $config;
+    $value  = $config->{'template'} if !defined $value;
+
+    return undef  if !defined $value;
+    return $value if ref($value);
+
+    my $engine_options =
+          $self->_get_config_for_engine( template => $value, $config );
+
+    my $engine_attrs = { config => $engine_options };
+    $engine_attrs->{layout} ||= $config->{layout};
+    $engine_attrs->{views}  ||= $config->{views}
+        || path( $self->location, 'views' );
+
+    return Dancer2::Core::Factory->create(
+        template => $value,
+        %{$engine_attrs},
+        postponed_hooks => $self->get_postponed_hooks,
+    );
+}
+
+sub _build_serializer_engine {
+    my ($self, $value, $config) = @_;
+
+    $config = $self->config         if !defined $config;
+    $value  = $config->{serializer} if !defined $value;
+
+    return undef  if !defined $value;
+    return $value if ref($value);
+
+    my $engine_options =
+        $self->_get_config_for_engine( serializer => $value, $config );
+
+    return Dancer2::Core::Factory->create(
+        serializer      => $value,
+        config          => $engine_options,
+        postponed_hooks => $self->get_postponed_hooks,
+    );
+}
+
+sub _get_config_for_engine {
+    my ( $self, $engine, $name, $config ) = @_;
+
+    my $default_config = {
+        environment => $self->environment,
+        location    => $self->config_location,
+    };
+
+    defined $config->{'engines'} && defined $config->{'engines'}{$engine}
+        or return $default_config;
+
+    my $engine_config = {};
+
+    for my $config_key ($name, Dancer2::Core::camelize($name)) {
+        $engine_config = $config->{engines}{$engine}{$config_key}
+            if defined $config->{engines}->{$engine}{$config_key};
+    }
+    return { %{$default_config}, %{$engine_config}, } || $default_config;
+}
+
+
 
 has postponed_hooks => (
     is      => 'ro',
@@ -31,25 +210,12 @@ has plugins => (
     default => sub { [] },
 );
 
-has server => (
-    is       => 'rw',
-    isa      => ConsumerOf ['Dancer2::Core::Role::Server'],
-    weak_ref => 1,
-);
-
 has runner_config => (
     is      => 'ro',
     isa     => HashRef,
     default => sub { {} },
 );
 
-has default_config => (
-    is      => 'ro',
-    isa     => HashRef,
-    lazy    => 1,
-    builder => '_build_default_config',
-);
-
 has route_handlers => (
     is      => 'rw',
     isa     => ArrayRef,
@@ -68,8 +234,9 @@ has context => (
     trigger => sub {
         my ( $self, $ctx ) = @_;
         $self->_init_for_context($ctx),;
-        for my $type (@{$self->supported_engines}) {
-            my $engine = $self->engine($type) or next;
+        for my $type ( @{ $self->supported_engines } ) {
+            my $attr   = "${type}_engine";
+            my $engine = $self->$attr or next;
             defined($ctx) ? $engine->context($ctx) : $engine->clear_context;
         }
     },
@@ -198,7 +365,7 @@ sub _init_hooks {
                 my $response = shift;
 
                 # make sure an engine is defined, if not, nothing to do
-                my $engine = $self->engine('session');
+                my $engine = $self->session_engine;
                 return if !defined $engine;
 
                 # make sure we have a context to examine
@@ -261,7 +428,7 @@ sub register_plugin {
     push @{ $self->plugins }, $plugin;
 }
 
-# This method overrides the default one from Role::Config
+# This method overrides the default one from Role::ConfigReader
 sub settings {
     my ($self) = @_;
     +{ %{ Dancer2->runner->config }, %{ $self->config } };
@@ -271,9 +438,10 @@ sub engine {
     my ( $self, $name ) = @_;
 
     croak "Engine '$name' is not supported."
-        if !grep {$_ eq $name} @{$self->supported_engines};
+        if !grep {$_ eq $name} @{ $self->supported_engines };
 
-    return $self->engines->{$name};
+    my $attr_name = "${name}_engine";
+    return $self->$attr_name;
 }
 
 sub session {
@@ -306,7 +474,7 @@ sub session {
 
 sub template {
     my ($self) = shift;
-    my $template = $self->engine('template');
+    my $template = $self->template_engine;
 
     my $content = $template->process(@_);
 
@@ -317,8 +485,9 @@ sub hook_candidates {
     my ($self) = @_;
 
     my @engines;
-    for my $e (@{$self->supported_engines}) {
-        my $engine = $self->engine($e) or next;
+    for my $e ( @{ $self->supported_engines } ) {
+        my $attr   = "${e}_engine";
+        my $engine = $self->$attr or next;
         push @engines, $engine;
     }
 
@@ -362,7 +531,7 @@ sub mime_type {
 sub log {
     my ($self, $level, @args)  = @_;
 
-    my $logger = $self->engine('logger')
+    my $logger = $self->logger_engine
       or croak "No logger defined";
 
     $logger->$level(@args);
@@ -547,7 +716,7 @@ Dancer2::Core::App - encapsulation of Dancer2 packages
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -565,8 +734,6 @@ that package, thanks to that encapsulation.
 
 =head2 plugins
 
-=head2 server
-
 =head2 runner_config
 
 =head2 default_config
@@ -620,7 +787,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Context.pm b/lib/Dancer2/Core/Context.pm
index fc82e32..cff60b2 100644
--- a/lib/Dancer2/Core/Context.pm
+++ b/lib/Dancer2/Core/Context.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Context;
-{
-  $Dancer2::Core::Context::VERSION = '0.12';
-}
-
+$Dancer2::Core::Context::VERSION = '0.140001';
 # ABSTRACT: handles everything proper to a request's context.
 
 use Moo;
@@ -237,7 +234,7 @@ Dancer2::Core::Context - handles everything proper to a request's context.
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 ATTRIBUTES
 
@@ -327,7 +324,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Cookie.pm b/lib/Dancer2/Core/Cookie.pm
index 96aba93..3f1bf86 100644
--- a/lib/Dancer2/Core/Cookie.pm
+++ b/lib/Dancer2/Core/Cookie.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: A cookie representing class
-
 package Dancer2::Core::Cookie;
-{
-  $Dancer2::Core::Cookie::VERSION = '0.12';
-}
+# ABSTRACT: A cookie representing class
+$Dancer2::Core::Cookie::VERSION = '0.140001';
 use Moo;
 use URI::Escape;
 use Dancer2::Core::Types;
@@ -119,7 +116,7 @@ Dancer2::Core::Cookie - A cookie representing class
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -204,7 +201,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/DSL.pm b/lib/Dancer2/Core/DSL.pm
index 4bced7a..3d6c2d0 100644
--- a/lib/Dancer2/Core/DSL.pm
+++ b/lib/Dancer2/Core/DSL.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Dancer2's Domain Specific Language (DSL)
 
 package Dancer2::Core::DSL;
-{
-  $Dancer2::Core::DSL::VERSION = '0.12';
-}
-
+$Dancer2::Core::DSL::VERSION = '0.140001';
 use Moo;
 use Carp;
 use Class::Load 'load_class';
@@ -379,7 +376,7 @@ Dancer2::Core::DSL - Dancer2's Domain Specific Language (DSL)
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 FUNCTIONS
 
@@ -408,7 +405,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Dispatcher.pm b/lib/Dancer2/Core/Dispatcher.pm
index 98489a3..319fa60 100644
--- a/lib/Dancer2/Core/Dispatcher.pm
+++ b/lib/Dancer2/Core/Dispatcher.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class for dispatching request to the appropriate route handler
-
 package Dancer2::Core::Dispatcher;
-{
-  $Dancer2::Core::Dispatcher::VERSION = '0.12';
-}
+# ABSTRACT: Class for dispatching request to the appropriate route handler
+$Dancer2::Core::Dispatcher::VERSION = '0.140001';
 use Moo;
 use Encode;
 
@@ -155,21 +152,6 @@ sub _dispatch_route {
     return $response;
 }
 
-# In the case of a HEAD request, we need to drop the body, but we also
-# need to keep the value of the Content-Length header.
-# Because there's a trigger on the content field to change the value of
-# the C-L header every time we change the value, we need to modify a around
-# modifier to change the value of content and restore the length.
-around 'dispatch' => sub {
-    my ( $orig, $self, $env, $request, $curr_context ) = @_;
-    my $response = $orig->( $self, $env, $request, $curr_context );
-    return $response unless defined $request && $request->is_head;
-    my $cl = $response->header('Content-Length');
-    $response->content('');
-    $response->header( 'Content-Length' => $cl );
-    return $response;
-};
-
 sub response_internal_error {
     my ( $self, $context, $error ) = @_;
 
@@ -194,7 +176,7 @@ sub response_not_found {
         environment     => Dancer2->runner->environment,
         location        => Dancer2->runner->location,
         runner_config   => Dancer2->runner->config,
-        postponed_hooks => Dancer2->runner->server->postponed_hooks,
+        postponed_hooks => Dancer2->runner->postponed_hooks,
         api_version     => 2,
     );
 
@@ -220,7 +202,7 @@ Dancer2::Core::Dispatcher - Class for dispatching request to the appropriate rou
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -281,7 +263,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Error.pm b/lib/Dancer2/Core/Error.pm
index 86e946e..7ae9a38 100644
--- a/lib/Dancer2/Core/Error.pm
+++ b/lib/Dancer2/Core/Error.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class representing fatal errors
-
 package Dancer2::Core::Error;
-{
-  $Dancer2::Core::Error::VERSION = '0.12';
-}
+# ABSTRACT: Class representing fatal errors
+$Dancer2::Core::Error::VERSION = '0.140001';
 use Moo;
 use Carp;
 use Dancer2::Core::Types;
@@ -479,7 +476,7 @@ Dancer2::Core::Error - Class representing fatal errors
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -589,7 +586,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Factory.pm b/lib/Dancer2/Core/Factory.pm
index 8fd8c2a..04dec6e 100644
--- a/lib/Dancer2/Core/Factory.pm
+++ b/lib/Dancer2/Core/Factory.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Instantiate components by type and name
-
 package Dancer2::Core::Factory;
-{
-  $Dancer2::Core::Factory::VERSION = '0.12';
-}
+# ABSTRACT: Instantiate components by type and name
+$Dancer2::Core::Factory::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -36,7 +33,7 @@ Dancer2::Core::Factory - Instantiate components by type and name
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -44,7 +41,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/HTTP.pm b/lib/Dancer2/Core/HTTP.pm
index ccd9a38..02b643b 100644
--- a/lib/Dancer2/Core/HTTP.pm
+++ b/lib/Dancer2/Core/HTTP.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: helper for rendering HTTP status codes for Dancer2
 
 package Dancer2::Core::HTTP;
-{
-  $Dancer2::Core::HTTP::VERSION = '0.12';
-}
-
+$Dancer2::Core::HTTP::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -137,7 +134,7 @@ Dancer2::Core::HTTP - helper for rendering HTTP status codes for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 FUNCTIONS
 
@@ -167,7 +164,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Hook.pm b/lib/Dancer2/Core/Hook.pm
index 86a8f11..9125b1f 100644
--- a/lib/Dancer2/Core/Hook.pm
+++ b/lib/Dancer2/Core/Hook.pm
@@ -1,8 +1,6 @@
-# ABSTRACT: Manipulate hooks with Dancer2
 package Dancer2::Core::Hook;
-{
-  $Dancer2::Core::Hook::VERSION = '0.12';
-}
+# ABSTRACT: Manipulate hooks with Dancer2
+$Dancer2::Core::Hook::VERSION = '0.140001';
 use Moo;
 use Dancer2::Core::Types;
 use Carp;
@@ -53,7 +51,7 @@ Dancer2::Core::Hook - Manipulate hooks with Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -106,7 +104,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/MIME.pm b/lib/Dancer2/Core/MIME.pm
index ae78a18..1645aaf 100644
--- a/lib/Dancer2/Core/MIME.pm
+++ b/lib/Dancer2/Core/MIME.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Class to ease manipulation of MIME types
 
 package Dancer2::Core::MIME;
-{
-  $Dancer2::Core::MIME::VERSION = '0.12';
-}
-
+$Dancer2::Core::MIME::VERSION = '0.140001';
 use Moo;
 
 use MIME::Types;
@@ -91,7 +88,7 @@ Dancer2::Core::MIME - Class to ease manipulation of MIME types
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -173,7 +170,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Request.pm b/lib/Dancer2/Core/Request.pm
index c7fa83e..f050fc9 100644
--- a/lib/Dancer2/Core/Request.pm
+++ b/lib/Dancer2/Core/Request.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Request;
-{
-  $Dancer2::Core::Request::VERSION = '0.12';
-}
-
+$Dancer2::Core::Request::VERSION = '0.140001';
 # ABSTRACT: Interface for accessing incoming requests
 
 use Moo;
@@ -15,19 +12,11 @@ use URI::Escape;
 
 use Dancer2::Core::Types;
 use Dancer2::Core::Request::Upload;
+use Dancer2::Core::Cookie;
 
 with 'Dancer2::Core::Role::Headers';
 
 
-
-# check presence of XS module to speedup request
-eval { require URL::Encode::XS; };
-our $XS_URL_DECODE = !$@;
-
-eval { require CGI::Deurl::XS; };
-our $XS_PARSE_QUERY_STRING = !$@;
-
-
 # add an attribute for each HTTP_* variables
 # (HOST is managed manually)
 my @http_env_keys = (qw/
@@ -53,6 +42,15 @@ foreach my $attr ( @http_env_keys ) {
 }
 
 
+# check presence of XS module to speedup request
+eval { require URL::Encode::XS; };
+our $XS_URL_DECODE = !$@;
+
+eval { require CGI::Deurl::XS; };
+our $XS_PARSE_QUERY_STRING = !$@;
+
+
+
 # then all the native attributes
 has env => (
     is      => 'ro',
@@ -225,10 +223,7 @@ sub host {
     my ($self) = @_;
 
     if ( $self->is_behind_proxy ) {
-        my @hosts = split /\s*,\s*/, (
-          $self->env->{HTTP_X_FORWARDED_HOST} || $self->env->{X_FORWARDED_HOST}
-        );
-
+        my @hosts = split /\s*,\s*/, $self->env->{HTTP_X_FORWARDED_HOST}, 2;
         return $hosts[0];
     } else {
         return $self->env->{'HTTP_HOST'};
@@ -242,7 +237,7 @@ sub host {
 # aliases, kept for backward compat
 sub agent                 { $_[0]->user_agent }
 sub remote_address        { $_[0]->address }
-sub forwarded_for_address { $_[0]->env->{'X_FORWARDED_FOR'} }
+sub forwarded_for_address { $_[0]->env->{HTTP_X_FORWARDED_FOR} }
 sub address               { $_[0]->env->{REMOTE_ADDR} }
 sub remote_host           { $_[0]->env->{REMOTE_HOST} }
 sub protocol              { $_[0]->env->{SERVER_PROTOCOL} }
@@ -257,9 +252,9 @@ sub scheme {
     my ($self) = @_;
     my $scheme;
     if ( $self->is_behind_proxy ) {
+        # Note the 'HTTP_' prefix the PSGI spec adds to headers.
         $scheme =
-             $self->env->{'X_FORWARDED_PROTOCOL'}
-          || $self->env->{'HTTP_X_FORWARDED_PROTOCOL'}
+             $self->env->{'HTTP_X_FORWARDED_PROTOCOL'}
           || $self->env->{'HTTP_X_FORWARDED_PROTO'}
           || $self->env->{'HTTP_FORWARDED_PROTO'}
           || "";
@@ -300,8 +295,11 @@ sub deserialize {
 
     return unless $self->serializer->support_content_type($content_type);
 
+    # The latest draft of the RFC does not forbid DELETE to have content,
+    # rather the behaviour is undefined. Take the most lenient route and
+    # deserialize any content on delete as well.
     return
-      unless grep { $self->method eq $_ } qw/ PUT POST PATCH /;
+      unless grep { $self->method eq $_ } qw/ PUT POST PATCH DELETE /;
 
     # try to deserialize
     my $body = $self->_read_to_end();
@@ -393,7 +391,7 @@ sub forward {
     my ( $self, $context, $url, $params, $options ) = @_;
     my $new_request = $self->make_forward_to( $url, $params, $options );
 
-    my $new_response = Dancer2->runner->server->dispatcher->dispatch(
+    my $new_response = Dancer2->runner->dispatcher->dispatch(
         $new_request->env,
         $new_request,
         $context,
@@ -703,7 +701,7 @@ sub _init_request_headers {
                 ( my $field = $_ ) =~ s/^HTTPS?_//;
                 ( $field => $env->{$_} );
               }
-              grep {/^(?:HTTP|CONTENT|COOKIE)/i} keys %$env
+              grep {/^(?:HTTP|CONTENT)/i} keys %$env
         )
     );
 }
@@ -752,13 +750,13 @@ has cookies => (
 );
 
 sub _build_cookies {
-    my ($self) = @_;
+    my $self    = shift;
+    my $cookies = {};
 
-    my $env_str = $self->env->{COOKIE} || $self->env->{HTTP_COOKIE};
-    return {} unless defined $env_str;
+    my $http_cookie = $self->header('Cookie');
+    return $cookies unless defined $http_cookie; # nothing to do
 
-    my $cookies = {};
-    foreach my $cookie ( split( /[,;]\s/, $env_str ) ) {
+    foreach my $cookie ( split( /[,;]\s/, $http_cookie ) ) {
 
         # here, we don't want more than the 2 first elements
         # a cookie string can contains something like:
@@ -788,7 +786,7 @@ Dancer2::Core::Request - Interface for accessing incoming requests
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -814,7 +812,7 @@ a Dancer2 application.
 
 =head2 env()
 
-Return the current environment (C<%ENV>), as a hashref.
+Return the current PSGI environment hash reference.
 
 =head2 path()
 
@@ -867,7 +865,7 @@ objects.
 
 It uses the environment hash table given to build the request object:
 
-    Dancer2::Core::Request->new(env => \%ENV);
+    Dancer2::Core::Request->new(env => \%env);
 
 It also accepts the C<body_is_parsed> boolean flag, if the new request object should
 not parse request body.
@@ -1064,11 +1062,10 @@ C<uploads>.
 Returns a reference to a hash containing cookies, where the keys are the names of the
 cookies and values are L<Dancer2::Core::Cookie> objects.
 
-=head1 HTTP environment variables
+=head1 Common HTTP request headers
 
-All HTTP environment variables that are in %ENV will be provided in the
-L<Dancer2::Core::Request> object through specific accessors, here are those
-supported:
+Commonly used client-supplied HTTP request headers are available through
+specific accessors, here are those supported:
 
 =over 4
 
@@ -1108,6 +1105,13 @@ supported:
 
 =back
 
+With the exception of C<host>, these accessors are lookups into the PSGI env
+hash reference.
+
+Note that the L<PSGI> specification prefixes client-supplied request headers with
+C<HTTP_>. For example, a C<X-Requested-With> header has the key
+C<HTTP_X_REQUESTED_WITH> in the PSGI env hashref.
+
 =head1 EXTRA SPEED
 
 Install URL::Encode::XS and CGI::Deurl::XS for extra speed.
@@ -1124,7 +1128,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Request/Upload.pm b/lib/Dancer2/Core/Request/Upload.pm
index 761d51b..2756a7a 100644
--- a/lib/Dancer2/Core/Request/Upload.pm
+++ b/lib/Dancer2/Core/Request/Upload.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Request::Upload;
-{
-  $Dancer2::Core::Request::Upload::VERSION = '0.12';
-}
-
+$Dancer2::Core::Request::Upload::VERSION = '0.140001';
 # ABSTRACT: Class representing file upload requests
 use Moo;
 
@@ -106,7 +103,7 @@ Dancer2::Core::Request::Upload - Class representing file upload requests
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -184,7 +181,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Response.pm b/lib/Dancer2/Core/Response.pm
index c81401c..f85cd34 100644
--- a/lib/Dancer2/Core/Response.pm
+++ b/lib/Dancer2/Core/Response.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Response object for Dancer2
 
 package Dancer2::Core::Response;
-{
-  $Dancer2::Core::Response::VERSION = '0.12';
-}
-
+$Dancer2::Core::Response::VERSION = '0.140001';
 use Moo;
 
 use Encode;
@@ -103,6 +100,7 @@ before content => sub {
     my $self = shift;
     if (ref($_[0]) and $self->has_serializer) {
         $_[0] = $self->serialize($_[0]);
+        $self->is_encoded(1); # All serializers return byte strings
     }
 };
 
@@ -212,7 +210,7 @@ Dancer2::Core::Response - Response object for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 ATTRIBUTES
 
@@ -294,7 +292,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Config.pm b/lib/Dancer2/Core/Role/ConfigReader.pm
similarity index 53%
rename from lib/Dancer2/Core/Role/Config.pm
rename to lib/Dancer2/Core/Role/ConfigReader.pm
index 7f7b5de..618b3da 100644
--- a/lib/Dancer2/Core/Role/Config.pm
+++ b/lib/Dancer2/Core/Role/ConfigReader.pm
@@ -1,19 +1,17 @@
 # ABSTRACT: Config role for Dancer2 core objects
-package Dancer2::Core::Role::Config;
-{
-  $Dancer2::Core::Role::Config::VERSION = '0.12';
-}
-
+package Dancer2::Core::Role::ConfigReader;
+$Dancer2::Core::Role::ConfigReader::VERSION = '0.140001';
 use Moo::Role;
 
-use Dancer2::Core::Factory;
-use Dancer2::Core;
 use File::Spec;
 use Config::Any;
-use Dancer2::Core::Types;
-use Dancer2::FileUtils qw/dirname path/;
 use Hash::Merge::Simple;
-use Carp 'croak', 'carp';
+use Carp qw/croak carp/;
+
+use Dancer2::Core::Factory;
+use Dancer2::Core;
+use Dancer2::Core::Types;
+use Dancer2::FileUtils qw/path/;
 
 has location => (
     is      => 'ro',
@@ -21,6 +19,13 @@ has location => (
     builder => '_build_location',
 );
 
+has default_config => (
+    is      => 'ro',
+    isa     => HashRef,
+    lazy    => 1,
+    builder => '_build_default_config',
+);
+
 has config_location => (
     is      => 'ro',
     isa     => ReadableFilePath,
@@ -43,7 +48,6 @@ has environments_location => (
     },
 );
 
-# TODO: make readonly and add method rebuild_config?
 has config => (
     is      => 'rw',
     isa     => HashRef,
@@ -51,13 +55,6 @@ has config => (
     builder => '_build_config',
 );
 
-has engines => (
-    is      => 'ro',
-    isa     => HashRef,
-    lazy    => 1,
-    builder => '_build_engines',
-);
-
 has environment => (
     is      => 'ro',
     isa     => Str,
@@ -65,33 +62,32 @@ has environment => (
     builder => '_build_environment',
 );
 
-has _engines_triggers => (
-    is      => 'ro',
-    isa     => HashRef,
+has config_files => (
+    is      => 'rw',
     lazy    => 1,
-    builder => '_build_engines_triggers',
+    isa     => ArrayRef,
+    builder => '_build_config_files',
 );
 
-has _config_triggers => (
+has local_triggers => (
     is      => 'ro',
     isa     => HashRef,
-    lazy    => 1,
-    builder => '_build_config_triggers',
+    default => sub { +{} },
 );
 
-has supported_engines => (
+has global_triggers => (
     is      => 'ro',
-    isa     => ArrayRef,
-    lazy    => 1,
-    default => sub {[qw/logger serializer session template/]},
+    isa     => HashRef,
+    default => sub { +{
+        traces => sub {
+            my ( $self, $traces ) = @_;
+            require Carp;
+            $Carp::Verbose = $traces ? 1 : 0;
+        },
+    } },
 );
 
-has config_files => (
-    is      => 'rw',
-    lazy    => 1,
-    isa     => ArrayRef,
-    builder => '_build_config_files',
-);
+sub _build_default_config { +{} }
 
 sub _build_location { File::Spec->rel2abs('.') }
 
@@ -101,13 +97,13 @@ sub _build_environment {
 
 sub _build_config_files {
     my ($self) = @_;
-    my $location = $self->config_location;
 
+    my $location = $self->config_location;
     # an undef location means no config files for the caller
     return [] unless defined $location;
 
     my $running_env = $self->environment;
-    my @exts        = Config::Any->extensions;
+    my @exts = Config::Any->extensions;
     my @files;
 
     foreach my $ext (@exts) {
@@ -134,7 +130,7 @@ sub _build_config {
 
     my $config = Hash::Merge::Simple->merge(
         $default,
-        map { $self->load_config_file($_) } @{ $self->config_files }
+        map +( $self->load_config_file($_) ), @{ $self->config_files }
     );
 
     $config = $self->_normalize_config($config);
@@ -246,187 +242,18 @@ sub _normalize_config_entry {
     return $value;
 }
 
-sub _build_engines_triggers {
-    my $self = shift;
-
-    my $triggers = {};
-
-    foreach my $engine (@{$self->supported_engines}) {
-        $triggers->{$engine} = sub {
-            my ($self, $value, $config) = @_;
-
-            return $value if ref($value);
-
-            my $method = "_build_engine_$engine";
-            my $e = $self->$method($value, $config);
-            $self->engines->{$engine} = $e;
-            return $e;
-        };
-    }
-
-    return $triggers;
-}
-
-sub _build_config_triggers {
-    my $self = shift;
-
-    # TODO route_cache
-    return {
-        traces => sub {
-            my ( $self, $traces ) = @_;
-            require Carp;
-            $Carp::Verbose = $traces ? 1 : 0;
-        },
-        views => sub {
-            my ( $self, $value, $config ) = @_;
-            $self->engine('template')->views($value);
-        },
-        layout => sub {
-            my ( $self, $value, $config ) = @_;
-            $self->engine('template')->layout($value);
-        },
-    };
-}
-
 sub _compile_config_entry {
     my ( $self, $name, $value, $config ) = @_;
 
-    my $trigger;
-
-    if (grep {$name eq $_} @{$self->supported_engines}) {
-        $trigger = $self->_engines_triggers->{$name};
-    }else{
-        $trigger = $self->_config_triggers->{$name};
-    }
+    my $trigger = exists $self->local_triggers->{$name} ?
+                         $self->local_triggers->{$name} :
+                         $self->global_triggers->{$name};
 
-    return $value unless defined $trigger;
+    defined $trigger or return $value;
 
     return $trigger->( $self, $value, $config );
 }
 
-sub _get_config_for_engine {
-    my ( $self, $engine, $name, $config ) = @_;
-
-    my $default_config = {
-        environment => $self->environment,
-        location    => $self->config_location,
-    };
-    return $default_config unless defined $config->{engines};
-
-    if ( !defined $config->{engines}{$engine} ) {
-        return $default_config;
-    }
-
-    my $engine_config = {};
-
-    # XXX we need to move the camilize function out from Core::Factory
-    # - Franck, 2013/08/03
-    for my $config_key ($name, Dancer2::Core::camelize($name)) {
-        $engine_config = $config->{engines}{$engine}{$config_key}
-            if defined $config->{engines}->{$engine}{$config_key};
-    }
-    return { %{$default_config}, %{$engine_config}, } || $default_config;
-}
-
-sub _build_engines {
-    my $self = shift;
-    return {
-        logger     => $self->_build_engine_logger(),
-        session    => $self->_build_engine_session(),
-        template   => $self->_build_engine_template(),
-        serializer => $self->_build_engine_serializer(),
-    };
-}
-
-sub _build_engine_logger {
-    my ($self, $value, $config) = @_;
-
-    $config = $self->config     if !defined $config;
-    $value  = $config->{logger} if !defined $value;
-
-    return $value if ref($value);
-
-    # XXX This is needed for the tests that create an app without
-    # a runner.
-    $value = 'console' if !defined $value;
-
-    my $engine_options =
-        $self->_get_config_for_engine( logger => $value, $config );
-
-    my $logger = Dancer2::Core::Factory->create(
-        logger => $value,
-        %{$engine_options},
-        app_name        => $self->name,
-        postponed_hooks => $self->get_postponed_hooks
-    );
-
-    $logger->log_level($config->{log}) if exists $config->{log};
-
-    return $logger;
-}
-
-sub _build_engine_session {
-    my ($self, $value, $config)  = @_;
-
-    $config = $self->config        if !defined $config;
-    $value  = $config->{'session'} if !defined $value;
-
-    $value = 'simple' if !defined $value;
-    return $value     if ref($value);
-
-    my $engine_options =
-          $self->_get_config_for_engine( session => $value, $config );
-
-    return Dancer2::Core::Factory->create(
-        session => $value,
-        %{$engine_options},
-        postponed_hooks => $self->get_postponed_hooks,
-    );
-}
-
-sub _build_engine_template {
-    my ($self, $value, $config)  = @_;
-
-    $config = $self->config         if !defined $config;
-    $value  = $config->{'template'} if !defined $value;
-
-    return undef  if !defined $value;
-    return $value if ref($value);
-
-    my $engine_options =
-          $self->_get_config_for_engine( template => $value, $config );
-
-    my $engine_attrs = { config => $engine_options };
-    $engine_attrs->{layout} ||= $config->{layout};
-    $engine_attrs->{views}  ||= $config->{views}
-        || path( $self->location, 'views' );
-
-    return Dancer2::Core::Factory->create(
-        template => $value,
-        %{$engine_attrs},
-        postponed_hooks => $self->get_postponed_hooks,
-    );
-}
-
-sub _build_engine_serializer {
-    my ($self, $value, $config) = @_;
-
-    $config = $self->config         if !defined $config;
-    $value  = $config->{serializer} if !defined $value;
-
-    return undef  if !defined $value;
-    return $value if ref($value);
-
-    my $engine_options =
-        $self->_get_config_for_engine( serializer => $value, $config );
-
-    return Dancer2::Core::Factory->create(
-        serializer      => $value,
-        config          => $engine_options,
-        postponed_hooks => $self->get_postponed_hooks,
-    );
-}
-
 1;
 
 __END__
@@ -435,11 +262,11 @@ __END__
 
 =head1 NAME
 
-Dancer2::Core::Role::Config - Config role for Dancer2 core objects
+Dancer2::Core::Role::ConfigReader - Config role for Dancer2 core objects
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -467,10 +294,6 @@ Gets the directory were the environment files are stored.
 
 Returns the whole configuration.
 
-=head2 engines
-
-Returns all the engines.
-
 =head2 environments
 
 Returns the name of the environment.
@@ -479,22 +302,6 @@ Returns the name of the environment.
 
 List of all the configuration files.
 
-=head2 supported_engines
-
-The list of engines supported by Dancer.
-
-=over 4
-
-=item logger
-
-=item serializer
-
-=item session
-
-=item template
-
-=back
-
 =head1 ATTRIBUTES
 
 =head1 METHODS
@@ -523,7 +330,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/DSL.pm b/lib/Dancer2/Core/Role/DSL.pm
index 1c6ce2a..f692bfe 100644
--- a/lib/Dancer2/Core/Role/DSL.pm
+++ b/lib/Dancer2/Core/Role/DSL.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for DSL
-
 package Dancer2::Core::Role::DSL;
-{
-  $Dancer2::Core::Role::DSL::VERSION = '0.12';
-}
+# ABSTRACT: Role for DSL
+$Dancer2::Core::Role::DSL::VERSION = '0.140001';
 use Moo::Role;
 use Dancer2::Core::Types;
 use Carp 'croak';
@@ -107,7 +104,7 @@ Dancer2::Core::Role::DSL - Role for DSL
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -115,7 +112,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Engine.pm b/lib/Dancer2/Core/Role/Engine.pm
index c651031..eb0f294 100644
--- a/lib/Dancer2/Core/Role/Engine.pm
+++ b/lib/Dancer2/Core/Role/Engine.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for engines
-
 package Dancer2::Core::Role::Engine;
-{
-  $Dancer2::Core::Role::Engine::VERSION = '0.12';
-}
+# ABSTRACT: Role for engines
+$Dancer2::Core::Role::Engine::VERSION = '0.140001';
 use Moo::Role;
 use Dancer2::Core::Types;
 
@@ -42,7 +39,7 @@ Dancer2::Core::Role::Engine - Role for engines
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -71,7 +68,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Handler.pm b/lib/Dancer2/Core/Role/Handler.pm
index 70d79b1..c02a0c4 100644
--- a/lib/Dancer2/Core/Role/Handler.pm
+++ b/lib/Dancer2/Core/Role/Handler.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for Handlers
-
 package Dancer2::Core::Role::Handler;
-{
-  $Dancer2::Core::Role::Handler::VERSION = '0.12';
-}
+# ABSTRACT: Role for Handlers
+$Dancer2::Core::Role::Handler::VERSION = '0.140001';
 use Moo::Role;
 use Dancer2::Core::Types;
 
@@ -28,7 +25,7 @@ Dancer2::Core::Role::Handler - Role for Handlers
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 ATTRIBUTES
 
@@ -46,7 +43,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Headers.pm b/lib/Dancer2/Core/Role/Headers.pm
index f611d54..b2d7abc 100644
--- a/lib/Dancer2/Core/Role/Headers.pm
+++ b/lib/Dancer2/Core/Role/Headers.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Role for handling headers
 
 package Dancer2::Core::Role::Headers;
-{
-  $Dancer2::Core::Role::Headers::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::Headers::VERSION = '0.140001';
 
 use Moo::Role;
 use Dancer2::Core::Types;
@@ -83,7 +80,7 @@ Dancer2::Core::Role::Headers - Role for handling headers
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -131,7 +128,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Hookable.pm b/lib/Dancer2/Core/Role/Hookable.pm
index 4ac0245..c5cad97 100644
--- a/lib/Dancer2/Core/Role/Hookable.pm
+++ b/lib/Dancer2/Core/Role/Hookable.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role for hookable objects
-
 package Dancer2::Core::Role::Hookable;
-{
-  $Dancer2::Core::Role::Hookable::VERSION = '0.12';
-}
+# ABSTRACT: Role for hookable objects
+$Dancer2::Core::Role::Hookable::VERSION = '0.140001';
 use Moo::Role;
 use Dancer2::Core;
 use Dancer2::Core::Types;
@@ -157,7 +154,7 @@ Dancer2::Core::Role::Hookable - Role for hookable objects
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -165,7 +162,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Logger.pm b/lib/Dancer2/Core/Role/Logger.pm
index 877da5c..261a74f 100644
--- a/lib/Dancer2/Core/Role/Logger.pm
+++ b/lib/Dancer2/Core/Role/Logger.pm
@@ -1,14 +1,12 @@
-# ABSTRACT: Role for logger engines
-
 package Dancer2::Core::Role::Logger;
-{
-  $Dancer2::Core::Role::Logger::VERSION = '0.12';
-}
+# ABSTRACT: Role for logger engines
+$Dancer2::Core::Role::Logger::VERSION = '0.140001';
 use Dancer2::Core::Types;
 
-use POSIX qw/strftime/;
-use Data::Dumper;
 use Moo::Role;
+use POSIX 'strftime';
+use Data::Dumper;
+
 with 'Dancer2::Core::Role::Engine';
 
 sub supported_hooks {
@@ -177,7 +175,7 @@ Dancer2::Core::Role::Logger - Role for logger engines
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -312,7 +310,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Serializer.pm b/lib/Dancer2/Core/Role/Serializer.pm
index d668b3f..28975ff 100644
--- a/lib/Dancer2/Core/Role/Serializer.pm
+++ b/lib/Dancer2/Core/Role/Serializer.pm
@@ -1,12 +1,9 @@
-# ABSTRACT: Role for Serializer engines
-
 package Dancer2::Core::Role::Serializer;
-{
-  $Dancer2::Core::Role::Serializer::VERSION = '0.12';
-}
+# ABSTRACT: Role for Serializer engines
+$Dancer2::Core::Role::Serializer::VERSION = '0.140001';
 use Dancer2::Core::Types;
-
 use Moo::Role;
+
 with 'Dancer2::Core::Role::Engine';
 
 sub supported_hooks {
@@ -78,7 +75,7 @@ Dancer2::Core::Role::Serializer - Role for Serializer engines
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -86,7 +83,7 @@ Any class that consumes this role will be able to be used as a
 serializer under Dancer2.
 
 In order to implement this role, the consumer B<must> implement the
-methods C<serialize>, <deserialize> and C<loaded>, and should define
+methods C<serialize>, C<deserialize> and C<loaded>, and should define
 the C<content_type> attribute value.
 
 =head1 ATTRIBUTES
@@ -117,6 +114,9 @@ content type defined by the C<content_type> attribute.
 A third optional argument is a hash reference of options to the
 serializer.
 
+The serialize method must return bytes and therefore has to handle any
+encoding.
+
 =head2 deserialize($content, [\%options])
 
 The inverse method of C<serialize>. Receives the serializer class
@@ -126,6 +126,9 @@ return a reference to the deserialized Perl data structure.
 A third optional argument is a hash reference of options to the
 serializer.
 
+The deserialize method receives encoded bytes and must therefore
+handle any decoding required.
+
 =head2 loaded
 
 This method should return a boolean true value if the serializer is
@@ -142,7 +145,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Server.pm b/lib/Dancer2/Core/Role/Server.pm
deleted file mode 100644
index 518b353..0000000
--- a/lib/Dancer2/Core/Role/Server.pm
+++ /dev/null
@@ -1,191 +0,0 @@
-# ABSTRACT: Role for Server classes
-package Dancer2::Core::Role::Server;
-{
-  $Dancer2::Core::Role::Server::VERSION = '0.12';
-}
-use Moo::Role;
-
-use Carp 'croak';
-use File::Spec;
-
-use Dancer2::Core::Types;
-use Dancer2::Core::App;
-use Dancer2::Core::Dispatcher;
-use Dancer2::Core::Response;
-use Dancer2::Core::Request;
-use Dancer2::Core::Context;
-
-requires '_build_name';
-
-has name => (
-    is      => 'ro',
-    lazy    => 1,
-    builder => 1,
-);
-
-has host => (
-    is       => 'rw',
-    isa      => Str,
-    required => 1,
-);
-
-has port => (
-    is       => 'rw',
-    isa      => Num,
-    required => 1,
-);
-
-has is_daemon => (
-    is  => 'rw',
-    isa => Bool,
-);
-
-has apps => (
-    is      => 'ro',
-    isa     => ArrayRef,
-    default => sub { [] },
-);
-
-has dispatcher => (
-    is      => 'rw',
-    isa     => InstanceOf ['Dancer2::Core::Dispatcher'],
-    lazy    => 1,
-    builder => '_build_dispatcher',
-);
-
-has postponed_hooks => (
-    is      => 'rw',
-    isa     => HashRef,
-    default => sub { {} },
-);
-
-sub _build_dispatcher {
-    my ($self) = @_;
-    my $d = Dancer2::Core::Dispatcher->new();
-    $d->apps( $self->apps );
-    return $d;
-}
-
-# our PSGI application
-sub psgi_app {
-    my ($self) = @_;
-    sub {
-        my ($env) = @_;
-        my $app;
-
-        eval { $app = $self->dispatcher->dispatch($env)->to_psgi; };
-
-        if ($@) {
-            return [
-                500,
-                [ 'Content-Type' => 'text/plain' ],
-                ["Internal Server Error\n\n$@"],
-            ];
-        }
-        return $app;
-    };
-}
-
-sub register_application {
-    my ( $self, $app ) = @_;
-    push @{ $self->apps }, $app;
-    $app->server($self);
-
-    # add postponed hooks to our app-global copy
-    $self->add_postponed_hooks( $app->postponed_hooks );
-}
-
-sub add_postponed_hooks {
-    my $self  = shift;
-    my $hooks = shift;
-
-    $self->postponed_hooks( {
-        %{ $self->postponed_hooks },
-        %{ $hooks },
-    } );
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Role::Server - Role for Server classes
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-This role defines what servers need to implement and provide some helpful
-attributes and methods for server implementations.
-
-This role requires implementations that consume it to provide a C<name>
-subroutine.
-
-=head1 ATTRIBUTES
-
-=head2 host
-
-Hostname to which the server will bind.
-
-B<Required>.
-
-=head2 port
-
-Port number to which the server will bind.
-
-B<Required>.
-
-=head2 is_daemon
-
-Boolean for whether the server should daemonize.
-
-=head2 apps
-
-An arrayref to hold Dancer2 applications.
-
-=head2 dispatcher
-
-A read/write attribute which holds the L<Dancer2::Core::Dispatcher> object, to
-dispatch an incoming request to the appropriate route.
-
-It has a lazy builder that creates a new dispatcher with the server's apps.
-
-=head2 postponed_hooks
-
-Postponed hooks will be applied at the end, when the hookable objects are
-instantiated, not before.
-
-=head1 METHODS
-
-=head2 psgi_app
-
-Returns a code reference of a proper PSGI reply to a dispatched request.
-
-It dispatches the request using the dispatcher (and provides the environment
-variables) and then calls C<to_psgi> and returns that reply wrapped in a code
-reference.
-
-Please review L<PSGI> for more details on the protocol and how it works.
-
-=head2 register_application
-
-Adds another application to the C<apps> attribute (see above).
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Role/SessionFactory.pm b/lib/Dancer2/Core/Role/SessionFactory.pm
index d58e61d..90725db 100644
--- a/lib/Dancer2/Core/Role/SessionFactory.pm
+++ b/lib/Dancer2/Core/Role/SessionFactory.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Role::SessionFactory;
-{
-  $Dancer2::Core::Role::SessionFactory::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::SessionFactory::VERSION = '0.140001';
 #ABSTRACT: Role for session factories
 
 
@@ -275,7 +272,7 @@ Dancer2::Core::Role::SessionFactory - Role for session factories
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -434,7 +431,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/SessionFactory/File.pm b/lib/Dancer2/Core/Role/SessionFactory/File.pm
index 1ffff4d..210fd7f 100644
--- a/lib/Dancer2/Core/Role/SessionFactory/File.pm
+++ b/lib/Dancer2/Core/Role/SessionFactory/File.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Role::SessionFactory::File;
-{
-  $Dancer2::Core::Role::SessionFactory::File::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::SessionFactory::File::VERSION = '0.140001';
 #ABSTRACT: Role for file-based session factories
 
 
@@ -117,7 +114,7 @@ Dancer2::Core::Role::SessionFactory::File - Role for file-based session factorie
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -173,7 +170,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/StandardResponses.pm b/lib/Dancer2/Core/Role/StandardResponses.pm
index da17ce5..90989e6 100644
--- a/lib/Dancer2/Core/Role/StandardResponses.pm
+++ b/lib/Dancer2/Core/Role/StandardResponses.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Role to provide commonly used responses
-
 package Dancer2::Core::Role::StandardResponses;
-{
-  $Dancer2::Core::Role::StandardResponses::VERSION = '0.12';
-}
+# ABSTRACT: Role to provide commonly used responses
+$Dancer2::Core::Role::StandardResponses::VERSION = '0.140001';
 use Moo::Role;
 
 
@@ -44,7 +41,7 @@ Dancer2::Core::Role::StandardResponses - Role to provide commonly used responses
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 METHODS
 
@@ -73,7 +70,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Role/Template.pm b/lib/Dancer2/Core/Role/Template.pm
index ed32514..44be194 100644
--- a/lib/Dancer2/Core/Role/Template.pm
+++ b/lib/Dancer2/Core/Role/Template.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Role for template engines
 
 package Dancer2::Core::Role::Template;
-{
-  $Dancer2::Core::Role::Template::VERSION = '0.12';
-}
-
+$Dancer2::Core::Role::Template::VERSION = '0.140001';
 use Dancer2::Core::Types;
 use Dancer2::FileUtils qw'path';
 use Carp 'croak';
@@ -202,7 +199,7 @@ Dancer2::Core::Role::Template - Role for template engines
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -275,7 +272,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Route.pm b/lib/Dancer2/Core/Route.pm
index 4bc26dd..16fcda5 100644
--- a/lib/Dancer2/Core/Route.pm
+++ b/lib/Dancer2/Core/Route.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Dancer2's route handler
 
 package Dancer2::Core::Route;
-{
-  $Dancer2::Core::Route::VERSION = '0.12';
-}
-
+$Dancer2::Core::Route::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -236,7 +233,7 @@ Dancer2::Core::Route - Dancer2's route handler
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 ATTRIBUTES
 
@@ -281,7 +278,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Runner.pm b/lib/Dancer2/Core/Runner.pm
index ab315af..f6b29da 100644
--- a/lib/Dancer2/Core/Runner.pm
+++ b/lib/Dancer2/Core/Runner.pm
@@ -1,20 +1,14 @@
-# ABSTRACT: Top-layer class to start a dancer app
 package Dancer2::Core::Runner;
-{
-  $Dancer2::Core::Runner::VERSION = '0.12';
-}
-
+# ABSTRACT: Top-layer class to start a dancer app
+$Dancer2::Core::Runner::VERSION = '0.140001';
 use Moo;
-use Carp 'croak';
-use Class::Load 'try_load_class';
-use Dancer2::Core::Types;
 use Dancer2::Core::MIME;
+use Dancer2::Core::Types;
+use Dancer2::Core::Dispatcher;
+use HTTP::Server::PSGI;
+use Plack::Builder qw();
 
-use File::Spec;
-use File::Basename;
-use Dancer2::FileUtils;
-
-with 'Dancer2::Core::Role::Config';
+with 'Dancer2::Core::Role::ConfigReader';
 
 # the path to the caller script that is starting the app
 # mandatory, because we use that to determine where the appdir is.
@@ -24,59 +18,77 @@ has caller => (
     required => 1,
 );
 
+# FIXME: i hate this
+has mime_type => (
+    is      => 'ro',
+    isa     => InstanceOf ['Dancer2::Core::MIME'],
+    default => sub { Dancer2::Core::MIME->new(); },
+);
+
 has server => (
     is      => 'ro',
-    isa     => ConsumerOf ['Dancer2::Core::Role::Server'],
+    isa     => InstanceOf['HTTP::Server::PSGI'],
     lazy    => 1,
     builder => '_build_server',
+    handles => ['run'],
 );
 
-has mime_type => (
+has apps => (
     is      => 'ro',
-    isa     => InstanceOf ['Dancer2::Core::MIME'],
-    default => sub { Dancer2::Core::MIME->new(); },
+    isa     => ArrayRef,
+    default => sub { [] },
 );
 
-# when the runner is created, it has to init the server instance
-# according to the configuration
-sub _build_server {
-    my $self         = shift;
-    my $server_name  = $self->config->{apphandler};
-    my $server_class = "Dancer2::Core::Server::${server_name}";
+has dispatcher => (
+    is      => 'rw',
+    isa     => InstanceOf ['Dancer2::Core::Dispatcher'],
+    lazy    => 1,
+    builder => '_build_dispatcher',
+);
 
-    my ( $ok, $error ) =try_load_class($server_class);
-    $ok or croak "Unable to load $server_class: $error\n";
+has postponed_hooks => (
+    is      => 'ro',
+    isa     => HashRef,
+    default => sub { +{} },
+);
 
-    return $server_class->new(
-        host      => $self->config->{host},
-        port      => $self->config->{port},
-        is_daemon => $self->config->{is_daemon},
-    );
-}
+# FIXME: this should be in the configuration
+has host => (
+    is      => 'ro',
+    lazy    => 1,
+    default => sub { $_[0]->config->{'host'} },
+);
+    
+has port => (
+    is      => 'ro',
+    lazy    => 1,
+    default => sub { $_[0]->config->{'port'} },
+);
 
-# our Config role needs a default_config hash
-sub default_config {
+has timeout => (
+    is      => 'ro',
+    lazy    => 1,
+    default => sub { $_[0]->config->{'timeout'} },
+);
 
-    $ENV{PLACK_ENV}
-      and $ENV{DANCER_APPHANDLER} = 'PSGI';
+sub _build_dispatcher {
+    my $self = shift;
+    # FIXME: ::Dispatcher::apps attr is readwrite, why?
+    return Dancer2::Core::Dispatcher->new( apps => $self->apps );
+}
 
-    my ($self) = @_;
-    {   apphandler   => ( $ENV{DANCER_APPHANDLER}   || 'Standalone' ),
-        content_type => ( $ENV{DANCER_CONTENT_TYPE} || 'text/html' ),
-        charset      => ( $ENV{DANCER_CHARSET}      || '' ),
-        warnings     => ( $ENV{DANCER_WARNINGS}     || 0 ),
-        startup_info => ( $ENV{DANCER_STARTUP_INFO} || 1 ),
-        traces       => ( $ENV{DANCER_TRACES}       || 0 ),
-        logger       => ( $ENV{DANCER_LOGGER}       || 'console' ),
-        host         => ( $ENV{DANCER_SERVER}       || '0.0.0.0' ),
-        port         => ( $ENV{DANCER_PORT}         || '3000' ),
-        is_daemon    => ( $ENV{DANCER_DAEMON}       || 0 ),
-        views        => ( $ENV{DANCER_VIEWS}
-              || path( $self->config_location, 'views' ) ),
-        appdir          => $self->location,
-    };
+sub _build_server {
+    my $self = shift;
+
+    HTTP::Server::PSGI->new(
+        host            => $self->host,
+        port            => $self->port,
+        timeout         => $self->timeout,
+        server_software => "Perl Dancer2 $Dancer2::VERSION",
+    );
 }
 
+# FIXME: i hate you most of all
 sub _build_location {
     my $self   = shift;
     my $script = $self->caller;
@@ -120,6 +132,28 @@ sub _build_location {
     return File::Spec->rel2abs($path);
 }
 
+sub _build_default_config {
+    my $self = shift;
+
+    $ENV{PLACK_ENV}
+      and $ENV{DANCER_APPHANDLER} = 'PSGI';
+
+    return {
+        apphandler   => ( $ENV{DANCER_APPHANDLER}   || 'Standalone' ),
+        content_type => ( $ENV{DANCER_CONTENT_TYPE} || 'text/html' ),
+        charset      => ( $ENV{DANCER_CHARSET}      || '' ),
+        warnings     => ( $ENV{DANCER_WARNINGS}     || 0 ),
+        startup_info => ( $ENV{DANCER_STARTUP_INFO} || 1 ),
+        traces       => ( $ENV{DANCER_TRACES}       || 0 ),
+        logger       => ( $ENV{DANCER_LOGGER}       || 'console' ),
+        host         => ( $ENV{DANCER_SERVER}       || '0.0.0.0' ),
+        port         => ( $ENV{DANCER_PORT}         || '3000' ),
+        views        => ( $ENV{DANCER_VIEWS}
+              || path( $self->config_location, 'views' ) ),
+        appdir        => $self->location,
+    };
+}
+
 sub BUILD {
     my $self = shift;
 
@@ -135,100 +169,120 @@ sub BUILD {
         or $Dancer2::runner = $self;
 }
 
-sub start {
-    my ($self) = @_;
-    my $server = $self->server;
-
-    foreach my $app ( @{ $server->apps } ) {
-        $app->finish;
-    }
+sub register_application {
+    my $self = shift;
+    my $app  = shift;
 
-    # update the server config if needed
-    my $port      = $self->setting('server_port');
-    my $host      = $self->setting('server_host');
-    my $is_daemon = $self->setting('server_is_daemon');
+    push @{ $self->apps }, $app;
 
-    $server->port($port)           if defined $port;
-    $server->host($host)           if defined $host;
-    $server->is_daemon($is_daemon) if defined $is_daemon;
-    $server->start;
+    # add postponed hooks to our psgi app
+    $self->add_postponed_hooks( $app->postponed_hooks );
 }
 
-# Used by 'logger' to get a name from a Runner
-sub name {"runner"}
-
-1;
-
-#still exists?
-#=method BUILD
-#
-#The builder initializes the proper server instance (C<Dancer2::Core::Server::*>)
-#and sets the C<server> attribute to it.
-#
-#=method get_environment
-#
-#Returns the environment. Same as C<< $object->environment >>.
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Runner - Top-layer class to start a dancer app
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-Runs Dancer2 app.
-
-Inherits from L<Dancer2::Core::Role::Config>.
-
-=head2 environment
-
-The environment string. The options, in this order, are:
-
-=over 4
+sub add_postponed_hooks {
+    my $self  = shift;
+    my $hooks = shift;
 
-=item * C<DANCER_ENVIRONMENT>
+    # merge postponed hooks
+    @{ $self->{'postponed_hooks'} }{ keys %{$hooks} } = values %{$hooks};
+}
 
-=item * C<PLACK_ENV>
+# decide what to start
+# do we just return a PSGI app
+# or do we actually start a development standalone server?
+sub start {
+    my $self = shift;
+    my $app  = $self->psgi_app;
 
-=item * C<development>
+    # we decide whether we return a PSGI coderef
+    # or spin a local development PSGI server
+    $self->config->{'apphandler'} eq 'PSGI'
+        and return $app;
 
-=back
+    # FIXME: this should not include the server tokens
+    # since those are already added to the server itself
+    $self->start_server($app);
+}
 
-=head1 ATTRIBUTES
+sub start_server {
+    my $self = shift;
+    my $app  = shift;
 
-=head2 caller
+    # does not return
+    $self->print_banner;
+    $self->server->run($app);
+}
 
-The path to the caller script that is starting the app.
+sub psgi_app {
+    my $self   = shift;
+    my $server = $self->server;
 
-This is required in order to determine where the appdir is.
+    foreach my $app ( @{ $self->apps } ) {
+        $app->finish;
+    }
 
-=head2 server
+    # eval entire request to catch any internal errors
+    my $psgi = sub {
+        my $env = shift;
+        my $response;
+
+        eval {
+            $response = $self->dispatcher->dispatch($env)->to_psgi;
+            1;
+        } or do {
+            return [
+                500,
+                [ 'Content-Type' => 'text/plain' ],
+                [ "Internal Server Error\n\n$@"  ],
+            ];
+        };
+
+        return $response;
+    };
 
-A read/write attribute to that holds the proper server.
+    my $builder = Plack::Builder->new;
+    $builder->add_middleware('Head');
+    return $builder->wrap($psgi);
+}
 
-It checks for an object that consumes the L<Dancer2::Core::Role::Server> role.
+sub print_banner {
+    my $self = shift;
+    my $pid  = $$;
+
+    # we only print the info if we need to
+    # FIXME: go to the configuration
+    #Dancer2->runner->config->{'startup_info'} or return;
+
+    # bare minimum
+    print STDERR ">> Dancer2 v$Dancer2::VERSION server $pid listening "
+      . 'on http://'
+      . $self->host . ':'
+      . $self->port . "\n";
+
+    # all loaded plugins
+    foreach my $module ( grep { $_ =~ m{^Dancer2/Plugin/} } keys %INC ) {
+        $module =~ s{/}{::}g;     # change / to ::
+        $module =~ s{\.pm$}{};    # remove .pm at the end
+        my $version = $module->VERSION;
+
+        defined $version or $version = 'no version number defined';
+        print STDERR ">> $module ($version)\n";
+    }
+}
 
-=head2 mime_type
+1;
 
-A read/write attribute that holds a L<Dancer2::Core::MIME> object.
+__END__
 
-=head1 METHODS
+=pod
 
-=head2 default_config
+=head1 NAME
 
-It then sets up the default configuration.
+Dancer2::Core::Runner - Top-layer class to start a dancer app
 
-=head2 start
+=head1 VERSION
 
-Runs C<finish> (to set everything up) on all of the server's applications. It
-then Sets up the current server and starts it by calling its C<start> method.
+version 0.140001
 
 =head1 AUTHOR
 
@@ -236,7 +290,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Server/PSGI.pm b/lib/Dancer2/Core/Server/PSGI.pm
deleted file mode 100644
index 1c8f321..0000000
--- a/lib/Dancer2/Core/Server/PSGI.pm
+++ /dev/null
@@ -1,60 +0,0 @@
-# ABSTRACT: Dummy class for passing the PSGI app to a PSGI server
-
-package Dancer2::Core::Server::PSGI;
-{
-  $Dancer2::Core::Server::PSGI::VERSION = '0.12';
-}
-use Moo;
-use Carp;
-use Plack::Request;
-
-with 'Dancer2::Core::Role::Server';
-
-
-sub start {
-    my ($self) = @_;
-    $self->psgi_app;
-}
-
-sub _build_name {'PSGI'}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Server::PSGI - Dummy class for passing the PSGI app to a PSGI server
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-When used as a server, this class just return the PSGI application.
-
-=head1 METHODS
-
-=head2 name
-
-The server's name: B<PSGI>.
-
-=head2 start
-
-Return the PSGI application
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Server/Standalone.pm b/lib/Dancer2/Core/Server/Standalone.pm
deleted file mode 100644
index 88cb910..0000000
--- a/lib/Dancer2/Core/Server/Standalone.pm
+++ /dev/null
@@ -1,125 +0,0 @@
-# ABSTRACT: Basic standalone HTTP server for Dancer2
-
-package Dancer2::Core::Server::Standalone;
-{
-  $Dancer2::Core::Server::Standalone::VERSION = '0.12';
-}
-
-use Moo;
-use Dancer2::Core::Types;
-with 'Dancer2::Core::Role::Server';
-use parent 'HTTP::Server::Simple::PSGI';
-
-
-sub _build_name {'Standalone'}
-
-
-has backend => (
-    is      => 'ro',
-    isa     => InstanceOf ['HTTP::Server::Simple::PSGI'],
-    lazy    => 1,
-    builder => '_build_backend',
-);
-
-sub _build_backend {
-    my $self = shift;
-    $self->app( $self->psgi_app );
-    return $self;
-}
-
-
-sub start {
-    my $self = shift;
-
-    $self->is_daemon
-      ? $self->backend->background()
-      : $self->backend->run();
-
-}
-
-sub print_banner {
-    my $self = shift;
-    my $pid  = $$;      #Todo:how to get background pid?
-
-    # we only print the info if we need to
-    Dancer2->runner->config->{'startup_info'} or return;
-
-    # bare minimum
-    print STDERR ">> Dancer2 v$Dancer2::VERSION server $pid listening "
-      . 'on http://'
-      . $self->host . ':'
-      . $self->port . "\n";
-
-    # all loaded plugins
-    foreach my $module ( grep { $_ =~ m{^Dancer2/Plugin/} } keys %INC ) {
-        $module =~ s{/}{::}g;     # change / to ::
-        $module =~ s{\.pm$}{};    # remove .pm at the end
-        my $version = $module->VERSION;
-
-        defined $version or $version = 'no version number defined';
-        print STDERR ">> $module ($version)\n";
-    }
-
-}
-
-
-sub valid_http_method {
-    my $self   = shift;
-    my $method = shift or return 0;
-    return $method =~ /^(?:GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH)$/;
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-Dancer2::Core::Server::Standalone - Basic standalone HTTP server for Dancer2
-
-=head1 VERSION
-
-version 0.12
-
-=head1 DESCRIPTION
-
-This is a server implementation for a stand-alone server. It contains all the
-code to start an L<HTTP::Server::Simple::PSGI> server and handle the requests.
-
-This class consumes the role L<Dancer2::Core::Server::Standalone>.
-
-=head1 ATTRIBUTES
-
-=head2 backend
-
-A L<HTTP::Server::Simple::PSGI> server.
-
-=head1 METHODS
-
-=head2 name
-
-The server's name: B<Standalone>.
-
-=head2 start
-
-Starts the server.
-
-=head2 valid_http_method
-
-Overrides method inherited from L<HTTP::Server::Simple>, allowing C<GET>, C<POST>,
-C<HEAD>, C<PUT>, C<DELETE>, C<OPTIONS> and C<PATCH> requests.
-
-=head1 AUTHOR
-
-Dancer Core Developers
-
-=head1 COPYRIGHT AND LICENSE
-
-This software is copyright (c) 2013 by Alexis Sukrieh.
-
-This is free software; you can redistribute it and/or modify it under
-the same terms as the Perl 5 programming language system itself.
-
-=cut
diff --git a/lib/Dancer2/Core/Session.pm b/lib/Dancer2/Core/Session.pm
index 251699d..4c951f6 100644
--- a/lib/Dancer2/Core/Session.pm
+++ b/lib/Dancer2/Core/Session.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Session;
-{
-  $Dancer2::Core::Session::VERSION = '0.12';
-}
-
+$Dancer2::Core::Session::VERSION = '0.140001';
 #ABSTRACT: class to represent any session object
 
 
@@ -80,7 +77,7 @@ Dancer2::Core::Session - class to represent any session object
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -157,7 +154,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Time.pm b/lib/Dancer2/Core/Time.pm
index 53a3461..cb631a5 100644
--- a/lib/Dancer2/Core/Time.pm
+++ b/lib/Dancer2/Core/Time.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Time;
-{
-  $Dancer2::Core::Time::VERSION = '0.12';
-}
-
+$Dancer2::Core::Time::VERSION = '0.140001';
 #ABSTRACT: class to handle common helpers for time manipulations
 
 
@@ -144,7 +141,7 @@ Dancer2::Core::Time - class to handle common helpers for time manipulations
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -203,7 +200,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Core/Types.pm b/lib/Dancer2/Core/Types.pm
index c006bbb..0470ac2 100644
--- a/lib/Dancer2/Core/Types.pm
+++ b/lib/Dancer2/Core/Types.pm
@@ -1,8 +1,5 @@
 package Dancer2::Core::Types;
-{
-  $Dancer2::Core::Types::VERSION = '0.12';
-}
-
+$Dancer2::Core::Types::VERSION = '0.140001';
 # ABSTRACT: Moo types for Dancer2 core.
 
 use strict;
@@ -149,7 +146,7 @@ Dancer2::Core::Types - Moo types for Dancer2 core.
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -200,7 +197,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/FileUtils.pm b/lib/Dancer2/FileUtils.pm
index c429d71..8879aa8 100644
--- a/lib/Dancer2/FileUtils.pm
+++ b/lib/Dancer2/FileUtils.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: File utility helpers
 
 package Dancer2::FileUtils;
-{
-  $Dancer2::FileUtils::VERSION = '0.12';
-}
-
+$Dancer2::FileUtils::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -114,7 +111,7 @@ Dancer2::FileUtils - File utility helpers
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -232,7 +229,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Handler/AutoPage.pm b/lib/Dancer2/Handler/AutoPage.pm
index 8503352..c5b032b 100644
--- a/lib/Dancer2/Handler/AutoPage.pm
+++ b/lib/Dancer2/Handler/AutoPage.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Class for handling the AutoPage feature
-
 package Dancer2::Handler::AutoPage;
-{
-  $Dancer2::Handler::AutoPage::VERSION = '0.12';
-}
+# ABSTRACT: Class for handling the AutoPage feature
+$Dancer2::Handler::AutoPage::VERSION = '0.140001';
 use Moo;
 use Carp 'croak';
 use Dancer2::Core::Types;
@@ -64,7 +61,7 @@ Dancer2::Handler::AutoPage - Class for handling the AutoPage feature
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -111,7 +108,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Handler/File.pm b/lib/Dancer2/Handler/File.pm
index b5c4af7..7d12367 100644
--- a/lib/Dancer2/Handler/File.pm
+++ b/lib/Dancer2/Handler/File.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: class for handling file content rendering
-
 package Dancer2::Handler::File;
-{
-  $Dancer2::Handler::File::VERSION = '0.12';
-}
+# ABSTRACT: class for handling file content rendering
+$Dancer2::Handler::File::VERSION = '0.140001';
 use Carp 'croak';
 use Moo;
 use HTTP::Date;
@@ -145,7 +142,7 @@ Dancer2::Handler::File - class for handling file content rendering
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 AUTHOR
 
@@ -153,7 +150,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Capture.pm b/lib/Dancer2/Logger/Capture.pm
index db6bd04..98fd4e4 100644
--- a/lib/Dancer2/Logger/Capture.pm
+++ b/lib/Dancer2/Logger/Capture.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Capture dancer logs
-
 package Dancer2::Logger::Capture;
-{
-  $Dancer2::Logger::Capture::VERSION = '0.12';
-}
+# ABSTRACT: Capture dancer logs
+$Dancer2::Logger::Capture::VERSION = '0.140001';
 use Moo;
 use Dancer2::Logger::Capture::Trap;
 
@@ -37,7 +34,7 @@ Dancer2::Logger::Capture - Capture dancer logs
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -91,7 +88,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Capture/Trap.pm b/lib/Dancer2/Logger/Capture/Trap.pm
index f11bc9e..079e953 100644
--- a/lib/Dancer2/Logger/Capture/Trap.pm
+++ b/lib/Dancer2/Logger/Capture/Trap.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: a place to store captured Dancer2 logs
-
 package Dancer2::Logger::Capture::Trap;
-{
-  $Dancer2::Logger::Capture::Trap::VERSION = '0.12';
-}
+# ABSTRACT: a place to store captured Dancer2 logs
+$Dancer2::Logger::Capture::Trap::VERSION = '0.140001';
 use Moo;
 use Dancer2::Core::Types;
 
@@ -38,7 +35,7 @@ Dancer2::Logger::Capture::Trap - a place to store captured Dancer2 logs
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -83,7 +80,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Console.pm b/lib/Dancer2/Logger/Console.pm
index 75963dd..0846059 100644
--- a/lib/Dancer2/Logger/Console.pm
+++ b/lib/Dancer2/Logger/Console.pm
@@ -1,10 +1,8 @@
-# ABSTRACT: Console logger
-
 package Dancer2::Logger::Console;
-{
-  $Dancer2::Logger::Console::VERSION = '0.12';
-}
+# ABSTRACT: Console logger
+$Dancer2::Logger::Console::VERSION = '0.140001';
 use Moo;
+
 with 'Dancer2::Core::Role::Logger';
 
 sub log {
@@ -24,7 +22,7 @@ Dancer2::Logger::Console - Console logger
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -56,7 +54,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Diag.pm b/lib/Dancer2/Logger/Diag.pm
index 3b11c35..9cb2f99 100644
--- a/lib/Dancer2/Logger/Diag.pm
+++ b/lib/Dancer2/Logger/Diag.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Test::More diag() logging engine for Dancer2
-
 package Dancer2::Logger::Diag;
-{
-  $Dancer2::Logger::Diag::VERSION = '0.12';
-}
+# ABSTRACT: Test::More diag() logging engine for Dancer2
+$Dancer2::Logger::Diag::VERSION = '0.140001';
 use Moo;
 use Test::More;
+
 with 'Dancer2::Core::Role::Logger';
 
 
@@ -28,7 +26,7 @@ Dancer2::Logger::Diag - Test::More diag() logging engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -49,7 +47,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/File.pm b/lib/Dancer2/Logger/File.pm
index 67e1b90..266c922 100644
--- a/lib/Dancer2/Logger/File.pm
+++ b/lib/Dancer2/Logger/File.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: file-based logging engine for Dancer2
-
 package Dancer2::Logger::File;
-{
-  $Dancer2::Logger::File::VERSION = '0.12';
-}
+# ABSTRACT: file-based logging engine for Dancer2
+$Dancer2::Logger::File::VERSION = '0.140001';
 use Carp 'carp';
 use Moo;
 use Dancer2::Core::Types;
@@ -85,7 +82,7 @@ Dancer2::Logger::File - file-based logging engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -128,7 +125,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Note.pm b/lib/Dancer2/Logger/Note.pm
index ca03532..4cd6c2f 100644
--- a/lib/Dancer2/Logger/Note.pm
+++ b/lib/Dancer2/Logger/Note.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Test::More note() logging engine for Dancer2
-
 package Dancer2::Logger::Note;
-{
-  $Dancer2::Logger::Note::VERSION = '0.12';
-}
+# ABSTRACT: Test::More note() logging engine for Dancer2
+$Dancer2::Logger::Note::VERSION = '0.140001';
 use Moo;
 use Test::More;
+
 with 'Dancer2::Core::Role::Logger';
 
 
@@ -27,7 +25,7 @@ Dancer2::Logger::Note - Test::More note() logging engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -51,7 +49,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Logger/Null.pm b/lib/Dancer2/Logger/Null.pm
index 9bf1ec9..88b5aef 100644
--- a/lib/Dancer2/Logger/Null.pm
+++ b/lib/Dancer2/Logger/Null.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Blackhole-like silent logging engine for Dancer2
-
 package Dancer2::Logger::Null;
-{
-  $Dancer2::Logger::Null::VERSION = '0.12';
-}
+# ABSTRACT: Blackhole-like silent logging engine for Dancer2
+$Dancer2::Logger::Null::VERSION = '0.140001';
 use Moo;
 with 'Dancer2::Core::Role::Logger';
 
@@ -22,7 +19,7 @@ Dancer2::Logger::Null - Blackhole-like silent logging engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -41,7 +38,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Manual.pod b/lib/Dancer2/Manual.pod
index 87161b0..ed1db63 100644
--- a/lib/Dancer2/Manual.pod
+++ b/lib/Dancer2/Manual.pod
@@ -1,6 +1,6 @@
 # ABSTRACT: A gentle introduction to Dancer2
 package Dancer2::Manual;
-
+$Dancer2::Manual::VERSION = '0.140001';
 __END__
 
 =pod
@@ -11,7 +11,7 @@ Dancer2::Manual - A gentle introduction to Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -1657,7 +1657,7 @@ versions:
 Provides an accessor for variables shared between filters and route handlers.
 Given a key/value pair, it sets a variable:
 
-    hook before sub {
+    hook before => sub {
         var foo => 42;
     };
 
@@ -1693,7 +1693,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugin.pm b/lib/Dancer2/Plugin.pm
index dd444d3..ea82f96 100644
--- a/lib/Dancer2/Plugin.pm
+++ b/lib/Dancer2/Plugin.pm
@@ -1,8 +1,5 @@
 package Dancer2::Plugin;
-{
-  $Dancer2::Plugin::VERSION = '0.12';
-}
-
+$Dancer2::Plugin::VERSION = '0.140001';
 # ABSTRACT: Extending Dancer2's DSL with plugins
 
 
@@ -261,7 +258,7 @@ Dancer2::Plugin - Extending Dancer2's DSL with plugins
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -450,7 +447,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugin/Ajax.pm b/lib/Dancer2/Plugin/Ajax.pm
index b43b73f..bd4b59b 100644
--- a/lib/Dancer2/Plugin/Ajax.pm
+++ b/lib/Dancer2/Plugin/Ajax.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: a plugin for adding Ajax route handlers
 
 package Dancer2::Plugin::Ajax;
-{
-  $Dancer2::Plugin::Ajax::VERSION = '0.12';
-}
-
+$Dancer2::Plugin::Ajax::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -65,7 +62,7 @@ Dancer2::Plugin::Ajax - a plugin for adding Ajax route handlers
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -126,7 +123,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Plugins.pod b/lib/Dancer2/Plugins.pod
index e2c1f79..960137b 100644
--- a/lib/Dancer2/Plugins.pod
+++ b/lib/Dancer2/Plugins.pod
@@ -1,6 +1,6 @@
 package Dancer2::Plugins;
 # ABSTRACT: Recommended Dancer2 plugins
-
+$Dancer2::Plugins::VERSION = '0.140001';
 __END__
 
 =pod
@@ -11,7 +11,7 @@ Dancer2::Plugins - Recommended Dancer2 plugins
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -126,7 +126,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/Dumper.pm b/lib/Dancer2/Serializer/Dumper.pm
index 6be8c5e..d152b00 100644
--- a/lib/Dancer2/Serializer/Dumper.pm
+++ b/lib/Dancer2/Serializer/Dumper.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Serializer for handling Dumper data
 
 package Dancer2::Serializer::Dumper;
-{
-  $Dancer2::Serializer::Dumper::VERSION = '0.12';
-}
-
+$Dancer2::Serializer::Dumper::VERSION = '0.140001';
 use Moo;
 use Carp 'croak';
 use Data::Dumper;
@@ -56,7 +53,7 @@ Dancer2::Serializer::Dumper - Serializer for handling Dumper data
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -101,7 +98,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/JSON.pm b/lib/Dancer2/Serializer/JSON.pm
index 17ca8f1..3128c13 100644
--- a/lib/Dancer2/Serializer/JSON.pm
+++ b/lib/Dancer2/Serializer/JSON.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Serializer for handling JSON data
-
 package Dancer2::Serializer::JSON;
-{
-  $Dancer2::Serializer::JSON::VERSION = '0.12';
-}
+# ABSTRACT: Serializer for handling JSON data
+$Dancer2::Serializer::JSON::VERSION = '0.140001';
 use Moo;
 use JSON ();
 
@@ -61,7 +58,7 @@ Dancer2::Serializer::JSON - Serializer for handling JSON data
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -104,7 +101,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Serializer/YAML.pm b/lib/Dancer2/Serializer/YAML.pm
index 482070a..b6b1002 100644
--- a/lib/Dancer2/Serializer/YAML.pm
+++ b/lib/Dancer2/Serializer/YAML.pm
@@ -1,11 +1,9 @@
-# ABSTRACT: Serializer for handling YAML data
-
 package Dancer2::Serializer::YAML;
-{
-  $Dancer2::Serializer::YAML::VERSION = '0.12';
-}
+# ABSTRACT: Serializer for handling YAML data
+$Dancer2::Serializer::YAML::VERSION = '0.140001';
 use Moo;
 use Carp 'croak';
+use Encode;
 with 'Dancer2::Core::Role::Serializer';
 
 has '+content_type' => (default => 'text/x-yaml');
@@ -26,17 +24,17 @@ sub to_yaml {
 
 # class definition
 
-sub BUILD { eval "use YAML::Any ()"; croak "Fail to load YAML: $@" if $@ }
+sub BUILD { eval "use YAML ()"; croak "Fail to load YAML: $@" if $@ }
 sub loaded {1}
 
 sub serialize {
     my ( $self, $entity ) = @_;
-    YAML::Any::Dump($entity);
+    encode('UTF-8', YAML::Dump($entity));
 }
 
 sub deserialize {
     my ( $self, $content ) = @_;
-    YAML::Any::Load($content);
+    YAML::Load(decode('UTF-8', $content));
 }
 
 1;
@@ -51,7 +49,7 @@ Dancer2::Serializer::YAML - Serializer for handling YAML data
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -94,7 +92,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Session/Simple.pm b/lib/Dancer2/Session/Simple.pm
index 2e1bde1..cb47bb0 100644
--- a/lib/Dancer2/Session/Simple.pm
+++ b/lib/Dancer2/Session/Simple.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: in-memory session backend for Dancer2
-
 package Dancer2::Session::Simple;
-{
-  $Dancer2::Session::Simple::VERSION = '0.12';
-}
+# ABSTRACT: in-memory session backend for Dancer2
+$Dancer2::Session::Simple::VERSION = '0.140001';
 use Moo;
 use Dancer2::Core::Types;
 use Carp;
@@ -51,7 +48,7 @@ Dancer2::Session::Simple - in-memory session backend for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -80,7 +77,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Session/YAML.pm b/lib/Dancer2/Session/YAML.pm
index 5282de7..af4e414 100644
--- a/lib/Dancer2/Session/YAML.pm
+++ b/lib/Dancer2/Session/YAML.pm
@@ -1,13 +1,10 @@
 package Dancer2::Session::YAML;
-{
-  $Dancer2::Session::YAML::VERSION = '0.12';
-}
-
+$Dancer2::Session::YAML::VERSION = '0.140001';
 # ABSTRACT: YAML-file-based session backend for Dancer2
 
 use Moo;
 use Dancer2::Core::Types;
-use YAML::Any;
+use YAML;
 
 has _suffix => (
     is      => 'ro',
@@ -19,13 +16,13 @@ with 'Dancer2::Core::Role::SessionFactory::File';
 
 sub _freeze_to_handle {
     my ( $self, $fh, $data ) = @_;
-    print {$fh} YAML::Any::Dump($data);
+    print {$fh} YAML::Dump($data);
     return;
 }
 
 sub _thaw_from_handle {
     my ( $self, $fh ) = @_;
-    return YAML::Any::LoadFile($fh);
+    return YAML::LoadFile($fh);
 }
 
 1;
@@ -40,7 +37,7 @@ Dancer2::Session::YAML - YAML-file-based session backend for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -87,7 +84,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Implementation/ForkedTiny.pm b/lib/Dancer2/Template/Implementation/ForkedTiny.pm
index 8bc87d0..9207d96 100644
--- a/lib/Dancer2/Template/Implementation/ForkedTiny.pm
+++ b/lib/Dancer2/Template/Implementation/ForkedTiny.pm
@@ -1,8 +1,5 @@
 package Dancer2::Template::Implementation::ForkedTiny;
-{
-  $Dancer2::Template::Implementation::ForkedTiny::VERSION = '0.12';
-}
-
+$Dancer2::Template::Implementation::ForkedTiny::VERSION = '0.140001';
 # ABSTRACT: Dancer2 own implementation of Template::Tiny
 
 use 5.00503;
@@ -230,7 +227,7 @@ Dancer2::Template::Implementation::ForkedTiny - Dancer2 own implementation of Te
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -387,7 +384,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Simple.pm b/lib/Dancer2/Template/Simple.pm
index 3728af7..d142c34 100644
--- a/lib/Dancer2/Template/Simple.pm
+++ b/lib/Dancer2/Template/Simple.pm
@@ -1,9 +1,6 @@
-#ABSTRACT: Pure Perl 5 template engine for Dancer2
-
 package Dancer2::Template::Simple;
-{
-  $Dancer2::Template::Simple::VERSION = '0.12';
-}
+# ABSTRACT: Pure Perl 5 template engine for Dancer2
+$Dancer2::Template::Simple::VERSION = '0.140001';
 use strict;
 use warnings;
 use Moo;
@@ -157,7 +154,7 @@ Dancer2::Template::Simple - Pure Perl 5 template engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -214,7 +211,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/TemplateToolkit.pm b/lib/Dancer2/Template/TemplateToolkit.pm
index 7a4441f..e3f3845 100644
--- a/lib/Dancer2/Template/TemplateToolkit.pm
+++ b/lib/Dancer2/Template/TemplateToolkit.pm
@@ -1,10 +1,7 @@
 # ABSTRACT: Template toolkit engine for Dancer2
 
 package Dancer2::Template::TemplateToolkit;
-{
-  $Dancer2::Template::TemplateToolkit::VERSION = '0.12';
-}
-
+$Dancer2::Template::TemplateToolkit::VERSION = '0.140001';
 use strict;
 use warnings;
 use Carp qw/croak/;
@@ -64,7 +61,7 @@ Dancer2::Template::TemplateToolkit - Template toolkit engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -101,7 +98,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Template/Tiny.pm b/lib/Dancer2/Template/Tiny.pm
index 70df538..a232dc8 100644
--- a/lib/Dancer2/Template/Tiny.pm
+++ b/lib/Dancer2/Template/Tiny.pm
@@ -1,22 +1,17 @@
 package Dancer2::Template::Tiny;
-{
-  $Dancer2::Template::Tiny::VERSION = '0.12';
-}
-
 # ABSTRACT: Template::Tiny engine for Dancer2
-
-use strict;
-use warnings;
-use Carp qw/croak/;
+$Dancer2::Template::Tiny::VERSION = '0.140001';
 use Moo;
+use Carp qw/croak/;
 use Dancer2::Core::Types;
 use Dancer2::Template::Implementation::ForkedTiny;
 use Dancer2::FileUtils 'read_file_content';
 
 with 'Dancer2::Core::Role::Template';
 
-has '+engine' =>
-  ( isa => InstanceOf ['Dancer2::Template::Implementation::ForkedTiny'], );
+has '+engine' => (
+    isa => InstanceOf ['Dancer2::Template::Implementation::ForkedTiny']
+);
 
 sub _build_engine {
     Dancer2::Template::Implementation::ForkedTiny->new( %{ $_[0]->config } );
@@ -53,7 +48,7 @@ Dancer2::Template::Tiny - Template::Tiny engine for Dancer2
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -114,7 +109,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Test.pm b/lib/Dancer2/Test.pm
index a734f7c..ef50c23 100644
--- a/lib/Dancer2/Test.pm
+++ b/lib/Dancer2/Test.pm
@@ -1,9 +1,6 @@
-# ABSTRACT: Useful routines for testing Dancer2 apps
-
 package Dancer2::Test;
-{
-  $Dancer2::Test::VERSION = '0.12';
-}
+# ABSTRACT: Useful routines for testing Dancer2 apps
+$Dancer2::Test::VERSION = '0.140001';
 use strict;
 use warnings;
 
@@ -569,7 +566,7 @@ Dancer2::Test - Useful routines for testing Dancer2 apps
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 DESCRIPTION
 
@@ -869,7 +866,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/lib/Dancer2/Tutorial.pod b/lib/Dancer2/Tutorial.pod
index a200e08..6fef06c 100644
--- a/lib/Dancer2/Tutorial.pod
+++ b/lib/Dancer2/Tutorial.pod
@@ -1,6 +1,6 @@
 package Dancer2::Tutorial;
 # ABSTRACT: An example to get you dancing
-
+$Dancer2::Tutorial::VERSION = '0.140001';
 __END__
 
 =pod
@@ -11,7 +11,7 @@ Dancer2::Tutorial - An example to get you dancing
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 What is Dancer2?
 
@@ -651,7 +651,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/script/dancer2 b/script/dancer2
index c8e6bb4..8f1739c 100755
--- a/script/dancer2
+++ b/script/dancer2
@@ -31,7 +31,7 @@ dancer2 - Dancer2 command line interface
 
 =head1 VERSION
 
-version 0.12
+version 0.140001
 
 =head1 SYNOPSIS
 
@@ -146,7 +146,7 @@ Dancer Core Developers
 
 =head1 COPYRIGHT AND LICENSE
 
-This software is copyright (c) 2013 by Alexis Sukrieh.
+This software is copyright (c) 2014 by Alexis Sukrieh.
 
 This is free software; you can redistribute it and/or modify it under
 the same terms as the Perl 5 programming language system itself.
diff --git a/t/00-compile.t b/t/00-compile.t
index 6b228f7..99c3030 100644
--- a/t/00-compile.t
+++ b/t/00-compile.t
@@ -1,9 +1,10 @@
+use 5.006;
 use strict;
 use warnings;
 
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.023
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.040
 
-use Test::More  tests => 61 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+use Test::More  tests => 58 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
 
 
 
@@ -26,7 +27,7 @@ my @module_files = (
     'Dancer2/Core/Request.pm',
     'Dancer2/Core/Request/Upload.pm',
     'Dancer2/Core/Response.pm',
-    'Dancer2/Core/Role/Config.pm',
+    'Dancer2/Core/Role/ConfigReader.pm',
     'Dancer2/Core/Role/DSL.pm',
     'Dancer2/Core/Role/Engine.pm',
     'Dancer2/Core/Role/Handler.pm',
@@ -34,15 +35,12 @@ my @module_files = (
     'Dancer2/Core/Role/Hookable.pm',
     'Dancer2/Core/Role/Logger.pm',
     'Dancer2/Core/Role/Serializer.pm',
-    'Dancer2/Core/Role/Server.pm',
     'Dancer2/Core/Role/SessionFactory.pm',
     'Dancer2/Core/Role/SessionFactory/File.pm',
     'Dancer2/Core/Role/StandardResponses.pm',
     'Dancer2/Core/Role/Template.pm',
     'Dancer2/Core/Route.pm',
     'Dancer2/Core/Runner.pm',
-    'Dancer2/Core/Server/PSGI.pm',
-    'Dancer2/Core/Server/Standalone.pm',
     'Dancer2/Core/Session.pm',
     'Dancer2/Core/Time.pm',
     'Dancer2/Core/Types.pm',
@@ -76,21 +74,27 @@ my @scripts = (
 
 # no fake home requested
 
+my $inc_switch = -d 'blib' ? '-Mblib' : '-Ilib';
+
+use File::Spec;
 use IPC::Open3;
 use IO::Handle;
 
+open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!";
+
 my @warnings;
 for my $lib (@module_files)
 {
     # see L<perlfaq8/How can I capture STDERR from an external command?>
-    my $stdin = '';     # converted to a gensym by open3
     my $stderr = IO::Handle->new;
 
-    my $pid = open3($stdin, '>&STDERR', $stderr, qq{$^X -Mblib -e"require q[$lib]"});
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, '-e', "require q[$lib]");
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
     waitpid($pid, 0);
-    is($? >> 8, 0, "$lib loaded ok");
+    is($?, 0, "$lib loaded ok");
 
-    if (my @_warnings = <$stderr>)
+    if (@_warnings)
     {
         warn @_warnings;
         push @warnings, @_warnings;
@@ -103,16 +107,19 @@ foreach my $file (@scripts)
     my $line = <$fh>;
     close $fh and skip("$file isn't perl", 1) unless $line =~ /^#!.*?\bperl\b\s*(.*)$/;
 
-    my $flags = $1;
+    my @flags = $1 ? split(/\s+/, $1) : ();
 
-    my $stdin = '';     # converted to a gensym by open3
     my $stderr = IO::Handle->new;
 
-    my $pid = open3($stdin, '>&STDERR', $stderr, qq{$^X -Mblib $flags -c $file});
+    my $pid = open3($stdin, '>&STDERR', $stderr, $^X, $inc_switch, @flags, '-c', $file);
+    binmode $stderr, ':crlf' if $^O eq 'MSWin32';
+    my @_warnings = <$stderr>;
     waitpid($pid, 0);
-    is($? >> 8, 0, "$file compiled ok");
+    is($?, 0, "$file compiled ok");
 
-    if (my @_warnings = grep { !/syntax OK$/ } <$stderr>)
+   # in older perls, -c output is simply the file portion of the path being tested
+    if (@_warnings = grep { !/\bsyntax OK$/ }
+        grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
     {
         warn @_warnings;
         push @warnings, @_warnings;
@@ -120,6 +127,7 @@ foreach my $file (@scripts)
 } }
 
 
+
 is(scalar(@warnings), 0, 'no warnings found') if $ENV{AUTHOR_TESTING};
 
 
diff --git a/t/00-report-prereqs.t b/t/00-report-prereqs.t
index c3472e7..efe30ca 100644
--- a/t/00-report-prereqs.t
+++ b/t/00-report-prereqs.t
@@ -40,7 +40,7 @@ my @modules = qw(
   HTTP::Headers
   HTTP::Request
   HTTP::Request::Common
-  HTTP::Server::Simple::PSGI
+  HTTP::Server::PSGI
   Hash::Merge::Simple
   IO::File
   IO::Handle
@@ -59,7 +59,8 @@ my @modules = qw(
   MooX::Types::MooseLike
   MooX::Types::MooseLike::Base
   POSIX
-  Plack::Request
+  Plack
+  Plack::Builder
   Plack::Test
   Pod::Simple::Search
   Pod::Simple::SimpleTree
@@ -79,7 +80,6 @@ my @modules = qw(
   URI::Escape
   URL::Encode::XS
   YAML
-  YAML::Any
   lib
   overload
   parent
diff --git a/t/ajax_plugin.t b/t/ajax_plugin.t
index 5bf4957..8b9e501 100644
--- a/t/ajax_plugin.t
+++ b/t/ajax_plugin.t
@@ -28,7 +28,7 @@ use HTTP::Request::Common qw(GET HEAD PUT POST DELETE);
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/any.t b/t/any.t
index 5eb5241..61e2a36 100644
--- a/t/any.t
+++ b/t/any.t
@@ -18,7 +18,7 @@ use HTTP::Request::Common;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/auto_page.t b/t/auto_page.t
index f40728b..d1a1776 100644
--- a/t/auto_page.t
+++ b/t/auto_page.t
@@ -16,8 +16,7 @@ use HTTP::Request::Common;
     engine('template')->layout('main');
 }
 
-$_->finish for @{ Dancer2->runner->server->apps };
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/charset_server.t b/t/charset_server.t
index 7e336f7..5a297a6 100644
--- a/t/charset_server.t
+++ b/t/charset_server.t
@@ -63,7 +63,8 @@ Test::TCP::test_tcp(
 
         set charset => 'utf-8';
 
-        Dancer2->runner->server->port($port);
+        # we're overiding a RO attribute only for this test!
+        Dancer2->runner->{'port'} = $port;
         start;
     },
 );
diff --git a/t/config.t b/t/config.t
index 30e9003..b9baf23 100644
--- a/t/config.t
+++ b/t/config.t
@@ -5,7 +5,6 @@ use Test::Fatal;
 use Carp 'croak';
 
 use Dancer2::Core::Runner;
-use Dancer2::Core::Role::Config;
 use Dancer2::FileUtils qw/dirname path/;
 use File::Spec;
 use File::Temp;
@@ -17,7 +16,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
 
     package Prod;
     use Moo;
-    with 'Dancer2::Core::Role::Config';
+    with 'Dancer2::Core::Role::ConfigReader';
 
     sub name {'Prod'}
 
@@ -27,7 +26,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
 
     package Dev;
     use Moo;
-    with 'Dancer2::Core::Role::Config';
+    with 'Dancer2::Core::Role::ConfigReader';
 
     sub _build_environment {'development'}
     sub location           {$location}
@@ -35,7 +34,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
 
     package Failure;
     use Moo;
-    with 'Dancer2::Core::Role::Config';
+    with 'Dancer2::Core::Role::ConfigReader';
 
     sub _build_environment {'failure'}
     sub location           {$location}
@@ -43,7 +42,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
 
     package Staging;
     use Moo;
-    with 'Dancer2::Core::Role::Config';
+    with 'Dancer2::Core::Role::ConfigReader';
 
     sub _build_environment {'staging'}
     sub location           {$location}
@@ -51,7 +50,7 @@ my $location = File::Spec->rel2abs( path( dirname(__FILE__), 'config' ) );
 
     package Merging;
     use Moo;
-    with 'Dancer2::Core::Role::Config';
+    with 'Dancer2::Core::Role::ConfigReader';
 
     sub name {'Merging'}
 
@@ -67,8 +66,8 @@ is_deeply $d->config_files,
   "config_files() only sees existing files";
 
 my $f = Prod->new;
-is $f->does('Dancer2::Core::Role::Config'), 1,
-  "role Dancer2::Core::Role::Config is consumed";
+is $f->does('Dancer2::Core::Role::ConfigReader'), 1,
+  "role Dancer2::Core::Role::ConfigReader is consumed";
 
 is_deeply $f->config_files,
   [ path( $location, 'config.yml' ),
diff --git a/t/context.t b/t/context.t
index c232f5b..c9db4bb 100644
--- a/t/context.t
+++ b/t/context.t
@@ -17,7 +17,7 @@ my $env = {
     REMOTE_ADDR       => '127.0.0.1',
     HTTP_COOKIE =>
       'dancer.session=1234; fbs_102="access_token=xxxxxxxxxx%7Cffffff"',
-    X_FORWARDED_FOR => '127.0.0.2',
+    HTTP_X_FORWARDED_FOR => '127.0.0.2',
     REMOTE_HOST     => 'localhost',
     HTTP_USER_AGENT => 'Mozilla',
     REMOTE_USER     => 'sukria',
diff --git a/t/context_trigger.t b/t/context_trigger.t
index d3100a1..9cee083 100644
--- a/t/context_trigger.t
+++ b/t/context_trigger.t
@@ -45,7 +45,9 @@ Test::TCP::test_tcp(
         };
 
         setting appdir => $tempdir;
-        Dancer2->runner->server->port($port);
+
+        # we're overiding a RO attribute only for this test!
+        Dancer2->runner->{'port'} = $port;
         start;
     },
 );
diff --git a/t/custom_dsl.t b/t/custom_dsl.t
index a602952..10f1a91 100644
--- a/t/custom_dsl.t
+++ b/t/custom_dsl.t
@@ -16,7 +16,7 @@ prend '/' => sub {
     request->method;
 };
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/dancer-test.t b/t/dancer-test.t
index d6e6380..fbc92ba 100644
--- a/t/dancer-test.t
+++ b/t/dancer-test.t
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 49;
+use Test::More tests => 50;
 
 use Dancer2;
 use Dancer2::Test;
@@ -108,3 +108,20 @@ $param_response =
     { params => { test => [ 'test/', $russian_test ] } } );
 is $param_response->content, 'test/' . encode( 'UTF-8', $russian_test ),
   'multi utf8 value properly merge';
+
+get '/headers' => sub {
+    join " : ", request->header('X-Sent-By'), request->cookies->{foo};
+};
+note "extra headers in request"; {
+    my $sent_by = 'Dancer2::Test';
+    my $headers_test = dancer_response( GET => '/headers',
+        {
+            headers => [
+                [ 'X-Sent-By' => $sent_by ],
+                [ 'Cookie' => "foo=bar" ],
+            ],
+        }
+    );
+    is $headers_test->content, "$sent_by : bar",
+        "extra headers included in request";
+}
diff --git a/t/deserialize.t b/t/deserialize.t
index 05d1395..e1fa348 100644
--- a/t/deserialize.t
+++ b/t/deserialize.t
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 10;
+use Test::More tests => 12;
 use Plack::Test;
 use HTTP::Request::Common;
 
@@ -23,13 +23,19 @@ use HTTP::Request::Common;
         return join " : ", map { $_ => $p->{$_} } sort keys %$p;
     };
 
+    # This route is used for both toure and body params.
     post '/from/:town' => sub {
         my $p = params;
         return $p;
     };
+
+    any [qw/del patch/] => '/from/:town' => sub {
+        my $p = params('body');
+        return $p;
+    };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
@@ -68,7 +74,8 @@ note "Verify Serializers decode into characters"; {
             my $body = $serializer->serialize({utf8 => $utf8});
 
             # change the app serializer
-            Dancer2->runner->server->apps->[0]->engines->{'serializer'} =
+            # we're overiding a RO attribute only for this test!
+            Dancer2->runner->apps->[0]->{'serializer_engine'} =
                 $serializer;
 
             my $r = $cb->(
@@ -87,22 +94,24 @@ note "Verify Serializers decode into characters"; {
     };
 }
 
+# default back to JSON for the rest
+# we're overiding a RO attribute only for this test!
+Dancer2->runner->apps->[0]->{'serializer_engine'} =
+    Dancer2::Serializer::JSON->new;
+
 note "Decoding of mixed route and deserialized body params"; {
     # Check integers from request body remain integers
     # but route params get decoded.
     test_psgi $app, sub {
         my $cb = shift;
 
-        # change the app serializer
-        Dancer2->runner->server->apps->[0]->engines->{'serializer'} =
-            Dancer2::Serializer::JSON->new;
-
-        my $r = $cb->(
-            POST "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
-                'Content-Type' => 'application/json',
-                Content        => JSON::to_json({ population => 592393 }),
+        my @req_params = (
+            "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
+            'Content-Type' => 'application/json',
+            Content        => JSON::to_json({ population => 592393 }),
         );
 
+        my $r       = $cb->( POST @req_params );
         my $content = Encode::decode( 'UTF-8', $r->content );
 
         # Watch out for hash order randomization..
@@ -120,24 +129,56 @@ note "Decoding of mixed route and deserialized body params"; {
     };
 }
 
+# Check body is deserialized on PATCH and DELETE.
+# The RFC states the behaviour for DELETE is undefined; We take the lenient
+# and deserialize it.
+# http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-4.3.5
+note "Deserialze any body content that is allowed or undefined"; {
+    test_psgi $app, sub {
+        my $cb = shift;
+
+        for my $method ( qw/delete patch/ ) {
+            my $request  = HTTP::Request->new(
+                $method,
+                "/from/D\x{c3}\x{bc}sseldorf", # /from/d%C3%BCsseldorf
+                [ 'Content-Type' => 'application/json' ],
+                JSON::to_json({ population => 592393 }),
+            );
+            my $response = $cb->($request);
+            my $content  = Encode::decode( 'UTF-8', $response->content );
+
+            # Only body params returned
+            is(
+                $content,
+                '{"population":592393}',
+                "JSON body deserialized for " . uc($method) . " requests",
+            );
+        }
+    }
+}
+
 note 'Check serialization errors'; {
-    my $serializer = Dancer2::Serializer::JSON->new();
-    my $req        = Dancer2::Core::Request->new(
-        method       => 'PUT',
-        path         => '/from_params',
-        content_type => 'application/json',
-        body         => "---",
-        serializer   => $serializer,
-    );
-
-    ok(
-        $req->serializer->has_error,
-        "Invalid JSON threw error in serializer",
-    );
-
-    like(
-        $req->serializer->error,
-        qr/malformed number/,
-        ".. of a 'malformed number'",
-    );
+    test_psgi $app, sub {
+        my $cb = shift;
+
+        $cb->(
+            PUT '/from_params',
+                'Content-Type' => 'application/json',
+                Content        => '---',
+        );
+
+        ok(
+            Dancer2->runner->apps->[0]->{'serializer_engine'}->has_error,
+            "Invalid JSON threw error in serializer",
+        );
+
+        like(
+            Dancer2->runner->apps->[0]->{'serializer_engine'}->error,
+            qr/malformed number/,
+            ".. of a 'malformed number'",
+        );
+    }
 }
+
+done_testing();
+
diff --git a/t/dsl.t b/t/dsl.t
index 4870508..1cc399e 100644
--- a/t/dsl.t
+++ b/t/dsl.t
@@ -10,7 +10,7 @@ any [ 'get', 'post' ], '/' => sub {
     request->method;
 };
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/dsl/halt.t b/t/dsl/halt.t
index 8e74fa4..69ad2fd 100644
--- a/t/dsl/halt.t
+++ b/t/dsl/halt.t
@@ -23,7 +23,7 @@ subtest 'halt within routes' => sub {
         };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -68,7 +68,7 @@ subtest 'halt in before halt' => sub {
 
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
diff --git a/t/error.t b/t/error.t
index ad122d8..e717afc 100644
--- a/t/error.t
+++ b/t/error.t
@@ -23,7 +23,7 @@ my $env = {
     REMOTE_ADDR       => '127.0.0.1',
     HTTP_COOKIE =>
       'dancer.session=1234; fbs_102="access_token=xxxxxxxxxx%7Cffffff"',
-    X_FORWARDED_FOR => '127.0.0.2',
+    HTTP_X_FORWARDED_FOR => '127.0.0.2',
     REMOTE_HOST     => 'localhost',
     HTTP_USER_AGENT => 'Mozilla',
     REMOTE_USER     => 'sukria',
@@ -54,7 +54,7 @@ subtest "send_error in route" => sub {
         };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -88,7 +88,7 @@ subtest "send_error with custom stuff" => sub {
         };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
diff --git a/t/error_template.t b/t/error_template.t
index 79b59e1..7a70fa1 100644
--- a/t/error_template.t
+++ b/t/error_template.t
@@ -30,7 +30,7 @@ use HTTP::Request::Common;
 
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/forward.t b/t/forward.t
index 047f92f..4d7919d 100644
--- a/t/forward.t
+++ b/t/forward.t
@@ -33,7 +33,7 @@ get '/go_to_post/' => sub {
 # get '/b' => sub { vars->{test} = 1;  forward '/a'; };
 # get '/a' => sub { return "test is " . var('test'); };
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/forward_before_hook.t b/t/forward_before_hook.t
index 3138629..f14980e 100644
--- a/t/forward_before_hook.t
+++ b/t/forward_before_hook.t
@@ -32,7 +32,7 @@ hook before => sub {
     forward '/default';
 };
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/forward_test_tcp.t b/t/forward_test_tcp.t
index a1c8dc0..e3a986f 100644
--- a/t/forward_test_tcp.t
+++ b/t/forward_test_tcp.t
@@ -31,7 +31,12 @@ test_tcp(
         post '/'        => sub {'post-home'};
         post '/bounce/' => sub { forward('/') };
 
-        Dancer2->runner->server->port($port);
+        print STDERR "Running on port $port\n";
+
+        # we're overiding a RO attribute only for this test!
+        Dancer2->runner->{'port'} = $port;
+
+        print STDERR "Starting\n";
         start;
     },
     client => sub {
@@ -60,7 +65,8 @@ test_tcp(
         $res = $ua->get("http://127.0.0.1:$port/bounce/");
         is $res->header('Content-Length') => 5;
         is $res->header('Content-Type')   => 'text/html; charset=UTF-8';
-        is $res->header('Server')         => "Perl Dancer2 $Dancer2::VERSION";
+        is $res->header('Server')         =>
+            "Perl Dancer2 $Dancer2::VERSION, Perl Dancer2 $Dancer2::VERSION";
 
         $res = $ua->post("http://127.0.0.1:$port/");
         is $res->code    => 200;
@@ -71,7 +77,8 @@ test_tcp(
         is $res->content                  => 'post-home';
         is $res->header('Content-Length') => 9;
         is $res->header('Content-Type')   => 'text/html; charset=UTF-8';
-        is $res->header('Server')         => "Perl Dancer2 $Dancer2::VERSION";
+        is $res->header('Server')         =>
+            "Perl Dancer2 $Dancer2::VERSION, Perl Dancer2 $Dancer2::VERSION";
     }
 );
 
diff --git a/t/handler_file.t b/t/handler_file.t
index 49e0fde..422eee3 100644
--- a/t/handler_file.t
+++ b/t/handler_file.t
@@ -22,7 +22,7 @@ use HTTP::Request::Common;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/hooks.t b/t/hooks.t
index 97d5a7e..9d5301a 100644
--- a/t/hooks.t
+++ b/t/hooks.t
@@ -116,8 +116,7 @@ my $tests_flags = {};
 
 }
 
-$_->finish for @{ Dancer2->runner->server->apps };
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/http_methods.t b/t/http_methods.t
index 2cecf4e..7193394 100644
--- a/t/http_methods.t
+++ b/t/http_methods.t
@@ -3,7 +3,7 @@ use warnings;
 
 use Test::More tests => 9;
 use Plack::Test;
-use HTTP::Request::Common;
+use HTTP::Request;
 
 use Dancer2;
 
@@ -16,7 +16,7 @@ my %method = (
     options => 'OPTIONS',
 );
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
@@ -33,8 +33,8 @@ test_psgi $app, sub {
 
     eval "get '/head' => sub {'HEAD'}";
 
-    my $res = $cb->( HEAD '/head' );
-    is( $res->content, 'HEAD', 'HEAD /' );
+    my $res = $cb->( HTTP::Request->new( HEAD => '/head' ) );
+    is( $res->content, '', 'HEAD /' ); # HEAD requests have no content
     is( $res->headers->content_length, 4, 'Content-Length for HEAD' );
 };
 
diff --git a/t/lib/FooPlugin.pm b/t/lib/FooPlugin.pm
index 597fc8c..1df1fd8 100644
--- a/t/lib/FooPlugin.pm
+++ b/t/lib/FooPlugin.pm
@@ -31,7 +31,7 @@ sub _retrieve_get_urls {
     my $dsl = shift;
     my ( $route, @urls );
 
-    for my $app ( @{ $dsl->runner->server->apps } ) {
+    for my $app ( @{ $dsl->runner->apps } ) {
         my $routes = $app->routes;
 
         # push the static get routes into an array.
diff --git a/t/plugin_import.t b/t/plugin_import.t
index 4a53f5a..494a1cd 100644
--- a/t/plugin_import.t
+++ b/t/plugin_import.t
@@ -15,7 +15,7 @@ use HTTP::Request::Common;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/plugin_multiple_apps.t b/t/plugin_multiple_apps.t
index 58e7a6b..eaad13a 100644
--- a/t/plugin_multiple_apps.t
+++ b/t/plugin_multiple_apps.t
@@ -20,7 +20,7 @@ use HTTP::Request::Common;
     use t::lib::SubApp2 with => { session => engine('session') };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/plugin_syntax.t b/t/plugin_syntax.t
index 0d47fdb..5b8d07b 100644
--- a/t/plugin_syntax.t
+++ b/t/plugin_syntax.t
@@ -23,7 +23,7 @@ subtest 'global and route keywords' => sub {
         foo_route;
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -63,7 +63,7 @@ subtest 'plugin old syntax' => sub {
         around_get;
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -83,7 +83,7 @@ subtest caller_dsl => sub {
         use t::lib::DancerPlugin;
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -129,7 +129,7 @@ subtest 'hooks in plugins' => sub {
 
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
diff --git a/t/redirect.t b/t/redirect.t
index c16aa84..39e6c35 100644
--- a/t/redirect.t
+++ b/t/redirect.t
@@ -16,7 +16,7 @@ subtest 'basic redirects' => sub {
         get '/redirect_querystring' => sub { redirect '/login?failed=1' };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -86,7 +86,7 @@ subtest 'absolute and relative redirects' => sub {
         get '/relative' => sub { redirect "somewhere/else"; };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -133,7 +133,7 @@ subtest 'redirect behind a proxy' => sub {
         get '/bounce' => sub { redirect '/test2' };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
@@ -173,6 +173,18 @@ subtest 'redirect behind a proxy' => sub {
                 '... or from X_FORWARDED_PROTOCOL',
             );
         }
+
+        {
+            is(
+                $cb->(
+                    GET '/test2/bounce',
+                    'X-FORWARDED-HOST'  => 'nice.host.name',
+                    'X-FORWARDED-PROTO' => 'https',
+                )->headers->header('Location'),
+                'https://nice.host.name/test2',
+                '... or from X_FORWARDED_PROTO',
+            );
+        }
     };
 };
 
@@ -186,7 +198,7 @@ subtest 'redirect behind multiple proxies' => sub {
         get '/bounce' => sub { redirect '/test2' };
     }
 
-    my $app = Dancer2->runner->server->psgi_app;
+    my $app = Dancer2->runner->psgi_app;
     is( ref $app, 'CODE', 'Got app' );
 
     test_psgi $app, sub {
diff --git a/t/release-distmeta.t b/t/release-distmeta.t
index 15368e8..a24a89a 100644
--- a/t/release-distmeta.t
+++ b/t/release-distmeta.t
@@ -7,9 +7,8 @@ BEGIN {
   }
 }
 
+# This file was automatically generated by Dist::Zilla::Plugin::MetaTests.
 
-use Test::More;
+use Test::CPAN::Meta;
 
-eval "use Test::CPAN::Meta";
-plan skip_all => "Test::CPAN::Meta required for testing META.yml" if $@;
 meta_yaml_ok();
diff --git a/t/release-pod-syntax.t b/t/release-pod-syntax.t
index d46a955..cdd6a6c 100644
--- a/t/release-pod-syntax.t
+++ b/t/release-pod-syntax.t
@@ -7,9 +7,8 @@ BEGIN {
   }
 }
 
+# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests.
 use Test::More;
-
-eval "use Test::Pod 1.41";
-plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+use Test::Pod 1.41;
 
 all_pod_files_ok();
diff --git a/t/request.t b/t/request.t
index e3528f7..da315f5 100644
--- a/t/request.t
+++ b/t/request.t
@@ -21,12 +21,13 @@ sub run_test {
         SERVER_PORT          => 5000,
         SERVER_PROTOCOL      => 'HTTP/1.1',
         REMOTE_ADDR          => '127.0.0.1',
-        X_FORWARDED_FOR      => '127.0.0.2',
-        X_FORWARDED_HOST     => 'secure.frontend',
-        X_FORWARDED_PROTOCOL => 'https',
+        HTTP_X_FORWARDED_FOR      => '127.0.0.2',
+        HTTP_X_FORWARDED_HOST     => 'secure.frontend',
+        HTTP_X_FORWARDED_PROTOCOL => 'https',
         REMOTE_HOST          => 'localhost',
         HTTP_USER_AGENT      => 'Mozilla',
         REMOTE_USER          => 'sukria',
+        HTTP_COOKIE          => 'cookie.a=foo=bar; cookie.b=1234abcd',
     };
 
     my $req = Dancer2::Core::Request->new( env => $env );
@@ -63,6 +64,9 @@ sub run_test {
     note "tests params";
     is_deeply { $req->params }, { foo => 42, bar => [ 12, 13, 14 ] };
 
+    note "tests cookies";
+    is( keys %{ $req->cookies }, 2, "multiple cookies extracted" );
+
     my $forward = $req->make_forward_to('/somewhere');
     is $forward->path_info, '/somewhere';
     is $forward->method,    'GET';
@@ -97,7 +101,7 @@ sub run_test {
             is_behind_proxy => 1
         );
         is $req->secure, 1;
-        is $req->host,   $env->{X_FORWARDED_HOST};
+        is $req->host,   $env->{HTTP_X_FORWARDED_HOST};
         is $req->scheme, 'https';
     }
 
diff --git a/t/roles/server.t b/t/roles/server.t
deleted file mode 100644
index 1b95867..0000000
--- a/t/roles/server.t
+++ /dev/null
@@ -1,37 +0,0 @@
-use Test::More;
-use Test::Fatal;
-
-use strict;
-use warnings;
-
-{
-
-    package Foo;
-    use Moo;
-    with 'Dancer2::Core::Role::Server';
-
-    sub _build_name {'foo'}
-}
-
-my $s;
-
-like( exception { $s = Foo->new }, qr{required.*host}, "host is mandatory", );
-
-like(
-    exception { $s = Foo->new( host => 'localhost' ) },
-    qr{required.*port}, "port is mandatory",
-);
-
-my $runner = Dancer2::Core::Runner->new( caller => $0 );
-$s = Foo->new( host => 'localhost', port => 3000, runner => $runner );
-my $app = Dancer2::Core::App->new( name => 'main' );
-
-$s->register_application($app);
-
-is $s->apps->[0]->name, 'main', 'app has been registered';
-isa_ok $s->dispatcher, 'Dancer2::Core::Dispatcher';
-
-my $psgi_app = $s->psgi_app;
-is ref($psgi_app), 'CODE', 'got a subroutine when asked for psgi_app';
-
-done_testing,
diff --git a/t/runner.t b/t/runner.t
index 3fd3baa..100315e 100644
--- a/t/runner.t
+++ b/t/runner.t
@@ -26,21 +26,8 @@ is $runner->environment, 'development';
     is $runner->environment, 'foo';
 }
 
-is $runner->server->name, 'Standalone', "server is created and is standalone";
-
 note "testing default config of the server";
-is $runner->server->port,      3000;
-is $runner->server->host,      '0.0.0.0';
-is $runner->server->is_daemon, 0;
-
-note "testing server failure";
-{
-    $runner->config->{apphandler} = 'NotExist';
-    like(
-        exception { Dancer2::Core::Runner::_build_server($runner) },
-        qr{Unable to load Dancer2::Core::Server::NotExist},
-        'Cannot run BUILD for server that does not exist',
-    );
-}
+is $runner->port,      3000;
+is $runner->host,      '0.0.0.0';
 
 done_testing;
diff --git a/t/serializer.t b/t/serializer.t
index 86441ed..e372461 100644
--- a/t/serializer.t
+++ b/t/serializer.t
@@ -18,7 +18,7 @@ use HTTP::Request::Common;
     get '/to_json' => sub { to_json({bar => 'baz'}, {pretty => 1}) };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/server.t b/t/server.t
deleted file mode 100644
index 378d07f..0000000
--- a/t/server.t
+++ /dev/null
@@ -1,30 +0,0 @@
-use strict;
-use warnings;
-use Test::More;
-
-{
-
-    package Foo;
-    use Moo;
-    with 'Dancer2::Core::Role::Server';
-
-    sub _build_name {'Foo'}
-}
-
-use Dancer2::Core::Runner;
-my $runner = Dancer2::Core::Runner->new( caller => __FILE__ );
-
-my $f = Foo->new( host => 'localhost', port => 3000, runner => $runner );
-my $app = Dancer2::Core::App->new( name => 'foo' );
-
-$f->register_application($app);
-is $f->apps->[0]->name, 'foo';
-
-is $f->host, 'localhost';
-is $f->port, 3000;
-ok( !$f->is_daemon );
-
-ok( defined $f->dispatcher );
-is ref( $f->psgi_app ), 'CODE';
-
-done_testing;
diff --git a/t/server_standalone.t b/t/server_standalone.t
index 5f097aa..d827c60 100644
--- a/t/server_standalone.t
+++ b/t/server_standalone.t
@@ -33,7 +33,8 @@ Test::TCP::test_tcp(
             "foo";
         };
 
-        Dancer2->runner->server->port($port);
+        # we're overiding a RO attribute only for this test!
+        Dancer2->runner->{'port'} = $port;
         start;
     },
 );
diff --git a/t/session_config.t b/t/session_config.t
index 1730cb2..68003d3 100644
--- a/t/session_config.t
+++ b/t/session_config.t
@@ -110,7 +110,8 @@ for my $session_expires ( 3600, '1h', '1 hour' ) {
                 port         => $port
             );
 
-            Dancer2->runner->server->port($port);
+            # we're overiding a RO attribute only for this test!
+            Dancer2->runner->{'port'} = $port;
             start;
         },
     );
diff --git a/t/session_engines.t b/t/session_engines.t
index f59d868..566a480 100644
--- a/t/session_engines.t
+++ b/t/session_engines.t
@@ -100,7 +100,8 @@ foreach my $engine (@engines) {
                 port         => $port
             );
 
-            Dancer2->runner->server->port($port);
+            # we're overiding a RO attribute only for this test!
+            Dancer2->runner->{'port'} = $port;
             start;
         },
     );
diff --git a/t/session_forward.t b/t/session_forward.t
index 0d0ae3e..080da09 100644
--- a/t/session_forward.t
+++ b/t/session_forward.t
@@ -35,7 +35,8 @@ my $server = sub {
         session "more" => undef;
     };
 
-    Dancer2->runner->server->port($port);
+    # we're overiding a RO attribute only for this test!
+    Dancer2->runner->{'port'} = $port;
     start;
 };
 
diff --git a/t/session_lifecycle.t b/t/session_lifecycle.t
index 54afc9b..3c1de9a 100644
--- a/t/session_lifecycle.t
+++ b/t/session_lifecycle.t
@@ -171,7 +171,8 @@ foreach my $engine (@engines) {
                 port         => $port
             );
 
-            Dancer2->runner->server->port($port);
+            # we're overiding a RO attribute only for this test!
+            Dancer2->runner->{'port'} = $port;
             start;
         },
     );
diff --git a/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml b/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V-BgAAGf4AUVz9SCl75podmNK50PAP.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml b/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V45QAAQt17pdKEYSq8QJ4fUrrAstic.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml b/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V4OQAAN0HuLoN_ijuiS20Me-2_O_o3.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml b/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V58wAAVJQTwafV4Dq1UPHukvT_ZMz3.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml b/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5DQAARZaqdcheriGEwd2jH_ckj4c-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml b/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5UwAASjUrDgqw8FOTpI0DiZ7JNxH9.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml b/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5hAAATV-WhNU_d6D6Olx_4Crtg3lw.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml b/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V5sgAAUGFe9B-4pjShyFlzUlth4WAI.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml b/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V6EwAAVtIByIBOeMRBUO-d2F-XLe_D.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml b/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1V9HQAAC0DngjFxqJnOBoSqB98lwXo4.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml b/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VwhgAAOL9DJqLhEiiR1_04Xeedi7u-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml b/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VxVAAARTfscuC3UnvpFfJu2sSd2A_k.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml b/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VxZgAARqvobxwHMXiD_DZZCf4BSivq.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml b/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VyaAAAVsIl4t6YaQ5RzBPr_bxBnOAC.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml b/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VzhwAAae9G4_0p1wTY7P_xE79N1Rwg.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml b/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1VznQAAa4uWAuqGkfznOQ-HR2KlyJjV.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml b/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WFfgAAFIO3LAkWQ7pWivZWiLCE3FX-.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml b/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WFpgAAFy9iLoLEjtwjSHuE0IDNcgnD.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml b/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WHzwAAOs4dHSVnPVFzR9crTSDprFeX.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml b/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U1WILgAAQNdL716zIPwofCjhzGS41yLe.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml b/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2AiRAAAJdhTvXJ3LDf4H45hGSuKzlv1.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml b/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2ApbAAAImRCE4Qe-LCXBlLiM0-FTj3K.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml b/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
new file mode 100644
index 0000000..177d86c
--- /dev/null
+++ b/t/sessions/U2AruAAATC_H53mjAeoJ7MerYfC3wNhY.yml
@@ -0,0 +1,2 @@
+---
+name: damian
diff --git a/t/shared_engines.t b/t/shared_engines.t
index a54859c..bb0b7c0 100644
--- a/t/shared_engines.t
+++ b/t/shared_engines.t
@@ -45,7 +45,8 @@ Test::TCP::test_tcp(
         };
 
         setting appdir => $tempdir;
-        Dancer2->runner->server->port($port);
+        # we're overiding a RO attribute only for this test!
+        Dancer2->runner->{'port'} = $port;
         start;
     },
 );
diff --git a/t/splat.t b/t/splat.t
index fd45435..c2f1f0a 100644
--- a/t/splat.t
+++ b/t/splat.t
@@ -20,7 +20,7 @@ my @splat;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/template.t b/t/template.t
index 58730c2..2af02b0 100644
--- a/t/template.t
+++ b/t/template.t
@@ -97,7 +97,7 @@ content added in after_layout_render";
     get '/get_views_via_settings' => sub { set 'views' };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/template_default_tokens.t b/t/template_default_tokens.t
index 61adfe5..4fab21e 100644
--- a/t/template_default_tokens.t
+++ b/t/template_default_tokens.t
@@ -37,7 +37,7 @@ params.foo: 42
 session.foo in session
 vars.foo: in var";
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/template_name.t b/t/template_name.t
index 538d6e2..fc528aa 100644
--- a/t/template_name.t
+++ b/t/template_name.t
@@ -17,7 +17,7 @@ use HTTP::Request::Common;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/uri_for.t b/t/uri_for.t
index b1a7862..c5cacf0 100644
--- a/t/uri_for.t
+++ b/t/uri_for.t
@@ -11,7 +11,7 @@ use HTTP::Request::Common;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
 
 test_psgi $app, sub {
diff --git a/t/vars.t b/t/vars.t
index de4dc35..c7f6f8e 100644
--- a/t/vars.t
+++ b/t/vars.t
@@ -23,7 +23,7 @@ plan tests => 3;
     };
 }
 
-my $app = Dancer2->runner->server->psgi_app;
+my $app = Dancer2->runner->psgi_app;
 is( ref $app, 'CODE', 'Got app' );
  
 test_psgi $app, sub {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libdancer2-perl.git



More information about the Pkg-perl-cvs-commits mailing list