protected function _step(array $step, array $params, array &$data, array &$options = []) {
		$step += ['path' => null, 'capture' => null];
		$_renderer = $this->_renderer;
		$_loader = $this->_loader;
		$filters = $this->outputFilters;
		$params = compact('step', 'params', 'options') + [
			'data' => $data + $filters,
			'loader' => $_loader,
			'renderer' => $_renderer
		];

		$result = Filters::run($this, __FUNCTION__, $params, function($params) {
			$template = $params['loader']->template($params['step']['path'], $params['params']);
			return $params['renderer']->render($template, $params['data'], $params['options']);
		});

		if (is_array($step['capture'])) {
			switch (key($step['capture'])) {
				case 'context':
					$options['context'][current($step['capture'])] = $result;
				break;
				case 'data':
					$data[current($step['capture'])] = $result;
				break;
			}
		}
		return $result;
	}