private function getNextPageFromList($possibleReturnTypes, $definingClass)
	{
		foreach ($possibleReturnTypes as $returnType)
		{
			// \Foo ==> \Foo
			// Foo ==> \ClassNamespace\Foo (if it exists)
			// Foo ==> \Foo (if \ClassNamespace\Foo doesn't exist)
			if ($returnType{0} !== '\\')
			{
				$absolutizedReturnType = '\\' . ClassType::from($definingClass)->getNamespaceName() . '\\' . $returnType;
				$returnType = class_exists($absolutizedReturnType) ? $absolutizedReturnType : '\\' . $returnType;
			}

			if ($this instanceof $returnType)
			{
				$nextPage = $this;
			}
			else
			{
				if (!is_subclass_of($returnType, 'Se34\IPageComponent'))
				{
					$backtrace = debug_backtrace();
					$className = get_class($this);
					if ($backtrace[1]['object'] === $this && $backtrace[1]['function'] === '__call')
					{
						$method = "magic method $className::{$backtrace[2]['function']}()";
					}
					else
					{
						$method = "method $className::{$backtrace[1]['function']}()";
					}
					throw new \UnexpectedValueException(__METHOD__ . ": Return type of $method - '$returnType' - " . (class_exists($returnType) ? 'is not an instance of IPageComponent.' : " doesn't exist."));
				}
				$nextPage = new $returnType($this->session);
			}
			try
			{
				$nextPage->checkState();
				return $nextPage;
			}
			catch (\Se34\ViewStateException $viewStateException)
			{
				;
			}
		}
		throw $viewStateException;
	}