diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 87707ad..94e0ee6 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -117,7 +117,7 @@
 
   for (int c = 0; c < eob; ++c) {
     int coeff_ctx = get_nz_map_ctx(tcoeff, c, scan, bwl, height, tx_type);
-    int eob_ctx = get_eob_ctx(tcoeff, scan[c], txs_ctx, tx_type);
+    int eob_ctx = get_eob_ctx(scan[c], txs_ctx, tx_type);
 
     tran_low_t v = tcoeff[scan[c]];
     int is_nz = (v != 0);
@@ -589,7 +589,7 @@
       int coeff_ctx = get_nz_map_ctx(qcoeff, c, scan, bwl, height, tx_type);
       cost += coeff_costs->nz_map_cost[coeff_ctx][is_nz];
       if (is_nz) {
-        int eob_ctx = get_eob_ctx(qcoeff, scan[c], txs_ctx, tx_type);
+        int eob_ctx = get_eob_ctx(scan[c], txs_ctx, tx_type);
         cost += coeff_costs->eob_cost[eob_ctx][c == (eob - 1)];
       }
     }
@@ -1138,8 +1138,8 @@
     }
 
     if (scan_idx < txb_info->seg_eob) {
-      const int eob_ctx = get_eob_ctx(txb_info->qcoeff, coeff_idx,
-                                      txb_info->txs_ctx, txb_info->tx_type);
+      const int eob_ctx =
+          get_eob_ctx(coeff_idx, txb_info->txs_ctx, txb_info->tx_type);
       cost_diff -=
           txb_costs->eob_cost[eob_ctx][scan_idx == (txb_info->eob - 1)];
     }
@@ -1378,8 +1378,8 @@
     cost += get_base_cost(abs_qc, ctx, txb_costs->base_cost[base_idx][ctx],
                           base_idx);
     if (scan_idx < txb_info->seg_eob) {
-      const int eob_ctx = get_eob_ctx(txb_info->qcoeff, coeff_idx,
-                                      txb_info->txs_ctx, txb_info->tx_type);
+      const int eob_ctx =
+          get_eob_ctx(coeff_idx, txb_info->txs_ctx, txb_info->tx_type);
       cost += txb_costs->eob_cost[eob_ctx][scan_idx == (txb_info->eob - 1)];
     }
     cost += get_sign_bit_cost(qc, coeff_idx, txb_costs->dc_sign_cost,
@@ -1436,8 +1436,8 @@
   if (*new_eob > 0) {
     // Note that get_eob_ctx does NOT actually account for qcoeff, so we don't
     // need to lower down the qcoeff here
-    const int eob_ctx = get_eob_ctx(txb_info->qcoeff, scan[*new_eob - 1],
-                                    txb_info->txs_ctx, txb_info->tx_type);
+    const int eob_ctx =
+        get_eob_ctx(scan[*new_eob - 1], txb_info->txs_ctx, txb_info->tx_type);
     cost_diff -= txb_costs->eob_cost[eob_ctx][0];
     cost_diff += txb_costs->eob_cost[eob_ctx][1];
   } else {
@@ -1608,8 +1608,8 @@
     }
 
     if (scan_idx < txb_info->seg_eob) {
-      int eob_ctx = get_eob_ctx(txb_info->qcoeff, scan[scan_idx],
-                                txb_info->txs_ctx, txb_info->tx_type);
+      int eob_ctx =
+          get_eob_ctx(scan[scan_idx], txb_info->txs_ctx, txb_info->tx_type);
       cost += txb_costs->eob_cost[eob_ctx][scan_idx == (txb_info->eob - 1)];
     }
   }
@@ -2031,7 +2031,7 @@
     tran_low_t v = tcoeff[scan[c]];
     int is_nz = (v != 0);
     int coeff_ctx = get_nz_map_ctx(tcoeff, c, scan, bwl, height, tx_type);
-    int eob_ctx = get_eob_ctx(tcoeff, scan[c], txsize_ctx, tx_type);
+    int eob_ctx = get_eob_ctx(scan[c], txsize_ctx, tx_type);
 
     if (c == seg_eob - 1) break;
 
