diff --git a/lib/ngtcp2_acktr.c b/lib/ngtcp2_acktr.c
index fb6409d0e578e86a76e0c288d52ab1ea25321b7a..203fddb22062d15df6fc2accecc8dc753e8590a1 100644
--- a/lib/ngtcp2_acktr.c
+++ b/lib/ngtcp2_acktr.c
@@ -79,21 +79,10 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, ngtcp2_acktr_entry *ent) {
 
 ngtcp2_acktr_entry *ngtcp2_acktr_get(ngtcp2_acktr *acktr) { return acktr->ent; }
 
-void ngtcp2_acktr_remove(ngtcp2_acktr *acktr, const ngtcp2_acktr_entry *ent) {
-  ngtcp2_acktr_entry **pent;
-
-  for (pent = &acktr->ent; *pent; pent = &(*pent)->next) {
-    if (ent->pkt_num != (*pent)->pkt_num) {
-      continue;
-    }
-
-    *pent = (*pent)->next;
-
-    if (!(ent->flags & NGTCP2_ACKTR_FLAG_PASSIVE)) {
-      assert(acktr->nactive_ack > 0);
-      --acktr->nactive_ack;
-    }
-
-    return;
+void ngtcp2_acktr_pop(ngtcp2_acktr *acktr) {
+  if (!(acktr->ent->flags & NGTCP2_ACKTR_FLAG_PASSIVE)) {
+    assert(acktr->nactive_ack > 0);
+    --acktr->nactive_ack;
   }
+  acktr->ent = acktr->ent->next;
 }
diff --git a/lib/ngtcp2_acktr.h b/lib/ngtcp2_acktr.h
index 413af917a73ded5a9b527f7f0d8071666afdda12..548c55dba2da6d4cc3c3e35d552524d0c7a0b3f6 100644
--- a/lib/ngtcp2_acktr.h
+++ b/lib/ngtcp2_acktr.h
@@ -112,8 +112,9 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, ngtcp2_acktr_entry *ent);
 ngtcp2_acktr_entry *ngtcp2_acktr_get(ngtcp2_acktr *acktr);
 
 /*
- * ngtcp2_acktr_remove removes the |ent|.
+ * ngtcp2_acktr_remove the head of entries, which has the largest
+ * packet number.
  */
-void ngtcp2_acktr_remove(ngtcp2_acktr *acktr, const ngtcp2_acktr_entry *ent);
+void ngtcp2_acktr_pop(ngtcp2_acktr *acktr);
 
 #endif /* NGTCP2_ACKTR_H */
diff --git a/lib/ngtcp2_conn.c b/lib/ngtcp2_conn.c
index 592b28e25b67c62f4427fe6d684ef7cf2fb52339..5fc0b2b32070c2e2ca42f40518d966bd8993824f 100644
--- a/lib/ngtcp2_conn.c
+++ b/lib/ngtcp2_conn.c
@@ -366,7 +366,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
   first_pkt_num = last_pkt_num = rpkt->pkt_num;
   ack_delay = ts - rpkt->tstamp;
 
-  ngtcp2_acktr_remove(&conn->acktr, rpkt);
+  ngtcp2_acktr_pop(&conn->acktr);
   ngtcp2_acktr_entry_del(rpkt, conn->mem);
 
   ack->type = NGTCP2_FRAME_ACK;
@@ -376,7 +376,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
   for (; (rpkt = ngtcp2_acktr_get(&conn->acktr));) {
     if (rpkt->pkt_num + 1 == last_pkt_num) {
       last_pkt_num = rpkt->pkt_num;
-      ngtcp2_acktr_remove(&conn->acktr, rpkt);
+      ngtcp2_acktr_pop(&conn->acktr);
       ngtcp2_acktr_entry_del(rpkt, conn->mem);
       continue;
     }
@@ -403,7 +403,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
 
     first_pkt_num = last_pkt_num = rpkt->pkt_num;
 
-    ngtcp2_acktr_remove(&conn->acktr, rpkt);
+    ngtcp2_acktr_pop(&conn->acktr);
     ngtcp2_acktr_entry_del(rpkt, conn->mem);
 
     if (ack->num_blks == 255) {
diff --git a/tests/ngtcp2_acktr_test.c b/tests/ngtcp2_acktr_test.c
index 681666e3187253a8cafb01c153ace20c86a0a0e3..1a6def9842d3c0c7d34dfc480a2c16ef4bf26056 100644
--- a/tests/ngtcp2_acktr_test.c
+++ b/tests/ngtcp2_acktr_test.c
@@ -58,8 +58,7 @@ void test_ngtcp2_acktr_add(void) {
   }
 
   for (i = 0; i < arraylen(ents); ++i) {
-    ent = ngtcp2_acktr_get(&acktr);
-    ngtcp2_acktr_remove(&acktr, ent);
+    ngtcp2_acktr_pop(&acktr);
 
     ent = ngtcp2_acktr_get(&acktr);