public function join( $relative )
		{
			$uri = new phpUri( $relative );
			switch ( TRUE )
			{
				case !empty( $uri->scheme ):
					break;

				case !empty( $uri->authority ):
					break;

				case empty( $uri->path ):
					$uri->path = $this->path;
					if ( empty( $uri->query ) )
					{
						$uri->query = $this->query;
					}
					break;

				case strpos( $uri->path, '/' ) === 0:
					break;

				default:
					$base_path = $this->path;
					if ( strpos( $base_path, '/' ) === FALSE )
					{
						$base_path = '';
					}
					else
					{
						$base_path = preg_replace( '/\/[^\/]+$/', '/', $base_path );
					}
					if ( empty( $base_path ) && empty( $this->authority ) )
					{
						$base_path = '/';
					}
					$uri->path = $base_path . $uri->path;
			}

			if ( empty( $uri->scheme ) )
			{
				$uri->scheme = $this->scheme;
				if ( empty( $uri->authority ) )
				{
					$uri->authority = $this->authority;
				}
			}

			return $uri->to_str();
		}