diff --git a/include/MatrixClient.h b/include/MatrixClient.h
index 2520c6bc4fe2a1d380364f8306c0efc929b713d9..741294c4a0d47a00f717256ff4146c6d97a4fbba 100644
--- a/include/MatrixClient.h
+++ b/include/MatrixClient.h
@@ -44,7 +44,7 @@ public:
 	void fetchOwnAvatar(const QUrl &avatar_url);
 	void downloadImage(const QString &event_id, const QUrl &url);
 
-	inline QString getHomeServer();
+	inline QUrl getHomeServer();
 	inline int transactionId();
 	inline void incrementTransactionId();
 
@@ -114,7 +114,7 @@ private:
 	QString api_url_;
 
 	// The Matrix server used for communication.
-	QString server_;
+	QUrl server_;
 
 	// The access token used for authentication.
 	QString token_;
@@ -126,7 +126,7 @@ private:
 	QString next_batch_;
 };
 
-inline QString MatrixClient::getHomeServer()
+inline QUrl MatrixClient::getHomeServer()
 {
 	return server_;
 }
@@ -138,7 +138,7 @@ inline int MatrixClient::transactionId()
 
 inline void MatrixClient::setServer(const QString &server)
 {
-	server_ = "https://" + server;
+	server_ = QUrl(QString("https://%1").arg(server));
 }
 
 inline void MatrixClient::setAccessToken(const QString &token)
diff --git a/src/ImageItem.cc b/src/ImageItem.cc
index e0e2f977325385286449c4f985e15413799c1bf8..514c28aa8ca51cf1be367a93b81dee5daf3e7bf9 100644
--- a/src/ImageItem.cc
+++ b/src/ImageItem.cc
@@ -49,7 +49,7 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, const events::MessageE
 	}
 
 	QString media_params = url_parts[1];
-	url_ = QString("%1/_matrix/media/r0/download/%2").arg(client_.data()->getHomeServer(), media_params);
+	url_ = QString("%1/_matrix/media/r0/download/%2").arg(client_.data()->getHomeServer().toString(), media_params);
 
 	client_.data()->downloadImage(event.eventId(), url_);
 
diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc
index 86d43b1fdf89fdcaf52ced50b1b831737283fd25..ac321d9442de56a0c8241d246132ade5a2b2d01a 100644
--- a/src/MatrixClient.cc
+++ b/src/MatrixClient.cc
@@ -94,9 +94,7 @@ void MatrixClient::onLoginResponse(QNetworkReply *reply)
 
 	try {
 		response.deserialize(json);
-		emit loginSuccess(response.getUserId(),
-				  response.getHomeServer(),
-				  response.getAccessToken());
+		emit loginSuccess(response.getUserId(), server_.host(), response.getAccessToken());
 	} catch (DeserializationException &e) {
 		qWarning() << "Malformed JSON response" << e.what();
 		emit loginError("Malformed response. Possibly not a Matrix server");
@@ -548,7 +546,7 @@ void MatrixClient::fetchRoomAvatar(const QString &roomid, const QUrl &avatar_url
 	}
 
 	QString media_params = url_parts[1];
-	QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer(), media_params);
+	QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer().toString(), media_params);
 
 	QNetworkRequest avatar_request(media_url);
 
@@ -576,7 +574,7 @@ void MatrixClient::fetchOwnAvatar(const QUrl &avatar_url)
 	}
 
 	QString media_params = url_parts[1];
-	QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer(), media_params);
+	QString media_url = QString("%1/_matrix/media/r0/download/%2").arg(getHomeServer().toString(), media_params);
 
 	QNetworkRequest avatar_request(media_url);