diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp
index 6c4600f25..e92900d48 100644
--- a/src/core/hle/service/nwm/nwm_uds.cpp
+++ b/src/core/hle/service/nwm/nwm_uds.cpp
@@ -215,6 +215,11 @@ static void GetConnectionStatus(Interface* self) {
     rb.Push(RESULT_SUCCESS);
     rb.PushRaw(connection_status);
 
+    // Reset the bitmask of changed nodes after each call to this
+    // function to prevent falsely informing games of outstanding
+    // changes in subsequent calls.
+    connection_status.changed_nodes = 0;
+
     LOG_DEBUG(Service_NWM, "called");
 }
 
@@ -314,8 +319,11 @@ static void BeginHostingNetwork(Interface* self) {
     // The host is always the first node
     connection_status.network_node_id = 1;
     node_info[0].network_node_id = 1;
+    connection_status.nodes[0] = connection_status.network_node_id;
     // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken.
     connection_status.node_bitmask |= 1;
+    // Notify the application that the first node was set.
+    connection_status.changed_nodes |= 1;
 
     // If the game has a preferred channel, use that instead.
     if (network_info.channel != 0)
@@ -352,6 +360,8 @@ static void DestroyNetwork(Interface* self) {
     // Unschedule the beacon broadcast event.
     CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0);
 
+    // TODO(Subv): Check if connection_status is indeed reset after this call.
+    connection_status = {};
     connection_status.status = static_cast<u8>(NetworkStatus::NotConnected);
     connection_status_event->Signal();
 
diff --git a/src/core/hle/service/nwm/nwm_uds.h b/src/core/hle/service/nwm/nwm_uds.h
index 29b146569..141f49f9c 100644
--- a/src/core/hle/service/nwm/nwm_uds.h
+++ b/src/core/hle/service/nwm/nwm_uds.h
@@ -24,6 +24,9 @@ const double MillisecondsPerTU = 1.024;
 // Interval measured in TU, the default value is 100TU = 102.4ms
 const u16 DefaultBeaconInterval = 100;
 
+/// The maximum number of nodes that can exist in an UDS session.
+constexpr u32 UDSMaxNodes = 16;
+
 struct NodeInfo {
     u64_le friend_code_seed;
     std::array<u16_le, 10> username;
@@ -47,8 +50,8 @@ struct ConnectionStatus {
     u32_le status;
     INSERT_PADDING_WORDS(1);
     u16_le network_node_id;
-    INSERT_PADDING_BYTES(2);
-    INSERT_PADDING_BYTES(32);
+    u16_le changed_nodes;
+    u16_le nodes[UDSMaxNodes];
     u8 total_nodes;
     u8 max_nodes;
     u16_le node_bitmask;
diff --git a/src/core/hle/service/nwm/uds_beacon.h b/src/core/hle/service/nwm/uds_beacon.h
index 6df4c4f47..caacf4c6f 100644
--- a/src/core/hle/service/nwm/uds_beacon.h
+++ b/src/core/hle/service/nwm/uds_beacon.h
@@ -15,9 +15,6 @@ namespace Service {
 namespace NWM {
 
 using MacAddress = std::array<u8, 6>;
-
-/// The maximum number of nodes that can exist in an UDS session.
-constexpr u32 UDSMaxNodes = 16;
 constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32};
 
 /// Additional block tag ids in the Beacon frames