diff --git a/src/citra_qt/multiplayer/client_room.cpp b/src/citra_qt/multiplayer/client_room.cpp
index 8e37426bd..60f488587 100644
--- a/src/citra_qt/multiplayer/client_room.cpp
+++ b/src/citra_qt/multiplayer/client_room.cpp
@@ -49,44 +49,9 @@ void ClientRoomWindow::OnRoomUpdate(const Network::RoomInformation& info) {
 }
 
 void ClientRoomWindow::OnStateChange(const Network::RoomMember::State& state) {
-    switch (state) {
-    case Network::RoomMember::State::Idle:
-        NGLOG_INFO(Network, "State: Idle");
-        break;
-    case Network::RoomMember::State::Joining:
-        NGLOG_INFO(Network, "State: Joining");
-        break;
-    case Network::RoomMember::State::Joined:
-        NGLOG_INFO(Network, "State: Joined");
+    if (state == Network::RoomMember::State::Joined) {
         ui->chat->Clear();
         ui->chat->AppendStatusMessage(tr("Connected"));
-        break;
-    case Network::RoomMember::State::LostConnection:
-        NetworkMessage::ShowError(NetworkMessage::LOST_CONNECTION);
-        NGLOG_INFO(Network, "State: LostConnection");
-        break;
-    case Network::RoomMember::State::CouldNotConnect:
-        NetworkMessage::ShowError(NetworkMessage::UNABLE_TO_CONNECT);
-        NGLOG_INFO(Network, "State: CouldNotConnect");
-        break;
-    case Network::RoomMember::State::NameCollision:
-        NetworkMessage::ShowError(NetworkMessage::USERNAME_IN_USE);
-        NGLOG_INFO(Network, "State: NameCollision");
-        break;
-    case Network::RoomMember::State::MacCollision:
-        NetworkMessage::ShowError(NetworkMessage::MAC_COLLISION);
-        NGLOG_INFO(Network, "State: MacCollision");
-        break;
-    case Network::RoomMember::State::WrongPassword:
-        NetworkMessage::ShowError(NetworkMessage::WRONG_PASSWORD);
-        NGLOG_INFO(Network, "State: WrongPassword");
-        break;
-    case Network::RoomMember::State::WrongVersion:
-        NetworkMessage::ShowError(NetworkMessage::WRONG_VERSION);
-        NGLOG_INFO(Network, "State: WrongVersion");
-        break;
-    default:
-        break;
     }
     UpdateView();
 }
@@ -99,7 +64,6 @@ void ClientRoomWindow::Disconnect() {
         member->Leave();
         ui->chat->AppendStatusMessage(tr("Disconnected"));
         close();
-        emit Closed();
     }
 }
 
@@ -120,6 +84,4 @@ void ClientRoomWindow::UpdateView() {
     }
     // TODO(B3N30): can't get RoomMember*, show error and close window
     close();
-    emit Closed();
-    return;
 }
diff --git a/src/citra_qt/multiplayer/client_room.h b/src/citra_qt/multiplayer/client_room.h
index 960dbe97f..8e8ee24eb 100644
--- a/src/citra_qt/multiplayer/client_room.h
+++ b/src/citra_qt/multiplayer/client_room.h
@@ -22,11 +22,6 @@ public slots:
     void OnStateChange(const Network::RoomMember::State&);
 
 signals:
-    /**
-     * Signalled by this widget when it is closing itself and destroying any state such as
-     * connections that it might have.
-     */
-    void Closed();
     void RoomInformationChanged(const Network::RoomInformation&);
     void StateChanged(const Network::RoomMember::State&);
 
diff --git a/src/citra_qt/multiplayer/direct_connect.cpp b/src/citra_qt/multiplayer/direct_connect.cpp
index 7a47918fb..a9b64c98c 100644
--- a/src/citra_qt/multiplayer/direct_connect.cpp
+++ b/src/citra_qt/multiplayer/direct_connect.cpp
@@ -105,20 +105,8 @@ void DirectConnectWindow::EndConnecting() {
 void DirectConnectWindow::OnConnection() {
     EndConnecting();
 
-    bool isConnected = true;
     if (auto room_member = Network::GetRoomMember().lock()) {
-        switch (room_member->GetState()) {
-        case Network::RoomMember::State::CouldNotConnect:
-            isConnected = false;
-            ShowError(NetworkMessage::UNABLE_TO_CONNECT);
-            break;
-        case Network::RoomMember::State::NameCollision:
-            isConnected = false;
-            ShowError(NetworkMessage::USERNAME_IN_USE);
-            break;
-        case Network::RoomMember::State::Joining:
-            auto parent = static_cast<MultiplayerState*>(parentWidget());
-            parent->OnOpenNetworkRoom();
+        if (room_member->GetState() == Network::RoomMember::State::Joined) {
             close();
         }
     }
diff --git a/src/citra_qt/multiplayer/host_room.cpp b/src/citra_qt/multiplayer/host_room.cpp
index 946915378..a57f31052 100644
--- a/src/citra_qt/multiplayer/host_room.cpp
+++ b/src/citra_qt/multiplayer/host_room.cpp
@@ -119,17 +119,8 @@ void HostRoomWindow::Host() {
 void HostRoomWindow::OnConnection() {
     ui->host->setEnabled(true);
     if (auto room_member = Network::GetRoomMember().lock()) {
-        switch (room_member->GetState()) {
-        case Network::RoomMember::State::CouldNotConnect:
-            ShowError(NetworkMessage::UNABLE_TO_CONNECT);
-            break;
-        case Network::RoomMember::State::NameCollision:
-            ShowError(NetworkMessage::USERNAME_IN_USE);
-            break;
-        case Network::RoomMember::State::Error:
-            ShowError(NetworkMessage::UNABLE_TO_CONNECT);
-            break;
-        case Network::RoomMember::State::Joining:
+        if (room_member->GetState() == Network::RoomMember::State::Joining) {
+            // Start the announce session if they chose Public
             if (ui->host_type->currentIndex() == 0) {
                 if (auto session = announce_multiplayer_session.lock()) {
                     session->Start();
@@ -137,12 +128,7 @@ void HostRoomWindow::OnConnection() {
                     NGLOG_ERROR(Network, "Starting announce session failed");
                 }
             }
-            auto parent = static_cast<MultiplayerState*>(parentWidget());
-            // parent->ChangeRoomState();
-            parent->OnOpenNetworkRoom();
             close();
-            emit Closed();
-            break;
         }
     }
 }
diff --git a/src/citra_qt/multiplayer/host_room.h b/src/citra_qt/multiplayer/host_room.h
index 038b9f538..574dc2824 100644
--- a/src/citra_qt/multiplayer/host_room.h
+++ b/src/citra_qt/multiplayer/host_room.h
@@ -34,13 +34,6 @@ public:
                             std::shared_ptr<Core::AnnounceMultiplayerSession> session);
     ~HostRoomWindow();
 
-signals:
-    /**
-     * Signalled by this widget when it is closing itself and destroying any state such as
-     * connections that it might have.
-     */
-    void Closed();
-
 private slots:
     /**
      * Handler for connection status changes. Launches the chat window if successful or
diff --git a/src/citra_qt/multiplayer/message.cpp b/src/citra_qt/multiplayer/message.cpp
index 28d62bb81..57cd7671c 100644
--- a/src/citra_qt/multiplayer/message.cpp
+++ b/src/citra_qt/multiplayer/message.cpp
@@ -28,10 +28,11 @@ const ConnectionError HOST_BANNED(
     QT_TR_NOOP("The host of the room has banned you. Speak with the host to unban you "
                "or try a different room."));
 const ConnectionError WRONG_VERSION(
-    QT_TR_NOOP("Version mismatch! Please update to the latest version of citra. If the problem "
+    QT_TR_NOOP("Version mismatch! Please update to the latest version of Citra. If the problem "
                "persists, contact the room host and ask them to update the server."));
 const ConnectionError WRONG_PASSWORD(QT_TR_NOOP("Incorrect password."));
-const ConnectionError GENERIC_ERROR(QT_TR_NOOP("An error occured."));
+const ConnectionError GENERIC_ERROR(
+    QT_TR_NOOP("An unknown error occured. If this error continues to occur, please open an issue"));
 const ConnectionError LOST_CONNECTION(QT_TR_NOOP("Connection to room lost. Try to reconnect."));
 const ConnectionError MAC_COLLISION(
     QT_TR_NOOP("MAC address is already in use. Please choose another."));
diff --git a/src/citra_qt/multiplayer/state.cpp b/src/citra_qt/multiplayer/state.cpp
index 3c40a7d86..f741b299b 100644
--- a/src/citra_qt/multiplayer/state.cpp
+++ b/src/citra_qt/multiplayer/state.cpp
@@ -67,17 +67,59 @@ void MultiplayerState::Close() {
 
 void MultiplayerState::OnNetworkStateChanged(const Network::RoomMember::State& state) {
     NGLOG_DEBUG(Frontend, "Network state change");
-    if (state == Network::RoomMember::State::Joined) {
+    bool is_connected = false;
+    switch (state) {
+    case Network::RoomMember::State::Idle:
+        NGLOG_DEBUG(Network, "State: Idle");
+        break;
+    case Network::RoomMember::State::Joining:
+        NGLOG_DEBUG(Network, "State: Joining");
+        break;
+    case Network::RoomMember::State::LostConnection:
+        NetworkMessage::ShowError(NetworkMessage::LOST_CONNECTION);
+        NGLOG_DEBUG(Network, "State: LostConnection");
+        break;
+    case Network::RoomMember::State::CouldNotConnect:
+        NetworkMessage::ShowError(NetworkMessage::UNABLE_TO_CONNECT);
+        NGLOG_DEBUG(Network, "State: CouldNotConnect");
+        break;
+    case Network::RoomMember::State::NameCollision:
+        NetworkMessage::ShowError(NetworkMessage::USERNAME_IN_USE);
+        NGLOG_DEBUG(Network, "State: NameCollision");
+        break;
+    case Network::RoomMember::State::MacCollision:
+        NetworkMessage::ShowError(NetworkMessage::MAC_COLLISION);
+        NGLOG_DEBUG(Network, "State: MacCollision");
+        break;
+    case Network::RoomMember::State::WrongPassword:
+        NetworkMessage::ShowError(NetworkMessage::WRONG_PASSWORD);
+        NGLOG_DEBUG(Network, "State: WrongPassword");
+        break;
+    case Network::RoomMember::State::WrongVersion:
+        NetworkMessage::ShowError(NetworkMessage::WRONG_VERSION);
+        NGLOG_DEBUG(Network, "State: WrongVersion");
+        break;
+    case Network::RoomMember::State::Error:
+        NetworkMessage::ShowError(NetworkMessage::UNABLE_TO_CONNECT);
+        NGLOG_DEBUG(Network, "State: GenericError");
+        break;
+    case Network::RoomMember::State::Joined:
+        NGLOG_DEBUG(Network, "State: Joined");
+        is_connected = true;
+        OnOpenNetworkRoom();
+        break;
+    }
+    if (is_connected) {
         status_icon->setPixmap(QIcon::fromTheme("connected").pixmap(16));
         status_text->setText(tr("Connected"));
         leave_room->setEnabled(true);
         show_room->setEnabled(true);
-        return;
+    } else {
+        status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16));
+        status_text->setText(tr("Not Connected"));
+        leave_room->setEnabled(false);
+        show_room->setEnabled(false);
     }
-    status_icon->setPixmap(QIcon::fromTheme("disconnected").pixmap(16));
-    status_text->setText(tr("Not Connected"));
-    leave_room->setEnabled(false);
-    show_room->setEnabled(false);
 }
 
 void MultiplayerState::OnAnnounceFailed(const Common::WebResult& result) {