protected function start()
    {
        $controllerClass = $this->calculateControllerClassFromRights();
        $controller = $this->loadController($controllerClass); // try to instantiate the controller
        if (!$controller) {
            if ($this->logMissingPages) {
                $this->alert('Invalid controller ' . $controllerClass . '!');
            }
            return; // stop execution if it's  an invalid controller
        }
        $controller->setActiveAction($this->request()->getAction());
        if (!method_exists($controller, 'action' . ucfirst($controller->getActiveAction()))) { //check if action exists;
            if ($this->logMissingPages) {
                $this->alert('Action ' . $this->request()->getAction() . ' not found!', array(
                    'requestedController' => $this->request()->getController(),
                    'requestedModule' => $this->request()->getModule()
                ));
            }
            $controller = $this->loadController($this->getPageNotFound());
            if (!$controller) {
                $this->alert('Invalid controller ' . $controllerClass . '!');
                return; // stop execution if it's  an invalid controller
            }
        }

        $controller->setActiveAction($this->request()->getAction())->setRequest($this->request());

        if (!$controller->canRun()) {
            $controller = $this->loadController($this->getPageNotFound());
            if (!$controller) {
                $this->alert('Invalid controller ' . $controllerClass . '!');
                return; // stop execution if it's  an invalid controller
            }
            $controller->setActiveAction($this->request()->getAction())->setRequest($this->request());
        }

        $this->_controller = $controller;

        $path = dirname(dirname($this->autoload()->findFile(get_class($controller)))) . DIRECTORY_SEPARATOR;
        if ($path != $this->request()->getModulePath()) {
            $this->request()->setModulePath($path);
        }

        $controller->run();

    }