public function process($object, UriBuilder $uriBuilder, $metaDataProcessorGroup = NULL) {

		$formerConfigurationStackAttributes = array(
			'cacheTagService',
			'metaDataProcessors',
			'metaDataProcessorStorage',
			'uriBuilder',
			'propertyPath',
		);

		/*
		 * Remember previous state
		 */
		array_unshift($this->formerConfigurationStack, []);
		foreach ($formerConfigurationStackAttributes as $formerConfigurationStackAttribute) {
			$this->formerConfigurationStack[0][$formerConfigurationStackAttribute] = $this->{$formerConfigurationStackAttribute};
		}

		/*
		 * Initialize
		 */
		$this->uriBuilder = $uriBuilder;
		$this->propertyPath = [];
		$this->initializeMetaDataProcessors($metaDataProcessorGroup);

		/*
		if ($cacheTagService) {
			$this->cacheTagService = $cacheTagService;
			$this->cacheTagService->openEnvironment();
		}
		*/

		$result = $this->processInternal($object);
		$result = $this->applyMetaData($result, $object);

		/*
		if ($cacheTagService) {
			$this->cacheTagService->closeEnvironment();
			$this->cacheTagService = NULL;
		}
		*/

		/*
		 * Reset previous state
		 */
		foreach ($formerConfigurationStackAttributes as $formerConfigurationStackAttribute) {
			$this->{$formerConfigurationStackAttribute} = $this->formerConfigurationStack[0][$formerConfigurationStackAttribute];
		}
		array_shift($this->formerConfigurationStack);

		return $result;
	}