   end
 
   defp add_route(verb, path, controller, action, options) do
-    route =
-      quote do
-        route = Scope.route(__MODULE__, unquote(verb), unquote(path), unquote(controller),
-                                        unquote(action), unquote(options))
-        exprs = Route.exprs(route)
-        @phoenix_routes {route, exprs}
-      end
-
-    definition =
-      quote unquote: false do
-        defp match(var!(conn), unquote(route.verb), unquote(exprs.path), unquote(exprs.host)) do
-          unquote(exprs.dispatch)
-        end
-      end
-
-    quote do
-      try do
-        unquote(route)
-        unquote(definition)
-      after
-        :ok
-      end
+    quote do
+      var!(add_route, Phoenix.Router).(
+        Scope.route(__MODULE__, unquote(verb), unquote(path), unquote(controller),
+                                unquote(action), unquote(options))
+      )
     end
   end
 

      @phoenix_pipeline nil
      Phoenix.Router.Scope.init(__MODULE__)
      @before_compile unquote(__MODULE__)
    end
  end


  defmacro __using__(_) do
    quote do
      unquote(prelude())
      unquote(defs())
      unquote(plug())
    end
  end
