diff --git a/tests/helper.py b/tests/helper.py
index e8057e4db2aa4a900886ad5a1445815e674a7e37..a1b77c2ec82225b5a200f1e8b7fb0d497ac6fda5 100644
--- a/tests/helper.py
+++ b/tests/helper.py
@@ -11,9 +11,10 @@ class KVSTestFixture:
         self.conductor = conductor
         self.dir = dir
         self.node_count = node_count
-        self.clients = []
+        self.clients: list[KVSClient] = []
         self.log = log
 
+
     def spawn_cluster(self):
         self.log("\n> SPAWN CLUSTER")
         self.conductor.spawn_cluster(node_count=self.node_count)
@@ -36,6 +37,14 @@ class KVSTestFixture:
             ), f"expected 200 to ack view, got {r.status_code}"
             self.log(f"view sent to node {i}: {r.status_code} {r.text}")
 
+    def rebroadcast_view(self, new_view: Dict[str, List[Dict[str, Any]]]):
+        for i, client in enumerate(self.clients):
+            r = client.resend_last_view_with_ips_from_new_view(new_view)
+            assert (
+                r.status_code == 200
+            ),  f"expected 200 to ack view, got {r.status_code}"
+            self.log(f"view resent to node {i}: {r.status_code} {r.text}")
+
     def send_view(self, node_id: int, view: Dict[str, List[Dict[str, Any]]]):
         r = self.clients[node_id].send_view(view)
         assert r.status_code == 200, f"expected 200 to ack view, got {
diff --git a/utils/containers.py b/utils/containers.py
index 54a3bb4bd1260f42b2c4573f967a2c61ba6a7e98..7041cd3a687a1e3e7dc2b81f8dd03cb1da8ca1fb 100644
--- a/utils/containers.py
+++ b/utils/containers.py
@@ -422,7 +422,7 @@ class ClusterConductor:
                     ].base_url = self.node_external_endpoint(node.index)
                 view_changed = True
         if view_changed and hasattr(self, "_parent"):
-            self._parent.broadcast_view(self.get_shard_view())
+            self._parent.rebroadcast_view(self.get_shard_view())
 
     def create_partition(self, node_ids: List[int], partition_id: str) -> None:
         net_name = f"kvs_{self.group_id}_net_{partition_id}"
@@ -482,7 +482,7 @@ class ClusterConductor:
                     ].base_url = self.node_external_endpoint(node.index)
                 view_changed = True
         if view_changed and hasattr(self, "_parent"):
-            self._parent.broadcast_view(self.get_shard_view())
+            self._parent.rebroadcast_view(self.get_shard_view())
 
     DeprecationWarning("View is in updated format")
 
diff --git a/utils/kvs_api.py b/utils/kvs_api.py
index 6f6de12ef37fbdcb1a59673ca23be83d5c5434d6..0baf91d84fbbf45f007725c8035939873ce6f2b8 100644
--- a/utils/kvs_api.py
+++ b/utils/kvs_api.py
@@ -108,5 +108,24 @@ class KVSClient:
         if not isinstance(view, dict):
             raise ValueError("view must be a dict")
 
+        self.last_view = view
         request_body = {"view": view}
         return requests.put(f"{self.base_url}/view", json=request_body, timeout=timeout)
+
+    def resend_last_view_with_ips_from_new_view(self, current_view: dict[str, List[Dict[str, Any]]], timeout: float = DEFAULT_TIMEOUT) -> requests.Response:
+        if not isinstance(current_view, dict):
+            raise ValueError("view must be a dict")
+        if not hasattr(self, "last_view"):
+            raise LookupError("Must have sent at least one view before calling resend.")
+        flattened_current_view = {}
+        for shard_key in current_view:
+            for node in current_view[shard_key]:
+                flattened_current_view[node["id"]] = node["address"]
+        
+        for shard_key in self.last_view:
+            for node in self.last_view[shard_key]:
+                node['address'] = flattened_current_view[node["id"]]
+        
+        request_body = {"view": self.last_view}
+        return requests.put(f"{self.base_url}/view", json=request_body, timeout=timeout)
+        
\ No newline at end of file