diff --git a/lib/rl_repo.ex b/lib/rl_repo.ex
index 62aed95..3bc61a7 100644
--- a/lib/rl_repo.ex
+++ b/lib/rl_repo.ex
@@ -13,8 +13,14 @@ defmodule RlRepo do
 
     Logger.info("Listening on port #{port}")
 
-    # Spawn RepoLookup
+    # Spawn the router.
+    Task.Supervisor.start_child(Router, fn ->
+      Router.start()
+    end)
 
+
+
+    # Spawn RepoLookup
     Task.Supervisor.start_child(RlRepo.QueryServices, fn ->
       RepoLookup.start_repo_lookup()
     end)
diff --git a/lib/rl_repo/application.ex b/lib/rl_repo/application.ex
index f97509f..38dcb39 100644
--- a/lib/rl_repo/application.ex
+++ b/lib/rl_repo/application.ex
@@ -11,6 +11,7 @@ defmodule RlRepo.Application do
 
     children = [
       {Task.Supervisor, name: RlRepo.QueryServices},
+      {Task.Supervisor, name: Router},
 
       # Starts a worker by calling: RlRepo.Worker.start_link(arg)
       # {RlRepo.Worker, arg}
diff --git a/lib/router/router.ex b/lib/router/router.ex
new file mode 100644
index 0000000..4e59b24
--- /dev/null
+++ b/lib/router/router.ex
@@ -0,0 +1,25 @@
+defmodule Router do
+  require Logger
+
+  def start() do
+    info = %{routes: %{}}
+    Process.register(self(), :router)
+
+    loop_router(info)
+  end
+
+  defp loop_router(info) do
+    receive do
+      {:route, value, return_pid} ->
+        Logger.info "Route recieved #{value}"
+        send(return_pid, {:route, :exists, "template example."})
+        # code
+      {:route, :register, route, template} ->
+        Logger.info "Route registration attempt."
+    end
+
+
+
+    loop_router(info)
+  end
+end
diff --git a/lib/router/router_api.ex b/lib/router/router_api.ex
new file mode 100644
index 0000000..2458799
--- /dev/null
+++ b/lib/router/router_api.ex
@@ -0,0 +1,15 @@
+defmodule Router.RouterApi do
+  require Logger
+
+  # Search for a route.
+  def lookup_route(route) do
+    send(:router, {:route, route, self()})
+
+    receive do
+      {:route, :exists, template} ->
+        Logger.info "Found route."
+        # code
+    end
+
+  end
+end