       else
         handler require path
 
-    # Handler for the controller lazy-loading
-    controllerLoaded: (controllerName, action, params, options,
-                       ControllerConstructor) ->
-
+    controllerLoaded: (controllerName, action, params, options, ControllerConstructor) ->
       # Shortcuts for the old controller
       currentControllerName = @currentControllerName or null
-      currentController     = @currentController     or null
+      # Initialize the new controller
+      # Passing the params and the old controller name
+      controller = new ControllerConstructor params, currentControllerName
+
+      method = if _.isObject controller.before
+        'executeFilters'
+      else
+        'executeAction'
+
+      this[method](controller, controllerName, action, params, options)
+
+    # Handler for the controller lazy-loading
+    executeAction: (controller, controllerName, action, params, options) ->
+      # Shortcuts for the old controller
+      currentControllerName   = @currentControllerName or null
+      currentController       = @currentController     or null
+
+      @previousControllerName = currentControllerName
 
       # Dispose the current controller
       if currentController

        controllerName: @currentControllerName
        params: @currentParams

    # Change the URL to the new controller using the router
    adjustURL: (controller, params, options) ->
      if typeof options.path is 'string'

        # Passing the params and the new controller name
        currentController.dispose params, controllerName

      # Call the specific controller action
      # Passing the params and the old controller name
      controller[action] params, currentControllerName
