public function makeAbsolute($base)
	{
		if (is_string($base)) {
			$baseUrl = new Url($base);
		} else if ($base instanceof Url) {
			$baseUrl = $base;
		} else {
			throw new InvalidUrlException();
		}
		if ($baseUrl->isEmpty()) {
			throw new InvalidUrlException();
		}
		if (! $baseUrl->isAbsolute()) {
			throw new InvalidUrlException(sprintf('Cannot make absolute URL from "%s" because the given base URL "%s" is not absolute.', $this, $baseUrl));
		}
		if ($this->isAbsolute()) {
			if ($this->scheme->isEmpty()) {
				$this->scheme->set($baseUrl->scheme);
			}
			return $this;
		}
		if (! $this->path->isAbsolute()) {
			$relPath = Path::info($this->path->get());
			$baseDir = $baseUrl->path->isEmpty() ? '/' : Path::info($baseUrl->path->get())->dir();
			$absPath = $relPath->abs($baseDir)->normalize();
			$this->path->set($absPath);
		}
		$this->scheme->set($baseUrl->scheme);
		$this->credentials->username = $baseUrl->credentials->username;
		$this->credentials->password = $baseUrl->credentials->password;
		$this->host->set($baseUrl->host);
		$this->port->set($baseUrl->port);
		return $this;
	}