diff --git a/requirements.txt b/requirements.txt
index 9e2900fdf45a91b3dfa1f47c981da15038c60ce5..85302da5f3820637d890ec02f5f8a06402f443d2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,4 +3,4 @@ https://gitlab.matrix.org/matrix-org/olm/-/archive/3.1.0/olm-3.1.0.zip -DBUILD_S
 nlohmann/json
 gabime/spdlog -DSPDLOG_BUILD_BENCH=OFF -DSPDLOG_BUILD_EXAMPLES=OFF -DSPDLOG_BUILD_TESTS=OFF
 boost,https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.bz2 --cmake boost -DBOOST_WITH_ATOMIC=1 -DBOOST_WITH_ATOMIC=1 -DBOOST_WITH_CHRONO=1 -DBOOST_WITH_DATE_TIME=1 -DBOOST_WITH_IOSTREAMS=1 -DBOOST_WITH_RANDOM=1 -DBOOST_WITH_REGEX=1 -DBOOST_WITH_SYSTEM=1 -DBOOST_WITH_THREAD=1 -DBUILD_SHARED_LIBS=OFF
-MonokelPinguin/mtxclient@0.3.0-dev -DBUILD_LIB_EXAMPLES=off -DBUILD_LIB_TESTS=OFF -DBUILD_SHARED_LIBS=OFF
+Nheko-Reborn/mtxclient@0.3.0-dev -DBUILD_LIB_EXAMPLES=off -DBUILD_LIB_TESTS=OFF -DBUILD_SHARED_LIBS=OFF
diff --git a/src/login.cpp b/src/login.cpp
index 4f3e22b2fe79d832fd00b82c01f45ec3614e4442..f2c234e785a35ba65e61797c3c8c60cfa3bbcb28 100644
--- a/src/login.cpp
+++ b/src/login.cpp
@@ -5,6 +5,7 @@
 #include <mtx/identifiers.hpp>
 
 #include "client.h"
+#include "debug_out.h"
 #include "settings.h"
 
 Login::Login(QObject *parent) : QObject(parent) {}
@@ -41,7 +42,31 @@ void Login::mxidEntered(QString mxid) {
     }
 
     QString server = QString::fromStdString(user.hostname());
-    this->validateServer(server);
+
+    http::client().well_known([this, server](const mtx::responses::WellKnown &well_known, mtx::http::RequestErr err) {
+        if (err) {
+            using namespace boost::beast::http;
+
+            if (err->status_code == status::not_found) {
+                qDebug() << "Autodiscovery: No .well-known.";
+                this->validateServer(server);
+                return;
+            }
+
+            if (!err->parse_error.empty()) {
+                emit homeserverInvalid(server, tr("Autodiscovery failed. Received malformed response."));
+                qDebug() << "Autodiscovery failed. Received malformed response." << *err;
+                return;
+            }
+
+            emit homeserverInvalid(server, tr("Autodiscovery failed. Unknown error when requesting .well-known."));
+            qDebug() << "Autodiscovery failed. Unknown error when requesting .weel-known.";
+            return;
+        }
+
+        qDebug() << "Autodiscovery: Discovered '" << QString::fromStdString(well_known.homeserver.base_url) << "'";
+        this->validateServer(QString::fromStdString(well_known.homeserver.base_url));
+    });
 }
 
 void Login::homeserverEntered(QString server) { this->validateServer(server); }
@@ -122,11 +147,17 @@ void Login::login(QString mxid, QString password, QString server) {
                              qDebug() << "Access token:" << QString::fromStdString(response.access_token)
                                       << " , device: " << QString::fromStdString(response.device_id);
 
+                             if (response.well_known) {
+                                 qDebug() << "Login response requested to migrate to: "
+                                          << QString::fromStdString(response.well_known->homeserver.base_url);
+                                 http::client().set_server(response.well_known->homeserver.base_url);
+                             }
+
                              Settings s;
                              s.access_token(response.access_token);
                              s.device_id(response.device_id);
                              s.user(response.user_id);
-                             s.server(homeserver);
+                             s.server(http::client().server());
                              s.server_port(http::client().port());
 
                              emit loginSuccess();