public function getBlock($pBlock, array $pVars = array())
	{
		if (! preg_match('#^([a-z0-9]+)/([a-z0-9_-]+)$#', $pBlock, $blockPathInfos)
			or ! isset($blockPathInfos[1])
			or ! isset($blockPathInfos[2])) {
			throw new Exception("Block identifier '$pBlock' is not correct");
		}

        $this->_blocks[] = array(
        	'group' => $blockPathInfos[1],
        	'block' => $blockPathInfos[2]
        );

        $blockConfig = Agl::app()->getConfig('core-layout/blocks/' . $blockPathInfos[1] . '#' . $blockPathInfos[2]);
        if ($blockConfig === NULL) {
        	$blockConfig = array();
        }

		if (! BlockAbstract::checkAcl($blockPathInfos[1], $blockPathInfos[2])) {
			return '';
		}

		$isCacheEnabled = Agl::app()->isCacheEnabled();

		if ($isCacheEnabled) {
			$cacheInfo = BlockAbstract::getCacheInfo($blockPathInfos, $blockConfig);

			if (! empty($cacheInfo)
				and $cacheInstance = Agl::getCache()
				and $cacheInstance->has($cacheInfo[CacheInterface::CACHE_KEY])) {
				return $cacheInstance->get($cacheInfo[CacheInterface::CACHE_KEY]);
			}
		}

		$blockPath = APP_PATH
					. Agl::APP_PHP_DIR
                    . BlockInterface::APP_PHP_DIR
                    . DS
                    . $blockPathInfos[1]
                    . DS
                    . $blockPathInfos[2]
                    . Agl::PHP_EXT;

        if (file_exists($blockPath)) {
            $className = $blockPathInfos[1] . ucfirst($blockPathInfos[2]) . BlockInterface::APP_SUFFIX;
            $blockModel = Agl::getInstance($className);
        } else {
            $blockModel = new Block();
        }

        ob_start();

        $blockModel
			->setFile($blockPathInfos[1] . DS . $blockPathInfos[2] . Agl::PHP_EXT)
			->setVars($pVars)
			->render();

		$content = ob_get_clean();

		if ($isCacheEnabled and ! empty($cacheInfo)) {
        	$cacheInstance->set($cacheInfo[CacheInterface::CACHE_KEY], $content, $cacheInfo[ConfigInterface::CONFIG_CACHE_TTL_NAME]);
		}

		return $content;
	}