diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,7 @@
 erl_crash.dump
 
 # Static artifacts
-/node_modules
+/assets/node_modules
 
 # Since we are building assets from web/static,
 # we ignore priv/static. You may want to comment
diff --git a/brunch-config.js b/assets/brunch-config.js
rename from brunch-config.js
rename to assets/brunch-config.js
--- a/brunch-config.js
+++ b/assets/brunch-config.js
@@ -32,28 +32,25 @@
 
   conventions: {
     // This option sets where we should place non-css and non-js assets in.
-    // By default, we set this to "/web/static/assets". Files in this directory
+    // By default, we set this to "/assets/static". Files in this directory
     // will be copied to `paths.public`, which is "priv/static" by default.
-    assets: /^(web\/static\/assets)/
+    assets: /^(static)/
   },
 
   // Phoenix paths configuration
   paths: {
     // Dependencies and current project directories to watch
-    watched: [
-      "web/static",
-      "test/static"
-    ],
+    watched: ["static", "css", "js", "js/widgets", "vendor"],
 
     // Where to compile files to
-    public: "priv/static"
+    public: "../priv/static"
   },
 
   // Configure your plugins
   plugins: {
     babel: {
       // Do not use ES6 compiler in vendor code
-      ignore: [/web\/static\/vendor/]
+      ignore: [/vendor/]
     },
     copycat: {
       fonts: ["node_modules/bootstrap/fonts"]
@@ -62,7 +59,7 @@
 
   modules: {
     autoRequire: {
-      "js/app.js": ["web/static/js/app"]
+      "js/app.js": ["js/app"]
     }
   },
 
diff --git a/web/static/css/app.css b/assets/css/app.css
rename from web/static/css/app.css
rename to assets/css/app.css
diff --git a/web/static/css/phoenix.css b/assets/css/phoenix.css
rename from web/static/css/phoenix.css
rename to assets/css/phoenix.css
diff --git a/web/static/css/widgets.css b/assets/css/widgets.css
rename from web/static/css/widgets.css
rename to assets/css/widgets.css
diff --git a/web/static/js/api.js b/assets/js/api.js
rename from web/static/js/api.js
rename to assets/js/api.js
diff --git a/web/static/js/app.js b/assets/js/app.js
rename from web/static/js/app.js
rename to assets/js/app.js
diff --git a/web/static/js/widgets/chatinput.js b/assets/js/widgets/chatinput.js
rename from web/static/js/widgets/chatinput.js
rename to assets/js/widgets/chatinput.js
diff --git a/web/static/js/widgets/chatroom.js b/assets/js/widgets/chatroom.js
rename from web/static/js/widgets/chatroom.js
rename to assets/js/widgets/chatroom.js
diff --git a/web/static/js/widgets/userlist.js b/assets/js/widgets/userlist.js
rename from web/static/js/widgets/userlist.js
rename to assets/js/widgets/userlist.js
diff --git a/web/static/js/widgets/userstatus.js b/assets/js/widgets/userstatus.js
rename from web/static/js/widgets/userstatus.js
rename to assets/js/widgets/userstatus.js
diff --git a/package.json b/assets/package.json
rename from package.json
rename to assets/package.json
--- a/package.json
+++ b/assets/package.json
@@ -6,14 +6,14 @@
     "watch": "brunch watch --stdin"
   },
   "dependencies": {
-    "phoenix": "file:deps/phoenix",
-    "phoenix_html": "file:deps/phoenix_html",
+    "phoenix": "file:../deps/phoenix",
+    "phoenix_html": "file:../deps/phoenix_html",
     "jquery": ">=2.1",
     "bootstrap": "~3.3.7"
   },
   "devDependencies": {
     "babel-brunch": "~6.0.0",
-    "brunch": "2.7.4",
+    "brunch": "2.10.9",
     "clean-css-brunch": "~2.0.0",
     "css-brunch": "~2.0.0",
     "javascript-brunch": "~2.0.0",
diff --git a/web/static/assets/favicon.ico b/assets/static/favicon.ico
rename from web/static/assets/favicon.ico
rename to assets/static/favicon.ico
diff --git a/web/static/assets/images/kolab-logo.png b/assets/static/images/kolab-logo.png
rename from web/static/assets/images/kolab-logo.png
rename to assets/static/images/kolab-logo.png
diff --git a/web/static/assets/robots.txt b/assets/static/robots.txt
rename from web/static/assets/robots.txt
rename to assets/static/robots.txt
diff --git a/config/config.exs b/config/config.exs
--- a/config/config.exs
+++ b/config/config.exs
@@ -11,10 +11,10 @@
           session_encryption: nil]
 
 # Configures the endpoint
-config :kolab_chat, KolabChat.Endpoint,
+config :kolab_chat, KolabChat.Web.Endpoint,
   url: [host: "localhost"],
   secret_key_base: "XCVqlNuOTjBK3GB4lPKKdoTk9149ftPIJmytpQnYxI4qpGwjJbR47bYdzOAggBii",
-  render_errors: [view: KolabChat.ErrorView, accepts: ~w(html json)],
+  render_errors: [view: KolabChat.Web.ErrorView, accepts: ~w(html json)],
   pubsub: [name: KolabChat.PubSub,
            adapter: Phoenix.PubSub.PG2]
 
diff --git a/config/dev.exs b/config/dev.exs
--- a/config/dev.exs
+++ b/config/dev.exs
@@ -6,23 +6,23 @@
 # The watchers configuration can be used to run external
 # watchers to your application. For example, we use it
 # with brunch.io to recompile .js and .css sources.
-config :kolab_chat, KolabChat.Endpoint,
+config :kolab_chat, KolabChat.Web.Endpoint,
   http: [port: 4000],
   debug_errors: true,
   code_reloader: true,
   check_origin: false,
   watchers: [node: ["node_modules/brunch/bin/brunch", "watch", "--stdin",
-                    cd: Path.expand("../", __DIR__)]]
+                    cd: Path.expand("../assets", __DIR__)]]
 
 
 # Watch static and templates for browser reloading.
-config :kolab_chat, KolabChat.Endpoint,
+config :kolab_chat, KolabChat.Web.Endpoint,
   live_reload: [
     patterns: [
       ~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
       ~r{priv/gettext/.*(po)$},
-      ~r{web/views/.*(ex)$},
-      ~r{web/templates/.*(eex)$}
+      ~r{lib/kolab_chat/web/views/.*(ex)$},
+      ~r{lib/kolab_chat/web/templates/.*(eex)$}
     ]
   ]
 
diff --git a/config/prod.exs b/config/prod.exs
--- a/config/prod.exs
+++ b/config/prod.exs
@@ -11,10 +11,10 @@
 # containing the digested version of static files. This
 # manifest is generated by the mix phoenix.digest task
 # which you typically run after static files are built.
-config :kolab_chat, KolabChat.Endpoint,
+config :kolab_chat, KolabChat.Web.Endpoint,
   http: [port: {:system, "PORT"}],
   url: [host: "example.com", port: 80],
-  cache_static_manifest: "priv/static/manifest.json"
+  cache_static_manifest: "priv/static/cache_manifest.json"
 
 # Do not print debug messages in production
 config :logger,
@@ -26,7 +26,7 @@
 # To get SSL working, you will need to add the `https` key
 # to the previous section and set your `:url` port to 443:
 #
-#     config :kolab_chat, KolabChat.Endpoint,
+#     config :kolab_chat, KolabChat.Web.Endpoint,
 #       ...
 #       url: [host: "example.com", port: 443],
 #       https: [port: 443,
@@ -40,7 +40,7 @@
 # We also recommend setting `force_ssl`, ensuring no data is
 # ever sent via http, always redirecting to https:
 #
-#     config :kolab_chat, KolabChat.Endpoint,
+#     config :kolab_chat, KolabChat.Web.Endpoint,
 #       force_ssl: [hsts: true]
 #
 # Check `Plug.SSL` for all available options in `force_ssl`.
@@ -55,7 +55,7 @@
 # Alternatively, you can configure exactly which server to
 # start per endpoint:
 #
-#     config :kolab_chat, KolabChat.Endpoint, server: true
+#     config :kolab_chat, KolabChat.Web.Endpoint, server: true
 #
 
 # Finally import the config/prod.secret.exs
diff --git a/config/test.exs b/config/test.exs
--- a/config/test.exs
+++ b/config/test.exs
@@ -2,7 +2,7 @@
 
 # We don't run a server during test. If one is required,
 # you can enable the server option below.
-config :kolab_chat, KolabChat.Endpoint,
+config :kolab_chat, KolabChat.Web.Endpoint,
   http: [port: 4001],
   server: false
 
diff --git a/lib/kolab_chat.ex b/lib/kolab_chat.ex
--- a/lib/kolab_chat.ex
+++ b/lib/kolab_chat.ex
@@ -9,9 +9,9 @@
     # Define workers and child supervisors to be supervised
     children = [
       # Start the endpoint when the application starts
-      supervisor(KolabChat.Endpoint, []),
+      supervisor(KolabChat.Web.Endpoint, []),
       # Start phoenix presence module
-      supervisor(KolabChat.Presence, []),
+      supervisor(KolabChat.Web.Presence, []),
       # Start your own worker by calling: KolabChat.Worker.start_link(arg1, arg2, arg3)
       # worker(KolabChat.Worker, [arg1, arg2, arg3]),
     ]
@@ -21,11 +21,4 @@
     opts = [strategy: :one_for_one, name: KolabChat.Supervisor]
     Supervisor.start_link(children, opts)
   end
-
-  # Tell Phoenix to update the endpoint configuration
-  # whenever the application is updated.
-  def config_change(changed, _new, removed) do
-    KolabChat.Endpoint.config_change(changed, removed)
-    :ok
-  end
 end
diff --git a/web/channels/presence.ex b/lib/kolab_chat/web/channels/presence.ex
rename from web/channels/presence.ex
rename to lib/kolab_chat/web/channels/presence.ex
--- a/web/channels/presence.ex
+++ b/lib/kolab_chat/web/channels/presence.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.Presence do
+defmodule KolabChat.Web.Presence do
   @moduledoc """
   Provides presence tracking to channels and processes.
 
@@ -11,7 +11,7 @@
 
       defmodule KolabChat.MyChannel do
         use KolabChat.Web, :channel
-        alias KolabChat.Presence
+        alias KolabChat.Web.Presence
 
         def join("some:topic", _params, socket) do
           send(self, :after_join)
diff --git a/web/channels/room_channel.ex b/lib/kolab_chat/web/channels/room_channel.ex
rename from web/channels/room_channel.ex
rename to lib/kolab_chat/web/channels/room_channel.ex
--- a/web/channels/room_channel.ex
+++ b/lib/kolab_chat/web/channels/room_channel.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.RoomChannel do
+defmodule KolabChat.Web.RoomChannel do
   use KolabChat.Web, :channel
 
   @spec join(topic :: binary(), args :: map(), socket :: pid()) :: {:ok, socket :: pid()}
diff --git a/web/channels/system_channel.ex b/lib/kolab_chat/web/channels/system_channel.ex
rename from web/channels/system_channel.ex
rename to lib/kolab_chat/web/channels/system_channel.ex
--- a/web/channels/system_channel.ex
+++ b/lib/kolab_chat/web/channels/system_channel.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.SystemChannel do
+defmodule KolabChat.Web.SystemChannel do
   use KolabChat.Web, :channel
 
   @status [
diff --git a/web/channels/user_socket.ex b/lib/kolab_chat/web/channels/user_socket.ex
rename from web/channels/user_socket.ex
rename to lib/kolab_chat/web/channels/user_socket.ex
--- a/web/channels/user_socket.ex
+++ b/lib/kolab_chat/web/channels/user_socket.ex
@@ -1,11 +1,11 @@
-defmodule KolabChat.UserSocket do
+defmodule KolabChat.Web.UserSocket do
   use Phoenix.Socket
 
   alias KolabChat.Database
 
   ## Channels
-  channel "room:*", KolabChat.RoomChannel
-  channel "system", KolabChat.SystemChannel
+  channel "room:*", KolabChat.Web.RoomChannel
+  channel "system", KolabChat.Web.SystemChannel
 
   ## Transports
   transport :websocket, Phoenix.Transports.WebSocket
diff --git a/web/controllers/auth_controller.ex b/lib/kolab_chat/web/controllers/auth_controller.ex
rename from web/controllers/auth_controller.ex
rename to lib/kolab_chat/web/controllers/auth_controller.ex
--- a/web/controllers/auth_controller.ex
+++ b/lib/kolab_chat/web/controllers/auth_controller.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.AuthController do
+defmodule KolabChat.Web.AuthController do
   use KolabChat.Web, :controller
 
   @doc """
diff --git a/web/controllers/chat_controller.ex b/lib/kolab_chat/web/controllers/chat_controller.ex
rename from web/controllers/chat_controller.ex
rename to lib/kolab_chat/web/controllers/chat_controller.ex
--- a/web/controllers/chat_controller.ex
+++ b/lib/kolab_chat/web/controllers/chat_controller.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.ChatController do
+defmodule KolabChat.Web.ChatController do
   use KolabChat.Web, :controller
 
   plug :put_layout, "chat.html"
diff --git a/web/controllers/page_controller.ex b/lib/kolab_chat/web/controllers/page_controller.ex
rename from web/controllers/page_controller.ex
rename to lib/kolab_chat/web/controllers/page_controller.ex
--- a/web/controllers/page_controller.ex
+++ b/lib/kolab_chat/web/controllers/page_controller.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.PageController do
+defmodule KolabChat.Web.PageController do
   use KolabChat.Web, :controller
 
   def index(conn, _params) do
diff --git a/web/controllers/plugs/locale.ex b/lib/kolab_chat/web/controllers/plugs/locale.ex
rename from web/controllers/plugs/locale.ex
rename to lib/kolab_chat/web/controllers/plugs/locale.ex
--- a/web/controllers/plugs/locale.ex
+++ b/lib/kolab_chat/web/controllers/plugs/locale.ex
@@ -8,7 +8,7 @@
       nil ->
         conn
       locale ->
-        Gettext.put_locale(KolabChat.Gettext, locale)
+        Gettext.put_locale(KolabChat.Web.Gettext, locale)
         put_session(conn, :locale, locale)
     end
   end
@@ -16,7 +16,7 @@
   # Gets supported locale code from the client
   # Uses 'locale' parameter or Accept-Language header
   defp client_locale(conn) do
-    supported = Gettext.known_locales(KolabChat.Gettext)
+    supported = Gettext.known_locales(KolabChat.Web.Gettext)
     locale = conn.params["locale"] || get_req_header(conn, "accept-language")
 
     locale
diff --git a/web/controllers/plugs/set_user.ex b/lib/kolab_chat/web/controllers/plugs/set_user.ex
rename from web/controllers/plugs/set_user.ex
rename to lib/kolab_chat/web/controllers/plugs/set_user.ex
diff --git a/lib/kolab_chat/endpoint.ex b/lib/kolab_chat/web/endpoint.ex
rename from lib/kolab_chat/endpoint.ex
rename to lib/kolab_chat/web/endpoint.ex
--- a/lib/kolab_chat/endpoint.ex
+++ b/lib/kolab_chat/web/endpoint.ex
@@ -1,7 +1,7 @@
-defmodule KolabChat.Endpoint do
+defmodule KolabChat.Web.Endpoint do
   use Phoenix.Endpoint, otp_app: :kolab_chat
 
-  socket "/socket", KolabChat.UserSocket
+  socket "/socket", KolabChat.Web.UserSocket
 
   # Serve at "/" the static files from "priv/static" directory.
   #
@@ -39,5 +39,5 @@
     signing_salt: Keyword.get(Application.get_env(:kolab_chat, :salts), :session_signing),
     encryption_salt: Keyword.get(Application.get_env(:kolab_chat, :salts), :session_encryption)
 
-  plug KolabChat.Router
+  plug KolabChat.Web.Router
 end
diff --git a/web/gettext.ex b/lib/kolab_chat/web/gettext.ex
rename from web/gettext.ex
rename to lib/kolab_chat/web/gettext.ex
--- a/web/gettext.ex
+++ b/lib/kolab_chat/web/gettext.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.Gettext do
+defmodule KolabChat.Web.Gettext do
   @moduledoc """
   A module providing Internationalization with a gettext-based API.
 
diff --git a/web/router.ex b/lib/kolab_chat/web/router.ex
rename from web/router.ex
rename to lib/kolab_chat/web/router.ex
--- a/web/router.ex
+++ b/lib/kolab_chat/web/router.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.Router do
+defmodule KolabChat.Web.Router do
   use KolabChat.Web, :router
 
   pipeline :browser do
@@ -15,20 +15,20 @@
     plug :accepts, ["json"]
   end
 
-  scope "/", KolabChat do
+  scope "/", KolabChat.Web do
     pipe_through :browser
 
     get "/", PageController, :index
   end
 
-  scope "/chat", KolabChat do
+  scope "/chat", KolabChat.Web do
     pipe_through :browser
 
     get "/", ChatController, :index
     get "/:room", ChatController, :index
   end
 
-  scope "/auth", KolabChat do
+  scope "/auth", KolabChat.Web do
     pipe_through :browser
 
     post "/default/callback", AuthController, :default_callback
diff --git a/web/templates/chat/index.html.eex b/lib/kolab_chat/web/templates/chat/index.html.eex
rename from web/templates/chat/index.html.eex
rename to lib/kolab_chat/web/templates/chat/index.html.eex
diff --git a/web/templates/layout/app.html.eex b/lib/kolab_chat/web/templates/layout/app.html.eex
rename from web/templates/layout/app.html.eex
rename to lib/kolab_chat/web/templates/layout/app.html.eex
diff --git a/web/templates/layout/chat.html.eex b/lib/kolab_chat/web/templates/layout/chat.html.eex
rename from web/templates/layout/chat.html.eex
rename to lib/kolab_chat/web/templates/layout/chat.html.eex
diff --git a/web/templates/page/index.html.eex b/lib/kolab_chat/web/templates/page/index.html.eex
rename from web/templates/page/index.html.eex
rename to lib/kolab_chat/web/templates/page/index.html.eex
diff --git a/lib/kolab_chat/web/views/chat_view.ex b/lib/kolab_chat/web/views/chat_view.ex
new file mode 100644
--- /dev/null
+++ b/lib/kolab_chat/web/views/chat_view.ex
@@ -0,0 +1,3 @@
+defmodule KolabChat.Web.ChatView do
+  use KolabChat.Web, :view
+end
diff --git a/web/views/error_helpers.ex b/lib/kolab_chat/web/views/error_helpers.ex
rename from web/views/error_helpers.ex
rename to lib/kolab_chat/web/views/error_helpers.ex
--- a/web/views/error_helpers.ex
+++ b/lib/kolab_chat/web/views/error_helpers.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.ErrorHelpers do
+defmodule KolabChat.Web.ErrorHelpers do
   @moduledoc """
   Conveniences for translating and building error messages.
   """
diff --git a/web/views/error_view.ex b/lib/kolab_chat/web/views/error_view.ex
rename from web/views/error_view.ex
rename to lib/kolab_chat/web/views/error_view.ex
--- a/web/views/error_view.ex
+++ b/lib/kolab_chat/web/views/error_view.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.ErrorView do
+defmodule KolabChat.Web.ErrorView do
   use KolabChat.Web, :view
 
   def render("404.html", _assigns) do
diff --git a/lib/kolab_chat/web/views/layout_view.ex b/lib/kolab_chat/web/views/layout_view.ex
new file mode 100644
--- /dev/null
+++ b/lib/kolab_chat/web/views/layout_view.ex
@@ -0,0 +1,3 @@
+defmodule KolabChat.Web.LayoutView do
+  use KolabChat.Web, :view
+end
diff --git a/lib/kolab_chat/web/views/page_view.ex b/lib/kolab_chat/web/views/page_view.ex
new file mode 100644
--- /dev/null
+++ b/lib/kolab_chat/web/views/page_view.ex
@@ -0,0 +1,3 @@
+defmodule KolabChat.Web.PageView do
+  use KolabChat.Web, :view
+end
diff --git a/web/web.ex b/lib/kolab_chat/web/web.ex
rename from web/web.ex
rename to lib/kolab_chat/web/web.ex
--- a/web/web.ex
+++ b/lib/kolab_chat/web/web.ex
@@ -18,18 +18,19 @@
 
   def controller do
     quote do
-      use Phoenix.Controller
+      use Phoenix.Controller, namespace: KolabChat.Web
 
       alias KolabChat.Database
 
-      import KolabChat.Router.Helpers
-      import KolabChat.Gettext
+      import KolabChat.Web.Router.Helpers
+      import KolabChat.Web.Gettext
     end
   end
 
   def view do
     quote do
-      use Phoenix.View, root: "web/templates"
+      use Phoenix.View, root: "lib/kolab_chat/web/templates",
+                        namespace: KolabChat.Web
 
       # Import convenience functions from controllers
       import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]
@@ -37,9 +38,9 @@
       # Use all HTML functionality (forms, tags, etc)
       use Phoenix.HTML
 
-      import KolabChat.Router.Helpers
-      import KolabChat.ErrorHelpers
-      import KolabChat.Gettext
+      import KolabChat.Web.Router.Helpers
+      import KolabChat.Web.ErrorHelpers
+      import KolabChat.Web.Gettext
     end
   end
 
@@ -54,9 +55,9 @@
       use Phoenix.Channel
 
       alias KolabChat.Database
-      alias KolabChat.Presence
+      alias KolabChat.Web.Presence
 
-      import KolabChat.Gettext
+      import KolabChat.Web.Gettext
     end
   end
 
diff --git a/mix.exs b/mix.exs
--- a/mix.exs
+++ b/mix.exs
@@ -23,14 +23,14 @@
   end
 
   # Specifies which paths to compile per environment.
-  defp elixirc_paths(:test), do: ["lib", "web", "test/support"]
-  defp elixirc_paths(_),     do: ["lib", "web"]
+  defp elixirc_paths(:test), do: ["lib", "test/support"]
+  defp elixirc_paths(_),     do: ["lib"]
 
   # Specifies your project dependencies.
   #
   # Type `mix help deps` for examples and options.
   defp deps do
-    [{:phoenix, "~> 1.2.1"},
+    [{:phoenix, "~> 1.3.0-rc"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_html, "~> 2.6"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
diff --git a/mix.lock b/mix.lock
--- a/mix.lock
+++ b/mix.lock
@@ -1,16 +1,16 @@
-%{"amnesia": {:hex, :amnesia, "0.2.5", "3202e0b01e380671274caea32fbe78bbd1989e1215215f41a2d97583e5c7d163", [], [{:exquisite, "~> 0.1.6", [hex: :exquisite, optional: false]}]},
+%{"amnesia": {:hex, :amnesia, "0.2.5", "3202e0b01e380671274caea32fbe78bbd1989e1215215f41a2d97583e5c7d163", [:mix], [{:exquisite, "~> 0.1.6", [hex: :exquisite, optional: false]}]},
   "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], []},
   "cowboy": {:hex, :cowboy, "1.1.2", "61ac29ea970389a88eca5a65601460162d370a70018afe6f949a29dca91f3bb0", [:rebar3], [{:cowlib, "~> 1.0.2", [hex: :cowlib, optional: false]}, {:ranch, "~> 1.3.2", [hex: :ranch, optional: false]}]},
-  "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [], []},
+  "cowlib": {:hex, :cowlib, "1.0.2", "9d769a1d062c9c3ac753096f868ca121e2730b9a377de23dec0f7e08b1df84ee", [:make], []},
   "credo": {:hex, :credo, "0.6.1", "a941e2591bd2bd2055dc92b810c174650b40b8290459c89a835af9d59ac4a5f8", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, optional: false]}]},
-  "exquisite": {:hex, :exquisite, "0.1.8", "ee8f56aae477287ce5e7dfcbc163a420cccbb73e680a6d80a09203e9ef514fa4", [], []},
-  "fs": {:hex, :fs, "0.9.2", "ed17036c26c3f70ac49781ed9220a50c36775c6ca2cf8182d123b6566e49ec59", [], []},
-  "gettext": {:hex, :gettext, "0.13.1", "5e0daf4e7636d771c4c71ad5f3f53ba09a9ae5c250e1ab9c42ba9edccc476263", [], []},
+  "exquisite": {:hex, :exquisite, "0.1.8", "ee8f56aae477287ce5e7dfcbc163a420cccbb73e680a6d80a09203e9ef514fa4", [:mix], []},
+  "fs": {:hex, :fs, "0.9.2", "ed17036c26c3f70ac49781ed9220a50c36775c6ca2cf8182d123b6566e49ec59", [:rebar], []},
+  "gettext": {:hex, :gettext, "0.13.1", "5e0daf4e7636d771c4c71ad5f3f53ba09a9ae5c250e1ab9c42ba9edccc476263", [:mix], []},
   "mime": {:hex, :mime, "1.1.0", "01c1d6f4083d8aa5c7b8c246ade95139620ef8effb009edde934e0ec3b28090a", [:mix], []},
-  "phoenix": {:hex, :phoenix, "1.2.1", "6dc592249ab73c67575769765b66ad164ad25d83defa3492dc6ae269bd2a68ab", [], [{:cowboy, "~> 1.0", [hex: :cowboy, optional: true]}, {:phoenix_pubsub, "~> 1.0", [hex: :phoenix_pubsub, optional: false]}, {:plug, "~> 1.1", [hex: :plug, optional: false]}, {:poison, "~> 1.5 or ~> 2.0", [hex: :poison, optional: false]}]},
-  "phoenix_html": {:hex, :phoenix_html, "2.9.3", "1b5a2122cbf743aa242f54dced8a4f1cc778b8bd304f4b4c0043a6250c58e258", [], [{:plug, "~> 1.0", [hex: :plug, optional: false]}]},
-  "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.0.8", "4333f9c74190f485a74866beff2f9304f069d53f047f5fbb0fb8d1ee4c495f73", [], [{:fs, "~> 0.9.1", [hex: :fs, optional: false]}, {:phoenix, "~> 1.0 or ~> 1.2-rc", [hex: :phoenix, optional: false]}]},
-  "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.0.1", "c10ddf6237007c804bf2b8f3c4d5b99009b42eca3a0dfac04ea2d8001186056a", [], []},
-  "plug": {:hex, :plug, "1.3.3", "d9be189924379b4e9d470caef87380d09549aea1ceafe6a0d41292c8c317c923", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]},
-  "poison": {:hex, :poison, "2.2.0", "4763b69a8a77bd77d26f477d196428b741261a761257ff1cf92753a0d4d24a63", [], []},
+  "phoenix": {:hex, :phoenix, "1.3.0-rc.1", "0d04948a4bd24823f101024c07b6a4d35e58f1fd92a465c1bc75dd37acd1041a", [:mix], [{:cowboy, "~> 1.0", [hex: :cowboy, optional: true]}, {:phoenix_pubsub, "~> 1.0", [hex: :phoenix_pubsub, optional: false]}, {:plug, "~> 1.3.2 or ~> 1.4", [hex: :plug, optional: false]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, optional: false]}]},
+  "phoenix_html": {:hex, :phoenix_html, "2.9.3", "1b5a2122cbf743aa242f54dced8a4f1cc778b8bd304f4b4c0043a6250c58e258", [:mix], [{:plug, "~> 1.0", [hex: :plug, optional: false]}]},
+  "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.0.8", "4333f9c74190f485a74866beff2f9304f069d53f047f5fbb0fb8d1ee4c495f73", [:mix], [{:fs, "~> 0.9.1", [hex: :fs, optional: false]}, {:phoenix, "~> 1.0 or ~> 1.2-rc", [hex: :phoenix, optional: false]}]},
+  "phoenix_pubsub": {:hex, :phoenix_pubsub, "1.0.1", "c10ddf6237007c804bf2b8f3c4d5b99009b42eca3a0dfac04ea2d8001186056a", [:mix], []},
+  "plug": {:hex, :plug, "1.3.4", "b4ef3a383f991bfa594552ded44934f2a9853407899d47ecc0481777fb1906f6", [:mix], [{:cowboy, "~> 1.0.1 or ~> 1.1", [hex: :cowboy, optional: true]}, {:mime, "~> 1.0", [hex: :mime, optional: false]}]},
+  "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], []},
   "ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], []}}
diff --git a/test/controllers/page_controller_test.exs b/test/controllers/page_controller_test.exs
--- a/test/controllers/page_controller_test.exs
+++ b/test/controllers/page_controller_test.exs
@@ -1,5 +1,5 @@
-defmodule KolabChat.PageControllerTest do
-  use KolabChat.ConnCase
+defmodule KolabChat.Web.PageControllerTest do
+  use KolabChat.Web.ConnCase
 
   test "GET /", %{conn: conn} do
     conn = get conn, "/"
diff --git a/test/support/channel_case.ex b/test/support/channel_case.ex
--- a/test/support/channel_case.ex
+++ b/test/support/channel_case.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.ChannelCase do
+defmodule KolabChat.Web.ChannelCase do
   @moduledoc """
   This module defines the test case to be used by
   channel tests.
@@ -27,7 +27,7 @@
 
 
       # The default endpoint for testing
-      @endpoint KolabChat.Endpoint
+      @endpoint KolabChat.Web.Endpoint
     end
   end
 
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex
--- a/test/support/conn_case.ex
+++ b/test/support/conn_case.ex
@@ -1,4 +1,4 @@
-defmodule KolabChat.ConnCase do
+defmodule KolabChat.Web.ConnCase do
   @moduledoc """
   This module defines the test case to be used by
   tests that require setting up a connection.
@@ -25,10 +25,10 @@
       import Ecto.Changeset
       import Ecto.Query
 
-      import KolabChat.Router.Helpers
+      import KolabChat.Web.Router.Helpers
 
       # The default endpoint for testing
-      @endpoint KolabChat.Endpoint
+      @endpoint KolabChat.Web.Endpoint
     end
   end
 
diff --git a/test/views/error_view_test.exs b/test/views/error_view_test.exs
--- a/test/views/error_view_test.exs
+++ b/test/views/error_view_test.exs
@@ -1,21 +1,21 @@
-defmodule KolabChat.ErrorViewTest do
-  use KolabChat.ConnCase, async: true
+defmodule KolabChat.Web.ErrorViewTest do
+  use KolabChat.Web.ConnCase, async: true
 
   # Bring render/3 and render_to_string/3 for testing custom views
   import Phoenix.View
 
   test "renders 404.html" do
-    assert render_to_string(KolabChat.ErrorView, "404.html", []) ==
+    assert render_to_string(KolabChat.Web.ErrorView, "404.html", []) ==
            "Page not found"
   end
 
   test "render 500.html" do
-    assert render_to_string(KolabChat.ErrorView, "500.html", []) ==
+    assert render_to_string(KolabChat.Web.ErrorView, "500.html", []) ==
            "Internal server error"
   end
 
   test "render any other" do
-    assert render_to_string(KolabChat.ErrorView, "505.html", []) ==
+    assert render_to_string(KolabChat.Web.ErrorView, "505.html", []) ==
            "Internal server error"
   end
 end
diff --git a/test/views/layout_view_test.exs b/test/views/layout_view_test.exs
--- a/test/views/layout_view_test.exs
+++ b/test/views/layout_view_test.exs
@@ -1,3 +1,3 @@
-defmodule KolabChat.LayoutViewTest do
-  use KolabChat.ConnCase, async: true
+defmodule KolabChat.Web.LayoutViewTest do
+  use KolabChat.Web.ConnCase, async: true
 end
diff --git a/test/views/page_view_test.exs b/test/views/page_view_test.exs
--- a/test/views/page_view_test.exs
+++ b/test/views/page_view_test.exs
@@ -1,3 +1,3 @@
-defmodule KolabChat.PageViewTest do
-  use KolabChat.ConnCase, async: true
+defmodule KolabChat.Web.PageViewTest do
+  use KolabChat.Web.ConnCase, async: true
 end
diff --git a/web/views/chat_view.ex b/web/views/chat_view.ex
deleted file mode 100644
--- a/web/views/chat_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule KolabChat.ChatView do
-  use KolabChat.Web, :view
-end
diff --git a/web/views/layout_view.ex b/web/views/layout_view.ex
deleted file mode 100644
--- a/web/views/layout_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule KolabChat.LayoutView do
-  use KolabChat.Web, :view
-end
diff --git a/web/views/page_view.ex b/web/views/page_view.ex
deleted file mode 100644
--- a/web/views/page_view.ex
+++ /dev/null
@@ -1,3 +0,0 @@
-defmodule KolabChat.PageView do
-  use KolabChat.Web, :view
-end