public function getMenu(DTO $dto=null)
    {
        if (!$menu = $this->SystemCache->get('cms-menu')) {
            $menu = array();

            if ($dto === null)
                $dto = new DTO();

            $dto->setOrderBy('SortOrder', 'ASC');
            $dto->setParameter('FlattenChildren', false);
            $dto->setParameter('Enabled', true);

            $menu = $this->dao->findAll($dto)->getResults();

            if (count($menu) < 1)
                throw new Exception('No menu items exist on the root level.');

            $this->SystemCache->put('cms-menu', $menu, 0);
        }

        return $menu;
    }