diff --git a/btpd/queue.h b/btpd/queue.h
index 4e84ff4..0149729 100644
--- a/btpd/queue.h
+++ b/btpd/queue.h
@@ -41,6 +41,11 @@ struct {                                                                \
             (var);                                                      \
             (var) = BTPDQ_NEXT((var), field))
 
+#define BTPDQ_FOREACH_MUTABLE(var, head, field, nvar)                   \
+        for ((var) = BTPDQ_FIRST((head));                               \
+             (var) && ((nvar) = BTPDQ_NEXT((var), field), (var));       \
+             (var) = (nvar))
+
 #define BTPDQ_INIT(head) do {                                           \
         BTPDQ_FIRST((head)) = NULL;                                     \
         (head)->tqh_last = &BTPDQ_FIRST((head));                        \