diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 18f3598..bc568cf 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -38,7 +38,6 @@
 };
 /* clang-format on */
 
-#if CONFIG_NEW_MULTISYMBOL
 /* Extra bits coded from LSB to MSB */
 const aom_cdf_prob av1_cat1_cdf0[CDF_SIZE(2)] = { AOM_CDF2(20352) };
 const aom_cdf_prob *av1_cat1_cdf[] = { av1_cat1_cdf0 };
@@ -78,7 +77,6 @@
 const aom_cdf_prob *av1_cat6_cdf[] = {
   av1_cat6_cdf0, av1_cat6_cdf1, av1_cat6_cdf2, av1_cat6_cdf3, av1_cat6_cdf4
 };
-#endif
 /* Extra bits coded from MSB to LSB */
 const aom_prob av1_cat1_prob[] = { 159 };
 const aom_prob av1_cat2_prob[] = { 165, 145 };
@@ -1658,13 +1656,11 @@
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].classes_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].class0_fp_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].fp_cdf)
-#if CONFIG_NEW_MULTISYMBOL
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].sign_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].hp_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].class0_hp_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].class0_cdf)
       AVERAGE_TILE_CDFS(nmvc[j].comps[k].bits_cdf)
-#endif
     }
   }
 }
@@ -1689,10 +1685,8 @@
 
 #if CONFIG_LOOP_RESTORATION
   AVERAGE_TILE_CDFS(switchable_restore_cdf)
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(wiener_restore_cdf)
   AVERAGE_TILE_CDFS(sgrproj_restore_cdf)
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_LOOP_RESTORATION
 }
 
@@ -1711,9 +1705,7 @@
   AVERAGE_TILE_CDFS(inter_ext_tx_cdf)
 
   AVERAGE_TILE_CDFS(seg.tree_cdf)
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(seg.pred_cdf)
-#endif
   AVERAGE_TILE_CDFS(uv_mode_cdf)
 
 #if CONFIG_CFL
@@ -1731,10 +1723,8 @@
 #endif
 #endif
 
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(skip_cdfs)
   AVERAGE_TILE_CDFS(txfm_partition_cdf)
-#endif  // CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(palette_y_size_cdf)
   AVERAGE_TILE_CDFS(palette_uv_size_cdf)
   AVERAGE_TILE_CDFS(palette_y_color_index_cdf)
@@ -1746,10 +1736,8 @@
 #if CONFIG_MRC_TX
   AVERAGE_TILE_CDFS(mrc_mask_intra_cdf)
 #endif  // CONFIG_MRC_TX
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(palette_y_mode_cdf)
   AVERAGE_TILE_CDFS(palette_uv_mode_cdf)
-#endif
 #if CONFIG_LPF_SB
   AVERAGE_TILE_CDFS(lpf_reuse_cdf);
   AVERAGE_TILE_CDFS(lpf_delta_cdf);
@@ -1771,13 +1759,10 @@
 #endif
   aom_cdf_prob *fc_cdf_ptr;
 
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(comp_inter_cdf)
   AVERAGE_TILE_CDFS(comp_ref_cdf)
   AVERAGE_TILE_CDFS(comp_bwdref_cdf)
-#endif
 
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(single_ref_cdf)
 
   AVERAGE_TILE_CDFS(newmv_cdf)
@@ -1788,7 +1773,6 @@
   AVERAGE_TILE_CDFS(uni_comp_ref_cdf)
   AVERAGE_TILE_CDFS(comp_ref_type_cdf)
 #endif
-#endif
 
   // FIXME: cdfs not defined for super_tx
 
@@ -1796,10 +1780,8 @@
 
   AVERAGE_TILE_CDFS(compound_type_cdf)
 
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(interintra_cdf)
   AVERAGE_TILE_CDFS(wedge_interintra_cdf)
-#endif
   AVERAGE_TILE_CDFS(interintra_mode_cdf)
 
   /* NB: kf_y_cdf is discarded after use, so no need
@@ -1809,11 +1791,9 @@
   if (cm->interp_filter == SWITCHABLE) {
     AVERAGE_TILE_CDFS(switchable_interp_cdf)
   }
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(intra_inter_cdf)
   AVERAGE_TILE_CDFS(motion_mode_cdf)
   AVERAGE_TILE_CDFS(obmc_cdf)
-#endif
 #if CONFIG_MRC_TX
   AVERAGE_TILE_CDFS(mrc_mask_inter_cdf)
 #endif  // CONFIG_MRC_TX
@@ -1827,8 +1807,6 @@
   for (j = 0; j < Q_SEGMENT_CDF_COUNT; j++) AVERAGE_TILE_CDFS(seg.q_seg_cdf[j]);
 #endif
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
   AVERAGE_TILE_CDFS(compound_index_cdf);
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_JNT_COMP
 }
diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index 2df25d8..3b61b4c 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -143,23 +143,17 @@
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat4_prob[4]);
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat5_prob[5]);
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat6_prob[18]);
-#if CONFIG_NEW_MULTISYMBOL
 extern const aom_cdf_prob *av1_cat1_cdf[];
 extern const aom_cdf_prob *av1_cat2_cdf[];
 extern const aom_cdf_prob *av1_cat3_cdf[];
 extern const aom_cdf_prob *av1_cat4_cdf[];
 extern const aom_cdf_prob *av1_cat5_cdf[];
 extern const aom_cdf_prob *av1_cat6_cdf[];
-#endif
 
 #define EOB_MODEL_TOKEN 3
 
 typedef struct {
-#if CONFIG_NEW_MULTISYMBOL
   const aom_cdf_prob **cdf;
-#else
-  const aom_prob *prob;
-#endif
   int len;
   int base_val;
   const int16_t *cost;
@@ -177,10 +171,8 @@
 #endif
   int tx_offset = (int)(tx_size - TX_4X4);
   int bits = (int)bit_depth + 3 + tx_offset;
-#if CONFIG_NEW_MULTISYMBOL
   // Round up
   bits = AOMMIN((int)sizeof(av1_cat6_prob), ((bits + 3) & ~3));
-#endif
   assert(bits <= (int)sizeof(av1_cat6_prob));
   return bits;
 }
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index dc045bc..75b8094 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -705,7 +705,6 @@
 static const aom_prob default_drl_prob[DRL_MODE_CONTEXTS] = {
   119, 128, 189, 134, 128,
 };
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_newmv_cdf[NEWMV_MODE_CONTEXTS][CDF_SIZE(2)] =
     { { AOM_CDF2(128 * 155) }, { AOM_CDF2(128 * 116) }, { AOM_CDF2(128 * 94) },
       { AOM_CDF2(128 * 32) },  { AOM_CDF2(128 * 96) },  { AOM_CDF2(128 * 56) },
@@ -725,7 +724,6 @@
   { AOM_CDF2(128 * 134) },
   { AOM_CDF2(128 * 128) }
 };
-#endif
 
 static const aom_prob default_inter_compound_mode_probs
     [INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES - 1] = {
@@ -792,13 +790,11 @@
 static const aom_prob default_interintra_prob[BLOCK_SIZE_GROUPS] = {
   128, 226, 244, 254,
 };
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_interintra_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(
     2)] = { { AOM_CDF2(128 * 128) },
             { AOM_CDF2(226 * 128) },
             { AOM_CDF2(244 * 128) },
             { AOM_CDF2(254 * 128) } };
-#endif
 
 static const aom_prob
     default_interintra_mode_prob[BLOCK_SIZE_GROUPS][INTERINTRA_MODES - 1] = {
@@ -826,7 +822,6 @@
 #endif  // CONFIG_EXT_PARTITION
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob
     default_wedge_interintra_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)] = {
       { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) },
@@ -844,7 +839,6 @@
       { AOM_CDF2(255 * 128) }, { AOM_CDF2(255 * 128) },
 #endif  // CONFIG_EXT_PARTITION
     };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 const aom_tree_index av1_motion_mode_tree[TREE_SIZE(MOTION_MODES)] = {
   -SIMPLE_TRANSLATION, 2, -OBMC_CAUSAL, -WARPED_CAUSAL,
@@ -899,7 +893,6 @@
 #endif  // CONFIG_EXT_PARTITION
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_obmc_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)] = {
   { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) },
   { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) }, { AOM_CDF2(128 * 128) },
@@ -916,7 +909,6 @@
   { AOM_CDF2(252 * 128) }, { AOM_CDF2(252 * 128) },
 #endif  // CONFIG_EXT_PARTITION
 };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static const aom_prob default_delta_q_probs[DELTA_Q_PROBS] = { 220, 220, 220 };
 static const aom_cdf_prob default_delta_q_cdf[CDF_SIZE(DELTA_Q_PROBS + 1)] = {
@@ -969,7 +961,6 @@
   6, 97, 151, 205,
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_intra_inter_cdf[INTRA_INTER_CONTEXTS]
                                                  [CDF_SIZE(2)] = {
                                                    { AOM_CDF2(768) },
@@ -977,20 +968,17 @@
                                                    { AOM_CDF2(19328) },
                                                    { AOM_CDF2(26240) }
                                                  };
-#endif
 
 static const aom_prob default_comp_inter_p[COMP_INTER_CONTEXTS] = {
   190, 156, 91, 77, 22
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_comp_inter_cdf[COMP_INTER_CONTEXTS][CDF_SIZE(
     2)] = { { AOM_CDF2(24290) },
             { AOM_CDF2(19956) },
             { AOM_CDF2(11641) },
             { AOM_CDF2(9804) },
             { AOM_CDF2(2842) } };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 #if CONFIG_EXT_COMP_REFS
 static const aom_prob default_comp_ref_type_p[COMP_REF_TYPE_CONTEXTS] = {
@@ -1001,7 +989,6 @@
       { 88, 30, 28 }, { 218, 97, 105 }, { 254, 180, 196 }
     };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_comp_ref_type_cdf[COMP_REF_TYPE_CONTEXTS]
                                                    [CDF_SIZE(2)] = {
                                                      { AOM_CDF2(8 * 128) },
@@ -1021,7 +1008,6 @@
                                               { { AOM_CDF2(254 * 128) },
                                                 { AOM_CDF2(180 * 128) },
                                                 { AOM_CDF2(196 * 128) } } };
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_EXT_COMP_REFS
 
 static const aom_prob default_comp_ref_p[REF_CONTEXTS][FWD_REFS - 1] = {
@@ -1036,7 +1022,6 @@
   { 22, 13 }, { 140, 124 }, { 241, 239 }, { 128, 128 }, { 128, 128 }
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob
     default_comp_ref_cdf[REF_CONTEXTS][FWD_REFS - 1][CDF_SIZE(2)] = {
       { { AOM_CDF2(3556) }, { AOM_CDF2(1217) }, { AOM_CDF2(988) } },
@@ -1054,7 +1039,6 @@
       { { AOM_CDF2(32768) }, { AOM_CDF2(32768) } },
       { { AOM_CDF2(32768) }, { AOM_CDF2(32768) } }
     };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static const aom_prob default_single_ref_p[REF_CONTEXTS][SINGLE_REFS - 1] = {
   { 36, 16, 32, 57, 11, 14 },
@@ -1064,7 +1048,6 @@
   { 224, 128, 230, 242, 208, 128 }
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_single_ref_cdf[REF_CONTEXTS][SINGLE_REFS - 1]
                                                 [CDF_SIZE(2)] = {
                                                   { { AOM_CDF2(4623) },
@@ -1098,7 +1081,6 @@
                                                     { AOM_CDF2(26676) },
                                                     { AOM_CDF2(32768) } }
                                                 };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 // TODO(huisu): tune these cdfs
 const aom_cdf_prob
@@ -1150,7 +1132,6 @@
   253, 229
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 const aom_cdf_prob default_palette_y_mode_cdf[PALETTE_BLOCK_SIZES]
                                              [PALETTE_Y_MODE_CONTEXTS]
                                              [CDF_SIZE(2)] = {
@@ -1190,7 +1171,6 @@
     default_palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][CDF_SIZE(2)] = {
       { AOM_CDF2(128 * 253) }, { AOM_CDF2(128 * 229) }
     };
-#endif
 
 const aom_cdf_prob default_palette_y_color_index_cdf
     [PALETTE_SIZES][PALETTE_COLOR_INDEX_CONTEXTS][CDF_SIZE(PALETTE_COLORS)] = {
@@ -1421,13 +1401,11 @@
 static const aom_cdf_prob default_switchable_restore_cdf[CDF_SIZE(
     RESTORE_SWITCHABLE_TYPES)] = { AOM_CDF3(32 * 128, 144 * 128) };
 
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob default_wiener_restore_cdf[CDF_SIZE(2)] = { AOM_CDF2(
     64 * 128) };
 
 static const aom_cdf_prob default_sgrproj_restore_cdf[CDF_SIZE(2)] = { AOM_CDF2(
     64 * 128) };
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_LOOP_RESTORATION
 
 #define NUM_PALETTE_NEIGHBORS 3  // left, top-left and top.
@@ -1522,7 +1500,6 @@
   250, 231, 212, 241, 166, 66, 241, 230, 135, 243, 154, 64, 248, 161, 63, 128
 #endif  // CONFIG_TX64X64
 };
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob
     default_txfm_partition_cdf[TXFM_PARTITION_CONTEXTS][CDF_SIZE(2)] = {
 #if CONFIG_TX64X64
@@ -1543,9 +1520,7 @@
       { AOM_CDF2(128 * 128) },
 #endif  // CONFIG_TX64X64
     };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
-#if CONFIG_NEW_MULTISYMBOL
 #if CONFIG_EXT_SKIP
 static const aom_cdf_prob default_skip_mode_cdfs[SKIP_MODE_CONTEXTS][CDF_SIZE(
     2)] = { { AOM_CDF2(24576) }, { AOM_CDF2(16384) }, { AOM_CDF2(8192) } };
@@ -1553,16 +1528,8 @@
 static const aom_cdf_prob default_skip_cdfs[SKIP_CONTEXTS][CDF_SIZE(2)] = {
   { AOM_CDF2(24576) }, { AOM_CDF2(16384) }, { AOM_CDF2(8192) }
 };
-#else  // !CONFIG_NEW_MULTISYMBOL
-#if CONFIG_EXT_SKIP
-static const aom_prob default_skip_mode_probs[SKIP_MODE_CONTEXTS] = { 192, 128,
-                                                                      64 };
-#endif  // CONFIG_EXT_SKIP
-static const aom_prob default_skip_probs[SKIP_CONTEXTS] = { 192, 128, 64 };
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob
     default_compound_idx_cdfs[COMP_INDEX_CONTEXTS][CDF_SIZE(2)] = {
       { AOM_ICDF(24576), AOM_ICDF(32768), 0 },
@@ -1572,7 +1539,6 @@
       { AOM_ICDF(16384), AOM_ICDF(32768), 0 },
       { AOM_ICDF(8192), AOM_ICDF(32768), 0 },
     };
-#endif  // CONFIG_NEW_MULTISYMBOL
 static const aom_prob default_compound_idx_probs[COMP_INDEX_CONTEXTS] = {
   192, 128, 64, 192, 128, 64
 };
@@ -1599,14 +1565,12 @@
 static const aom_prob default_segment_pred_probs[PREDICTION_PROBS] = {
   128, 128, 128
 };
-#if CONFIG_NEW_MULTISYMBOL
 static const aom_cdf_prob
     default_segment_pred_cdf[PREDICTION_PROBS][CDF_SIZE(2)] = {
   { AOM_CDF2(128 * 128) },
   { AOM_CDF2(128 * 128) },
   { AOM_CDF2(128 * 128) }
 };
-#endif
 // clang-format on
 #if CONFIG_DUAL_FILTER
 #if USE_EXTRA_FILTER
@@ -3047,23 +3011,17 @@
   av1_copy(fc->mrc_mask_inter_cdf, default_mrc_mask_inter_cdf);
   av1_copy(fc->mrc_mask_intra_cdf, default_mrc_mask_intra_cdf);
 #endif  // CONFIG_MRC_TX
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->comp_inter_cdf, default_comp_inter_cdf);
-#endif  // CONFIG_NEW_MULTISYMBOL
 #if CONFIG_EXT_COMP_REFS
   av1_copy(fc->comp_ref_type_prob, default_comp_ref_type_p);
   av1_copy(fc->uni_comp_ref_prob, default_uni_comp_ref_p);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->comp_ref_type_cdf, default_comp_ref_type_cdf);
   av1_copy(fc->uni_comp_ref_cdf, default_uni_comp_ref_cdf);
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_EXT_COMP_REFS
   av1_copy(fc->comp_ref_prob, default_comp_ref_p);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->palette_y_mode_cdf, default_palette_y_mode_cdf);
   av1_copy(fc->palette_uv_mode_cdf, default_palette_uv_mode_cdf);
   av1_copy(fc->comp_ref_cdf, default_comp_ref_cdf);
-#endif
 #if CONFIG_LV_MAP
   av1_copy(fc->txb_skip, default_txb_skip);
   av1_copy(fc->nz_map, default_nz_map);
@@ -3086,66 +3044,48 @@
   av1_init_txb_probs(fc);
 #endif
   av1_copy(fc->comp_bwdref_prob, default_comp_bwdref_p);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->comp_bwdref_cdf, default_comp_bwdref_cdf);
-#endif
   av1_copy(fc->single_ref_prob, default_single_ref_p);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->single_ref_cdf, default_single_ref_cdf);
-#endif
   av1_copy(fc->txfm_partition_prob, default_txfm_partition_probs);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->txfm_partition_cdf, default_txfm_partition_cdf);
-#endif
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->compound_index_cdf, default_compound_idx_cdfs);
-#endif  // CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->compound_index_probs, default_compound_idx_probs);
 #endif  // CONFIG_JNT_COMP
   av1_copy(fc->newmv_prob, default_newmv_prob);
   av1_copy(fc->zeromv_prob, default_zeromv_prob);
   av1_copy(fc->refmv_prob, default_refmv_prob);
   av1_copy(fc->drl_prob, default_drl_prob);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->newmv_cdf, default_newmv_cdf);
   av1_copy(fc->zeromv_cdf, default_zeromv_cdf);
   av1_copy(fc->refmv_cdf, default_refmv_cdf);
   av1_copy(fc->drl_cdf, default_drl_cdf);
-#endif
   av1_copy(fc->motion_mode_prob, default_motion_mode_prob);
   av1_copy(fc->motion_mode_cdf, default_motion_mode_cdf);
   av1_copy(fc->obmc_prob, default_obmc_prob);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->obmc_cdf, default_obmc_cdf);
-#endif
   av1_copy(fc->inter_compound_mode_probs, default_inter_compound_mode_probs);
   av1_copy(fc->inter_compound_mode_cdf, default_inter_compound_mode_cdf);
   av1_copy(fc->compound_type_prob, default_compound_type_probs);
   av1_copy(fc->compound_type_cdf, default_compound_type_cdf);
   av1_copy(fc->interintra_prob, default_interintra_prob);
   av1_copy(fc->wedge_interintra_prob, default_wedge_interintra_prob);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->interintra_cdf, default_interintra_cdf);
   av1_copy(fc->wedge_interintra_cdf, default_wedge_interintra_cdf);
-#endif  // CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->interintra_mode_prob, default_interintra_mode_prob);
   av1_copy(fc->interintra_mode_cdf, default_interintra_mode_cdf);
   av1_copy(fc->seg.tree_probs, default_segment_tree_probs);
   av1_copy(fc->seg.pred_probs, default_segment_pred_probs);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->seg.pred_cdf, default_segment_pred_cdf);
-#endif
 #if CONFIG_FILTER_INTRA
   av1_copy(fc->filter_intra_cdfs, default_filter_intra_cdfs);
   av1_copy(fc->filter_intra_mode_cdf, default_filter_intra_mode_cdf);
 #endif  // CONFIG_FILTER_INTRA
 #if CONFIG_LOOP_RESTORATION
   av1_copy(fc->switchable_restore_cdf, default_switchable_restore_cdf);
-#if CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->wiener_restore_cdf, default_wiener_restore_cdf);
   av1_copy(fc->sgrproj_restore_cdf, default_sgrproj_restore_cdf);
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_LOOP_RESTORATION
   av1_copy(fc->y_mode_cdf, default_if_y_mode_cdf);
   av1_copy(fc->uv_mode_cdf, default_uv_mode_cdf);
@@ -3153,18 +3093,11 @@
   av1_copy(fc->partition_cdf, default_partition_cdf);
   av1_copy(fc->intra_ext_tx_cdf, default_intra_ext_tx_cdf);
   av1_copy(fc->inter_ext_tx_cdf, default_inter_ext_tx_cdf);
-#if CONFIG_NEW_MULTISYMBOL
 #if CONFIG_EXT_SKIP
   av1_copy(fc->skip_mode_cdfs, default_skip_mode_cdfs);
 #endif  // CONFIG_EXT_SKIP
   av1_copy(fc->skip_cdfs, default_skip_cdfs);
   av1_copy(fc->intra_inter_cdf, default_intra_inter_cdf);
-#else  // !CONFIG_NEW_MULTISYMBOL
-#if CONFIG_EXT_SKIP
-  av1_copy(fc->skip_mode_probs, default_skip_mode_probs);
-#endif  // CONFIG_EXT_SKIP
-  av1_copy(fc->skip_probs, default_skip_probs);
-#endif  // CONFIG_NEW_MULTISYMBOL
   av1_copy(fc->seg.tree_cdf, default_seg_tree_cdf);
 #if CONFIG_Q_SEGMENTATION
   for (int i = 0; i < Q_SEGMENT_CDF_COUNT; i++)
@@ -3304,17 +3237,6 @@
           pre_fc->txfm_partition_prob[i], counts->txfm_partition[i]);
   }
 
-#if !CONFIG_NEW_MULTISYMBOL
-#if CONFIG_EXT_SKIP
-  for (i = 0; i < SKIP_MODE_CONTEXTS; ++i)
-    fc->skip_mode_probs[i] = av1_mode_mv_merge_probs(pre_fc->skip_mode_probs[i],
-                                                     counts->skip_mode[i]);
-#endif  // CONFIG_EXT_SKIP
-  for (i = 0; i < SKIP_CONTEXTS; ++i)
-    fc->skip_probs[i] =
-        av1_mode_mv_merge_probs(pre_fc->skip_probs[i], counts->skip[i]);
-#endif  // !CONFIG_NEW_MULTISYMBOL
-
   if (cm->seg.temporal_update) {
     for (i = 0; i < PREDICTION_PROBS; i++)
       fc->seg.pred_probs[i] = av1_mode_mv_merge_probs(pre_fc->seg.pred_probs[i],
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index e63a7c1..540b5da 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -181,12 +181,10 @@
   aom_prob zeromv_prob[GLOBALMV_MODE_CONTEXTS];
   aom_prob refmv_prob[REFMV_MODE_CONTEXTS];
   aom_prob drl_prob[DRL_MODE_CONTEXTS];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob newmv_cdf[NEWMV_MODE_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob zeromv_cdf[GLOBALMV_MODE_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob refmv_cdf[REFMV_MODE_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob drl_cdf[DRL_MODE_CONTEXTS][CDF_SIZE(2)];
-#endif
 
   aom_prob inter_compound_mode_probs[INTER_MODE_CONTEXTS]
                                     [INTER_COMPOUND_MODES - 1];
@@ -197,18 +195,14 @@
   aom_prob interintra_prob[BLOCK_SIZE_GROUPS];
   aom_prob wedge_interintra_prob[BLOCK_SIZES_ALL];
   aom_prob interintra_mode_prob[BLOCK_SIZE_GROUPS][INTERINTRA_MODES - 1];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob interintra_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(2)];
   aom_cdf_prob wedge_interintra_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)];
-#endif
   aom_cdf_prob interintra_mode_cdf[BLOCK_SIZE_GROUPS]
                                   [CDF_SIZE(INTERINTRA_MODES)];
   aom_prob motion_mode_prob[BLOCK_SIZES_ALL][MOTION_MODES - 1];
   aom_cdf_prob motion_mode_cdf[BLOCK_SIZES_ALL][CDF_SIZE(MOTION_MODES)];
   aom_prob obmc_prob[BLOCK_SIZES_ALL];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob obmc_cdf[BLOCK_SIZES_ALL][CDF_SIZE(2)];
-#endif  // CONFIG_NEW_MULTISYMBOL
   aom_prob intra_inter_prob[INTRA_INTER_CONTEXTS];
   aom_prob comp_inter_prob[COMP_INTER_CONTEXTS];
   aom_cdf_prob palette_y_size_cdf[PALETTE_BLOCK_SIZES][CDF_SIZE(PALETTE_SIZES)];
@@ -226,51 +220,34 @@
   aom_cdf_prob mrc_mask_intra_cdf[PALETTE_SIZES][PALETTE_COLOR_INDEX_CONTEXTS]
                                  [CDF_SIZE(PALETTE_COLORS)];
 #endif  // CONFIG_MRC_TX
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob palette_y_mode_cdf[PALETTE_BLOCK_SIZES][PALETTE_Y_MODE_CONTEXTS]
                                  [CDF_SIZE(2)];
   aom_cdf_prob palette_uv_mode_cdf[PALETTE_UV_MODE_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob comp_inter_cdf[COMP_INTER_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob single_ref_cdf[REF_CONTEXTS][SINGLE_REFS - 1][CDF_SIZE(2)];
-#endif
 #if CONFIG_EXT_COMP_REFS
   aom_prob comp_ref_type_prob[COMP_REF_TYPE_CONTEXTS];
   aom_prob uni_comp_ref_prob[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob comp_ref_type_cdf[COMP_REF_TYPE_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob uni_comp_ref_cdf[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1]
                                [CDF_SIZE(2)];
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_EXT_COMP_REFS
   aom_prob single_ref_prob[REF_CONTEXTS][SINGLE_REFS - 1];
   aom_prob comp_ref_prob[REF_CONTEXTS][FWD_REFS - 1];
   aom_prob comp_bwdref_prob[REF_CONTEXTS][BWD_REFS - 1];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob comp_ref_cdf[REF_CONTEXTS][FWD_REFS - 1][CDF_SIZE(2)];
   aom_cdf_prob comp_bwdref_cdf[REF_CONTEXTS][BWD_REFS - 1][CDF_SIZE(2)];
-#endif
   aom_prob txfm_partition_prob[TXFM_PARTITION_CONTEXTS];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob txfm_partition_cdf[TXFM_PARTITION_CONTEXTS][CDF_SIZE(2)];
-#endif
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob compound_index_cdf[COMP_INDEX_CONTEXTS][CDF_SIZE(2)];
-#endif  // CONFIG_NEW_MULTISYMBOL
   aom_prob compound_index_probs[COMP_INDEX_CONTEXTS];
 #endif  // CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
 #if CONFIG_EXT_SKIP
   aom_cdf_prob skip_mode_cdfs[SKIP_CONTEXTS][CDF_SIZE(2)];
 #endif  // CONFIG_EXT_SKIP
   aom_cdf_prob skip_cdfs[SKIP_CONTEXTS][CDF_SIZE(2)];
   aom_cdf_prob intra_inter_cdf[INTRA_INTER_CONTEXTS][CDF_SIZE(2)];
-#else  // !CONFIG_NEW_MULTISYMBOL
-#if CONFIG_EXT_SKIP
-  aom_prob skip_mode_probs[SKIP_CONTEXTS];
-#endif  // CONFIG_EXT_SKIP
-  aom_prob skip_probs[SKIP_CONTEXTS];
-#endif  // CONFIG_NEW_MULTISYMBOL
   nmv_context nmvc[NMV_CONTEXTS];
 #if CONFIG_INTRABC
   nmv_context ndvc;
@@ -284,10 +261,8 @@
 #endif  // CONFIG_FILTER_INTRA
 #if CONFIG_LOOP_RESTORATION
   aom_cdf_prob switchable_restore_cdf[CDF_SIZE(RESTORE_SWITCHABLE_TYPES)];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob wiener_restore_cdf[CDF_SIZE(2)];
   aom_cdf_prob sgrproj_restore_cdf[CDF_SIZE(2)];
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_LOOP_RESTORATION
   aom_cdf_prob y_mode_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(INTRA_MODES)];
   aom_cdf_prob uv_mode_cdf[INTRA_MODES][CDF_SIZE(UV_INTRA_MODES)];
diff --git a/av1/common/entropymv.c b/av1/common/entropymv.c
index 95c673a..563cc47 100644
--- a/av1/common/entropymv.c
+++ b/av1/common/entropymv.c
@@ -59,7 +59,6 @@
         { AOM_CDF4(8192, 17408, 21248) },       // fp_cdf
         160,                                    // class0_hp bit
         128,                                    // hp
-#if CONFIG_NEW_MULTISYMBOL
         { AOM_CDF2(128 * 128) },
         { AOM_CDF2(160 * 128) },
         { AOM_CDF2(128 * 128) },
@@ -74,7 +73,6 @@
           { AOM_CDF2(128 * 234) },
           { AOM_CDF2(128 * 234) },
           { AOM_CDF2(128 * 240) } },  // bits_cdf
-#endif
     },
     {
         // Horizontal component
@@ -91,7 +89,6 @@
         { AOM_CDF4(8192, 17408, 21248) },       // fp_cdf
         160,                                    // class0_hp bit
         128,                                    // hp
-#if CONFIG_NEW_MULTISYMBOL
         { AOM_CDF2(128 * 128) },
         { AOM_CDF2(160 * 128) },
         { AOM_CDF2(128 * 128) },
@@ -106,7 +103,6 @@
           { AOM_CDF2(128 * 234) },
           { AOM_CDF2(128 * 234) },
           { AOM_CDF2(128 * 240) } },  // bits_cdf
-#endif
     } },
 };
 
diff --git a/av1/common/entropymv.h b/av1/common/entropymv.h
index 09ef926..49183a9 100644
--- a/av1/common/entropymv.h
+++ b/av1/common/entropymv.h
@@ -66,9 +66,7 @@
 #define CLASS0_BITS 1 /* bits at integer precision for class 0 */
 #define CLASS0_SIZE (1 << CLASS0_BITS)
 #define MV_OFFSET_BITS (MV_CLASSES + CLASS0_BITS - 2)
-#if CONFIG_NEW_MULTISYMBOL
 #define MV_BITS_CONTEXTS 6
-#endif
 #define MV_FP_SIZE 4
 
 #define MV_MAX_BITS (MV_CLASSES + CLASS0_BITS + 2)
@@ -96,13 +94,11 @@
   aom_cdf_prob fp_cdf[CDF_SIZE(MV_FP_SIZE)];
   aom_prob class0_hp;
   aom_prob hp;
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob sign_cdf[CDF_SIZE(2)];
   aom_cdf_prob class0_hp_cdf[CDF_SIZE(2)];
   aom_cdf_prob hp_cdf[CDF_SIZE(2)];
   aom_cdf_prob class0_cdf[CDF_SIZE(CLASS0_SIZE)];
   aom_cdf_prob bits_cdf[MV_OFFSET_BITS][CDF_SIZE(2)];
-#endif
 } nmv_component;
 
 typedef struct {
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index b163aa6..a920b4a 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -1383,11 +1383,7 @@
 
 static INLINE int use_compressed_header(const AV1_COMMON *cm) {
   (void)cm;
-#if CONFIG_NEW_MULTISYMBOL
   return 0;
-#else
-  return 1;
-#endif  // CONFIG_NEW_MULTISYMBOL
 }
 
 #ifdef __cplusplus
diff --git a/av1/common/pred_common.h b/av1/common/pred_common.h
index 77c19f8..7a7d990 100644
--- a/av1/common/pred_common.h
+++ b/av1/common/pred_common.h
@@ -129,12 +129,10 @@
 }
 #endif  // CONFIG_JNT_COMP
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_seg_id(
     struct segmentation_probs *segp, const MACROBLOCKD *xd) {
   return segp->pred_cdf[av1_get_pred_context_seg_id(xd)];
 }
-#endif
 
 #if CONFIG_EXT_SKIP
 static INLINE int av1_get_skip_mode_context(const MACROBLOCKD *xd) {
@@ -177,12 +175,10 @@
                                                    const MACROBLOCKD *xd) {
   return cm->fc->comp_inter_prob[av1_get_reference_mode_context(cm, xd)];
 }
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_reference_mode_cdf(const AV1_COMMON *cm,
                                                        const MACROBLOCKD *xd) {
   return xd->tile_ctx->comp_inter_cdf[av1_get_reference_mode_context(cm, xd)];
 }
-#endif
 
 #if CONFIG_EXT_COMP_REFS
 int av1_get_comp_reference_type_context(const MACROBLOCKD *xd);
@@ -216,7 +212,6 @@
   return cm->fc->uni_comp_ref_prob[pred_context][2];
 }
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_comp_reference_type_cdf(
     const MACROBLOCKD *xd) {
   const int pred_context = av1_get_comp_reference_type_context(xd);
@@ -240,19 +235,16 @@
   const int pred_context = av1_get_pred_context_uni_comp_ref_p2(xd);
   return xd->tile_ctx->uni_comp_ref_cdf[pred_context][2];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_EXT_COMP_REFS
 
 int av1_get_pred_context_comp_ref_p(const AV1_COMMON *cm,
                                     const MACROBLOCKD *xd);
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_comp_ref_p(const AV1_COMMON *cm,
                                                         const MACROBLOCKD *xd) {
   const int pred_context = av1_get_pred_context_comp_ref_p(cm, xd);
   return xd->tile_ctx->comp_ref_cdf[pred_context][0];
 }
-#endif
 
 static INLINE aom_prob av1_get_pred_prob_comp_ref_p(const AV1_COMMON *cm,
                                                     const MACROBLOCKD *xd) {
@@ -263,13 +255,11 @@
 int av1_get_pred_context_comp_ref_p1(const AV1_COMMON *cm,
                                      const MACROBLOCKD *xd);
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_comp_ref_p1(
     const AV1_COMMON *cm, const MACROBLOCKD *xd) {
   const int pred_context = av1_get_pred_context_comp_ref_p1(cm, xd);
   return xd->tile_ctx->comp_ref_cdf[pred_context][1];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static INLINE aom_prob av1_get_pred_prob_comp_ref_p1(const AV1_COMMON *cm,
                                                      const MACROBLOCKD *xd) {
@@ -280,13 +270,11 @@
 int av1_get_pred_context_comp_ref_p2(const AV1_COMMON *cm,
                                      const MACROBLOCKD *xd);
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_comp_ref_p2(
     const AV1_COMMON *cm, const MACROBLOCKD *xd) {
   const int pred_context = av1_get_pred_context_comp_ref_p2(cm, xd);
   return xd->tile_ctx->comp_ref_cdf[pred_context][2];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static INLINE aom_prob av1_get_pred_prob_comp_ref_p2(const AV1_COMMON *cm,
                                                      const MACROBLOCKD *xd) {
@@ -297,13 +285,11 @@
 int av1_get_pred_context_comp_bwdref_p(const AV1_COMMON *cm,
                                        const MACROBLOCKD *xd);
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_comp_bwdref_p(
     const AV1_COMMON *cm, const MACROBLOCKD *xd) {
   const int pred_context = av1_get_pred_context_comp_bwdref_p(cm, xd);
   return xd->tile_ctx->comp_bwdref_cdf[pred_context][0];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static INLINE aom_prob av1_get_pred_prob_comp_bwdref_p(const AV1_COMMON *cm,
                                                        const MACROBLOCKD *xd) {
@@ -314,13 +300,11 @@
 int av1_get_pred_context_comp_bwdref_p1(const AV1_COMMON *cm,
                                         const MACROBLOCKD *xd);
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_comp_bwdref_p1(
     const AV1_COMMON *cm, const MACROBLOCKD *xd) {
   const int pred_context = av1_get_pred_context_comp_bwdref_p1(cm, xd);
   return xd->tile_ctx->comp_bwdref_cdf[pred_context][1];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static INLINE aom_prob av1_get_pred_prob_comp_bwdref_p1(const AV1_COMMON *cm,
                                                         const MACROBLOCKD *xd) {
@@ -370,7 +354,6 @@
   return cm->fc->single_ref_prob[av1_get_pred_context_single_ref_p6(xd)][5];
 }
 
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE aom_cdf_prob *av1_get_pred_cdf_single_ref_p1(
     const AV1_COMMON *cm, const MACROBLOCKD *xd) {
   (void)cm;
@@ -407,7 +390,6 @@
   return xd->tile_ctx
       ->single_ref_cdf[av1_get_pred_context_single_ref_p6(xd)][5];
 }
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 // Returns a context number for the given MB prediction signal
 // The mode info data structure has a one element border above and to the
diff --git a/av1/common/seg_common.h b/av1/common/seg_common.h
index 6b0675a..6830dba 100644
--- a/av1/common/seg_common.h
+++ b/av1/common/seg_common.h
@@ -76,16 +76,10 @@
   aom_prob tree_probs[SEG_TREE_PROBS];
   aom_cdf_prob tree_cdf[CDF_SIZE(MAX_SEGMENTS)];
   aom_prob pred_probs[PREDICTION_PROBS];
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob pred_cdf[PREDICTION_PROBS][CDF_SIZE(2)];
 #if CONFIG_Q_SEGMENTATION
   aom_cdf_prob q_seg_cdf[Q_SEGMENT_CDF_COUNT][CDF_SIZE(MAX_SEGMENTS)];
 #endif
-#else
-#if CONFIG_Q_SEGMENTATION
-  aom_prob q_seg_cdf[Q_SEGMENT_CDF_COUNT][CDF_SIZE(MAX_SEGMENTS)];
-#endif
-#endif
 };
 
 static INLINE int segfeature_active(const struct segmentation *seg,
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 9029a7a..0fc9b84 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -147,20 +147,6 @@
 }
 #endif  // CONFIG_SIMPLIFY_TX_MODE
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void read_inter_mode_probs(FRAME_CONTEXT *fc, aom_reader *r) {
-  int i;
-  for (i = 0; i < NEWMV_MODE_CONTEXTS; ++i)
-    av1_diff_update_prob(r, &fc->newmv_prob[i], ACCT_STR);
-  for (i = 0; i < GLOBALMV_MODE_CONTEXTS; ++i)
-    av1_diff_update_prob(r, &fc->zeromv_prob[i], ACCT_STR);
-  for (i = 0; i < REFMV_MODE_CONTEXTS; ++i)
-    av1_diff_update_prob(r, &fc->refmv_prob[i], ACCT_STR);
-  for (i = 0; i < DRL_MODE_CONTEXTS; ++i)
-    av1_diff_update_prob(r, &fc->drl_prob[i], ACCT_STR);
-}
-#endif
-
 static REFERENCE_MODE read_frame_reference_mode(
     const AV1_COMMON *cm, struct aom_read_bit_buffer *rb) {
   if (is_compound_reference_allowed(cm)) {
@@ -176,63 +162,6 @@
   }
 }
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void read_frame_reference_mode_probs(AV1_COMMON *cm, aom_reader *r) {
-  FRAME_CONTEXT *const fc = cm->fc;
-  int i;
-
-  if (cm->reference_mode == REFERENCE_MODE_SELECT)
-    for (i = 0; i < COMP_INTER_CONTEXTS; ++i)
-      av1_diff_update_prob(r, &fc->comp_inter_prob[i], ACCT_STR);
-
-  if (cm->reference_mode != COMPOUND_REFERENCE) {
-    for (i = 0; i < REF_CONTEXTS; ++i) {
-      int j;
-      for (j = 0; j < (SINGLE_REFS - 1); ++j) {
-        av1_diff_update_prob(r, &fc->single_ref_prob[i][j], ACCT_STR);
-      }
-    }
-  }
-
-  if (cm->reference_mode != SINGLE_REFERENCE) {
-#if CONFIG_EXT_COMP_REFS
-    for (i = 0; i < COMP_REF_TYPE_CONTEXTS; ++i)
-      av1_diff_update_prob(r, &fc->comp_ref_type_prob[i], ACCT_STR);
-
-    for (i = 0; i < UNI_COMP_REF_CONTEXTS; ++i) {
-      int j;
-      for (j = 0; j < (UNIDIR_COMP_REFS - 1); ++j)
-        av1_diff_update_prob(r, &fc->uni_comp_ref_prob[i][j], ACCT_STR);
-    }
-#endif  // CONFIG_EXT_COMP_REFS
-
-    for (i = 0; i < REF_CONTEXTS; ++i) {
-      int j;
-      for (j = 0; j < (FWD_REFS - 1); ++j)
-        av1_diff_update_prob(r, &fc->comp_ref_prob[i][j], ACCT_STR);
-      for (j = 0; j < (BWD_REFS - 1); ++j)
-        av1_diff_update_prob(r, &fc->comp_bwdref_prob[i][j], ACCT_STR);
-    }
-  }
-}
-
-static void update_mv_probs(aom_prob *p, int n, aom_reader *r) {
-  int i;
-  for (i = 0; i < n; ++i) av1_diff_update_prob(r, &p[i], ACCT_STR);
-}
-
-static void read_mv_probs(nmv_context *ctx, int allow_hp, aom_reader *r) {
-  int i;
-  if (allow_hp) {
-    for (i = 0; i < 2; ++i) {
-      nmv_component *const comp_ctx = &ctx->comps[i];
-      update_mv_probs(&comp_ctx->class0_hp, 1, r);
-      update_mv_probs(&comp_ctx->hp, 1, r);
-    }
-  }
-}
-#endif
-
 static void inverse_transform_block(MACROBLOCKD *xd, int plane,
                                     const TX_TYPE tx_type,
                                     const TX_SIZE tx_size, uint8_t *dst,
@@ -1257,22 +1186,14 @@
       default: assert(rui->restoration_type == RESTORE_NONE); break;
     }
   } else if (rsi->frame_restoration_type == RESTORE_WIENER) {
-#if CONFIG_NEW_MULTISYMBOL
     if (aom_read_symbol(r, xd->tile_ctx->wiener_restore_cdf, 2, ACCT_STR)) {
-#else
-    if (aom_read(r, RESTORE_NONE_WIENER_PROB, ACCT_STR)) {
-#endif  // CONFIG_NEW_MULTISYMBOL
       rui->restoration_type = RESTORE_WIENER;
       read_wiener_filter(wiener_win, &rui->wiener_info, wiener_info, r);
     } else {
       rui->restoration_type = RESTORE_NONE;
     }
   } else if (rsi->frame_restoration_type == RESTORE_SGRPROJ) {
-#if CONFIG_NEW_MULTISYMBOL
     if (aom_read_symbol(r, xd->tile_ctx->sgrproj_restore_cdf, 2, ACCT_STR)) {
-#else
-    if (aom_read(r, RESTORE_NONE_SGRPROJ_PROB, ACCT_STR)) {
-#endif  // CONFIG_NEW_MULTISYMBOL
       rui->restoration_type = RESTORE_SGRPROJ;
       read_sgrproj_filter(&rui->sgrproj_info, sgrproj_info, r);
     } else {
@@ -3333,74 +3254,10 @@
 
 static int read_compressed_header(AV1Decoder *pbi, const uint8_t *data,
                                   size_t partition_size) {
-#if CONFIG_NEW_MULTISYMBOL
   (void)pbi;
   (void)data;
   (void)partition_size;
   return 0;
-#else
-  AV1_COMMON *const cm = &pbi->common;
-  aom_reader r;
-  FRAME_CONTEXT *const fc = cm->fc;
-
-#if CONFIG_ANS && ANS_MAX_SYMBOLS
-  r.window_size = 1 << cm->ans_window_size_log2;
-#endif
-  if (aom_reader_init(&r, data, partition_size, pbi->decrypt_cb,
-                      pbi->decrypt_state))
-    aom_internal_error(&cm->error, AOM_CODEC_MEM_ERROR,
-                       "Failed to allocate bool decoder 0");
-
-  if (cm->tx_mode == TX_MODE_SELECT)
-    for (int i = 0; i < TXFM_PARTITION_CONTEXTS; ++i)
-      av1_diff_update_prob(&r, &fc->txfm_partition_prob[i], ACCT_STR);
-  for (int i = 0; i < SKIP_CONTEXTS; ++i)
-    av1_diff_update_prob(&r, &fc->skip_probs[i], ACCT_STR);
-
-#if CONFIG_JNT_COMP
-  for (int i = 0; i < COMP_INDEX_CONTEXTS; ++i)
-    av1_diff_update_prob(&r, &fc->compound_index_probs[i], ACCT_STR);
-#endif  // CONFIG_JNT_COMP
-
-  if (!frame_is_intra_only(cm)) {
-    read_inter_mode_probs(fc, &r);
-
-    if (cm->reference_mode != COMPOUND_REFERENCE &&
-        cm->allow_interintra_compound) {
-      for (int i = 0; i < BLOCK_SIZE_GROUPS; i++) {
-        if (is_interintra_allowed_bsize_group(i)) {
-          av1_diff_update_prob(&r, &fc->interintra_prob[i], ACCT_STR);
-        }
-      }
-#if CONFIG_EXT_PARTITION_TYPES
-      int block_sizes_to_update = BLOCK_SIZES_ALL;
-#else
-      int block_sizes_to_update = BLOCK_SIZES;
-#endif
-      for (int i = 0; i < block_sizes_to_update; i++) {
-        if (is_interintra_allowed_bsize(i) && is_interintra_wedge_used(i)) {
-          av1_diff_update_prob(&r, &fc->wedge_interintra_prob[i], ACCT_STR);
-        }
-      }
-    }
-
-    for (int i = 0; i < INTRA_INTER_CONTEXTS; i++)
-      av1_diff_update_prob(&r, &fc->intra_inter_prob[i], ACCT_STR);
-
-    read_frame_reference_mode_probs(cm, &r);
-
-#if CONFIG_AMVR
-    if (cm->cur_frame_force_integer_mv == 0) {
-#endif
-      for (int i = 0; i < NMV_CONTEXTS; ++i)
-        read_mv_probs(&fc->nmvc[i], cm->allow_high_precision_mv, &r);
-#if CONFIG_AMVR
-    }
-#endif
-  }
-
-  return aom_reader_has_error(&r);
-#endif  // CONFIG_NEW_MULTISYMBOL
 }
 
 #ifdef NDEBUG
@@ -3815,9 +3672,6 @@
 
       if (!frame_is_intra_only(cm)) {
         av1_adapt_inter_frame_probs(cm);
-#if !CONFIG_NEW_MULTISYMBOL
-        av1_adapt_mv_probs(cm, cm->allow_high_precision_mv);
-#endif
         av1_average_tile_inter_cdfs(&pbi->common, pbi->common.fc, tile_ctxs,
                                     cdf_ptrs, num_bwd_ctxs);
         av1_average_tile_mv_cdfs(pbi->common.fc, tile_ctxs, cdf_ptrs,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 8558313..b89fe1e 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -187,11 +187,7 @@
   FRAME_COUNTS *counts = xd->counts;
   int16_t mode_ctx = ctx & NEWMV_CTX_MASK;
   int is_newmv, is_zeromv, is_refmv;
-#if CONFIG_NEW_MULTISYMBOL
   is_newmv = aom_read_symbol(r, ec_ctx->newmv_cdf[mode_ctx], 2, ACCT_STR) == 0;
-#else
-  is_newmv = aom_read(r, ec_ctx->newmv_prob[mode_ctx], ACCT_STR) == 0;
-#endif
   if (is_newmv) {
     if (counts) ++counts->newmv_mode[mode_ctx][0];
     return NEWMV;
@@ -199,12 +195,8 @@
   if (counts) ++counts->newmv_mode[mode_ctx][1];
   if (ctx & (1 << ALL_ZERO_FLAG_OFFSET)) return GLOBALMV;
   mode_ctx = (ctx >> GLOBALMV_OFFSET) & GLOBALMV_CTX_MASK;
-#if CONFIG_NEW_MULTISYMBOL
   is_zeromv =
       aom_read_symbol(r, ec_ctx->zeromv_cdf[mode_ctx], 2, ACCT_STR) == 0;
-#else
-  is_zeromv = aom_read(r, ec_ctx->zeromv_prob[mode_ctx], ACCT_STR) == 0;
-#endif
   if (is_zeromv) {
     if (counts) ++counts->zeromv_mode[mode_ctx][0];
     return GLOBALMV;
@@ -214,11 +206,7 @@
   if (ctx & (1 << SKIP_NEARESTMV_OFFSET)) mode_ctx = 6;
   if (ctx & (1 << SKIP_NEARMV_OFFSET)) mode_ctx = 7;
   if (ctx & (1 << SKIP_NEARESTMV_SUB8X8_OFFSET)) mode_ctx = 8;
-#if CONFIG_NEW_MULTISYMBOL
   is_refmv = aom_read_symbol(r, ec_ctx->refmv_cdf[mode_ctx], 2, ACCT_STR) == 0;
-#else
-  is_refmv = aom_read(r, ec_ctx->refmv_prob[mode_ctx], ACCT_STR) == 0;
-#endif
   if (is_refmv) {
     if (counts) ++counts->refmv_mode[mode_ctx][0];
     return NEARESTMV;
@@ -237,11 +225,7 @@
     for (idx = 0; idx < 2; ++idx) {
       if (xd->ref_mv_count[ref_frame_type] > idx + 1) {
         uint8_t drl_ctx = av1_drl_ctx(xd->ref_mv_stack[ref_frame_type], idx);
-#if CONFIG_NEW_MULTISYMBOL
         int drl_idx = aom_read_symbol(r, ec_ctx->drl_cdf[drl_ctx], 2, ACCT_STR);
-#else
-        int drl_idx = aom_read(r, ec_ctx->drl_prob[drl_ctx], ACCT_STR);
-#endif
         mbmi->ref_mv_idx = idx + drl_idx;
         if (xd->counts) ++xd->counts->drl_mode[drl_ctx][drl_idx];
         if (!drl_idx) return;
@@ -256,11 +240,7 @@
     for (idx = 1; idx < 3; ++idx) {
       if (xd->ref_mv_count[ref_frame_type] > idx + 1) {
         uint8_t drl_ctx = av1_drl_ctx(xd->ref_mv_stack[ref_frame_type], idx);
-#if CONFIG_NEW_MULTISYMBOL
         int drl_idx = aom_read_symbol(r, ec_ctx->drl_cdf[drl_ctx], 2, ACCT_STR);
-#else
-        int drl_idx = aom_read(r, ec_ctx->drl_prob[drl_ctx], ACCT_STR);
-#endif
         mbmi->ref_mv_idx = idx + drl_idx - 1;
         if (xd->counts) ++xd->counts->drl_mode[drl_ctx][drl_idx];
         if (!drl_idx) return;
@@ -272,9 +252,7 @@
 static MOTION_MODE read_motion_mode(AV1_COMMON *cm, MACROBLOCKD *xd,
                                     MODE_INFO *mi, aom_reader *r) {
   MB_MODE_INFO *mbmi = &mi->mbmi;
-#if CONFIG_NEW_MULTISYMBOL
   (void)cm;
-#endif
 
   const MOTION_MODE last_motion_mode_allowed =
       motion_mode_allowed(0, xd->global_motion, xd, mi);
@@ -284,12 +262,8 @@
   if (last_motion_mode_allowed == SIMPLE_TRANSLATION) return SIMPLE_TRANSLATION;
 
   if (last_motion_mode_allowed == OBMC_CAUSAL) {
-#if CONFIG_NEW_MULTISYMBOL
     motion_mode =
         aom_read_symbol(r, xd->tile_ctx->obmc_cdf[mbmi->sb_type], 2, ACCT_STR);
-#else
-    motion_mode = aom_read(r, cm->fc->obmc_prob[mbmi->sb_type], ACCT_STR);
-#endif
     if (counts) ++counts->obmc[mbmi->sb_type][motion_mode];
     return (MOTION_MODE)(SIMPLE_TRANSLATION + motion_mode);
   } else {
@@ -388,13 +362,8 @@
     return 0;
   }
 
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob *pred_cdf = segp->q_seg_cdf[cdf_num];
   int coded_id = aom_read_symbol(r, pred_cdf, 8, ACCT_STR);
-#else
-  const aom_prob pred_cdf = segp->q_seg_cdf[cdf_num];
-  int coded_id = aom_read(r, pred_cdf, ACCT_STR);
-#endif
 
   int segment_id = neg_deinterleave(coded_id, pred, seg->q_lvls);
 
@@ -410,10 +379,8 @@
                                MB_MODE_INFO *mbmi, FRAME_COUNTS *counts,
                                TX_SIZE tx_size, int depth, int blk_row,
                                int blk_col, aom_reader *r) {
-#if CONFIG_NEW_MULTISYMBOL
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
   (void)cm;
-#endif
   int is_split = 0;
   const int tx_row = blk_row >> 1;
   const int tx_col = blk_col >> 1;
@@ -441,11 +408,7 @@
     return;
   }
 
-#if CONFIG_NEW_MULTISYMBOL
   is_split = aom_read_symbol(r, ec_ctx->txfm_partition_cdf[ctx], 2, ACCT_STR);
-#else
-  is_split = aom_read(r, cm->fc->txfm_partition_prob[ctx], ACCT_STR);
-#endif
 
   if (is_split) {
     const TX_SIZE sub_txs = sub_tx_size_map[tx_size];
@@ -619,13 +582,8 @@
 
   if (seg->temporal_update) {
     const int ctx = av1_get_pred_context_seg_id(xd);
-#if CONFIG_NEW_MULTISYMBOL
     aom_cdf_prob *pred_cdf = segp->pred_cdf[ctx];
     mbmi->seg_id_predicted = aom_read_symbol(r, pred_cdf, 2, ACCT_STR);
-#else
-    const aom_prob pred_prob = segp->pred_probs[ctx];
-    mbmi->seg_id_predicted = aom_read(r, pred_prob, ACCT_STR);
-#endif
     if (counts) ++counts->seg.pred[ctx][mbmi->seg_id_predicted];
     if (mbmi->seg_id_predicted) {
       segment_id = predicted_segment_id;
@@ -651,13 +609,9 @@
     return 0;
   } else {
     const int ctx = av1_get_skip_mode_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     const int skip_mode =
         aom_read_symbol(r, ec_ctx->skip_mode_cdfs[ctx], 2, ACCT_STR);
-#else
-    const int skip_mode = aom_read(r, cm->fc->skip_mode_probs[ctx], ACCT_STR);
-#endif  // CONFIG_NEW_MULTISYMBOL
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->skip_mode[ctx][skip_mode];
 
@@ -674,12 +628,8 @@
     return 1;
   } else {
     const int ctx = av1_get_skip_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     const int skip = aom_read_symbol(r, ec_ctx->skip_cdfs[ctx], 2, ACCT_STR);
-#else
-    const int skip = aom_read(r, cm->fc->skip_probs[ctx], ACCT_STR);
-#endif
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->skip[ctx][skip];
     return skip;
@@ -818,17 +768,10 @@
       palette_y_mode_ctx +=
           (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
     }
-#if CONFIG_NEW_MULTISYMBOL
     modev = aom_read_symbol(
         r,
         xd->tile_ctx->palette_y_mode_cdf[block_palette_idx][palette_y_mode_ctx],
         2, ACCT_STR);
-#else
-    modev = aom_read(
-        r,
-        av1_default_palette_y_mode_prob[block_palette_idx][palette_y_mode_ctx],
-        ACCT_STR);
-#endif
     if (modev) {
       pmi->palette_size[0] =
           aom_read_symbol(r,
@@ -845,13 +788,8 @@
   }
   if (mbmi->uv_mode == UV_DC_PRED) {
     const int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
-#if CONFIG_NEW_MULTISYMBOL
     modev = aom_read_symbol(
         r, xd->tile_ctx->palette_uv_mode_cdf[palette_uv_mode_ctx], 2, ACCT_STR);
-#else
-    modev = aom_read(r, av1_default_palette_uv_mode_prob[palette_uv_mode_ctx],
-                     ACCT_STR);
-#endif
     if (modev) {
       pmi->palette_size[1] =
           aom_read_symbol(r,
@@ -1241,33 +1179,21 @@
 #endif  // CONFIG_INTRABC || CONFIG_AMVR
                              int usehp) {
   int mag, d, fr, hp;
-#if CONFIG_NEW_MULTISYMBOL
   const int sign = aom_read_symbol(r, mvcomp->sign_cdf, 2, ACCT_STR);
-#else
-  const int sign = aom_read(r, mvcomp->sign, ACCT_STR);
-#endif
   const int mv_class =
       aom_read_symbol(r, mvcomp->classes_cdf, MV_CLASSES, ACCT_STR);
   const int class0 = mv_class == MV_CLASS_0;
 
   // Integer part
   if (class0) {
-#if CONFIG_NEW_MULTISYMBOL
     d = aom_read_symbol(r, mvcomp->class0_cdf, CLASS0_SIZE, ACCT_STR);
-#else
-    d = aom_read(r, mvcomp->class0[0], ACCT_STR);
-#endif
     mag = 0;
   } else {
     int i;
     const int n = mv_class + CLASS0_BITS - 1;  // number of bits
     d = 0;
-#if CONFIG_NEW_MULTISYMBOL
     for (i = 0; i < n; ++i)
       d |= aom_read_symbol(r, mvcomp->bits_cdf[i], 2, ACCT_STR) << i;
-#else
-    for (i = 0; i < n; ++i) d |= aom_read(r, mvcomp->bits[i], ACCT_STR) << i;
-#endif
     mag = CLASS0_SIZE << (mv_class + 2);
   }
 
@@ -1278,16 +1204,11 @@
     fr = aom_read_symbol(r, class0 ? mvcomp->class0_fp_cdf[d] : mvcomp->fp_cdf,
                          MV_FP_SIZE, ACCT_STR);
 
-// High precision part (if hp is not used, the default value of the hp is 1)
-#if CONFIG_NEW_MULTISYMBOL
+    // High precision part (if hp is not used, the default value of the hp is 1)
     hp = usehp ? aom_read_symbol(
                      r, class0 ? mvcomp->class0_hp_cdf : mvcomp->hp_cdf, 2,
                      ACCT_STR)
                : 1;
-#else
-  hp = usehp ? aom_read(r, class0 ? mvcomp->class0_hp : mvcomp->hp, ACCT_STR)
-             : 1;
-#endif
 #if CONFIG_INTRABC || CONFIG_AMVR
   } else {
     fr = 3;
@@ -1334,13 +1255,8 @@
   if (!is_comp_ref_allowed(xd->mi[0]->mbmi.sb_type)) return SINGLE_REFERENCE;
   if (cm->reference_mode == REFERENCE_MODE_SELECT) {
     const int ctx = av1_get_reference_mode_context(cm, xd);
-#if CONFIG_NEW_MULTISYMBOL
     const REFERENCE_MODE mode = (REFERENCE_MODE)aom_read_symbol(
         r, xd->tile_ctx->comp_inter_cdf[ctx], 2, ACCT_STR);
-#else
-    const REFERENCE_MODE mode =
-        (REFERENCE_MODE)aom_read(r, cm->fc->comp_inter_prob[ctx], ACCT_STR);
-#endif
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->comp_inter[ctx][mode];
     return mode;  // SINGLE_REFERENCE or COMPOUND_REFERENCE
@@ -1356,27 +1272,18 @@
   if (cm->reference_mode == REFERENCE_MODE_SELECT) {
     assert(mode == SINGLE_REFERENCE || mode == COMPOUND_REFERENCE);
     const int ctx = av1_get_reference_mode_context(cm, xd);
-#if CONFIG_NEW_MULTISYMBOL
     if (allow_update_cdf)
       update_cdf(xd->tile_ctx->comp_inter_cdf[ctx], mode, 2);
-#endif  // CONFIG_NEW_MULTISYMBOL
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->comp_inter[ctx][mode];
   }
 }
 #endif  // CONFIG_EXT_SKIP
 
-#if CONFIG_NEW_MULTISYMBOL
 #define READ_REF_BIT(pname) \
   aom_read_symbol(r, av1_get_pred_cdf_##pname(cm, xd), 2, ACCT_STR)
 #define READ_REF_BIT2(pname) \
   aom_read_symbol(r, av1_get_pred_cdf_##pname(xd), 2, ACCT_STR)
-#else
-#define READ_REF_BIT(pname) \
-  aom_read(r, av1_get_pred_prob_##pname(cm, xd), ACCT_STR)
-#define READ_REF_BIT2(pname) \
-  aom_read(r, av1_get_pred_prob_##pname(cm, xd), ACCT_STR)
-#endif
 
 #if CONFIG_EXT_COMP_REFS
 static COMP_REFERENCE_TYPE read_comp_reference_type(AV1_COMMON *cm,
@@ -1384,14 +1291,9 @@
                                                     aom_reader *r) {
   const int ctx = av1_get_comp_reference_type_context(xd);
   COMP_REFERENCE_TYPE comp_ref_type;
-#if CONFIG_NEW_MULTISYMBOL
   (void)cm;
   comp_ref_type = (COMP_REFERENCE_TYPE)aom_read_symbol(
       r, xd->tile_ctx->comp_ref_type_cdf[ctx], 2, ACCT_STR);
-#else
-  comp_ref_type = (COMP_REFERENCE_TYPE)aom_read(
-      r, cm->fc->comp_ref_type_prob[ctx], ACCT_STR);
-#endif
   FRAME_COUNTS *counts = xd->counts;
   if (counts) ++counts->comp_ref_type[ctx][comp_ref_type];
   return comp_ref_type;  // UNIDIR_COMP_REFERENCE or BIDIR_COMP_REFERENCE
@@ -1407,10 +1309,8 @@
          comp_ref_type == BIDIR_COMP_REFERENCE);
   (void)cm;
   const int ctx = av1_get_comp_reference_type_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
   if (allow_update_cdf)
     update_cdf(xd->tile_ctx->comp_ref_type_cdf[ctx], comp_ref_type, 2);
-#endif  // CONFIG_NEW_MULTISYMBOL
   FRAME_COUNTS *counts = xd->counts;
   if (counts) ++counts->comp_ref_type[ctx][comp_ref_type];
 }
@@ -1434,17 +1334,11 @@
 #endif  // CONFIG_EXT_COMP_REFS
 
 // Update stats for both forward and backward references
-#if CONFIG_NEW_MULTISYMBOL
 #define UPDATE_REF_BIT(bname, pname, cname, iname)          \
   if (allow_update_cdf)                                     \
     update_cdf(av1_get_pred_cdf_##pname(cm, xd), bname, 2); \
   if (counts)                                               \
     ++counts->comp_##cname[av1_get_pred_context_##pname(cm, xd)][iname][bname];
-#else
-#define UPDATE_REF_BIT(bname, pname, cname, iname) \
-  if (counts)                                      \
-    ++counts->comp_##cname[av1_get_pred_context_##pname(cm, xd)][iname][bname];
-#endif  // CONFIG_NEW_MULTISYMBOL
 
   FRAME_COUNTS *counts = xd->counts;
 
@@ -1915,13 +1809,9 @@
     return get_segdata(&cm->seg, segment_id, SEG_LVL_REF_FRAME) != INTRA_FRAME;
   } else {
     const int ctx = av1_get_intra_inter_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     const int is_inter =
         aom_read_symbol(r, ec_ctx->intra_inter_cdf[ctx], 2, ACCT_STR);
-#else
-    const int is_inter = aom_read(r, cm->fc->intra_inter_prob[ctx], ACCT_STR);
-#endif
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->intra_inter[ctx][is_inter];
     return is_inter;
@@ -1935,10 +1825,8 @@
                                      uint8_t allow_update_cdf) {
   if (!segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
     const int ctx = av1_get_intra_inter_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     if (allow_update_cdf) update_cdf(ec_ctx->intra_inter_cdf[ctx], is_inter, 2);
-#endif  // CONFIG_NEW_MULTISYMBOL
     FRAME_COUNTS *counts = xd->counts;
     if (counts) ++counts->intra_inter[ctx][is_inter];
   }
@@ -2025,13 +1913,8 @@
 #if CONFIG_JNT_COMP
   if (is_compound) {
     const int comp_index_ctx = get_comp_index_context(cm, xd);
-#if CONFIG_NEW_MULTISYMBOL
     mbmi->compound_idx = aom_read_symbol(
         r, ec_ctx->compound_index_cdf[comp_index_ctx], 2, ACCT_STR);
-#else
-    mbmi->compound_idx =
-        aom_read(r, ec_ctx->compound_index_probs[comp_index_ctx], ACCT_STR);
-#endif  // CONFIG_NEW_MULTISYMBOL
     if (xd->counts)
       ++xd->counts->compound_index[comp_index_ctx][mbmi->compound_idx];
   }
@@ -2254,13 +2137,8 @@
   if (cm->reference_mode != COMPOUND_REFERENCE &&
       cm->allow_interintra_compound && is_interintra_allowed(mbmi)) {
     const int bsize_group = size_group_lookup[bsize];
-#if CONFIG_NEW_MULTISYMBOL
     const int interintra =
         aom_read_symbol(r, ec_ctx->interintra_cdf[bsize_group], 2, ACCT_STR);
-#else
-    const int interintra =
-        aom_read(r, cm->fc->interintra_prob[bsize_group], ACCT_STR);
-#endif
     if (xd->counts) xd->counts->interintra[bsize_group][interintra]++;
     assert(mbmi->ref_frame[1] == NONE_FRAME);
     if (interintra) {
@@ -2277,13 +2155,8 @@
       mbmi->filter_intra_mode_info.use_filter_intra_mode[1] = 0;
 #endif  // CONFIG_FILTER_INTRA
       if (is_interintra_wedge_used(bsize)) {
-#if CONFIG_NEW_MULTISYMBOL
         mbmi->use_wedge_interintra = aom_read_symbol(
             r, ec_ctx->wedge_interintra_cdf[bsize], 2, ACCT_STR);
-#else
-        mbmi->use_wedge_interintra =
-            aom_read(r, cm->fc->wedge_interintra_prob[bsize], ACCT_STR);
-#endif
         if (xd->counts)
           xd->counts->wedge_interintra[bsize][mbmi->use_wedge_interintra]++;
         if (mbmi->use_wedge_interintra) {
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index f3482d0..d8635a5 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -39,7 +39,6 @@
     if (counts) ++coef_counts[band][ctx][token]; \
   } while (0)
 
-#if CONFIG_NEW_MULTISYMBOL
 #define READ_COEFF(counts, prob_name, cdf_name, num, r) \
   read_coeff(counts, cdf_name, num, r);
 static INLINE int read_coeff(FRAME_COUNTS *counts,
@@ -59,21 +58,6 @@
   }
   return val;
 }
-#else
-#define READ_COEFF(counts, prob_name, cdf_name, num, r) \
-  read_coeff(counts, prob_name, num, r);
-static INLINE int read_coeff(FRAME_COUNTS *counts, const aom_prob *probs, int n,
-                             aom_reader *r) {
-#if !CONFIG_SYMBOLRATE
-  (void)counts;
-#endif
-  int i, val = 0;
-  for (i = 0; i < n; ++i)
-    val = (val << 1) | av1_read_record(counts, r, probs[i], ACCT_STR);
-  return val;
-}
-
-#endif
 
 static int token_to_value(FRAME_COUNTS *counts, aom_reader *const r, int token,
                           TX_SIZE tx_size, int bit_depth) {
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 825abc5..2644452 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -113,11 +113,7 @@
                              FRAME_CONTEXT *ec_ctx, const int16_t mode_ctx) {
   const int16_t newmv_ctx = mode_ctx & NEWMV_CTX_MASK;
 
-#if CONFIG_NEW_MULTISYMBOL
   aom_write_symbol(w, mode != NEWMV, ec_ctx->newmv_cdf[newmv_ctx], 2);
-#else
-  aom_write(w, mode != NEWMV, ec_ctx->newmv_prob[newmv_ctx]);
-#endif
 
   if (mode != NEWMV) {
     if (mode_ctx & (1 << ALL_ZERO_FLAG_OFFSET)) {
@@ -127,11 +123,7 @@
 
     const int16_t zeromv_ctx =
         (mode_ctx >> GLOBALMV_OFFSET) & GLOBALMV_CTX_MASK;
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, mode != GLOBALMV, ec_ctx->zeromv_cdf[zeromv_ctx], 2);
-#else
-    aom_write(w, mode != GLOBALMV, ec_ctx->zeromv_prob[zeromv_ctx]);
-#endif
 
     if (mode != GLOBALMV) {
       int16_t refmv_ctx = (mode_ctx >> REFMV_OFFSET) & REFMV_CTX_MASK;
@@ -139,11 +131,7 @@
       if (mode_ctx & (1 << SKIP_NEARESTMV_OFFSET)) refmv_ctx = 6;
       if (mode_ctx & (1 << SKIP_NEARMV_OFFSET)) refmv_ctx = 7;
       if (mode_ctx & (1 << SKIP_NEARESTMV_SUB8X8_OFFSET)) refmv_ctx = 8;
-#if CONFIG_NEW_MULTISYMBOL
       aom_write_symbol(w, mode != NEARESTMV, ec_ctx->refmv_cdf[refmv_ctx], 2);
-#else
-      aom_write(w, mode != NEARESTMV, ec_ctx->refmv_prob[refmv_ctx]);
-#endif
     }
   }
 }
@@ -162,12 +150,8 @@
         uint8_t drl_ctx =
             av1_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], idx);
 
-#if CONFIG_NEW_MULTISYMBOL
         aom_write_symbol(w, mbmi->ref_mv_idx != idx, ec_ctx->drl_cdf[drl_ctx],
                          2);
-#else
-        aom_write(w, mbmi->ref_mv_idx != idx, ec_ctx->drl_prob[drl_ctx]);
-#endif
         if (mbmi->ref_mv_idx == idx) return;
       }
     }
@@ -181,12 +165,8 @@
       if (mbmi_ext->ref_mv_count[ref_frame_type] > idx + 1) {
         uint8_t drl_ctx =
             av1_drl_ctx(mbmi_ext->ref_mv_stack[ref_frame_type], idx);
-#if CONFIG_NEW_MULTISYMBOL
         aom_write_symbol(w, mbmi->ref_mv_idx != (idx - 1),
                          ec_ctx->drl_cdf[drl_ctx], 2);
-#else
-        aom_write(w, mbmi->ref_mv_idx != (idx - 1), ec_ctx->drl_prob[drl_ctx]);
-#endif
         if (mbmi->ref_mv_idx == (idx - 1)) return;
       }
     }
@@ -213,10 +193,8 @@
                                 const MB_MODE_INFO *mbmi, TX_SIZE tx_size,
                                 int depth, int blk_row, int blk_col,
                                 aom_writer *w) {
-#if CONFIG_NEW_MULTISYMBOL
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
   (void)cm;
-#endif
   const int tx_row = blk_row >> 1;
   const int tx_col = blk_col >> 1;
   const int max_blocks_high = max_block_high(xd, mbmi->sb_type, 0);
@@ -237,11 +215,7 @@
   const int write_txfm_partition =
       tx_size == mbmi->inter_tx_size[tx_row][tx_col];
   if (write_txfm_partition) {
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, 0, ec_ctx->txfm_partition_cdf[ctx], 2);
-#else
-    aom_write(w, 0, cm->fc->txfm_partition_prob[ctx]);
-#endif
 
     txfm_partition_update(xd->above_txfm_context + blk_col,
                           xd->left_txfm_context + blk_row, tx_size, tx_size);
@@ -251,11 +225,7 @@
     const int bsw = tx_size_wide_unit[sub_txs];
     const int bsh = tx_size_high_unit[sub_txs];
 
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, 1, ec_ctx->txfm_partition_cdf[ctx], 2);
-#else
-    aom_write(w, 1, cm->fc->txfm_partition_prob[ctx]);
-#endif
 
     if (sub_txs == TX_4X4) {
       txfm_partition_update(xd->above_txfm_context + blk_col,
@@ -274,16 +244,6 @@
   }
 }
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void update_txfm_partition_probs(AV1_COMMON *cm, aom_writer *w,
-                                        FRAME_COUNTS *counts, int probwt) {
-  int k;
-  for (k = 0; k < TXFM_PARTITION_CONTEXTS; ++k)
-    av1_cond_prob_diff_update(w, &cm->fc->txfm_partition_prob[k],
-                              counts->txfm_partition[k], probwt);
-}
-#endif  // CONFIG_NEW_MULTISYMBOL
-
 static void write_selected_tx_size(const AV1_COMMON *cm, const MACROBLOCKD *xd,
                                    aom_writer *w) {
   const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
@@ -309,26 +269,6 @@
   }
 }
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void update_inter_mode_probs(AV1_COMMON *cm, aom_writer *w,
-                                    FRAME_COUNTS *counts) {
-  int i;
-  const int probwt = cm->num_tg;
-  for (i = 0; i < NEWMV_MODE_CONTEXTS; ++i)
-    av1_cond_prob_diff_update(w, &cm->fc->newmv_prob[i], counts->newmv_mode[i],
-                              probwt);
-  for (i = 0; i < GLOBALMV_MODE_CONTEXTS; ++i)
-    av1_cond_prob_diff_update(w, &cm->fc->zeromv_prob[i],
-                              counts->zeromv_mode[i], probwt);
-  for (i = 0; i < REFMV_MODE_CONTEXTS; ++i)
-    av1_cond_prob_diff_update(w, &cm->fc->refmv_prob[i], counts->refmv_mode[i],
-                              probwt);
-  for (i = 0; i < DRL_MODE_CONTEXTS; ++i)
-    av1_cond_prob_diff_update(w, &cm->fc->drl_prob[i], counts->drl_mode[i],
-                              probwt);
-}
-#endif
-
 static int write_skip(const AV1_COMMON *cm, const MACROBLOCKD *xd,
                       int segment_id, const MODE_INFO *mi, aom_writer *w) {
   if (segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP)) {
@@ -336,12 +276,8 @@
   } else {
     const int skip = mi->mbmi.skip;
     const int ctx = av1_get_skip_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     aom_write_symbol(w, skip, ec_ctx->skip_cdfs[ctx], 2);
-#else
-    aom_write(w, skip, cm->fc->skip_probs[ctx]);
-#endif
     return skip;
   }
 }
@@ -350,12 +286,8 @@
                            int segment_id, aom_writer *w, const int is_inter) {
   if (!segfeature_active(&cm->seg, segment_id, SEG_LVL_REF_FRAME)) {
     const int ctx = av1_get_intra_inter_context(xd);
-#if CONFIG_NEW_MULTISYMBOL
     FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
     aom_write_symbol(w, is_inter, ec_ctx->intra_inter_cdf[ctx], 2);
-#else
-    aom_write(w, is_inter, cm->fc->intra_inter_prob[ctx]);
-#endif
   }
 }
 
@@ -368,13 +300,8 @@
   switch (last_motion_mode_allowed) {
     case SIMPLE_TRANSLATION: break;
     case OBMC_CAUSAL:
-#if CONFIG_NEW_MULTISYMBOL
       aom_write_symbol(w, mbmi->motion_mode == OBMC_CAUSAL,
                        xd->tile_ctx->obmc_cdf[mbmi->sb_type], 2);
-#else
-      aom_write(w, mbmi->motion_mode == OBMC_CAUSAL,
-                cm->fc->obmc_prob[mbmi->sb_type]);
-#endif
       break;
     default:
       aom_write_symbol(w, mbmi->motion_mode,
@@ -445,18 +372,6 @@
 }
 #endif  // CONFIG_EXT_DELTA_Q
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void update_skip_probs(AV1_COMMON *cm, aom_writer *w,
-                              FRAME_COUNTS *counts) {
-  int k;
-  const int probwt = cm->num_tg;
-  for (k = 0; k < SKIP_CONTEXTS; ++k) {
-    av1_cond_prob_diff_update(w, &cm->fc->skip_probs[k], counts->skip[k],
-                              probwt);
-  }
-}
-#endif
-
 static void pack_map_tokens(aom_writer *w, const TOKENEXTRA **tp, int n,
                             int num) {
   const TOKENEXTRA *p = *tp;
@@ -471,7 +386,6 @@
 }
 
 #if !CONFIG_LV_MAP
-#if CONFIG_NEW_MULTISYMBOL
 static INLINE void write_coeff_extra(const aom_cdf_prob *const *cdf, int val,
                                      int n, aom_writer *w) {
   // Code the extra bits from LSB to MSB in groups of 4
@@ -485,19 +399,6 @@
     count += size;
   }
 }
-#else
-static INLINE void write_coeff_extra(const aom_prob *pb, int value,
-                                     int num_bits, int skip_bits, aom_writer *w,
-                                     TOKEN_STATS *token_stats) {
-  // Code the extra bits from MSB to LSB 1 bit at a time
-  int index;
-  for (index = skip_bits; index < num_bits; ++index) {
-    const int shift = num_bits - index - 1;
-    const int bb = (value >> shift) & 1;
-    aom_write_record(w, bb, pb[index], token_stats);
-  }
-}
-#endif  // CONFIG_NEW_MULTISYMBOL
 
 static void pack_mb_tokens(aom_writer *w, const TOKENEXTRA **tp,
                            const TOKENEXTRA *const stop,
@@ -556,13 +457,8 @@
 
       assert(!(bit_string >> (bit_string_length - skip_bits + 1)));
       if (bit_string_length > 0)
-#if CONFIG_NEW_MULTISYMBOL
         write_coeff_extra(extra_bits->cdf, bit_string >> 1,
                           bit_string_length - skip_bits, w);
-#else
-        write_coeff_extra(extra_bits->prob, bit_string >> 1, bit_string_length,
-                          skip_bits, w, token_stats);
-#endif
 
       aom_write_bit_record(w, bit_string & 1, token_stats);
     }
@@ -756,13 +652,8 @@
 
   int coded_id = neg_interleave(mbmi->q_segment_id, pred, seg->q_lvls);
 
-#if CONFIG_NEW_MULTISYMBOL
   aom_cdf_prob *pred_cdf = segp->q_seg_cdf[cdf_num];
   aom_write_symbol(w, coded_id, pred_cdf, 8);
-#else
-  aom_prob pred_cdf = segp->q_seg_cdf[cdf_num];
-  aom_write(w, coded_id, pred_prob);
-#endif
 
   set_q_segment_id(cm, cm->q_seg_map, bsize, mi_row, mi_col,
                    mbmi->q_segment_id);
@@ -776,17 +667,10 @@
   }
 }
 
-#if CONFIG_NEW_MULTISYMBOL
 #define WRITE_REF_BIT(bname, pname) \
   aom_write_symbol(w, bname, av1_get_pred_cdf_##pname(cm, xd), 2)
 #define WRITE_REF_BIT2(bname, pname) \
   aom_write_symbol(w, bname, av1_get_pred_cdf_##pname(xd), 2)
-#else
-#define WRITE_REF_BIT(bname, pname) \
-  aom_write(w, bname, av1_get_pred_prob_##pname(cm, xd))
-#define WRITE_REF_BIT2(bname, pname) \
-  aom_write(w, bname, av1_get_pred_prob_##pname(cm, xd))
-#endif
 
 // This function encodes the reference frame
 static void write_ref_frames(const AV1_COMMON *cm, const MACROBLOCKD *xd,
@@ -816,11 +700,7 @@
     // (if not specified at the frame/segment level)
     if (cm->reference_mode == REFERENCE_MODE_SELECT) {
       if (is_comp_ref_allowed(mbmi->sb_type))
-#if CONFIG_NEW_MULTISYMBOL
         aom_write_symbol(w, is_compound, av1_get_reference_mode_cdf(cm, xd), 2);
-#else
-        aom_write(w, is_compound, av1_get_reference_mode_prob(cm, xd));
-#endif  // CONFIG_NEW_MULTISYMBOL
     } else {
       assert((!is_compound) == (cm->reference_mode == SINGLE_REFERENCE));
     }
@@ -830,12 +710,8 @@
       const COMP_REFERENCE_TYPE comp_ref_type = has_uni_comp_refs(mbmi)
                                                     ? UNIDIR_COMP_REFERENCE
                                                     : BIDIR_COMP_REFERENCE;
-#if CONFIG_NEW_MULTISYMBOL
       aom_write_symbol(w, comp_ref_type, av1_get_comp_reference_type_cdf(xd),
                        2);
-#else
-      aom_write(w, comp_ref_type, av1_get_comp_reference_type_prob(cm, xd));
-#endif
 
       if (comp_ref_type == UNIDIR_COMP_REFERENCE) {
         const int bit = mbmi->ref_frame[0] == BWDREF_FRAME;
@@ -1141,16 +1017,10 @@
       palette_y_mode_ctx +=
           (left_mi->mbmi.palette_mode_info.palette_size[0] > 0);
     }
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(
         w, n > 0,
         xd->tile_ctx->palette_y_mode_cdf[block_palette_idx][palette_y_mode_ctx],
         2);
-#else
-    aom_write(
-        w, n > 0,
-        av1_default_palette_y_mode_prob[block_palette_idx][palette_y_mode_ctx]);
-#endif
     if (n > 0) {
       aom_write_symbol(w, n - PALETTE_MIN_SIZE,
                        xd->tile_ctx->palette_y_size_cdf[block_palette_idx],
@@ -1174,12 +1044,8 @@
   if (uv_dc_pred) {
     const int n = pmi->palette_size[1];
     const int palette_uv_mode_ctx = (pmi->palette_size[0] > 0);
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, n > 0,
                      xd->tile_ctx->palette_uv_mode_cdf[palette_uv_mode_ctx], 2);
-#else
-    aom_write(w, n > 0, av1_default_palette_uv_mode_prob[palette_uv_mode_ctx]);
-#endif
     if (n > 0) {
       aom_write_symbol(w, n - PALETTE_MIN_SIZE,
                        xd->tile_ctx->palette_uv_size_cdf[block_palette_idx],
@@ -1333,13 +1199,8 @@
   if (seg->update_map) {
     if (seg->temporal_update) {
       const int pred_flag = mbmi->seg_id_predicted;
-#if CONFIG_NEW_MULTISYMBOL
       aom_cdf_prob *pred_cdf = av1_get_pred_cdf_seg_id(segp, xd);
       aom_write_symbol(w, pred_flag, pred_cdf, 2);
-#else
-      aom_prob pred_prob = av1_get_pred_prob_seg_id(segp, xd);
-      aom_write(w, pred_flag, pred_prob);
-#endif
       if (!pred_flag) write_segment_id(w, seg, segp, segment_id);
     } else {
       write_segment_id(w, seg, segp, segment_id);
@@ -1439,19 +1300,11 @@
     write_ref_frames(cm, xd, w);
 
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
     if (has_second_ref(mbmi)) {
       const int comp_index_ctx = get_comp_index_context(cm, xd);
       aom_write_symbol(w, mbmi->compound_idx,
                        ec_ctx->compound_index_cdf[comp_index_ctx], 2);
     }
-#else
-    if (has_second_ref(mbmi)) {
-      const int comp_index_ctx = get_comp_index_context(cm, xd);
-      aom_write(w, mbmi->compound_idx,
-                ec_ctx->compound_index_probs[comp_index_ctx]);
-    }
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_JNT_COMP
 
     if (is_compound)
@@ -1510,23 +1363,14 @@
         cpi->common.allow_interintra_compound && is_interintra_allowed(mbmi)) {
       const int interintra = mbmi->ref_frame[1] == INTRA_FRAME;
       const int bsize_group = size_group_lookup[bsize];
-#if CONFIG_NEW_MULTISYMBOL
       aom_write_symbol(w, interintra, ec_ctx->interintra_cdf[bsize_group], 2);
-#else
-      aom_write(w, interintra, cm->fc->interintra_prob[bsize_group]);
-#endif
       if (interintra) {
         aom_write_symbol(w, mbmi->interintra_mode,
                          ec_ctx->interintra_mode_cdf[bsize_group],
                          INTERINTRA_MODES);
         if (is_interintra_wedge_used(bsize)) {
-#if CONFIG_NEW_MULTISYMBOL
           aom_write_symbol(w, mbmi->use_wedge_interintra,
                            ec_ctx->wedge_interintra_cdf[bsize], 2);
-#else
-          aom_write(w, mbmi->use_wedge_interintra,
-                    cm->fc->wedge_interintra_prob[bsize]);
-#endif
           if (mbmi->use_wedge_interintra) {
             aom_write_literal(w, mbmi->interintra_wedge_index,
                               get_wedge_bits_lookup(bsize));
@@ -2564,22 +2408,14 @@
       default: assert(unit_rtype == RESTORE_NONE); break;
     }
   } else if (frame_rtype == RESTORE_WIENER) {
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, unit_rtype != RESTORE_NONE,
                      xd->tile_ctx->wiener_restore_cdf, 2);
-#else
-    aom_write(w, unit_rtype != RESTORE_NONE, RESTORE_NONE_WIENER_PROB);
-#endif  // CONFIG_NEW_MULTISYMBOL
     if (unit_rtype != RESTORE_NONE) {
       write_wiener_filter(wiener_win, &rui->wiener_info, wiener_info, w);
     }
   } else if (frame_rtype == RESTORE_SGRPROJ) {
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, unit_rtype != RESTORE_NONE,
                      xd->tile_ctx->sgrproj_restore_cdf, 2);
-#else
-    aom_write(w, unit_rtype != RESTORE_NONE, RESTORE_NONE_SGRPROJ_PROB);
-#endif  // CONFIG_NEW_MULTISYMBOL
     if (unit_rtype != RESTORE_NONE) {
       write_sgrproj_filter(&rui->sgrproj_info, sgrproj_info, w);
     }
@@ -4377,10 +4213,6 @@
   FRAME_CONTEXT *const fc = cm->fc;
   aom_writer *header_bc;
 
-#if !CONFIG_NEW_MULTISYMBOL
-  FRAME_COUNTS *counts = cpi->td.counts;
-#endif
-
   const int probwt = cm->num_tg;
   (void)probwt;
   (void)fc;
@@ -4392,100 +4224,10 @@
 #endif
   aom_start_encode(header_bc, data);
 
-#if !CONFIG_NEW_MULTISYMBOL
-  if (cm->tx_mode == TX_MODE_SELECT)
-    update_txfm_partition_probs(cm, header_bc, counts, probwt);
-#endif
-
-#if !CONFIG_NEW_MULTISYMBOL
-  update_skip_probs(cm, header_bc, counts);
-#if CONFIG_JNT_COMP
-  for (int k = 0; k < COMP_INDEX_CONTEXTS; ++k)
-    av1_cond_prob_diff_update(header_bc, &cm->fc->compound_index_probs[k],
-                              counts->compound_index[k], probwt);
-#endif  // CONFIG_JNT_COMP
-#endif
-
   if (!frame_is_intra_only(cm)) {
-#if !CONFIG_NEW_MULTISYMBOL
-    update_inter_mode_probs(cm, header_bc, counts);
-#endif
     if (cm->reference_mode != COMPOUND_REFERENCE &&
         cm->allow_interintra_compound) {
-#if !CONFIG_NEW_MULTISYMBOL
-      for (int i = 0; i < BLOCK_SIZE_GROUPS; i++) {
-        if (is_interintra_allowed_bsize_group(i)) {
-          av1_cond_prob_diff_update(header_bc, &fc->interintra_prob[i],
-                                    cm->counts.interintra[i], probwt);
-        }
-      }
-#endif
-#if !CONFIG_NEW_MULTISYMBOL
-#if CONFIG_EXT_PARTITION_TYPES
-      int block_sizes_to_update = BLOCK_SIZES_ALL;
-#else
-      int block_sizes_to_update = BLOCK_SIZES;
-#endif
-      for (int i = 0; i < block_sizes_to_update; i++) {
-        if (is_interintra_allowed_bsize(i) && is_interintra_wedge_used(i))
-          av1_cond_prob_diff_update(header_bc, &fc->wedge_interintra_prob[i],
-                                    cm->counts.wedge_interintra[i], probwt);
-      }
-#endif  // !CONFIG_NEW_MULTISYMBOL
     }
-
-#if !CONFIG_NEW_MULTISYMBOL
-    for (int i = 0; i < INTRA_INTER_CONTEXTS; i++)
-      av1_cond_prob_diff_update(header_bc, &fc->intra_inter_prob[i],
-                                counts->intra_inter[i], probwt);
-#endif
-
-#if !CONFIG_NEW_MULTISYMBOL
-    if (cpi->allow_comp_inter_inter) {
-      const int use_hybrid_pred = cm->reference_mode == REFERENCE_MODE_SELECT;
-      if (use_hybrid_pred)
-        for (int i = 0; i < COMP_INTER_CONTEXTS; i++)
-          av1_cond_prob_diff_update(header_bc, &fc->comp_inter_prob[i],
-                                    counts->comp_inter[i], probwt);
-    }
-
-    if (cm->reference_mode != COMPOUND_REFERENCE) {
-      for (int i = 0; i < REF_CONTEXTS; i++) {
-        for (int j = 0; j < (SINGLE_REFS - 1); j++) {
-          av1_cond_prob_diff_update(header_bc, &fc->single_ref_prob[i][j],
-                                    counts->single_ref[i][j], probwt);
-        }
-      }
-    }
-
-    if (cm->reference_mode != SINGLE_REFERENCE) {
-#if CONFIG_EXT_COMP_REFS
-      for (int i = 0; i < COMP_REF_TYPE_CONTEXTS; i++)
-        av1_cond_prob_diff_update(header_bc, &fc->comp_ref_type_prob[i],
-                                  counts->comp_ref_type[i], probwt);
-
-      for (int i = 0; i < UNI_COMP_REF_CONTEXTS; i++)
-        for (int j = 0; j < (UNIDIR_COMP_REFS - 1); j++)
-          av1_cond_prob_diff_update(header_bc, &fc->uni_comp_ref_prob[i][j],
-                                    counts->uni_comp_ref[i][j], probwt);
-#endif  // CONFIG_EXT_COMP_REFS
-
-      for (int i = 0; i < REF_CONTEXTS; i++) {
-        for (int j = 0; j < (FWD_REFS - 1); j++) {
-          av1_cond_prob_diff_update(header_bc, &fc->comp_ref_prob[i][j],
-                                    counts->comp_ref[i][j], probwt);
-        }
-        for (int j = 0; j < (BWD_REFS - 1); j++) {
-          av1_cond_prob_diff_update(header_bc, &fc->comp_bwdref_prob[i][j],
-                                    counts->comp_bwdref[i][j], probwt);
-        }
-      }
-    }
-#endif  // CONFIG_NEW_MULTISYMBOL
-
-#if !CONFIG_NEW_MULTISYMBOL
-    av1_write_nmv_probs(cm, cm->allow_high_precision_mv, header_bc, counts->mv);
-#endif
   }
   aom_stop_encode(header_bc);
   assert(header_bc->pos <= 0xffff);
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 2cde80a..5456b8b 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -644,12 +644,6 @@
   av1_copy_frame_mvs(cm, mi, mi_row, mi_col, x_mis, y_mis);
 
 #if CONFIG_JNT_COMP
-#if !CONFIG_NEW_MULTISYMBOL
-  if (has_second_ref(mbmi)) {
-    const int comp_index_ctx = get_comp_index_context(cm, xd);
-    ++td->counts->compound_index[comp_index_ctx][mbmi->compound_idx];
-  }
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_JNT_COMP
 }
 
@@ -1030,9 +1024,7 @@
   if (!seg_ref_active) {
     const int skip_ctx = av1_get_skip_context(xd);
     td->counts->skip[skip_ctx][mbmi->skip]++;
-#if CONFIG_NEW_MULTISYMBOL
     if (allow_update_cdf) update_cdf(fc->skip_cdfs[skip_ctx], mbmi->skip, 2);
-#endif  // CONFIG_NEW_MULTISYMBOL
   }
 
   if (cm->delta_q_present_flag && (bsize != cm->sb_size || !mbmi->skip) &&
@@ -1095,11 +1087,9 @@
     const int inter_block = is_inter_block(mbmi);
     if (!seg_ref_active) {
       counts->intra_inter[av1_get_intra_inter_context(xd)][inter_block]++;
-#if CONFIG_NEW_MULTISYMBOL
       if (allow_update_cdf)
         update_cdf(fc->intra_inter_cdf[av1_get_intra_inter_context(xd)],
                    inter_block, 2);
-#endif
       // If the segment reference feature is enabled we have only a single
       // reference frame allowed for the segment so exclude it from
       // the reference frame counts used to work out probabilities.
@@ -1117,11 +1107,9 @@
           if (is_comp_ref_allowed(mbmi->sb_type)) {
             counts->comp_inter[av1_get_reference_mode_context(cm, xd)]
                               [has_second_ref(mbmi)]++;
-#if CONFIG_NEW_MULTISYMBOL
             if (allow_update_cdf)
               update_cdf(av1_get_reference_mode_cdf(cm, xd),
                          has_second_ref(mbmi), 2);
-#endif  // CONFIG_NEW_MULTISYMBOL
           }
         }
 
@@ -1197,28 +1185,22 @@
           const int bsize_group = size_group_lookup[bsize];
           if (mbmi->ref_frame[1] == INTRA_FRAME) {
             counts->interintra[bsize_group][1]++;
-#if CONFIG_NEW_MULTISYMBOL
             if (allow_update_cdf)
               update_cdf(fc->interintra_cdf[bsize_group], 1, 2);
-#endif
             counts->interintra_mode[bsize_group][mbmi->interintra_mode]++;
             if (allow_update_cdf)
               update_cdf(fc->interintra_mode_cdf[bsize_group],
                          mbmi->interintra_mode, INTERINTRA_MODES);
             if (is_interintra_wedge_used(bsize)) {
               counts->wedge_interintra[bsize][mbmi->use_wedge_interintra]++;
-#if CONFIG_NEW_MULTISYMBOL
               if (allow_update_cdf)
                 update_cdf(fc->wedge_interintra_cdf[bsize],
                            mbmi->use_wedge_interintra, 2);
-#endif
             }
           } else {
             counts->interintra[bsize_group][0]++;
-#if CONFIG_NEW_MULTISYMBOL
             if (allow_update_cdf)
               update_cdf(fc->interintra_cdf[bsize_group], 0, 2);
-#endif
           }
         }
 
@@ -1233,11 +1215,9 @@
                          MOTION_MODES);
           } else if (motion_allowed == OBMC_CAUSAL) {
             counts->obmc[mbmi->sb_type][mbmi->motion_mode == OBMC_CAUSAL]++;
-#if CONFIG_NEW_MULTISYMBOL
             if (allow_update_cdf)
               update_cdf(fc->obmc_cdf[mbmi->sb_type],
                          mbmi->motion_mode == OBMC_CAUSAL, 2);
-#endif
           }
         }
 
@@ -1304,14 +1284,12 @@
       }
 
 #if CONFIG_JNT_COMP
-#if CONFIG_NEW_MULTISYMBOL
       if (has_second_ref(mbmi)) {
         const int comp_index_ctx = get_comp_index_context(cm, xd);
         ++counts->compound_index[comp_index_ctx][mbmi->compound_idx];
         update_cdf(fc->compound_index_cdf[comp_index_ctx], mbmi->compound_idx,
                    2);
       }
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_JNT_COMP
     }
   }
@@ -4499,7 +4477,6 @@
     update_cdf(fc->uv_mode_cdf[y_mode], uv_mode, UV_INTRA_MODES);
 }
 
-#if CONFIG_NEW_MULTISYMBOL
 // TODO(anybody) We can add stats accumulation here to train entropy models for
 // palette modes
 static void update_palette_cdf(MACROBLOCKD *xd, const MODE_INFO *mi) {
@@ -4534,7 +4511,6 @@
     update_cdf(fc->palette_uv_mode_cdf[palette_uv_mode_ctx], n > 0, 2);
   }
 }
-#endif
 
 static void update_txfm_count(MACROBLOCK *x, MACROBLOCKD *xd,
                               FRAME_COUNTS *counts, TX_SIZE tx_size, int depth,
@@ -4563,10 +4539,8 @@
 
   if (tx_size == plane_tx_size) {
     ++counts->txfm_partition[ctx][0];
-#if CONFIG_NEW_MULTISYMBOL
     if (allow_update_cdf)
       update_cdf(xd->tile_ctx->txfm_partition_cdf[ctx], 0, 2);
-#endif
     mbmi->tx_size = tx_size;
     txfm_partition_update(xd->above_txfm_context + blk_col,
                           xd->left_txfm_context + blk_row, tx_size, tx_size);
@@ -4576,10 +4550,8 @@
     const int bsh = tx_size_high_unit[sub_txs];
 
     ++counts->txfm_partition[ctx][1];
-#if CONFIG_NEW_MULTISYMBOL
     if (allow_update_cdf)
       update_cdf(xd->tile_ctx->txfm_partition_cdf[ctx], 1, 2);
-#endif
     ++x->txb_split_count;
 
     if (sub_txs == TX_4X4) {
@@ -4790,11 +4762,9 @@
       sum_intra_stats(td->counts, xd, mi, xd->above_mi, xd->left_mi,
                       frame_is_intra_only(cm), mi_row, mi_col,
                       tile_data->allow_update_cdf);
-#if CONFIG_NEW_MULTISYMBOL
       if (av1_allow_palette(cm->allow_screen_content_tools, bsize) &&
           tile_data->allow_update_cdf)
         update_palette_cdf(xd, mi);
-#endif
     }
 
     if (bsize >= BLOCK_8X8) {
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index 5adf317..f35aaf9 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -42,32 +42,20 @@
 
   assert(comp != 0);
 
-// Sign
-#if CONFIG_NEW_MULTISYMBOL
+  // Sign
   aom_write_symbol(w, sign, mvcomp->sign_cdf, 2);
-#else
-  aom_write(w, sign, mvcomp->sign);
-#endif
 
   // Class
   aom_write_symbol(w, mv_class, mvcomp->classes_cdf, MV_CLASSES);
 
   // Integer bits
   if (mv_class == MV_CLASS_0) {
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(w, d, mvcomp->class0_cdf, CLASS0_SIZE);
-#else
-    aom_write(w, d, mvcomp->class0[0]);
-#endif
   } else {
     int i;
     const int n = mv_class + CLASS0_BITS - 1;  // number of bits
-#if CONFIG_NEW_MULTISYMBOL
     for (i = 0; i < n; ++i)
       aom_write_symbol(w, (d >> i) & 1, mvcomp->bits_cdf[i], 2);
-#else
-    for (i = 0; i < n; ++i) aom_write(w, (d >> i) & 1, mvcomp->bits[i]);
-#endif
   }
 // Fractional bits
 #if CONFIG_INTRABC || CONFIG_AMVR
@@ -82,13 +70,9 @@
 
   // High precision bit
   if (precision > MV_SUBPEL_LOW_PRECISION)
-#if CONFIG_NEW_MULTISYMBOL
     aom_write_symbol(
         w, hp, mv_class == MV_CLASS_0 ? mvcomp->class0_hp_cdf : mvcomp->hp_cdf,
         2);
-#else
-    aom_write(w, hp, mv_class == MV_CLASS_0 ? mvcomp->class0_hp : mvcomp->hp);
-#endif
 }
 
 static void build_nmv_component_cost_table(int *mvcost,
@@ -100,25 +84,11 @@
   int class0_fp_cost[CLASS0_SIZE][MV_FP_SIZE], fp_cost[MV_FP_SIZE];
   int class0_hp_cost[2], hp_cost[2];
 
-#if CONFIG_NEW_MULTISYMBOL
   av1_cost_tokens_from_cdf(sign_cost, mvcomp->sign_cdf, NULL);
-#else
-  sign_cost[0] = av1_cost_zero(mvcomp->sign);
-  sign_cost[1] = av1_cost_one(mvcomp->sign);
-#endif  // CONFIG_NEW_MULTISYMBOL
   av1_cost_tokens_from_cdf(class_cost, mvcomp->classes_cdf, NULL);
-#if CONFIG_NEW_MULTISYMBOL
   av1_cost_tokens_from_cdf(class0_cost, mvcomp->class0_cdf, NULL);
-#else
-  av1_cost_tokens(class0_cost, mvcomp->class0, av1_mv_class0_tree);
-#endif  // CONFIG_NEW_MULTISYMBOL
   for (i = 0; i < MV_OFFSET_BITS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
     av1_cost_tokens_from_cdf(bits_cost[i], mvcomp->bits_cdf[i], NULL);
-#else
-    bits_cost[i][0] = av1_cost_zero(mvcomp->bits[i]);
-    bits_cost[i][1] = av1_cost_one(mvcomp->bits[i]);
-#endif  // CONFIG_NEW_MULTISYMBOL
   }
 
   for (i = 0; i < CLASS0_SIZE; ++i)
@@ -126,15 +96,8 @@
   av1_cost_tokens_from_cdf(fp_cost, mvcomp->fp_cdf, NULL);
 
   if (precision > MV_SUBPEL_LOW_PRECISION) {
-#if CONFIG_NEW_MULTISYMBOL
     av1_cost_tokens_from_cdf(class0_hp_cost, mvcomp->class0_hp_cdf, NULL);
     av1_cost_tokens_from_cdf(hp_cost, mvcomp->hp_cdf, NULL);
-#else
-    class0_hp_cost[0] = av1_cost_zero(mvcomp->class0_hp);
-    class0_hp_cost[1] = av1_cost_one(mvcomp->class0_hp);
-    hp_cost[0] = av1_cost_zero(mvcomp->hp);
-    hp_cost[1] = av1_cost_one(mvcomp->hp);
-#endif  // CONFIG_NEW_MULTISYMBOL
   }
   mvcost[0] = 0;
   for (v = 1; v <= MV_MAX; ++v) {
@@ -173,40 +136,6 @@
   }
 }
 
-#if !CONFIG_NEW_MULTISYMBOL
-static void update_mv(aom_writer *w, const unsigned int ct[2], aom_prob *cur_p,
-                      aom_prob upd_p) {
-  (void)upd_p;
-  // Just use the default maximum number of tile groups to avoid passing in the
-  // actual
-  // number
-  av1_cond_prob_diff_update(w, cur_p, ct, DEFAULT_MAX_NUM_TG);
-}
-
-void av1_write_nmv_probs(AV1_COMMON *cm, int usehp, aom_writer *w,
-                         nmv_context_counts *const nmv_counts) {
-  int i;
-  int nmv_ctx = 0;
-#if CONFIG_AMVR
-  if (cm->cur_frame_force_integer_mv) {
-    return;
-  }
-#endif
-  for (nmv_ctx = 0; nmv_ctx < NMV_CONTEXTS; ++nmv_ctx) {
-    nmv_context *const mvc = &cm->fc->nmvc[nmv_ctx];
-    nmv_context_counts *const counts = &nmv_counts[nmv_ctx];
-
-    if (usehp) {
-      for (i = 0; i < 2; ++i) {
-        update_mv(w, counts->comps[i].class0_hp, &mvc->comps[i].class0_hp,
-                  MV_UPDATE_PROB);
-        update_mv(w, counts->comps[i].hp, &mvc->comps[i].hp, MV_UPDATE_PROB);
-      }
-    }
-  }
-}
-#endif
-
 void av1_encode_mv(AV1_COMP *cpi, aom_writer *w, const MV *mv, const MV *ref,
                    nmv_context *mvctx, int usehp) {
   const MV diff = { mv->row - ref->row, mv->col - ref->col };
diff --git a/av1/encoder/encodemv.h b/av1/encoder/encodemv.h
index 8689cec..116b291 100644
--- a/av1/encoder/encodemv.h
+++ b/av1/encoder/encodemv.h
@@ -20,11 +20,6 @@
 
 void av1_entropy_mv_init(void);
 
-#if !CONFIG_NEW_MULTISYMBOL
-void av1_write_nmv_probs(AV1_COMMON *cm, int usehp, aom_writer *w,
-                         nmv_context_counts *const counts);
-#endif
-
 void av1_encode_mv(AV1_COMP *cpi, aom_writer *w, const MV *mv, const MV *ref,
                    nmv_context *mvctx, int usehp);
 
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index e57d3d3..a15afb9 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -5685,9 +5685,6 @@
   if (!frame_is_intra_only(cm)) {
     if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
       av1_adapt_inter_frame_probs(cm);
-#if !CONFIG_NEW_MULTISYMBOL
-      av1_adapt_mv_probs(cm, cm->allow_high_precision_mv);
-#endif  // !CONFIG_NEW_MULTISYMBOL
       av1_average_tile_inter_cdfs(&cpi->common, cpi->common.fc, tile_ctxs,
                                   cdf_ptrs, num_bwd_ctxs);
       av1_average_tile_mv_cdfs(cpi->common.fc, tile_ctxs, cdf_ptrs,
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index ff3b799..d511812 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -94,12 +94,7 @@
   }
 
   for (i = 0; i < SKIP_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
     av1_cost_tokens_from_cdf(x->skip_cost[i], fc->skip_cdfs[i], NULL);
-#else
-    x->skip_cost[i][0] = av1_cost_bit(fc->skip_probs[i], 0);
-    x->skip_cost[i][1] = av1_cost_bit(fc->skip_probs[i], 1);
-#endif  // CONFIG_NEW_MULTISYMBOL
   }
 
 #if CONFIG_KF_CTX
@@ -136,28 +131,14 @@
     av1_cost_tokens_from_cdf(x->palette_uv_size_cost[i],
                              fc->palette_uv_size_cdf[i], NULL);
     for (j = 0; j < PALETTE_Y_MODE_CONTEXTS; ++j) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->palette_y_mode_cost[i][j],
                                fc->palette_y_mode_cdf[i][j], NULL);
-#else
-      x->palette_y_mode_cost[i][j][0] =
-          av1_cost_bit(av1_default_palette_y_mode_prob[i][j], 0);
-      x->palette_y_mode_cost[i][j][1] =
-          av1_cost_bit(av1_default_palette_y_mode_prob[i][j], 1);
-#endif
     }
   }
 
   for (i = 0; i < PALETTE_UV_MODE_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
     av1_cost_tokens_from_cdf(x->palette_uv_mode_cost[i],
                              fc->palette_uv_mode_cdf[i], NULL);
-#else
-    x->palette_uv_mode_cost[i][0] =
-        av1_cost_bit(av1_default_palette_uv_mode_prob[i], 0);
-    x->palette_uv_mode_cost[i][1] =
-        av1_cost_bit(av1_default_palette_uv_mode_prob[i], 1);
-#endif
   }
 
   for (i = 0; i < PALETTE_SIZES; ++i) {
@@ -206,13 +187,8 @@
                                NULL);
 
   for (i = 0; i < TXFM_PARTITION_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
     av1_cost_tokens_from_cdf(x->txfm_partition_cost[i],
                              fc->txfm_partition_cdf[i], NULL);
-#else
-    x->txfm_partition_cost[i][0] = av1_cost_bit(fc->txfm_partition_prob[i], 0);
-    x->txfm_partition_cost[i][1] = av1_cost_bit(fc->txfm_partition_prob[i], 1);
-#endif
   }
 
   for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
@@ -243,17 +219,10 @@
 #if CONFIG_LOOP_RESTORATION
   av1_cost_tokens_from_cdf(x->switchable_restore_cost,
                            fc->switchable_restore_cdf, NULL);
-#if CONFIG_NEW_MULTISYMBOL
   av1_cost_tokens_from_cdf(x->wiener_restore_cost, fc->wiener_restore_cdf,
                            NULL);
   av1_cost_tokens_from_cdf(x->sgrproj_restore_cost, fc->sgrproj_restore_cdf,
                            NULL);
-#else
-  x->wiener_restore_cost[0] = av1_cost_bit(RESTORE_NONE_WIENER_PROB, 0);
-  x->wiener_restore_cost[1] = av1_cost_bit(RESTORE_NONE_WIENER_PROB, 1);
-  x->sgrproj_restore_cost[0] = av1_cost_bit(RESTORE_NONE_SGRPROJ_PROB, 0);
-  x->sgrproj_restore_cost[1] = av1_cost_bit(RESTORE_NONE_SGRPROJ_PROB, 1);
-#endif  // CONFIG_NEW_MULTISYMBOL
 #endif  // CONFIG_LOOP_RESTORATION
 #if CONFIG_INTRABC
   av1_cost_tokens_from_cdf(x->intrabc_cost, fc->intrabc_cdf, NULL);
@@ -261,49 +230,24 @@
 
   if (!frame_is_intra_only(cm)) {
     for (i = 0; i < INTRA_INTER_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->intra_inter_cost[i], fc->intra_inter_cdf[i],
                                NULL);
-#else
-      x->intra_inter_cost[i][0] = av1_cost_bit(fc->intra_inter_prob[i], 0);
-      x->intra_inter_cost[i][1] = av1_cost_bit(fc->intra_inter_prob[i], 1);
-#endif
     }
 
     for (i = 0; i < NEWMV_MODE_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->newmv_mode_cost[i], fc->newmv_cdf[i], NULL);
-#else
-      x->newmv_mode_cost[i][0] = av1_cost_bit(fc->newmv_prob[i], 0);
-      x->newmv_mode_cost[i][1] = av1_cost_bit(fc->newmv_prob[i], 1);
-#endif
     }
 
     for (i = 0; i < GLOBALMV_MODE_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->zeromv_mode_cost[i], fc->zeromv_cdf[i], NULL);
-#else
-      x->zeromv_mode_cost[i][0] = av1_cost_bit(fc->zeromv_prob[i], 0);
-      x->zeromv_mode_cost[i][1] = av1_cost_bit(fc->zeromv_prob[i], 1);
-#endif
     }
 
     for (i = 0; i < REFMV_MODE_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->refmv_mode_cost[i], fc->refmv_cdf[i], NULL);
-#else
-      x->refmv_mode_cost[i][0] = av1_cost_bit(fc->refmv_prob[i], 0);
-      x->refmv_mode_cost[i][1] = av1_cost_bit(fc->refmv_prob[i], 1);
-#endif
     }
 
     for (i = 0; i < DRL_MODE_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->drl_mode_cost0[i], fc->drl_cdf[i], NULL);
-#else
-      x->drl_mode_cost0[i][0] = av1_cost_bit(fc->drl_prob[i], 0);
-      x->drl_mode_cost0[i][1] = av1_cost_bit(fc->drl_prob[i], 1);
-#endif
     }
     for (i = 0; i < INTER_MODE_CONTEXTS; ++i)
       av1_cost_tokens_from_cdf(x->inter_compound_mode_cost[i],
@@ -312,48 +256,26 @@
       av1_cost_tokens_from_cdf(x->compound_type_cost[i],
                                fc->compound_type_cdf[i], NULL);
     for (i = 0; i < BLOCK_SIZE_GROUPS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->interintra_cost[i], fc->interintra_cdf[i],
                                NULL);
-#else
-      x->interintra_cost[i][0] = av1_cost_bit(fc->interintra_prob[i], 0);
-      x->interintra_cost[i][1] = av1_cost_bit(fc->interintra_prob[i], 1);
-#endif
       av1_cost_tokens_from_cdf(x->interintra_mode_cost[i],
                                fc->interintra_mode_cdf[i], NULL);
     }
     for (i = 0; i < BLOCK_SIZES_ALL; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->wedge_interintra_cost[i],
                                fc->wedge_interintra_cdf[i], NULL);
-#else
-      x->wedge_interintra_cost[i][0] =
-          av1_cost_bit(fc->wedge_interintra_prob[i], 0);
-      x->wedge_interintra_cost[i][1] =
-          av1_cost_bit(fc->wedge_interintra_prob[i], 1);
-#endif
     }
     for (i = BLOCK_8X8; i < BLOCK_SIZES_ALL; i++) {
       av1_cost_tokens_from_cdf(x->motion_mode_cost[i], fc->motion_mode_cdf[i],
                                NULL);
     }
     for (i = BLOCK_8X8; i < BLOCK_SIZES_ALL; i++) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->motion_mode_cost1[i], fc->obmc_cdf[i], NULL);
-#else
-      x->motion_mode_cost1[i][0] = av1_cost_bit(fc->obmc_prob[i], 0);
-      x->motion_mode_cost1[i][1] = av1_cost_bit(fc->obmc_prob[i], 1);
-#endif
     }
 #if CONFIG_JNT_COMP
     for (i = 0; i < COMP_INDEX_CONTEXTS; ++i) {
-#if CONFIG_NEW_MULTISYMBOL
       av1_cost_tokens_from_cdf(x->comp_idx_cost[i], fc->compound_index_cdf[i],
                                NULL);
-#else
-      x->comp_idx_cost[i][0] = av1_cost_bit(fc->compound_index_probs[i], 0);
-      x->comp_idx_cost[i][1] = av1_cost_bit(fc->compound_index_probs[i], 1);
-#endif  // CONFIG_NEW_MULTISYMBOL
     }
 #endif  // CONFIG_JNT_COMP
   }
diff --git a/av1/encoder/segmentation.c b/av1/encoder/segmentation.c
index 59a16a0..2424de9 100644
--- a/av1/encoder/segmentation.c
+++ b/av1/encoder/segmentation.c
@@ -311,9 +311,6 @@
 
   aom_prob no_pred_tree[SEG_TREE_PROBS];
   aom_prob t_pred_tree[SEG_TREE_PROBS];
-#if !CONFIG_NEW_MULTISYMBOL
-  aom_prob t_nopred_prob[PREDICTION_PROBS];
-#endif
 
   (void)xd;
 
@@ -358,23 +355,6 @@
     calc_segtree_probs(t_unpred_seg_counts, t_pred_tree, segp->tree_probs,
                        probwt);
     t_pred_cost = cost_segmap(t_unpred_seg_counts, t_pred_tree);
-#if !CONFIG_NEW_MULTISYMBOL
-    // Add in the cost of the signaling for each prediction context.
-    int i;
-    for (i = 0; i < PREDICTION_PROBS; i++) {
-      const int count0 = temporal_predictor_count[i][0];
-      const int count1 = temporal_predictor_count[i][1];
-
-      t_nopred_prob[i] = get_binary_prob(count0, count1);
-      av1_prob_diff_update_savings_search(
-          temporal_predictor_count[i], segp->pred_probs[i], &t_nopred_prob[i],
-          DIFF_UPDATE_PROB, probwt);
-
-      // Add in the predictor signaling cost
-      t_pred_cost += count0 * av1_cost_zero(t_nopred_prob[i]) +
-                     count1 * av1_cost_one(t_nopred_prob[i]);
-    }
-#endif
   }
 
   // Now choose which coding method to use.
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index e92ce9d..1f7d2e1 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -232,7 +232,6 @@
   0, 3, 6, 9, 12, 18, 24, 30
 };
 
-#if CONFIG_NEW_MULTISYMBOL
 const av1_extra_bit av1_extra_bits[ENTROPY_TOKENS] = {
   { 0, 0, 0, zero_cost },                        // ZERO_TOKEN
   { 0, 0, 1, sign_cost },                        // ONE_TOKEN
@@ -247,22 +246,6 @@
   { av1_cat6_cdf, 18, CAT6_MIN_VAL, 0 },         // CATEGORY6_TOKEN
   { 0, 0, 0, zero_cost }                         // EOB_TOKEN
 };
-#else
-const av1_extra_bit av1_extra_bits[ENTROPY_TOKENS] = {
-  { 0, 0, 0, zero_cost },                         // ZERO_TOKEN
-  { 0, 0, 1, sign_cost },                         // ONE_TOKEN
-  { 0, 0, 2, sign_cost },                         // TWO_TOKEN
-  { 0, 0, 3, sign_cost },                         // THREE_TOKEN
-  { 0, 0, 4, sign_cost },                         // FOUR_TOKEN
-  { av1_cat1_prob, 1, CAT1_MIN_VAL, cat1_cost },  // CATEGORY1_TOKEN
-  { av1_cat2_prob, 2, CAT2_MIN_VAL, cat2_cost },  // CATEGORY2_TOKEN
-  { av1_cat3_prob, 3, CAT3_MIN_VAL, cat3_cost },  // CATEGORY3_TOKEN
-  { av1_cat4_prob, 4, CAT4_MIN_VAL, cat4_cost },  // CATEGORY4_TOKEN
-  { av1_cat5_prob, 5, CAT5_MIN_VAL, cat5_cost },  // CATEGORY5_TOKEN
-  { av1_cat6_prob, 18, CAT6_MIN_VAL, 0 },         // CATEGORY6_TOKEN
-  { 0, 0, 0, zero_cost }                          // EOB_TOKEN
-};
-#endif
 
 static void cost_coeffs_b(int plane, int block, int blk_row, int blk_col,
                           BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 1525cc9..726022a 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -169,7 +169,6 @@
 set(CONFIG_MRC_TX 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_MV_COMPRESS 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_NCOBMC 0 CACHE NUMBER "AV1 experiment flag.")
-set(CONFIG_NEW_MULTISYMBOL 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_NEW_QUANT 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_NO_FRAME_CONTEXT_SIGNALING 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_OBU 0 CACHE NUMBER "AV1 experiment flag.")
diff --git a/configure b/configure
index c450b2c..0c76cd6 100755
--- a/configure
+++ b/configure
@@ -305,7 +305,6 @@
     mv_compress
     segment_globalmv
     frame_superres
-    new_multisymbol
     aom_qm
     ext_qm
     ext_comp_refs
@@ -504,7 +503,6 @@
       soft_enable loop_restoration
       soft_enable ext_partition
       soft_enable ext_partition_types
-      soft_enable new_multisymbol
 
       # Provisional adopted
       soft_enable q_adapt_probs
