diff -urN MeshCore.orig/examples/simple_repeater/MyMesh.cpp MeshCore/examples/simple_repeater/MyMesh.cpp
--- MeshCore.orig/examples/simple_repeater/MyMesh.cpp	2026-08-20 14:14:51.903468915 -0500
+++ MeshCore/examples/simple_repeater/MyMesh.cpp	2026-08-20 14:56:44.170712134 -0500
@@ -434,7 +434,8 @@
 bool MyMesh::allowPacketForward(const mesh::Packet *packet) {
   if (_prefs.disable_fwd) return false;
   if (packet->isRouteFlood()
-      && mesh::isFloodHopLimitExceeded(packet, _prefs.flood_max, _prefs.flood_max_unscoped, _prefs.flood_max_advert)) {
+      && mesh::isFloodHopLimitExceeded(packet, _prefs.flood_max, _prefs.flood_max_unscoped, _prefs.flood_max_advert,
+            _prefs.flood_max_request, _prefs.flood_max_anon_request, _prefs.flood_max_response)) {
     return false;
   }
   if (packet->isRouteFlood() && recv_pkt_region == NULL) {
@@ -905,6 +906,9 @@
   _prefs.flood_max = 64;
   _prefs.flood_max_unscoped = 64;
   _prefs.flood_max_advert = 8;
+  _prefs.flood_max_request = 64;
+  _prefs.flood_max_anon_request = 64;
+  _prefs.flood_max_response = 64;
   _prefs.interference_threshold = 0; // disabled
   _prefs.cad_enabled = 0;            // hardware CAD before TX (off by default; 'set cad on')
   _prefs.loop_detect = LOOP_DETECT_MINIMAL;
diff -urN MeshCore.orig/examples/simple_room_server/MyMesh.cpp MeshCore/examples/simple_room_server/MyMesh.cpp
--- MeshCore.orig/examples/simple_room_server/MyMesh.cpp	2026-08-20 14:14:51.903468915 -0500
+++ MeshCore/examples/simple_room_server/MyMesh.cpp	2026-08-20 14:56:46.215743407 -0500
@@ -300,7 +300,8 @@
 bool MyMesh::allowPacketForward(const mesh::Packet *packet) {
   if (_prefs.disable_fwd) return false;
   if (packet->isRouteFlood()
-      && mesh::isFloodHopLimitExceeded(packet, _prefs.flood_max, _prefs.flood_max_unscoped, _prefs.flood_max_advert)) {
+      && mesh::isFloodHopLimitExceeded(packet, _prefs.flood_max, _prefs.flood_max_unscoped, _prefs.flood_max_advert,
+            _prefs.flood_max_request, _prefs.flood_max_anon_request, _prefs.flood_max_response)) {
     return false;
   }
   return true;
@@ -663,6 +664,9 @@
   _prefs.flood_max = 64;
   _prefs.flood_max_unscoped = 64;
   _prefs.flood_max_advert = 8;
+  _prefs.flood_max_request = 64;
+  _prefs.flood_max_anon_request = 64;
+  _prefs.flood_max_response = 64;
   _prefs.interference_threshold = 0; // disabled
   _prefs.cad_enabled = 0;            // hardware CAD before TX (off by default; 'set cad on')
 #ifdef ROOM_PASSWORD
diff -urN MeshCore.orig/src/helpers/CommonCLI.cpp MeshCore/src/helpers/CommonCLI.cpp
--- MeshCore.orig/src/helpers/CommonCLI.cpp	2026-08-20 14:14:51.907468859 -0500
+++ MeshCore/src/helpers/CommonCLI.cpp	2026-08-20 14:37:00.959333962 -0500
@@ -102,7 +102,10 @@
     file.read((uint8_t *)&_prefs->flood_max_advert, sizeof(_prefs->flood_max_advert));             // 292
     file.read((uint8_t *)&_prefs->radio_fem_rxgain, sizeof(_prefs->radio_fem_rxgain));             // 293
     file.read((uint8_t *)&_prefs->cad_enabled, sizeof(_prefs->cad_enabled));                       // 294
-    // next: 295
+    file.read((uint8_t *)&_prefs->flood_max_request, sizeof(_prefs->flood_max_request));	       // 295
+    file.read((uint8_t *)&_prefs->flood_max_anon_request, sizeof(_prefs->flood_max_anon_request)); // 296
+    file.read((uint8_t *)&_prefs->flood_max_response, sizeof(_prefs->flood_max_response));	       // 297
+    // next: 298
 
     // sanitise bad pref values
     _prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
@@ -647,6 +650,33 @@
     } else {
       strcpy(reply, "Error, max 64");
     }
+  } else if (memcmp(config, "flood.max.request ", 18) == 0) {
+    uint8_t m = atoi(&config[18]);
+    if (m <= 64) {
+      _prefs->flood_max_request = m;
+      savePrefs();
+      strcpy(reply, "OK");
+    } else {
+      strcpy(reply, "Error, max 64");
+    }
+  } else if (memcmp(config, "flood.max.anon.request ", 23) == 0) {
+    uint8_t m = atoi(&config[23]);
+    if (m <= 64) {
+      _prefs->flood_max_anon_request = m;
+      savePrefs();
+      strcpy(reply, "OK");
+    } else {
+      strcpy(reply, "Error, max 64");
+    }
+  } else if (memcmp(config, "flood.max.response ", 19) == 0) {
+    uint8_t m = atoi(&config[18]);
+    if (m <= 64) {
+      _prefs->flood_max_response = m;
+      savePrefs();
+      strcpy(reply, "OK");
+    } else {
+      strcpy(reply, "Error, max 64");
+    }  
   } else if (memcmp(config, "flood.max ", 10) == 0) {
     uint8_t m = atoi(&config[10]);
     if (m <= 64) {
@@ -869,6 +899,12 @@
     sprintf(reply, "> %d", (uint32_t)_prefs->flood_max_advert);
   } else if (memcmp(config, "flood.max.unscoped", 18) == 0) {
     sprintf(reply, "> %d", (uint32_t)_prefs->flood_max_unscoped);
+  } else if (memcmp(config, "flood.max.request", 17) == 0) {
+    sprintf(reply, "> %d", (uint32_t)_prefs->flood_max_request);
+  } else if (memcmp(config, "flood.max.anon.request", 22) == 0) {
+    sprintf(reply, "> %d", (uint32_t)_prefs->flood_max_anon_request);
+  } else if (memcmp(config, "flood.max.response", 18) == 0) {
+    sprintf(reply, "> %d", (uint32_t)_prefs->flood_max_response);
   } else if (memcmp(config, "flood.max", 9) == 0) {
     sprintf(reply, "> %d", (uint32_t)_prefs->flood_max);
   } else if (memcmp(config, "direct.txdelay", 14) == 0) {
diff -urN MeshCore.orig/src/helpers/CommonCLI.h MeshCore/src/helpers/CommonCLI.h
--- MeshCore.orig/src/helpers/CommonCLI.h	2026-08-20 14:14:51.907468859 -0500
+++ MeshCore/src/helpers/CommonCLI.h	2026-08-20 14:22:45.554761595 -0500
@@ -45,6 +45,9 @@
   uint8_t flood_max = 0;
   uint8_t flood_max_unscoped = 0;
   uint8_t flood_max_advert = 0;
+  uint8_t flood_max_request = 0;
+  uint8_t flood_max_anon_request = 0;
+  uint8_t flood_max_response = 0;
   uint8_t interference_threshold = 0;
   uint8_t agc_reset_interval = 0; // secs / 4
   // Bridge settings
diff -urN MeshCore.orig/src/helpers/RoutingPolicy.h MeshCore/src/helpers/RoutingPolicy.h
--- MeshCore.orig/src/helpers/RoutingPolicy.h	2026-08-20 14:14:51.907468859 -0500
+++ MeshCore/src/helpers/RoutingPolicy.h	2026-08-20 14:51:35.189666490 -0500
@@ -13,10 +13,17 @@
  * \returns  true if the packet has exceeded a limit, and must not be forwarded
  */
 inline bool isFloodHopLimitExceeded(const Packet* packet, uint8_t flood_max,
-                                    uint8_t flood_max_unscoped, uint8_t flood_max_advert) {
+                                    uint8_t flood_max_unscoped, uint8_t flood_max_advert,
+                                    uint8_t flood_max_request, uint8_t flood_max_anon_request, 
+                                    uint8_t flood_max_response) {
   uint8_t hops = packet->getPathHashCount();
   if (hops >= flood_max) return true;
-  if (packet->getRouteType() == ROUTE_TYPE_FLOOD && hops >= flood_max_unscoped) return true;
+  if (packet->getRouteType() == ROUTE_TYPE_FLOOD) {
+    if (hops >= flood_max_unscoped) return true;
+    if (packet->getPayloadType() == PAYLOAD_TYPE_REQ && packet->getPathHashCount() >= flood_max_request) return true;
+    if (packet->getPayloadType() == PAYLOAD_TYPE_ANON_REQ && packet->getPathHashCount() >= flood_max_anon_request) return true;
+    if (packet->getPayloadType() == PAYLOAD_TYPE_RESPONSE && packet->getPathHashCount() >= flood_max_response) return true;
+  }
   if (packet->getPayloadType() == PAYLOAD_TYPE_ADVERT && hops >= flood_max_advert) return true;
   return false;
 }
diff -urN MeshCore.orig/src/helpers/CommonCLI.h MeshCore/src/helpers/CommonCLI.h
--- MeshCore.orig/src/helpers/CommonCLI.h	2026-08-23 12:08:47.344672538 -0500
+++ MeshCore/src/helpers/CommonCLI.h	2026-08-23 12:11:59.274112134 -0500
@@ -151,6 +151,9 @@
       def("f_max", _parent->flood_max);
       def("f_max_uns", _parent->flood_max_unscoped);
       def("f_max_adv", _parent->flood_max_advert);
+      def("f_max_req", _parent->flood_max_request);
+      def("f_max_anon_req", _parent->flood_max_anon_request);
+      def("f_max_resp", _parent->flood_max_response);
       def("loop", _parent->loop_detect);
     }
   public:
