diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 26279fa..09065a5 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -346,7 +346,7 @@
   MV_REFERENCE_FRAME ref_frame[2];
 #if CONFIG_NEW_TX_PARTITION
   /*! \brief Transform partition type. */
-  TX_PARTITION_TYPE partition_type[INTER_TX_SIZE_BUF_LEN];
+  TX_PARTITION_TYPE tx_partition_type[INTER_TX_SIZE_BUF_LEN];
 #endif  // CONFIG_NEW_TX_PARTITION
   /*! \brief Filter used in subpel interpolation. */
   int interp_fltr;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 0e73e4b..f26458f 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -331,7 +331,7 @@
 #if CONFIG_NEW_TX_PARTITION
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     const int index = av1_get_txb_size_index(plane_bsize, blk_row, blk_col);
-    get_tx_partition_sizes(mbmi->partition_type[index], tx_size, sub_txs);
+    get_tx_partition_sizes(mbmi->tx_partition_type[index], tx_size, sub_txs);
     int cur_partition = 0;
     int bsw = 0, bsh = 0;
     for (int row = 0; row < tx_size_high_unit[tx_size]; row += bsh) {
@@ -1424,7 +1424,7 @@
   mbmi->tx_size = sub_txs[0];
   const int index =
       is_inter ? av1_get_txb_size_index(bsize, blk_row, blk_col) : 0;
-  mbmi->partition_type[index] = partition;
+  mbmi->tx_partition_type[index] = partition;
   if (is_inter) {
     const TX_SIZE txs = sub_tx_size_map[max_txsize_rect_lookup[bsize]];
     const int tx_w_log2 = tx_size_wide_log2[txs] - MI_SIZE_LOG2;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 0446f13..63d3630 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -167,7 +167,7 @@
   if (blk_row >= max_blocks_high || blk_col >= max_blocks_wide) return;
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
   if (is_inter || (!is_inter && block_signals_txsize(bsize))) {
-    const TX_PARTITION_TYPE partition = mbmi->partition_type[txb_size_index];
+    const TX_PARTITION_TYPE partition = mbmi->tx_partition_type[txb_size_index];
     const int is_rect = is_rect_tx(max_tx_size);
     const int allow_horz = allow_tx_horz_split(max_tx_size);
     const int allow_vert = allow_tx_vert_split(max_tx_size);
@@ -537,7 +537,7 @@
     (void)bit_depth;
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     const int index = av1_get_txb_size_index(plane_bsize, blk_row, blk_col);
-    get_tx_partition_sizes(mbmi->partition_type[index], tx_size, sub_txs);
+    get_tx_partition_sizes(mbmi->tx_partition_type[index], tx_size, sub_txs);
     int cur_partition = 0;
     int bsw = 0, bsh = 0;
     for (int r = 0; r < tx_size_high_unit[tx_size]; r += bsh) {
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 4d873fe..918d4c7 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -271,7 +271,7 @@
   TX_SIZE inter_tx_size[INTER_TX_SIZE_BUF_LEN];
 #if CONFIG_NEW_TX_PARTITION
   //! Txfm partitions used if the current mode is inter mode.
-  TX_PARTITION_TYPE partition_type[INTER_TX_SIZE_BUF_LEN];
+  TX_PARTITION_TYPE tx_partition_type[INTER_TX_SIZE_BUF_LEN];
 #endif  // CONFIG_NEW_TX_PARTITION
   //! Map showing which txfm block skips the txfm process.
   uint8_t blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index 7dc70fe..4bfcccf 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -653,7 +653,7 @@
 #if CONFIG_NEW_TX_PARTITION
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     const int index = av1_get_txb_size_index(plane_bsize, blk_row, blk_col);
-    get_tx_partition_sizes(mbmi->partition_type[index], tx_size, sub_txs);
+    get_tx_partition_sizes(mbmi->tx_partition_type[index], tx_size, sub_txs);
     int cur_partition = 0;
     int bsw = 0, bsh = 0;
     for (int r = 0; r < tx_size_high_unit[tx_size]; r += bsh) {
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index 4170d3d..4f717bd 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -87,7 +87,7 @@
       *best_rd = this_rd;
       best_tx_size = mbmi->tx_size;
 #if CONFIG_NEW_TX_PARTITION
-      best_tx_partition = mbmi->partition_type[0];
+      best_tx_partition = mbmi->tx_partition_type[0];
 #endif  // CONFIG_NEW_TX_PARTITION
       filter_intra_mode_info = mbmi->filter_intra_mode_info;
       av1_copy_array(best_tx_type_map, xd->tx_type_map, ctx->num_4x4_blk);
@@ -105,7 +105,7 @@
     mbmi->mode = DC_PRED;
     mbmi->tx_size = best_tx_size;
 #if CONFIG_NEW_TX_PARTITION
-    mbmi->partition_type[0] = best_tx_partition;
+    mbmi->tx_partition_type[0] = best_tx_partition;
 #endif  // CONFIG_NEW_TX_PARTITION
     mbmi->filter_intra_mode_info = filter_intra_mode_info;
     av1_copy_array(ctx->tx_type_map, best_tx_type_map, ctx->num_4x4_blk);
@@ -920,7 +920,7 @@
          sizeof(best_blk_skip[0]) * ctx->num_4x4_blk);
   TX_TYPE best_tx_type_map[MAX_MIB_SIZE * MAX_MIB_SIZE];
 #if CONFIG_NEW_TX_PARTITION
-  TX_SIZE best_tx_partition = mbmi->partition_type[0];
+  TX_SIZE best_tx_partition = mbmi->tx_partition_type[0];
 #endif  // CONFIG_NEW_TX_PARTITION
   av1_copy_array(best_tx_type_map, xd->tx_type_map, ctx->num_4x4_blk);
   mbmi->filter_intra_mode_info.use_filter_intra = 1;
@@ -941,7 +941,7 @@
     if (this_rd_tmp < best_rd_so_far) {
       best_tx_size = mbmi->tx_size;
 #if CONFIG_NEW_TX_PARTITION
-      best_tx_partition = mbmi->partition_type[0];
+      best_tx_partition = mbmi->tx_partition_type[0];
 #endif  // CONFIG_NEW_TX_PARTITION
       av1_copy_array(best_tx_type_map, xd->tx_type_map, ctx->num_4x4_blk);
       memcpy(best_blk_skip, x->txfm_search_info.blk_skip,
@@ -955,7 +955,7 @@
 
   mbmi->tx_size = best_tx_size;
 #if CONFIG_NEW_TX_PARTITION
-  mbmi->partition_type[0] = best_tx_partition;
+  mbmi->tx_partition_type[0] = best_tx_partition;
 #endif  // CONFIG_NEW_TX_PARTITION
   av1_copy_array(xd->tx_type_map, best_tx_type_map, ctx->num_4x4_blk);
   memcpy(x->txfm_search_info.blk_skip, best_blk_skip,
@@ -1221,8 +1221,8 @@
   PREDICTION_MODE best_intra_mode = best_mbmi->mode;
   TX_SIZE best_tx_size = best_mbmi->tx_size;
 #if CONFIG_NEW_TX_PARTITION
-  TX_PARTITION_TYPE best_partition_type[INTER_TX_SIZE_BUF_LEN];
-  av1_copy(best_partition_type, best_mbmi->partition_type);
+  TX_PARTITION_TYPE best_tx_partition_type[INTER_TX_SIZE_BUF_LEN];
+  av1_copy(best_tx_partition_type, best_mbmi->tx_partition_type);
 #endif  // CONFIG_NEW_TX_PARTITION
   uint8_t best_filt = mbmi->filter_intra_mode_info.use_filter_intra;
   uint8_t best_tx_type_map[MAX_MIB_SIZE * MAX_MIB_SIZE];
@@ -1341,7 +1341,7 @@
         *best_rd = this_rd;
         best_tx_size = mbmi->tx_size;
 #if CONFIG_NEW_TX_PARTITION
-        av1_copy(best_partition_type, mbmi->partition_type);
+        av1_copy(best_tx_partition_type, mbmi->tx_partition_type);
 #endif  // CONFIG_NEW_TX_PARTITION
         best_intra_mode = mbmi->mode;
 #if CONFIG_AIMC
@@ -1371,7 +1371,7 @@
 #endif  // CONFIG_AIMC
     mbmi->tx_size = best_tx_size;
 #if CONFIG_NEW_TX_PARTITION
-    av1_copy(mbmi->partition_type, best_partition_type);
+    av1_copy(mbmi->tx_partition_type, best_tx_partition_type);
 #endif  // CONFIG_NEW_TX_PARTITION
     mbmi->mrl_index = best_mrl;
     mbmi->filter_intra_mode_info.use_filter_intra = best_filt;
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index 16098e7..94b8eb3 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -49,7 +49,7 @@
   const int txb_size_index =
       is_inter ? av1_get_txb_size_index(bsize, blk_row, blk_col) : 0;
   const int is_rect = is_rect_tx(max_tx_size);
-  const TX_PARTITION_TYPE partition = mbmi->partition_type[txb_size_index];
+  const TX_PARTITION_TYPE partition = mbmi->tx_partition_type[txb_size_index];
   const int allow_horz = allow_tx_horz_split(max_tx_size);
   const int allow_vert = allow_tx_vert_split(max_tx_size);
   const int allow_horz4 = allow_tx_horz4_split(max_tx_size);
@@ -149,14 +149,14 @@
 #if CONFIG_NEW_TX_PARTITION
   (void)depth;
   TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
-  get_tx_partition_sizes(mbmi->partition_type[txb_size_index], tx_size,
+  get_tx_partition_sizes(mbmi->tx_partition_type[txb_size_index], tx_size,
                          sub_txs);
   // TODO(sarahparker) This assumes all of the tx sizes in the partition scheme
   // are the same size. This will need to be adjusted to deal with the case
   // where they can be different.
   TX_SIZE this_size = sub_txs[0];
   assert(mbmi->inter_tx_size[txb_size_index] == this_size);
-  if (mbmi->partition_type[txb_size_index] != TX_PARTITION_NONE)
+  if (mbmi->tx_partition_type[txb_size_index] != TX_PARTITION_NONE)
     ++x->txfm_search_info.txb_split_count;
 
   update_partition_cdfs_and_counts(xd, blk_col, blk_row, tx_size,
@@ -263,7 +263,7 @@
 #if CONFIG_NEW_TX_PARTITION
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     const int index = av1_get_txb_size_index(bsize, blk_row, blk_col);
-    get_tx_partition_sizes(mbmi->partition_type[index], tx_size, sub_txs);
+    get_tx_partition_sizes(mbmi->tx_partition_type[index], tx_size, sub_txs);
     int cur_partition = 0;
     int bsw = 0, bsh = 0;
     for (int r = 0; r < tx_size_high_unit[tx_size]; r += bsh) {
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index 6dbb3d2..9244290 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -265,7 +265,7 @@
 #if CONFIG_NEW_TX_PARTITION
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     const int index = av1_get_txb_size_index(plane_bsize, blk_row, blk_col);
-    get_tx_partition_sizes(mbmi->partition_type[index], tx_size, sub_txs);
+    get_tx_partition_sizes(mbmi->tx_partition_type[index], tx_size, sub_txs);
     int cur_partition = 0;
     int bsw = 0, bsh = 0;
     plane_bsize =
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index 6757428..a8ca9ea 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -374,7 +374,7 @@
          sizeof(tx_rd_info->blk_skip[0]) * n4);
   av1_copy(mbmi->inter_tx_size, tx_rd_info->inter_tx_size);
 #if CONFIG_NEW_TX_PARTITION
-  av1_copy(mbmi->partition_type, tx_rd_info->partition_type);
+  av1_copy(mbmi->tx_partition_type, tx_rd_info->tx_partition_type);
 #endif  // CONFIG_NEW_TX_PARTITION
   av1_copy_array(xd->tx_type_map, tx_rd_info->tx_type_map, n4);
   *rd_stats = tx_rd_info->rd_stats;
@@ -523,7 +523,8 @@
   memset(xd->tx_type_map, DCT_DCT, sizeof(xd->tx_type_map[0]) * n4);
   memset(mbmi->inter_tx_size, tx_size, sizeof(mbmi->inter_tx_size));
 #if CONFIG_NEW_TX_PARTITION
-  memset(mbmi->partition_type, TX_PARTITION_NONE, sizeof(mbmi->partition_type));
+  memset(mbmi->tx_partition_type, TX_PARTITION_NONE,
+         sizeof(mbmi->tx_partition_type));
 #endif  // CONFIG_NEW_TX_PARTITION
   mbmi->tx_size = tx_size;
   for (int i = 0; i < n4; ++i)
@@ -585,7 +586,7 @@
          sizeof(tx_rd_info->blk_skip[0]) * n4);
   av1_copy(tx_rd_info->inter_tx_size, mbmi->inter_tx_size);
 #if CONFIG_NEW_TX_PARTITION
-  av1_copy(tx_rd_info->partition_type, mbmi->partition_type);
+  av1_copy(tx_rd_info->tx_partition_type, mbmi->tx_partition_type);
 #endif  // CONFIG_NEW_TX_PARTITION
   av1_copy_array(tx_rd_info->tx_type_map, xd->tx_type_map, n4);
   tx_rd_info->rd_stats = *rd_stats;
@@ -3029,7 +3030,7 @@
   TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
 
   int64_t best_rd = INT64_MAX;
-  TX_PARTITION_TYPE best_partition = -1;
+  TX_PARTITION_TYPE best_tx_partition = -1;
   uint8_t best_partition_entropy_ctxs[MAX_TX_PARTITIONS] = { 0 };
   uint8_t best_partition_tx_types[MAX_TX_PARTITIONS] = { 0 };
   uint8_t full_blk_skip[MAX_TX_PARTITIONS] = { 0 };
@@ -3058,9 +3059,9 @@
       }
     }
     if (cpi->sf.tx_sf.tx_type_search.prune_inter_4way_split) {
-      if (type == TX_PARTITION_VERT4 && best_partition != TX_PARTITION_VERT)
+      if (type == TX_PARTITION_VERT4 && best_tx_partition != TX_PARTITION_VERT)
         continue;
-      if (type == TX_PARTITION_HORZ4 && best_partition != TX_PARTITION_HORZ)
+      if (type == TX_PARTITION_HORZ4 && best_tx_partition != TX_PARTITION_HORZ)
         continue;
     }
 
@@ -3144,7 +3145,7 @@
     // Update the best partition so far
     if (tmp_rd <= best_rd) {
       best_rd = tmp_rd;
-      best_partition = type;
+      best_tx_partition = type;
       memcpy(best_partition_entropy_ctxs, partition_entropy_ctxs,
              sizeof(*partition_entropy_ctxs) * MAX_TX_PARTITIONS);
       memcpy(best_partition_tx_types, partition_tx_types,
@@ -3159,8 +3160,8 @@
 
   // Finalize tx size selection once best partition is found
   int index = av1_get_txb_size_index(plane_bsize, blk_row, blk_col);
-  mbmi->partition_type[index] = best_partition;
-  get_tx_partition_sizes(best_partition, max_tx_size, sub_txs);
+  mbmi->tx_partition_type[index] = best_tx_partition;
+  get_tx_partition_sizes(best_tx_partition, max_tx_size, sub_txs);
   int cur_partition = 0;
   int bsw = 0, bsh = 0;
   for (int r = 0; r < tx_size_high_unit[max_tx_size]; r += bsh) {
@@ -3381,7 +3382,7 @@
   TX_TYPE best_txk_type_map[MAX_MIB_SIZE * MAX_MIB_SIZE];
   uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
   TX_SIZE best_tx_size = max_tx_size;
-  TX_PARTITION_TYPE best_partition_type = TX_PARTITION_NONE;
+  TX_PARTITION_TYPE best_tx_partition_type = TX_PARTITION_NONE;
   int64_t best_rd = INT64_MAX;
   x->rd_model = FULL_TXFM_RD;
   int64_t cur_rd = INT64_MAX;
@@ -3390,13 +3391,13 @@
     if (!use_tx_partition(type, max_tx_size)) continue;
     if (cpi->sf.tx_sf.tx_type_search.prune_intra_4way_split) {
       if (type == TX_PARTITION_VERT4 &&
-          best_partition_type != TX_PARTITION_VERT)
+          best_tx_partition_type != TX_PARTITION_VERT)
         continue;
       if (type == TX_PARTITION_HORZ4 &&
-          best_partition_type != TX_PARTITION_HORZ)
+          best_tx_partition_type != TX_PARTITION_HORZ)
         continue;
     }
-    mbmi->partition_type[0] = type;
+    mbmi->tx_partition_type[0] = type;
     TX_SIZE sub_txs[MAX_TX_PARTITIONS] = { 0 };
     get_tx_partition_sizes(type, max_tx_size, sub_txs);
     TX_SIZE cur_tx_size = sub_txs[0];
@@ -3419,7 +3420,7 @@
       av1_copy_array(best_blk_skip, txfm_info->blk_skip, num_blks);
       av1_copy_array(best_txk_type_map, xd->tx_type_map, num_blks);
       best_tx_size = cur_tx_size;
-      best_partition_type = type;
+      best_tx_partition_type = type;
       best_rd = cur_rd;
       *rd_stats = this_rd_stats;
     }
@@ -3428,7 +3429,7 @@
 
   if (rd_stats->rate != INT_MAX) {
     mbmi->tx_size = best_tx_size;
-    mbmi->partition_type[0] = best_partition_type;
+    mbmi->tx_partition_type[0] = best_tx_partition_type;
     av1_copy_array(xd->tx_type_map, best_txk_type_map, num_blks);
     av1_copy_array(txfm_info->blk_skip, best_blk_skip, num_blks);
   }
diff --git a/av1/encoder/tx_search.h b/av1/encoder/tx_search.h
index a37a573..830df0e 100644
--- a/av1/encoder/tx_search.h
+++ b/av1/encoder/tx_search.h
@@ -123,7 +123,7 @@
   MB_MODE_INFO *const mbmi = xd->mi[0];
   const TX_SIZE max_tx_size = max_txsize_rect_lookup[bsize];
   const int is_rect = is_rect_tx(max_tx_size);
-  return intra_tx_partition_cost(x, is_rect, mbmi->partition_type[0],
+  return intra_tx_partition_cost(x, is_rect, mbmi->tx_partition_type[0],
                                  max_tx_size);
 #else
   const int32_t tx_size_cat = bsize_to_tx_size_cat(bsize);
