protected function _init() {
		parent::_init();

		$req =& $this->_request;
		$ctx =& $this->_context;
		$classes =& $this->_classes;
		$h = $this->_view ? $this->_view->outputFilters['h'] : null;

		$this->_handlers += [
			'url' => function($url, $ref, array $options = []) use (&$classes, &$req, $h) {
				$url = $classes['router']::match($url ?: '', $req, $options);
				return $h ? str_replace('&amp;', '&', $h($url)) : $url;
			},
			'path' => function($path, $ref, array $options = []) use (&$classes, &$req, $h) {
				$defaults = ['base' => $req ? $req->env('base') : ''];
				$type = 'generic';

				if (is_array($ref) && $ref[0] && $ref[1]) {
					list($helper, $methodRef) = $ref;
					list($class, $method) = explode('::', $methodRef);
					$type = $helper->contentMap[$method];
				}
				$path = $classes['media']::asset($path, $type, $options + $defaults);
				return $h ? $h($path) : $path;
			},
			'options' => '_attributes',
			'title'   => 'escape',
			'value'   => 'escape',
			'scripts' => function($scripts) use (&$ctx) {
				return "\n\t" . join("\n\t", $ctx['scripts']) . "\n";
			},
			'styles' => function($styles) use (&$ctx) {
				return "\n\t" . join("\n\t", $ctx['styles']) . "\n";
			},
			'head' => function($head) use (&$ctx) {
				return "\n\t" . join("\n\t", $ctx['head']) . "\n";
			}
		];
		unset($this->_config['view']);
	}