diff --git a/aom/aom_encoder.h b/aom/aom_encoder.h
index 0364bf2..32b82a4 100644
--- a/aom/aom_encoder.h
+++ b/aom/aom_encoder.h
@@ -319,12 +319,10 @@
    */
   unsigned int enable_orip;
 #endif  // CONFIG_ORIP
-#if CONFIG_IST
   /*!\brief enable Intra secondary transform
    *
    */
   unsigned int enable_ist;
-#endif  // CONFIG_IST
 #if CONFIG_CROSS_CHROMA_TX
   /*!\brief enable cross-chroma component transform
    *
diff --git a/aom_dsp/txfm_common.h b/aom_dsp/txfm_common.h
index 42b12e6..9963bb5 100644
--- a/aom_dsp/txfm_common.h
+++ b/aom_dsp/txfm_common.h
@@ -27,12 +27,10 @@
   // for both forward and inverse transforms
   TX_TYPE tx_type;
   // for both forward and inverse secondary transforms
-#if CONFIG_IST
   // Secondary transform type used for the current tx block.
   TX_TYPE sec_tx_type;
   // intra prediction mode used for the current tx block
   PREDICTION_MODE intra_mode;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   CctxType cctx_type;
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/apps/aomenc.c b/apps/aomenc.c
index 5ce133a..cc80bff 100644
--- a/apps/aomenc.c
+++ b/apps/aomenc.c
@@ -447,9 +447,7 @@
 #if CONFIG_ORIP
   &g_av1_codec_arg_defs.enable_orip,
 #endif
-#if CONFIG_IST
   &g_av1_codec_arg_defs.enable_ist,
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   &g_av1_codec_arg_defs.enable_cctx,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -647,9 +645,7 @@
 #if CONFIG_ORIP
   config->enable_orip = 1;
 #endif
-#if CONFIG_IST
   config->enable_ist = 1;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   config->enable_cctx = 1;
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1494,10 +1490,8 @@
           encoder_cfg->disable_ml_transform_speed_features);
   fprintf(stdout, "                               : SDP (%d)\n",
           encoder_cfg->enable_sdp);
-#if CONFIG_IST
   fprintf(stdout, "                               : IST (%d)\n",
           encoder_cfg->enable_ist);
-#endif
   fprintf(stdout,
           "Tool setting (Intra)           : SmoothIntra (%d), CfL (%d), "
           "FilterIntra (%d)\n",
diff --git a/av1/arg_defs.c b/av1/arg_defs.c
index 079c539..dbaa451 100644
--- a/av1/arg_defs.c
+++ b/av1/arg_defs.c
@@ -419,11 +419,9 @@
                          "Enable Offset Based refinement of intra prediction"
                          "(0: false, 1: true (default))"),
 #endif
-#if CONFIG_IST
   .enable_ist = ARG_DEF(NULL, "enable-ist", 1,
                         "Enable intra secondary transform"
                         "(0: false, 1: true (default))"),
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   .enable_cctx = ARG_DEF(NULL, "enable-cctx", 1,
                          "Enable cross-chroma component transform "
diff --git a/av1/arg_defs.h b/av1/arg_defs.h
index bd4e389..ecc6d6b 100644
--- a/av1/arg_defs.h
+++ b/av1/arg_defs.h
@@ -167,9 +167,7 @@
 #if CONFIG_ORIP
   arg_def_t enable_orip;
 #endif
-#if CONFIG_IST
   arg_def_t enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   arg_def_t enable_cctx;
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 5a33fa3..7999ef1 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -141,9 +141,7 @@
 #if CONFIG_ORIP
   int enable_orip;  // enable ORIP
 #endif              // CONFIG_ORIP
-#if CONFIG_IST
-  int enable_ist;  // enable intra secondary transform
-#endif             // CONFIG_IST
+  int enable_ist;   // enable intra secondary transform
 #if CONFIG_CROSS_CHROMA_TX
   int enable_cctx;  // enable cross-chroma component transform
 #endif              // CONFIG_CROSS_CHROMA_TX
@@ -474,9 +472,7 @@
 #if CONFIG_ORIP
   1,    // enable ORIP
 #endif  // CONFIG_ORIP
-#if CONFIG_IST
   1,    // enable intra secondary transform
-#endif  // CONFIG_IST
 #if CONFIG_CROSS_CHROMA_TX
   1,    // enable cross-chroma component transform
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -968,9 +964,7 @@
 #if CONFIG_ORIP
   cfg->enable_orip = extra_cfg->enable_orip;
 #endif
-#if CONFIG_IST
   cfg->enable_ist = extra_cfg->enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   cfg->enable_cctx = extra_cfg->enable_cctx;
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1084,9 +1078,7 @@
 #if CONFIG_ORIP
   extra_cfg->enable_orip = cfg->enable_orip;
 #endif
-#if CONFIG_IST
   extra_cfg->enable_ist = cfg->enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   extra_cfg->enable_cctx = cfg->enable_cctx;
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1667,9 +1659,7 @@
   txfm_cfg->use_intra_default_tx_only = extra_cfg->use_intra_default_tx_only;
   txfm_cfg->disable_ml_transform_speed_features =
       extra_cfg->disable_ml_transform_speed_features;
-#if CONFIG_IST
   txfm_cfg->enable_ist = extra_cfg->enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   txfm_cfg->enable_cctx =
       tool_cfg->enable_monochrome ? 0 : extra_cfg->enable_cctx;
@@ -3822,11 +3812,9 @@
                               err_string)) {
     extra_cfg.enable_orip = arg_parse_int_helper(&arg, err_string);
 #endif
-#if CONFIG_IST
   } else if (arg_match_helper(&arg, &g_av1_codec_arg_defs.enable_ist, argv,
                               err_string)) {
     extra_cfg.enable_ist = arg_parse_int_helper(&arg, err_string);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   } else if (arg_match_helper(&arg, &g_av1_codec_arg_defs.enable_cctx, argv,
                               err_string)) {
@@ -4305,9 +4293,7 @@
 #if CONFIG_ORIP
         1,
 #endif
-#if CONFIG_IST
-        1,
-#endif  // CONFIG_IST
+        1,  // IST
 #if CONFIG_CROSS_CHROMA_TX
         1,
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 99e325b..08fa280 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -442,9 +442,7 @@
 #if CONFIG_ORIP
   uint8_t enable_orip;  // To turn on/off sub-block based ORIP
 #endif
-#if CONFIG_IST
   uint8_t enable_ist;  // enables/disables intra secondary transform
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   uint8_t enable_cctx;  // enables/disables cross-chroma component transform
 #endif                  // CONFIG_CROSS_CHROMA_TX
@@ -920,7 +918,7 @@
    * Number of allocated elements is same as 'mi_grid_size', and stride is
    * same as 'mi_grid_size'. So, indexing into 'tx_type_map' is same as that of
    * 'mi_grid_base'.
-   * If secondary transform in enabled (CONFIG_IST) each element of the array
+   * If secondary transform in enabled (IST) each element of the array
    * stores both primary and secondary transform types as shown below: Bits 4~5
    * of each element stores secondary tx_type Bits 0~3 of each element stores
    * primary tx_type
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index 16c257a..4d53661 100644
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -134,10 +134,8 @@
 # High bitdepth functions
 
 #inv txfm
-if (aom_config("CONFIG_IST") eq "yes") {
-  add_proto qw/void inv_stxfm/ , "tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode, const uint8_t stx_idx, const int size";
-  specialize qw/inv_stxfm sse4_1/;
-}
+add_proto qw/void inv_stxfm/ , "tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode, const uint8_t stx_idx, const int size";
+specialize qw/inv_stxfm sse4_1/;
 
 add_proto qw/void av1_highbd_inv_txfm_add/, "const tran_low_t *input, uint16_t *dest, int stride, const TxfmParam *txfm_param";
 specialize qw/av1_highbd_inv_txfm_add sse4_1 avx2 neon/;
@@ -268,10 +266,8 @@
   specialize qw/av1_fwht4x4 neon/;
 
   #fwd txfm
-  if (aom_config("CONFIG_IST") eq "yes") {
-    add_proto qw/void fwd_stxfm/ , "tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode, const uint8_t stx_idx, const int size";
-    specialize qw/fwd_stxfm sse4_1/;
-  }
+  add_proto qw/void fwd_stxfm/ , "tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode, const uint8_t stx_idx, const int size";
+  specialize qw/fwd_stxfm sse4_1/;
   add_proto qw/void av1_lowbd_fwd_txfm/, "const int16_t *src_diff, tran_low_t *coeff, int diff_stride, TxfmParam *txfm_param";
   specialize qw/av1_lowbd_fwd_txfm sse2 sse4_1 avx2 neon/;
 
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 4a7e9bb..092c8d5 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -2174,12 +2174,10 @@
    * 'cpi->tile_thr_data[t].td->mb.tmp_pred_bufs'.
    */
   uint16_t *tmp_obmc_bufs[2];
-#if CONFIG_IST
   /*!
    * Enable IST for current coding block.
    */
   uint8_t enable_ist;
-#endif
 #if CONFIG_CCSO
 #if CONFIG_CCSO_EXT
   /** ccso blk y */
@@ -2839,7 +2837,6 @@
 }
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
 static INLINE int tx_size_is_depth0(TX_SIZE tx_size, BLOCK_SIZE bsize) {
   TX_SIZE ctx_size = max_txsize_rect_lookup[bsize];
   return ctx_size == tx_size;
@@ -2858,7 +2855,7 @@
 #endif
 
 /*
- * If secondary transform is enabled (CONFIG_IST) :
+ * If secondary transform is enabled (IST) :
  * Bits 4~5 of tx_type stores secondary tx_type
  * Bits 0~3 of tx_type stores primary tx_type
  *
@@ -2907,14 +2904,9 @@
   const int height = tx_size_high[tx_size];
   const int sb_size = (width >= 8 && height >= 8) ? 8 : 4;
   bool ist_eob = 1;
-#if CONFIG_IST_FIX_B076
   // Updated EOB condition
   if (((sb_size == 4) && (eob > IST_4x4_HEIGHT)) ||
       ((sb_size == 8) && (eob > IST_8x8_HEIGHT))) {
-#else
-  if (((sb_size == 4) && (eob > IST_4x4_HEIGHT - 1)) ||
-      ((sb_size == 8) && (eob > IST_8x8_HEIGHT - 1))) {
-#endif  // CONFIG_IST_FIX_B076
     ist_eob = 0;
   }
   const int is_depth0 = tx_size_is_depth0(tx_size, bs);
@@ -2924,12 +2916,11 @@
       !(mbmi->filter_intra_mode_info.use_filter_intra) && is_depth0 && ist_eob;
   return code_stx;
 }
-#endif
 
 /*
  * This function returns the tx_type used by the transform block
  *
- * If secondary transform is enabled (CONFIG_IST) :
+ * If secondary transform is enabled (IST) :
  * Bits 4~5 of tx_type stores secondary tx_type
  * Bits 0~3 of tx_type stores primary tx_type
  */
@@ -2938,11 +2929,7 @@
                                       int blk_col, TX_SIZE tx_size,
                                       int reduced_tx_set) {
   const MB_MODE_INFO *const mbmi = xd->mi[0];
-#if CONFIG_IST
   if (xd->lossless[mbmi->segment_id]) {
-#else
-  if (xd->lossless[mbmi->segment_id] || txsize_sqr_up_map[tx_size] > TX_32X32) {
-#endif  // CONFIG_IST
     return DCT_DCT;
   }
   if (xd->mi[0]->fsc_mode[xd->tree_type == CHROMA_PART] &&
@@ -2959,10 +2946,8 @@
       blk_row <<= pd->subsampling_y;
       blk_col <<= pd->subsampling_x;
       tx_type = xd->tx_type_map[blk_row * xd->tx_type_map_stride + blk_col];
-#if CONFIG_IST
       // Secondary transforms are disabled for chroma
       disable_secondary_tx_type(&tx_type);
-#endif  // CONFIG_IST
     } else {
       // In intra mode, uv planes don't share the same prediction mode as y
       // plane, so the tx_type should not be shared
@@ -2972,7 +2957,6 @@
         tx_size, is_inter_block(mbmi, xd->tree_type), reduced_tx_set);
     if (!av1_ext_tx_used[tx_set_type][tx_type]) tx_type = DCT_DCT;
   }
-#if CONFIG_IST
   assert(av1_ext_tx_used[av1_get_ext_tx_set_type(
       tx_size, is_inter_block(mbmi, xd->tree_type), reduced_tx_set)]
                         [get_primary_tx_type(tx_type)]);
@@ -2981,11 +2965,6 @@
     // TX_32X32 while tx_type is by default DCT_DCT.
     disable_primary_tx_type(&tx_type);
   }
-#else
-  assert(tx_type < TX_TYPES);
-  assert(av1_ext_tx_used[av1_get_ext_tx_set_type(
-      tx_size, is_inter_block(mbmi, xd->tree_type), reduced_tx_set)][tx_type]);
-#endif  // CONFIG_IST
   return tx_type;
 }
 
diff --git a/av1/common/common_data.h b/av1/common/common_data.h
index 3b8e73d..225040e 100644
--- a/av1/common/common_data.h
+++ b/av1/common/common_data.h
@@ -641,7 +641,6 @@
          block_size_high[bsize1] > block_size_high[bsize2];
 }
 
-#if CONFIG_IST
 // Mapping of intra modes to IST kernel set
 // Secondary transforms are enabled only intra modes < PAETH_PRED.
 // Thus, the array size is kept as INTRA_MODES - 1
@@ -10280,7 +10279,6 @@
                     },
                   };
 
-#endif
 #if CONFIG_FLEX_MVRES
 static const int min_class_with_offset[7] = { 4, 3, 2, 0, 0, 0, 0 };
 #endif
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index b8567d8..3474c2e 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -366,9 +366,7 @@
   RESET_CDF_COUNTER_STRIDE(fc->inter_ext_tx_cdf[3], 2, CDF_SIZE(TX_TYPES));
   RESET_CDF_COUNTER(fc->cfl_sign_cdf, CFL_JOINT_SIGNS);
   RESET_CDF_COUNTER(fc->cfl_alpha_cdf, CFL_ALPHABET_SIZE);
-#if CONFIG_IST
   RESET_CDF_COUNTER_STRIDE(fc->stx_cdf, STX_TYPES, CDF_SIZE(STX_TYPES));
-#endif
 #if CONFIG_FLEX_MVRES
   for (int p = 0; p < NUM_MV_PREC_MPP_CONTEXT; ++p) {
     RESET_CDF_COUNTER(fc->pb_mv_mpp_flag_cdf[p], 2);
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 81e8d7b..abb1988 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -2651,14 +2651,12 @@
 #endif  // CONFIG_NEW_CONTEXT_MODELING
 #endif  // CONFIG_NEW_TX_PARTITION
 
-#if CONFIG_IST
 // Updated CDF initialization values
 static const aom_cdf_prob default_stx_cdf[TX_SIZES][CDF_SIZE(STX_TYPES)] = {
   { AOM_CDF4(1542, 11565, 24287) },  { AOM_CDF4(4776, 13664, 21624) },
   { AOM_CDF4(7447, 17278, 24725) },  { AOM_CDF4(5783, 17348, 21203) },
   { AOM_CDF4(17873, 20852, 23831) },
 };
-#endif
 
 #if CONFIG_FLEX_MVRES
 static const aom_cdf_prob
@@ -3078,9 +3076,7 @@
   av1_copy(fc->intrabc_mode_cdf, default_intrabc_mode_cdf);
   av1_copy(fc->intrabc_drl_idx_cdf, default_intrabc_drl_idx_cdf);
 #endif  // CONFIG_BVP_IMPROVEMENT
-#if CONFIG_IST
   av1_copy(fc->stx_cdf, default_stx_cdf);
-#endif
 #if CONFIG_FLEX_MVRES
   av1_copy(fc->pb_mv_precision_cdf, default_pb_mv_precision_cdf);
   av1_copy(fc->pb_mv_mpp_flag_cdf, default_pb_mv_most_probable_precision_cdf);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index b2ed81f..a24c99d 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -390,9 +390,7 @@
                                [CDF_SIZE(TX_TYPES)];
   aom_cdf_prob cfl_sign_cdf[CDF_SIZE(CFL_JOINT_SIGNS)];
   aom_cdf_prob cfl_alpha_cdf[CFL_ALPHA_CONTEXTS][CDF_SIZE(CFL_ALPHABET_SIZE)];
-#if CONFIG_IST
   aom_cdf_prob stx_cdf[TX_SIZES][CDF_SIZE(STX_TYPES)];
-#endif
 #if CONFIG_FLEX_MVRES
   aom_cdf_prob pb_mv_mpp_flag_cdf[NUM_MV_PREC_MPP_CONTEXT][CDF_SIZE(2)];
 
diff --git a/av1/common/enums.h b/av1/common/enums.h
index fab7fd8..b0353c4 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -170,14 +170,12 @@
 #endif  // CONFIG_AIMC
 
 // Intra Secondary Transform
-#if CONFIG_IST
 #define IST_SET_SIZE 14  // IST kernel set size
 #define STX_TYPES 4      // 4 sec_tx_types including no IST
 #define IST_4x4_WIDTH 16
 #define IST_4x4_HEIGHT 8
 #define IST_8x8_WIDTH 64
 #define IST_8x8_HEIGHT 32
-#endif  // CONFIG_IST
 
 #if CONFIG_ATC_NEWTXSETS
 // TX sizes used for mode dependent TX sets
diff --git a/av1/common/idct.c b/av1/common/idct.c
index 8c9cd55..a9a3f1f 100644
--- a/av1/common/idct.c
+++ b/av1/common/idct.c
@@ -21,9 +21,7 @@
 #include "av1/common/blockd.h"
 #include "av1/common/enums.h"
 #include "av1/common/idct.h"
-#if CONFIG_IST
 #include "av1/common/scan.h"
-#endif
 
 int av1_get_tx_scale(const TX_SIZE tx_size) {
   const int pels = tx_size_2d[tx_size];
@@ -200,7 +198,6 @@
                             TX_TYPE tx_type, int eob, int reduced_tx_set,
                             TxfmParam *txfm_param) {
   (void)plane;
-#if CONFIG_IST
   MB_MODE_INFO *const mbmi = xd->mi[0];
   txfm_param->tx_type = get_primary_tx_type(tx_type);
   txfm_param->sec_tx_type = 0;
@@ -209,27 +206,11 @@
   if ((txfm_param->intra_mode < PAETH_PRED) &&
       !xd->lossless[mbmi->segment_id] &&
       !(mbmi->filter_intra_mode_info.use_filter_intra)) {
-#if CONFIG_IST_FIX_B076
     // updated EOB condition
     txfm_param->sec_tx_type = get_secondary_tx_type(tx_type);
-#else
-    const int width = tx_size_wide[tx_size];
-    const int height = tx_size_high[tx_size];
-    const int sb_size = (width >= 8 && height >= 8) ? 8 : 4;
-    bool ist_eob = 1;
-    if ((sb_size == 4) && (eob > (IST_4x4_HEIGHT - 1)))
-      ist_eob = 0;
-    else if ((sb_size == 8) && (eob > (IST_8x8_HEIGHT - 1)))
-      ist_eob = 0;
-    if (ist_eob) txfm_param->sec_tx_type = get_secondary_tx_type(tx_type);
-#endif  // CONFIG_IST_FIX_B076
   }
-#else
-  txfm_param->tx_type = tx_type;
-#endif
   txfm_param->tx_size = tx_size;
   // EOB needs to adjusted after inverse IST
-#if CONFIG_IST_FIX_B098
   if (txfm_param->sec_tx_type) {
     // txfm_param->eob = av1_get_max_eob(tx_size);
     const int sb_size =
@@ -238,9 +219,6 @@
   } else {
     txfm_param->eob = eob;
   }
-#else
-  txfm_param->eob = eob;
-#endif  // CONFIG_IST_FIX_B098
   txfm_param->lossless = xd->lossless[xd->mi[0]->segment_id];
   txfm_param->bd = xd->bd;
   txfm_param->tx_set_type = av1_get_ext_tx_set_type(
@@ -340,12 +318,7 @@
 }
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-void av1_inverse_transform_block(const MACROBLOCKD *xd,
-#if CONFIG_IST
-                                 tran_low_t *dqcoeff,
-#else
-                                 const tran_low_t *dqcoeff,
-#endif
+void av1_inverse_transform_block(const MACROBLOCKD *xd, tran_low_t *dqcoeff,
                                  int plane, TX_TYPE tx_type, TX_SIZE tx_size,
                                  uint16_t *dst, int stride, int eob,
                                  int reduced_tx_set) {
@@ -358,7 +331,6 @@
                   &txfm_param);
   assert(av1_ext_tx_used[txfm_param.tx_set_type][txfm_param.tx_type]);
 
-#if CONFIG_IST
   MB_MODE_INFO *const mbmi = xd->mi[0];
   PREDICTION_MODE intra_mode =
       (plane == AOM_PLANE_Y) ? mbmi->mode : get_uv_mode(mbmi->uv_mode);
@@ -367,13 +339,11 @@
   (void)intra_mode;
   (void)filter;
   av1_inv_stxfm(dqcoeff, &txfm_param);
-#endif
 
   av1_highbd_inv_txfm_add(dqcoeff, dst, stride, &txfm_param);
 }
 
 // Inverse secondary transform
-#if CONFIG_IST
 void inv_stxfm_c(tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode,
                  const uint8_t stx_idx, const int size) {
   const int16_t *kernel = (size == 4) ? ist_4x4_kernel[mode][stx_idx][0]
@@ -421,27 +391,17 @@
 
     const int sb_size = (width >= 8 && height >= 8) ? 8 : 4;
     const int16_t *scan_order_out;
-#if CONFIG_IST_FIX_B076
     // Align scan order of IST with primary transform scan order
     const SCAN_ORDER *scan_order_in =
         get_scan(txfm_param->tx_size, txfm_param->tx_type);
     const int16_t *const scan = scan_order_in->scan;
-#else
-    const int16_t *scan_order_in = (sb_size == 4)
-                                       ? stx_scan_orders_4x4[log2width - 2]
-                                       : stx_scan_orders_8x8[log2width - 2];
-#endif  // CONFIG_IST_FIX_B076
     tran_low_t buf0[64] = { 0 }, buf1[64] = { 0 };
     tran_low_t *tmp = buf0;
     tran_low_t *src = coeff;
 
     for (int r = 0; r < sb_size * sb_size; r++) {
-#if CONFIG_IST_FIX_B076
       // Align scan order of IST with primary transform scan order
       *tmp = src[scan[r]];
-#else
-      *tmp = src[scan_order_in[r]];
-#endif  // CONFIG_IST_FIX_B076
       tmp++;
     }
     int8_t transpose = 0;
@@ -469,4 +429,3 @@
     }
   }
 }
-#endif
diff --git a/av1/common/idct.h b/av1/common/idct.h
index 2f5dcb4..b50d972 100644
--- a/av1/common/idct.h
+++ b/av1/common/idct.h
@@ -39,12 +39,7 @@
                                    CctxType cctx_type);
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-void av1_inverse_transform_block(const MACROBLOCKD *xd,
-#if CONFIG_IST
-                                 tran_low_t *dqcoeff,
-#else
-                                 const tran_low_t *dqcoeff,
-#endif
+void av1_inverse_transform_block(const MACROBLOCKD *xd, tran_low_t *dqcoeff,
                                  int plane, TX_TYPE tx_type, TX_SIZE tx_size,
                                  uint16_t *dst, int stride, int eob,
                                  int reduced_tx_set);
@@ -56,9 +51,7 @@
   return (const int32_t *)input;
 }
 
-#if CONFIG_IST
 void av1_inv_stxfm(tran_low_t *coeff, TxfmParam *txfm_param);
-#endif
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/av1/common/quant_common.c b/av1/common/quant_common.c
index 8a961c2..5dab594 100644
--- a/av1/common/quant_common.c
+++ b/av1/common/quant_common.c
@@ -244,13 +244,9 @@
 
 // Returns true if the tx_type corresponds to non-identity transform in both
 // horizontal and vertical directions.
-#if CONFIG_IST
 static INLINE bool is_2d_transform(TX_TYPE tx_type) {
   return (get_primary_tx_type(tx_type) < IDTX);
 }
-#else
-static INLINE bool is_2d_transform(TX_TYPE tx_type) { return (tx_type < IDTX); }
-#endif
 
 const qm_val_t *av1_get_iqmatrix(const CommonQuantParams *quant_params,
                                  const MACROBLOCKD *xd, int plane,
diff --git a/av1/common/scan.h b/av1/common/scan.h
index 3955a28..ef797ee 100644
--- a/av1/common/scan.h
+++ b/av1/common/scan.h
@@ -42,11 +42,7 @@
 
 static INLINE const SCAN_ORDER *get_default_scan(TX_SIZE tx_size,
                                                  TX_TYPE tx_type) {
-#if CONFIG_IST
   return &av1_scan_orders[tx_size][get_primary_tx_type(tx_type)];
-#else
-  return &av1_scan_orders[tx_size][tx_type];
-#endif
 }
 
 static INLINE const SCAN_ORDER *get_scan(TX_SIZE tx_size, TX_TYPE tx_type) {
diff --git a/av1/common/x86/highbd_inv_txfm_sse4.c b/av1/common/x86/highbd_inv_txfm_sse4.c
index c42a74e..2096832 100644
--- a/av1/common/x86/highbd_inv_txfm_sse4.c
+++ b/av1/common/x86/highbd_inv_txfm_sse4.c
@@ -5817,7 +5817,6 @@
 }
 
 // Inverse secondary transform
-#if CONFIG_IST
 void inv_stxfm_sse4_1(tran_low_t *src, tran_low_t *dst,
                       const PREDICTION_MODE mode, const uint8_t stx_idx,
                       const int size) {
@@ -5859,4 +5858,3 @@
     _mm_storeu_si128(tmpBlock, tmp);
   }
 }
-#endif
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index deaf30c..d9c62cb 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -156,11 +156,7 @@
                                                const TX_SIZE tx_size,
                                                uint16_t *dst, int stride,
                                                int reduced_tx_set) {
-#if CONFIG_IST
   tran_low_t *dqcoeff = dcb->dqcoeff_block[plane] + dcb->cb_offset[plane];
-#else
-  tran_low_t *const dqcoeff = dcb->dqcoeff_block[plane] + dcb->cb_offset[plane];
-#endif
   eob_info *eob_data = dcb->eob_data[plane] + dcb->txb_offset[plane];
   uint16_t scan_line = eob_data->max_scan_line;
   uint16_t eob = eob_data->eob;
@@ -177,16 +173,12 @@
 #endif  // CONFIG_CROSS_CHROMA_TX
   av1_inverse_transform_block(&dcb->xd, dqcoeff, plane, tx_type, tx_size, dst,
                               stride, eob, reduced_tx_set);
-#if CONFIG_IST
   const int width = tx_size_wide[tx_size] <= 32 ? tx_size_wide[tx_size] : 32;
   const int height = tx_size_high[tx_size] <= 32 ? tx_size_high[tx_size] : 32;
   const int sbSize = (width >= 8 && height >= 8) ? 8 : 4;
   int32_t nz0 = (sbSize - 1) * tx_size_wide[tx_size] + sbSize;
   int32_t nz1 = (scan_line + 1);
   memset(dqcoeff, 0, AOMMAX(nz0, nz1) * sizeof(dqcoeff[0]));
-#else
-  memset(dqcoeff, 0, (scan_line + 1) * sizeof(dqcoeff[0]));
-#endif
 }
 
 static AOM_INLINE void read_coeffs_tx_intra_block(
@@ -6005,9 +5997,7 @@
   seq_params->num_same_ref_compound = aom_rb_read_literal(rb, 2);
 #endif  // CONFIG_ALLOW_SAME_REF_COMPOUND
   seq_params->enable_sdp = aom_rb_read_bit(rb);
-#if CONFIG_IST
   seq_params->enable_ist = aom_rb_read_bit(rb);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   seq_params->enable_cctx = seq_params->monochrome ? 0 : aom_rb_read_bit(rb);
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 45b85e3..ba905f9 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -1253,7 +1253,6 @@
 }
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
 void av1_read_sec_tx_type(const AV1_COMMON *const cm, MACROBLOCKD *xd,
                           int blk_row, int blk_col, TX_SIZE tx_size,
                           uint16_t *eob, aom_reader *r) {
@@ -1291,7 +1290,6 @@
     }
   }
 }
-#endif
 
 #if CONFIG_FLEX_MVRES
 static INLINE void read_mv(aom_reader *r, MV *mv, MV ref,
diff --git a/av1/decoder/decodemv.h b/av1/decoder/decodemv.h
index 08382fb..ac2e813 100644
--- a/av1/decoder/decodemv.h
+++ b/av1/decoder/decodemv.h
@@ -29,11 +29,9 @@
 }  // extern "C"
 #endif
 
-#if CONFIG_IST
 void av1_read_sec_tx_type(const AV1_COMMON *const cm, MACROBLOCKD *xd,
                           int blk_row, int blk_col, TX_SIZE tx_size,
                           uint16_t *eob, aom_reader *r);
-#endif
 
 void av1_read_tx_type(const AV1_COMMON *const cm, MACROBLOCKD *xd, int blk_row,
                       int blk_col, TX_SIZE tx_size, aom_reader *r);
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c
index 6e227e1..91046a3 100644
--- a/av1/decoder/decodetxb.c
+++ b/av1/decoder/decodetxb.c
@@ -456,11 +456,7 @@
   const TX_TYPE tx_type =
       av1_get_tx_type(xd, plane_type, blk_row, blk_col, tx_size,
                       cm->features.reduced_tx_set_used);
-#if CONFIG_IST
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-  const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
   const qm_val_t *iqmatrix =
       av1_get_iqmatrix(&cm->quant_params, xd, plane, tx_size, tx_type);
   const SCAN_ORDER *const scan_order = get_scan(tx_size, tx_type);
@@ -544,13 +540,11 @@
   }
 #endif  // CONFIG_CONTEXT_DERIVATION
 
-#if CONFIG_IST
   // read  sec_tx_type here
   // Only y plane's sec_tx_type is transmitted
   if ((plane == AOM_PLANE_Y) && (cm->seq_params.enable_ist)) {
     av1_read_sec_tx_type(cm, xd, blk_row, blk_col, tx_size, eob, r);
   }
-#endif
   //
   if (*eob > 1) {
     memset(levels_buf, 0, sizeof(*levels_buf) * TX_PAD_2D);
@@ -916,11 +910,7 @@
   uint8_t cul_level = 0;
   if (decode_rest) {
     if ((mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
          get_primary_tx_type(tx_type) == IDTX && plane == PLANE_TYPE_Y) ||
-#else
-         tx_type == IDTX && plane == PLANE_TYPE_Y) ||
-#endif  // CONFIG_IST
         use_inter_fsc(cm, plane, tx_type, is_inter)) {
       cul_level =
           av1_read_coeffs_txb_skip(cm, dcb, r, row, col, plane, tx_size);
diff --git a/av1/encoder/av1_fwd_txfm2d.c b/av1/encoder/av1_fwd_txfm2d.c
index 6ba66c2..bbbdc9a 100644
--- a/av1/encoder/av1_fwd_txfm2d.c
+++ b/av1/encoder/av1_fwd_txfm2d.c
@@ -429,7 +429,6 @@
   set_fwd_txfm_non_scale_range(cfg);
 }
 
-#if CONFIG_IST
 void fwd_stxfm_c(tran_low_t *src, tran_low_t *dst, const PREDICTION_MODE mode,
                  const uint8_t stx_idx, const int size) {
   const int16_t *kernel = (size == 4) ? ist_4x4_kernel[mode][stx_idx][0]
@@ -459,4 +458,3 @@
     kernel += (size * size);
   }
 }
-#endif
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index bac2dbd..9149446 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -706,11 +706,7 @@
   const int is_inter = is_inter_block(mbmi, xd->tree_type);
   if (code_rest) {
     if ((mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
          get_primary_tx_type(tx_type) == IDTX && plane == PLANE_TYPE_Y) ||
-#else
-         tx_type == IDTX && plane == PLANE_TYPE_Y) ||
-#endif  // CONFIG_IST
         use_inter_fsc(cm, plane, tx_type, is_inter)) {
       av1_write_coeffs_txb_skip(cm, x, w, blk_row, blk_col, plane, block,
                                 tx_size);
@@ -1230,7 +1226,6 @@
     // eset == 0 should correspond to a set with only DCT_DCT and there
     // is no need to send the tx_type
     assert(eset > 0);
-#if CONFIG_IST
 #if CONFIG_ATC_NEWTXSETS
     const int size_info = av1_size_class[tx_size];
     if (!is_inter) {
@@ -1244,9 +1239,6 @@
 #else
     assert(av1_ext_tx_used[tx_set_type][get_primary_tx_type(tx_type)]);
 #endif  // CONFIG_ATC_NEWTXSETS
-#else
-    assert(av1_ext_tx_used[tx_set_type][tx_type]);
-#endif
     if (is_inter) {
       aom_write_symbol(w, av1_ext_tx_ind[tx_set_type][tx_type],
                        ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
@@ -1263,8 +1255,6 @@
       else
         intra_dir = mbmi->mode;
 #endif  // !CONFIG_ATC_NEWTXSETS
-
-#if CONFIG_IST
       aom_write_symbol(
 #if CONFIG_ATC_NEWTXSETS
           w,
@@ -1285,12 +1275,6 @@
           ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][intra_dir],
           av1_num_ext_tx_set_intra[tx_set_type]);
 #endif  // CONFIG_ATC_NEWTXSETS
-#else
-      aom_write_symbol(
-          w, av1_ext_tx_ind_intra[tx_set_type][tx_type],
-          ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][intra_dir],
-          av1_num_ext_tx_set_intra[tx_set_type]);
-#endif
     }
   }
 }
@@ -1320,7 +1304,6 @@
 }
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
 void av1_write_sec_tx_type(const AV1_COMMON *const cm, const MACROBLOCKD *xd,
                            TX_TYPE tx_type, TX_SIZE tx_size, uint16_t eob,
                            aom_writer *w) {
@@ -1352,7 +1335,7 @@
     }
   }
 }
-#endif
+
 #if !CONFIG_AIMC
 static AOM_INLINE void write_intra_y_mode_nonkf(FRAME_CONTEXT *frame_ctx,
                                                 BLOCK_SIZE bsize,
@@ -4482,9 +4465,7 @@
   aom_wb_write_literal(wb, seq_params->num_same_ref_compound, 2);
 #endif  // CONFIG_ALLOW_SAME_REF_COMPOUND
   aom_wb_write_bit(wb, seq_params->enable_sdp);
-#if CONFIG_IST
   aom_wb_write_bit(wb, seq_params->enable_ist);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   if (!seq_params->monochrome) aom_wb_write_bit(wb, seq_params->enable_cctx);
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/av1/encoder/bitstream.h b/av1/encoder/bitstream.h
index 8a7cd65..7257870 100644
--- a/av1/encoder/bitstream.h
+++ b/av1/encoder/bitstream.h
@@ -44,11 +44,9 @@
 int av1_pack_bitstream(AV1_COMP *const cpi, uint8_t *dst, size_t *size,
                        int *const largest_tile_id);
 
-#if CONFIG_IST
 void av1_write_sec_tx_type(const AV1_COMMON *const cm, const MACROBLOCKD *xd,
                            TX_TYPE tx_type, TX_SIZE tx_size, uint16_t eob,
                            aom_writer *w);
-#endif
 
 void av1_write_tx_type(const AV1_COMMON *const cm, const MACROBLOCKD *xd,
                        TX_TYPE tx_type, TX_SIZE tx_size, aom_writer *w);
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 371d359..c9f7d49 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -104,9 +104,7 @@
   //! Stores source - pred so the txfm can be computed later
   DECLARE_ALIGNED(32, int16_t, src_diff[MAX_SB_SQUARE]);
   //! Temporary buffer for primary transform coeffs
-#if CONFIG_IST
   DECLARE_ALIGNED(32, int32_t, temp_coeff[4096]);
-#endif
   //! Dequantized coefficients
   tran_low_t *dqcoeff;
   //! Quantized coefficients
@@ -672,7 +670,7 @@
    * allocates the memory for MACROBLOCKD::tx_type_map during rdopt on the
    * partition block. So if we need to save memory, we could move the allocation
    * to pick_sb_mode instead.
-   * If secondary transform in enabled (CONFIG_IST) each element of the array
+   * If secondary transform in enabled (IST) each element of the array
    * stores both primary and secondary transform types as shown below: Bits 4~5
    * of each element stores secondary tx_type Bits 0~3 of each element stores
    * primary tx_type
@@ -809,10 +807,8 @@
   int intra_uv_mode_cost[CFL_ALLOWED_TYPES][UV_MODE_CONTEXTS][UV_INTRA_MODES];
 #endif  // CONFIG_AIMC
 
-#if CONFIG_IST
   //! Cost of signaling secondary transform index
   int stx_flag_cost[TX_SIZES][STX_TYPES];
-#endif
 
   //! Rate rate associated with each alpha codeword
   int cfl_cost[CFL_JOINT_SIGNS][CFL_PRED_PLANES][CFL_ALPHABET_SIZE];
@@ -1673,7 +1669,7 @@
          !xd->lossless[mbmi->segment_id];
 }
 
-#if !CONFIG_IST && !CONFIG_NEW_TX_PARTITION
+#if !CONFIG_NEW_TX_PARTITION
 static INLINE int tx_size_to_depth(TX_SIZE tx_size, BLOCK_SIZE bsize) {
   TX_SIZE ctx_size = max_txsize_rect_lookup[bsize];
   int depth = 0;
diff --git a/av1/encoder/encodeframe_utils.c b/av1/encoder/encodeframe_utils.c
index 4fb239e..8cbded4 100644
--- a/av1/encoder/encodeframe_utils.c
+++ b/av1/encoder/encodeframe_utils.c
@@ -1485,10 +1485,8 @@
   AVERAGE_CDF(ctx_left->cfl_sign_cdf, ctx_tr->cfl_sign_cdf, CFL_JOINT_SIGNS);
   AVERAGE_CDF(ctx_left->cfl_alpha_cdf, ctx_tr->cfl_alpha_cdf,
               CFL_ALPHABET_SIZE);
-#if CONFIG_IST
   AVG_CDF_STRIDE(ctx_left->stx_cdf, ctx_tr->stx_cdf, STX_TYPES,
                  CDF_SIZE(STX_TYPES));
-#endif
 #if CONFIG_FLEX_MVRES
 
   for (int p = 0; p < NUM_MV_PREC_MPP_CONTEXT; ++p) {
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index 16fe6cc..b43fa78 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -383,30 +383,17 @@
     // transform, in order to obtain the quantized coefficients of the second
     // channel.
     if (plane != AOM_PLANE_V) {
-#if CONFIG_IST
       av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, txfm_param, 0);
-#else
-      av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, txfm_param);
-#endif
     }
     if (plane == AOM_PLANE_U) {
-#if CONFIG_IST
       av1_xform(x, AOM_PLANE_V, block, blk_row, blk_col, plane_bsize,
                 txfm_param, 0);
-#else
-      av1_xform(x, AOM_PLANE_V, block, blk_row, blk_col, plane_bsize,
-                txfm_param);
-#endif
       forward_cross_chroma_transform(x, block, txfm_param->tx_size,
                                      txfm_param->cctx_type);
     }
   } else {
 #endif  // CONFIG_CROSS_CHROMA_TX
-#if CONFIG_IST
     av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, txfm_param, 0);
-#else
-  av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, txfm_param);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   }
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -416,11 +403,7 @@
   if (fsc_mode) qparam->use_optimize_b = false;
   av1_quant(x, plane, block, txfm_param, qparam);
   if (fsc_mode) {
-#if CONFIG_IST
     if (get_primary_tx_type(txfm_param->tx_type) == IDTX) {
-#else
-    if (txfm_param->tx_type == IDTX) {
-#endif  // CONFIG_IST
       uint16_t *const eob = &p->eobs[block];
       if (*eob != 0) *eob = av1_get_max_eob(txfm_param->tx_size);
     }
@@ -428,17 +411,8 @@
 }
 
 void av1_xform(MACROBLOCK *x, int plane, int block, int blk_row, int blk_col,
-               BLOCK_SIZE plane_bsize, TxfmParam *txfm_param
-#if CONFIG_IST
-               ,
-               const int reuse
-#endif
-) {
-#if CONFIG_IST
+               BLOCK_SIZE plane_bsize, TxfmParam *txfm_param, const int reuse) {
   struct macroblock_plane *const p = &x->plane[plane];
-#else
-  const struct macroblock_plane *const p = &x->plane[plane];
-#endif
   const int block_offset = BLOCK_OFFSET(block);
   tran_low_t *const coeff = p->coeff + block_offset;
   const int diff_stride = block_size_wide[plane_bsize];
@@ -446,7 +420,6 @@
   const int src_offset = (blk_row * diff_stride + blk_col);
   const int16_t *src_diff = &p->src_diff[src_offset << MI_SIZE_LOG2];
 
-#if CONFIG_IST
   if (reuse == 0) {
     av1_fwd_txfm(src_diff, coeff, diff_stride, txfm_param);
   } else {
@@ -478,9 +451,6 @@
   (void)filter;
   (void)is_depth0;
   av1_fwd_stxfm(coeff, txfm_param);
-#else
-  av1_fwd_txfm(src_diff, coeff, diff_stride, txfm_param);
-#endif
 }
 
 #if CONFIG_CROSS_CHROMA_TX
@@ -544,10 +514,7 @@
   }
 }
 
-void av1_setup_xform(const AV1_COMMON *cm, MACROBLOCK *x,
-#if CONFIG_IST
-                     int plane,
-#endif
+void av1_setup_xform(const AV1_COMMON *cm, MACROBLOCK *x, int plane,
                      TX_SIZE tx_size, TX_TYPE tx_type,
 #if CONFIG_CROSS_CHROMA_TX
                      CctxType cctx_type,
@@ -556,7 +523,6 @@
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
 
-#if CONFIG_IST
   txfm_param->tx_type = get_primary_tx_type(tx_type);
   txfm_param->sec_tx_type = 0;
   txfm_param->intra_mode =
@@ -568,9 +534,6 @@
       cm->seq_params.enable_ist) {
     txfm_param->sec_tx_type = get_secondary_tx_type(tx_type);
   }
-#else
-  txfm_param->tx_type = tx_type;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   txfm_param->cctx_type = cctx_type;
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -627,11 +590,7 @@
   MB_MODE_INFO *mbmi = xd->mi[0];
   struct macroblock_plane *const p = &x->plane[plane];
   struct macroblockd_plane *const pd = &xd->plane[plane];
-#if CONFIG_IST || CONFIG_CROSS_CHROMA_TX
   tran_low_t *dqcoeff = p->dqcoeff + BLOCK_OFFSET(block);
-#else
-  tran_low_t *const dqcoeff = p->dqcoeff + BLOCK_OFFSET(block);
-#endif
   uint16_t *dst;
   ENTROPY_CONTEXT *a, *l;
   int dummy_rate_cost = 0;
@@ -685,11 +644,7 @@
     else
       quant_idx =
           USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP;
-    av1_setup_xform(cm, x,
-#if CONFIG_IST
-                    plane,
-#endif
-                    tx_size, tx_type,
+    av1_setup_xform(cm, x, plane, tx_size, tx_type,
 #if CONFIG_CROSS_CHROMA_TX
                     cctx_type,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1019,11 +974,7 @@
   TxfmParam txfm_param;
   QUANT_PARAM quant_param;
 
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  plane,
-#endif
-                  tx_size, DCT_DCT,
+  av1_setup_xform(cm, x, plane, tx_size, DCT_DCT,
 #if CONFIG_CROSS_CHROMA_TX
                   CCTX_NONE,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1238,11 +1189,7 @@
       quant_idx =
           USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP;
 
-    av1_setup_xform(cm, x,
-#if CONFIG_IST
-                    plane,
-#endif
-                    tx_size, tx_type,
+    av1_setup_xform(cm, x, plane, tx_size, tx_type,
 #if CONFIG_CROSS_CHROMA_TX
                     CCTX_NONE,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1426,11 +1373,7 @@
   else
     quant_idx = USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP;
 
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  AOM_PLANE_U,
-#endif
-                  tx_size, tx_type, cctx_type, &txfm_param);
+  av1_setup_xform(cm, x, AOM_PLANE_U, tx_size, tx_type, cctx_type, &txfm_param);
   av1_setup_quant(tx_size, use_trellis, quant_idx,
                   cpi->oxcf.q_cfg.quant_b_adapt, &quant_param);
   // Whether trellis or dropout optimization is required for key frames and
diff --git a/av1/encoder/encodemb.h b/av1/encoder/encodemb.h
index 989e0ea..3d0a27c 100644
--- a/av1/encoder/encodemb.h
+++ b/av1/encoder/encodemb.h
@@ -74,10 +74,7 @@
 void av1_encode_sby_pass1(struct AV1_COMP *cpi, MACROBLOCK *x,
                           BLOCK_SIZE bsize);
 
-void av1_setup_xform(const AV1_COMMON *cm, MACROBLOCK *x,
-#if CONFIG_IST
-                     int plane,
-#endif
+void av1_setup_xform(const AV1_COMMON *cm, MACROBLOCK *x, int plane,
                      TX_SIZE tx_size, TX_TYPE tx_type,
 #if CONFIG_CROSS_CHROMA_TX
                      CctxType cctx_Type,
@@ -101,12 +98,7 @@
                      TxfmParam *txfm_param, QUANT_PARAM *qparam);
 
 void av1_xform(MACROBLOCK *x, int plane, int block, int blk_row, int blk_col,
-               BLOCK_SIZE plane_bsize, TxfmParam *txfm_param
-#if CONFIG_IST
-               ,
-               const int reuse
-#endif
-);
+               BLOCK_SIZE plane_bsize, TxfmParam *txfm_param, const int reuse);
 
 #if CONFIG_CROSS_CHROMA_TX
 void forward_cross_chroma_transform(MACROBLOCK *x, int block, TX_SIZE tx_size,
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index e45c2dd..a0f81a5 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -481,9 +481,7 @@
 #if CONFIG_ORIP
   seq->enable_orip = oxcf->intra_mode_cfg.enable_orip;
 #endif
-#if CONFIG_IST
   seq->enable_ist = oxcf->txfm_cfg.enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   seq->enable_cctx = oxcf->txfm_cfg.enable_cctx;
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 3f256c7..da7347c 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -330,12 +330,10 @@
    * (mode-dependent) only.
    */
   bool use_intra_default_tx_only;
-#if CONFIG_IST
   /*!
    * Flag to indicate if intra secondary transform should be enabled.
    */
   bool enable_ist;
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   /*!
    * Flag to indicate if cross chroma component transform is enabled.
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 0ca1100..b35db0e 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -720,11 +720,7 @@
   int eob_extra;
   const int eob_pt = get_eob_pos_token(eob, &eob_extra);
   const int eob_multi_size = txsize_log2_minus4[tx_size];
-#if CONFIG_IST
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-  const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
   const int eob_multi_ctx = (tx_class == TX_CLASS_2D) ? 0 : 1;
   switch (eob_multi_size) {
     case 0:
@@ -777,14 +773,12 @@
 #endif
   }
 
-#if CONFIG_IST
   // write sec_tx_type here
   // Only y plane's sec_tx_type is transmitted
   if ((plane == AOM_PLANE_Y) && (cm->seq_params.enable_ist)) {
     av1_write_sec_tx_type(cm, xd, tx_type, tx_size, eob, w);
   }
-#endif
-//
+
 #if DEBUG_EXTQUANT
   fprintf(cm->fEncCoeffLog, "tx_type=%d, eob=%d\n", tx_type, eob);
 #endif
@@ -1183,11 +1177,7 @@
                                 tx_size, cm->features.reduced_tx_set_used);
             if (code_rest) {
               if ((mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
                    get_primary_tx_type(tx_type) == IDTX &&
-#else
-                   tx_type == IDTX &&
-#endif  // CONFIG_IST
                    plane == PLANE_TYPE_Y) ||
                   use_inter_fsc(cm, plane, tx_type, is_inter)) {
                 av1_write_coeffs_txb_skip(cm, x, w, blk_row, blk_col, plane,
@@ -1229,12 +1219,7 @@
 // TODO(angiebird): use this function whenever it's possible
 static int get_tx_type_cost(const MACROBLOCK *x, const MACROBLOCKD *xd,
                             int plane, TX_SIZE tx_size, TX_TYPE tx_type,
-                            int reduced_tx_set_used
-#if CONFIG_IST
-                            ,
-                            int eob
-#endif
-) {
+                            int reduced_tx_set_used, int eob) {
   if (plane > 0) return 0;
 
   const TX_SIZE square_tx_size = txsize_sqr_map[tx_size];
@@ -1261,7 +1246,6 @@
                                              .filter_intra_mode];
         else
           intra_dir = mbmi->mode;
-#if CONFIG_IST
         TX_TYPE primary_tx_type = get_primary_tx_type(tx_type);
         int tx_type_cost =
             x->mode_costs.intra_tx_type_costs[ext_tx_set][square_tx_size]
@@ -1273,22 +1257,15 @@
                                          [get_secondary_tx_type(tx_type)];
         }
         return tx_type_cost;
-#else
-        return x->mode_costs.intra_tx_type_costs[ext_tx_set][square_tx_size]
-                                                [intra_dir][tx_type];
-#endif
       }
     }
-  }
-#if CONFIG_IST
-  else if (!is_inter && !xd->lossless[xd->mi[0]->segment_id]) {
+  } else if (!is_inter && !xd->lossless[xd->mi[0]->segment_id]) {
     if (block_signals_sec_tx_type(xd, tx_size, tx_type, eob) &&
         xd->enable_ist) {
       return x->mode_costs
           .stx_flag_cost[square_tx_size][get_secondary_tx_type(tx_type)];
     }
   }
-#endif
   return 0;
 }
 
@@ -1349,12 +1326,8 @@
   int8_t signs_buf[TX_PAD_2D];
   int8_t *const signs = set_signs(signs_buf, width);
   av1_txb_init_levels_signs(qcoeff, width, height, levels_buf, signs_buf);
-  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used
-#if CONFIG_IST
-                           ,
-                           eob
-#endif  // CONFIG_IST
-  );
+  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used,
+                           eob);
 #if CONFIG_CROSS_CHROMA_TX
   cost += get_cctx_type_cost(cm, x, xd, plane, tx_size, block, cctx_type);
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1441,12 +1414,8 @@
 
   av1_txb_init_levels(qcoeff, width, height, levels);
 
-  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used
-#if CONFIG_IST
-                           ,
-                           eob
-#endif
-  );
+  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used,
+                           eob);
 #if CONFIG_CROSS_CHROMA_TX
   cost += get_cctx_type_cost(cm, x, xd, plane, tx_size, block, cctx_type);
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1706,23 +1675,15 @@
   int cost = coeff_costs->txb_skip_cost[txb_skip_ctx][0];
 #endif  // CONFIG_CONTEXT_DERIVATION
 
-  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used
-#if CONFIG_IST
-                           ,
-                           eob
-#endif  // CONFIG_IST
-  );
+  cost += get_tx_type_cost(x, xd, plane, tx_size, tx_type, reduced_tx_set_used,
+                           eob);
 #if CONFIG_CROSS_CHROMA_TX
   cost += get_cctx_type_cost(cm, x, xd, plane, tx_size, block, cctx_type);
 #endif  // CONFIG_CROSS_CHROMA_TX
 
   const MB_MODE_INFO *mbmi = xd->mi[0];
   if ((mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
        get_primary_tx_type(tx_type) == IDTX && plane == PLANE_TYPE_Y) ||
-#else
-       tx_type == IDTX && plane == PLANE_TYPE_Y) ||
-#endif  // CONFIG_IST
       use_inter_fsc(cm, plane, tx_type, is_inter_block(mbmi, xd->tree_type))) {
     cost +=
         av1_cost_coeffs_txb_skip_estimate(x, plane, block, tx_size, tx_type);
@@ -1839,11 +1800,7 @@
     return skip_cost;
   }
 
-#if CONFIG_IST
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-  const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
 #if CONFIG_PAR_HIDING
   bool enable_parity_hiding = cm->features.allow_parity_hiding &&
                               !xd->lossless[xd->mi[0]->segment_id] &&
@@ -1853,11 +1810,7 @@
 
   const MB_MODE_INFO *mbmi = xd->mi[0];
   if ((mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
        get_primary_tx_type(tx_type) == IDTX && plane == PLANE_TYPE_Y) ||
-#else
-       tx_type == IDTX && plane == PLANE_TYPE_Y) ||
-#endif  // CONFIG_IST
       use_inter_fsc(cm, plane, tx_type, is_inter_block(mbmi, xd->tree_type))) {
     return warehouse_efficients_txb_skip(
 #if CONFIG_CROSS_CHROMA_TX
@@ -1936,11 +1889,7 @@
     return skip_cost;
   }
 
-#if CONFIG_IST
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-  const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
 
   return warehouse_efficients_txb_laplacian(cm, x, plane, block, tx_size,
                                             txb_ctx, eob, plane_type,
@@ -2986,12 +2935,8 @@
                          int sharpness) {
   MACROBLOCKD *xd = &x->e_mbd;
   const struct macroblock_plane *p = &x->plane[plane];
-#if CONFIG_IST
   const SCAN_ORDER *scan_order =
       get_scan(tx_size, get_primary_tx_type(tx_type));
-#else
-  const SCAN_ORDER *scan_order = get_scan(tx_size, tx_type);
-#endif
   const int16_t *scan = scan_order->scan;
   const int shift = av1_get_tx_scale(tx_size);
   int eob = p->eobs[block];
@@ -3010,11 +2955,7 @@
   const AV1_COMMON *cm = &cpi->common;
   const PLANE_TYPE plane_type = get_plane_type(plane);
   const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size);
-#if CONFIG_IST
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-  const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
   const MB_MODE_INFO *mbmi = xd->mi[0];
   const int bwl = get_txb_bwl(tx_size);
   const int width = get_txb_wide(tx_size);
@@ -3282,13 +3223,8 @@
   aom_free(coef_info);
 #endif  // CONFIG_PAR_HIDING
 
-  const int tx_type_cost = get_tx_type_cost(x, xd, plane, tx_size, tx_type,
-                                            cm->features.reduced_tx_set_used
-#if CONFIG_IST
-                                            ,
-                                            eob
-#endif
-  );
+  const int tx_type_cost = get_tx_type_cost(
+      x, xd, plane, tx_size, tx_type, cm->features.reduced_tx_set_used, eob);
 
   if (eob == 0)
     accu_rate += skip_cost;
@@ -3360,12 +3296,8 @@
 static void update_tx_type_count(const AV1_COMP *cpi, const AV1_COMMON *cm,
                                  MACROBLOCKD *xd, int blk_row, int blk_col,
                                  int plane, TX_SIZE tx_size,
-                                 FRAME_COUNTS *counts, uint8_t allow_update_cdf
-#if CONFIG_IST_FIX_B098
-                                 ,
-                                 int eob
-#endif  // CONFIG_IST_FIX_B098
-) {
+                                 FRAME_COUNTS *counts, uint8_t allow_update_cdf,
+                                 int eob) {
   MB_MODE_INFO *mbmi = xd->mi[0];
   int is_inter = is_inter_block(mbmi, xd->tree_type);
   const int reduced_tx_set_used = cm->features.reduced_tx_set_used;
@@ -3384,20 +3316,12 @@
     }
   } else {
     if (cpi->oxcf.txfm_cfg.use_intra_dct_only) {
-#if CONFIG_IST
       assert(get_primary_tx_type(tx_type) == DCT_DCT);
-#else
-      assert(tx_type == DCT_DCT);
-#endif
     } else if (cpi->oxcf.txfm_cfg.use_intra_default_tx_only) {
       const TX_TYPE default_type = get_default_tx_type(
           PLANE_TYPE_Y, xd, tx_size, cpi->is_screen_content_type);
       (void)default_type;
-#if CONFIG_IST
       assert(get_primary_tx_type(tx_type) == default_type);
-#else
-      assert(tx_type == default_type);
-#endif
     }
   }
 
@@ -3430,11 +3354,7 @@
         else
           intra_dir = mbmi->mode;
 #if CONFIG_ENTROPY_STATS
-#if CONFIG_IST
         const TX_TYPE primary_tx_type = get_primary_tx_type(tx_type);
-#else
-        const TX_TYPE primary_tx_type = tx_type;
-#endif  // CONFIG_IST
 #if CONFIG_ATC_NEWTXSETS
         ++counts->intra_ext_tx[eset][txsize_sqr_map[tx_size]][intra_dir]
                               [av1_tx_type_to_idx(primary_tx_type, tx_set_type,
@@ -3454,16 +3374,12 @@
 #else
               fc->intra_ext_tx_cdf[eset][txsize_sqr_map[tx_size]][intra_dir],
 #endif  // CONFIG_ATC_REDUCED_TXSET
-#if CONFIG_IST
 #if CONFIG_ATC_NEWTXSETS
               av1_tx_type_to_idx(get_primary_tx_type(tx_type), tx_set_type,
                                  intra_dir, av1_size_class[tx_size]),
 #else
               av1_ext_tx_ind_intra[tx_set_type][get_primary_tx_type(tx_type)],
 #endif  // CONFIG_ATC_NEWTXSETS
-#else
-              av1_ext_tx_ind_intra[tx_set_type][tx_type],
-#endif
 #if CONFIG_ATC_REDUCED_TXSET
               cm->features.reduced_tx_set_used
                   ? av1_num_reduced_tx_set
@@ -3471,37 +3387,25 @@
 #else
               av1_num_ext_tx_set_intra[tx_set_type]);
 #endif  // CONFIG_ATC_REDUCED_TXSET
-#if CONFIG_IST
-          // Modified condition for CDF update
-#if CONFIG_IST_FIX_B098
+        // Modified condition for CDF update
           if (cm->seq_params.enable_ist &&
               block_signals_sec_tx_type(xd, tx_size, tx_type, eob))
-#else
-          if (cm->seq_params.enable_ist)
-#endif  // CONFIG_IST_FIX_B098
             update_cdf(fc->stx_cdf[txsize_sqr_map[tx_size]],
                        (int8_t)get_secondary_tx_type(tx_type), STX_TYPES);
-#endif
         }
       }
     }
   }
-#if CONFIG_IST_FIX_B076
   // CDF update for txsize_sqr_up_map[tx_size] >= TX_32X32
   else if (!is_inter && cm->quant_params.base_qindex > 0 &&
            !mbmi->skip_txfm[xd->tree_type == CHROMA_PART] &&
-           !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-    // Modified condition for CDF update
-#if CONFIG_IST_FIX_B098
-    if (cm->seq_params.enable_ist &&
-        block_signals_sec_tx_type(xd, tx_size, tx_type, eob))
-#else
-    if (cm->seq_params.enable_ist)
-#endif  // CONFIG_IST_FIX_B098
+           !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP) &&
+           cm->seq_params.enable_ist &&
+           block_signals_sec_tx_type(xd, tx_size, tx_type, eob)) {
+    if (allow_update_cdf)
       update_cdf(fc->stx_cdf[txsize_sqr_map[tx_size]],
                  (int8_t)get_secondary_tx_type(tx_type), STX_TYPES);
   }
-#endif  // CONFIG_IST_FIX_B076
 }
 
 void av1_update_and_record_txb_skip_context(int plane, int block, int blk_row,
@@ -3572,19 +3476,10 @@
     int8_t *const signs = set_signs(signs_buf, width);
     av1_txb_init_levels_signs(tcoeff, width, height, levels_buf, signs_buf);
     update_tx_type_count(cpi, cm, xd, blk_row, blk_col, plane, tx_size,
-                         td->counts, allow_update_cdf
-#if CONFIG_IST_FIX_B098
-                         ,
-                         eob
-#endif  // CONFIG_IST_FIX_B098
-    );
+                         td->counts, allow_update_cdf, eob);
     const int16_t *const scan = scan_order->scan;
     // record tx type usage
-#if CONFIG_IST
     td->rd_counts.tx_type_used[tx_size][get_primary_tx_type(tx_type)]++;
-#else
-    td->rd_counts.tx_type_used[tx_size][tx_type]++;
-#endif  // CONFIG_IST
     DECLARE_ALIGNED(16, int8_t, coeff_contexts[MAX_TX_SQUARE]);
     av1_get_nz_map_contexts_skip(levels, scan, eob, tx_size, coeff_contexts);
     for (int c = 0; c < eob; c++) {
@@ -3699,11 +3594,7 @@
       av1_get_tx_type(xd, plane_type, blk_row, blk_col, tx_size,
                       cm->features.reduced_tx_set_used);
   if ((xd->mi[0]->fsc_mode[xd->tree_type == CHROMA_PART] &&
-#if CONFIG_IST
        get_primary_tx_type(tx_type) == IDTX && plane == PLANE_TYPE_Y) ||
-#else
-       tx_type == IDTX && plane == PLANE_TYPE_Y) ||
-#endif  // CONFIG_IST
       use_inter_fsc(cm, plane, tx_type,
                     is_inter_block(xd->mi[0], xd->tree_type))) {
     av1_update_and_record_txb_skip_context(plane, block, blk_row, blk_col,
@@ -3805,26 +3696,13 @@
     uint8_t *const levels = set_levels(levels_buf, width);
     av1_txb_init_levels(tcoeff, width, height, levels);
     update_tx_type_count(cpi, cm, xd, blk_row, blk_col, plane, tx_size,
-                         td->counts, allow_update_cdf
-#if CONFIG_IST_FIX_B098
-                         ,
-                         eob
-#endif  // CONFIG_IST_FIX_B098
-    );
+                         td->counts, allow_update_cdf, eob);
 
-#if CONFIG_IST
     const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-#else
-    const TX_CLASS tx_class = tx_type_to_class[tx_type];
-#endif
     const int16_t *const scan = scan_order->scan;
 
     // record tx type usage
-#if CONFIG_IST
     td->rd_counts.tx_type_used[tx_size][get_primary_tx_type(tx_type)]++;
-#else
-    td->rd_counts.tx_type_used[tx_size][tx_type]++;
-#endif
 
 #if CONFIG_ENTROPY_STATS
     av1_update_eob_context(cdf_idx, eob, tx_size, tx_class, plane_type, ec_ctx,
diff --git a/av1/encoder/hybrid_fwd_txfm.c b/av1/encoder/hybrid_fwd_txfm.c
index 2f61c72..5cbea4f 100644
--- a/av1/encoder/hybrid_fwd_txfm.c
+++ b/av1/encoder/hybrid_fwd_txfm.c
@@ -16,9 +16,7 @@
 
 #include "av1/common/idct.h"
 #include "av1/encoder/hybrid_fwd_txfm.h"
-#if CONFIG_IST
 #include "av1/common/scan.h"
-#endif
 
 /* 4-point reversible, orthonormal Walsh-Hadamard in 3.5 adds, 0.5 shifts per
    pixel. */
@@ -333,7 +331,6 @@
 }
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
 void av1_fwd_stxfm(tran_low_t *coeff, TxfmParam *txfm_param) {
   const TX_TYPE stx_type = txfm_param->sec_tx_type;
 
@@ -350,16 +347,10 @@
     const int log2width = tx_size_wide_log2[txfm_param->tx_size];
     const int sb_size = (width >= 8 && height >= 8) ? 8 : 4;
     const int16_t *scan_order_in;
-#if CONFIG_IST_FIX_B076
     // Align scan order of IST with primary transform scan order
     const SCAN_ORDER *scan_order_out =
         get_scan(txfm_param->tx_size, txfm_param->tx_type);
     const int16_t *const scan = scan_order_out->scan;
-#else
-    const int16_t *scan_order_out = (sb_size == 4)
-                                        ? stx_scan_orders_4x4[log2width - 2]
-                                        : stx_scan_orders_8x8[log2width - 2];
-#endif  // CONFIG_IST_FIX_B076
     tran_low_t buf0[64] = { 0 }, buf1[64] = { 0 };
     tran_low_t *tmp = buf0;
     tran_low_t *src = coeff;
@@ -387,13 +378,8 @@
     memset(coeff, 0, width * height * sizeof(tran_low_t));
     tmp = buf1;
     for (int i = 0; i < sb_size * sb_size; i++) {
-#if CONFIG_IST_FIX_B076
       // Align scan order of IST with primary transform scan order
       coeff[scan[i]] = *tmp++;
-#else
-      coeff[scan_order_out[i]] = *tmp++;
-#endif  // CONFIG_IST_FIX_B076
     }
   }
 }
-#endif
diff --git a/av1/encoder/hybrid_fwd_txfm.h b/av1/encoder/hybrid_fwd_txfm.h
index 357ae2f..aeef3ef 100644
--- a/av1/encoder/hybrid_fwd_txfm.h
+++ b/av1/encoder/hybrid_fwd_txfm.h
@@ -30,9 +30,7 @@
                                    TX_SIZE tx_size, CctxType cctx_type);
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
 void av1_fwd_stxfm(tran_low_t *coeff, TxfmParam *txfm_param);
-#endif
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index b346a7a..72f42e3 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -364,12 +364,10 @@
   }
 #endif  // CONFIG_BVP_IMPROVEMENT
 
-#if CONFIG_IST
   for (i = 0; i < TX_SIZES; ++i) {
     av1_cost_tokens_from_cdf(mode_costs->stx_flag_cost[i], fc->stx_cdf[i],
                              NULL);
   }
-#endif  // CONFIG_IST
 
 #if CONFIG_CROSS_CHROMA_TX
   for (i = 0; i < EXT_TX_SIZES; ++i) {
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index ac68254..7edbf48 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -391,9 +391,7 @@
   sf->tx_sf.intra_tx_size_search_init_depth_sqr = 1;
   sf->tx_sf.model_based_prune_tx_search_level = 1;
   sf->tx_sf.tx_type_search.use_reduced_intra_txset = 1;
-#if CONFIG_IST
   sf->tx_sf.tx_type_search.skip_stx_search = 0;
-#endif
 
   if (cpi->twopass.fr_content_type == FC_HIGHMOTION ||
       cpi->is_screen_content_type) {
@@ -491,9 +489,7 @@
     sf->inter_sf.selective_ref_frame = 3;
 
     // TODO(Sachin): Enable/Enhance this speed feature for speed 2 & 3
-#if CONFIG_IST
     sf->tx_sf.tx_type_search.skip_stx_search = 1;
-#endif
     sf->intra_sf.disable_smooth_intra =
         !frame_is_intra_only(&cpi->common) || (cpi->rc.frames_to_key != 1);
 
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index c035d93..54f139e 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -233,10 +233,8 @@
   // mode evaluation and disables tx type mode pruning for winner mode
   // processing.
   int winner_mode_tx_type_pruning;
-#if CONFIG_IST
   // Speed feature to disable intra secondary transform
   int skip_stx_search;
-#endif
 } TX_TYPE_SEARCH;
 
 enum {
diff --git a/av1/encoder/tpl_model.c b/av1/encoder/tpl_model.c
index 9c4b226..e6ba250 100644
--- a/av1/encoder/tpl_model.c
+++ b/av1/encoder/tpl_model.c
@@ -65,9 +65,7 @@
                                     int bit_depth) {
   TxfmParam txfm_param;
   txfm_param.tx_type = DCT_DCT;
-#if CONFIG_IST
   txfm_param.sec_tx_type = 0;
-#endif
   txfm_param.tx_size = tx_size;
   txfm_param.lossless = 0;
   txfm_param.tx_set_type = EXT_TX_SET_ALL16;
diff --git a/av1/encoder/tx_search.c b/av1/encoder/tx_search.c
index f755de1..26da00c 100644
--- a/av1/encoder/tx_search.c
+++ b/av1/encoder/tx_search.c
@@ -1117,11 +1117,7 @@
     if (do_quant) {
       TxfmParam txfm_param_intra;
       QUANT_PARAM quant_param_intra;
-      av1_setup_xform(cm, x,
-#if CONFIG_IST
-                      plane,
-#endif
-                      tx_size, best_tx_type,
+      av1_setup_xform(cm, x, plane, tx_size, best_tx_type,
 #if CONFIG_CROSS_CHROMA_TX
                       cctx_type,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1254,11 +1250,7 @@
   const int dst_idx = (blk_row * dst_stride + blk_col) << MI_SIZE_LOG2;
   const uint16_t *src = &x->plane[plane].src.buf[src_idx];
   const uint16_t *dst = &xd->plane[plane].dst.buf[dst_idx];
-#if CONFIG_IST
   tran_low_t *dqcoeff = p->dqcoeff + BLOCK_OFFSET(block);
-#else
-  const tran_low_t *dqcoeff = p->dqcoeff + BLOCK_OFFSET(block);
-#endif
 
   assert(cpi != NULL);
   assert(tx_size_wide_log2[0] == tx_size_high_log2[0]);
@@ -1524,11 +1516,7 @@
 
   QUANT_PARAM quant_param;
   TxfmParam txfm_param;
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  plane,
-#endif
-                  tx_size, DCT_DCT,
+  av1_setup_xform(cm, x, plane, tx_size, DCT_DCT,
 #if CONFIG_CROSS_CHROMA_TX
                   CCTX_NONE,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -1654,11 +1642,7 @@
 
   TxfmParam txfm_param;
   QUANT_PARAM quant_param;
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  plane,
-#endif
-                  tx_size, DCT_DCT,
+  av1_setup_xform(cm, x, plane, tx_size, DCT_DCT,
 #if CONFIG_CROSS_CHROMA_TX
                   CCTX_NONE,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -2576,11 +2560,9 @@
       // Therefore transform domain distortion is not valid for these
       // transform sizes.
       (txsize_sqr_up_map[tx_size] != TX_64X64) &&
-#if CONFIG_IST
       // Use pixel domain distortion for IST
       // TODO(any): Make IST compatible with tx domain distortion
       !cm->seq_params.enable_ist &&
-#endif
       // Use pixel domain distortion for DC only blocks
       !dc_only_blk;
   // Flag to indicate if an extra calculation of distortion in the pixel domain
@@ -2598,11 +2580,7 @@
   TxfmParam txfm_param;
   QUANT_PARAM quant_param;
   int skip_trellis_based_on_satd[TX_TYPES] = { 0 };
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  plane,
-#endif
-                  tx_size, DCT_DCT,
+  av1_setup_xform(cm, x, plane, tx_size, DCT_DCT,
 #if CONFIG_CROSS_CHROMA_TX
                   CCTX_NONE,
 #endif  // CONFIG_CROSS_CHROMA_TX
@@ -2635,7 +2613,6 @@
         plane == PLANE_TYPE_Y) {
       continue;
     }
-#if CONFIG_IST
     bool skip_idx = false;
     xd->enable_ist = cm->seq_params.enable_ist &&
                      !cpi->sf.tx_sf.tx_type_search.skip_stx_search &&
@@ -2658,11 +2635,6 @@
       tx_type += (stx << 4);
       txfm_param.tx_type = get_primary_tx_type(tx_type);
       txfm_param.sec_tx_type = stx;
-#else
-    const TX_TYPE tx_type = (TX_TYPE)txk_map[idx];
-    if (!(allowed_tx_mask & (1 << tx_type))) continue;
-    txfm_param.tx_type = tx_type;
-#endif
       if (av1_use_qmatrix(&cm->quant_params, xd, mbmi->segment_id)) {
         av1_setup_qmatrix(&cm->quant_params, xd, plane, tx_size, tx_type,
                           &quant_param);
@@ -2672,28 +2644,19 @@
       av1_invalid_rd_stats(&this_rd_stats);
 
       if (!dc_only_blk)
-#if CONFIG_IST
         av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, &txfm_param,
                   1);
-#else
-      av1_xform(x, plane, block, blk_row, blk_col, plane_bsize, &txfm_param);
-#endif
       else
         av1_xform_dc_only(x, plane, block, &txfm_param, per_px_mean);
 #if CONFIG_CROSS_CHROMA_TX
       *coeffs_available = 1;
 #endif  // CONFIG_CROSS_CHROMA_TX
 
-#if CONFIG_IST
       skip_trellis_based_on_satd[txfm_param.tx_type] =
-          skip_trellis_opt_based_on_satd(
-#else
-    skip_trellis_based_on_satd[tx_type] = skip_trellis_opt_based_on_satd(
-#endif
-              x, &quant_param, plane, block, tx_size,
-              cpi->oxcf.q_cfg.quant_b_adapt, qstep,
-              txfm_params->coeff_opt_satd_threshold, skip_trellis_in,
-              dc_only_blk);
+          skip_trellis_opt_based_on_satd(x, &quant_param, plane, block, tx_size,
+                                         cpi->oxcf.q_cfg.quant_b_adapt, qstep,
+                                         txfm_params->coeff_opt_satd_threshold,
+                                         skip_trellis_in, dc_only_blk);
 
       uint8_t fsc_mode_in = (mbmi->fsc_mode[xd->tree_type == CHROMA_PART] &&
                              plane == PLANE_TYPE_Y) ||
@@ -2701,11 +2664,7 @@
       if (fsc_mode_in) quant_param.use_optimize_b = false;
       av1_quant(x, plane, block, &txfm_param, &quant_param);
       if (fsc_mode_in) {
-#if CONFIG_IST
         if (get_primary_tx_type(tx_type) == IDTX) {
-#else
-      if (tx_type == IDTX) {
-#endif  // CONFIG_IST
           uint16_t *const eob = &p->eobs[block];
           if (*eob != 0) *eob = av1_get_max_eob(txfm_param.tx_size);
         }
@@ -2851,9 +2810,7 @@
       if (cpi->sf.tx_sf.adaptive_txb_search_level) {
         if ((best_rd - (best_rd >> cpi->sf.tx_sf.adaptive_txb_search_level)) >
             ref_best_rd) {
-#if CONFIG_IST
           skip_idx = true;
-#endif
           break;
         }
       }
@@ -2861,26 +2818,18 @@
       // Terminate transform type search if the block has been quantized to
       // all zero.
       if (cpi->sf.tx_sf.tx_type_search.skip_tx_search && !best_eob) {
-#if CONFIG_IST
         skip_idx = true;
-#endif
         break;
       }
-#if CONFIG_IST
     }
     if (skip_idx) break;
-#endif
   }
 
   best_rd_stats->skip_txfm = best_eob == 0;
   if (plane == 0) update_txk_array(xd, blk_row, blk_col, tx_size, best_tx_type);
   x->plane[plane].txb_entropy_ctx[block] = best_txb_ctx;
   x->plane[plane].eobs[block] = best_eob;
-#if CONFIG_IST
   skip_trellis = skip_trellis_based_on_satd[get_primary_tx_type(best_tx_type)];
-#else
-  skip_trellis = skip_trellis_based_on_satd[best_tx_type];
-#endif
   skip_trellis &=
       (mbmi->fsc_mode[xd->tree_type == CHROMA_PART] && plane == PLANE_TYPE_Y) ||
       use_inter_fsc(cm, plane, best_tx_type, is_inter);
@@ -2948,11 +2897,7 @@
       av1_get_tx_type(xd, PLANE_TYPE_UV, blk_row, blk_col, tx_size,
                       cpi->common.features.reduced_tx_set_used);
   TxfmParam txfm_param;
-  av1_setup_xform(cm, x,
-#if CONFIG_IST
-                  AOM_PLANE_U,
-#endif
-                  tx_size, tx_type, CCTX_NONE, &txfm_param);
+  av1_setup_xform(cm, x, AOM_PLANE_U, tx_size, tx_type, CCTX_NONE, &txfm_param);
   QUANT_PARAM quant_param;
   int xform_quant_idx =
       skip_trellis
@@ -2962,17 +2907,10 @@
                   cpi->oxcf.q_cfg.quant_b_adapt, &quant_param);
 
   if (!uv_coeffs_available) {
-#if CONFIG_IST
     av1_xform(x, AOM_PLANE_U, block, blk_row, blk_col, plane_bsize, &txfm_param,
               0);
     av1_xform(x, AOM_PLANE_V, block, blk_row, blk_col, plane_bsize, &txfm_param,
               0);
-#else
-    av1_xform(x, AOM_PLANE_U, block, blk_row, blk_col, plane_bsize,
-              &txfm_param);
-    av1_xform(x, AOM_PLANE_V, block, blk_row, blk_col, plane_bsize,
-              &txfm_param);
-#endif  // CONFIG_IST
     if (av1_use_qmatrix(&cm->quant_params, xd, mbmi->segment_id))
       av1_setup_qmatrix(&cm->quant_params, xd, AOM_PLANE_U, tx_size, tx_type,
                         &quant_param);
diff --git a/av1/encoder/x86/highbd_fwd_txfm_sse4.c b/av1/encoder/x86/highbd_fwd_txfm_sse4.c
index 44d8797..703ddee 100644
--- a/av1/encoder/x86/highbd_fwd_txfm_sse4.c
+++ b/av1/encoder/x86/highbd_fwd_txfm_sse4.c
@@ -2605,7 +2605,6 @@
 }
 
 // Forward secondary transform
-#if CONFIG_IST
 void fwd_stxfm_sse4_1(tran_low_t *src, tran_low_t *dst,
                       const PREDICTION_MODE mode, const uint8_t stx_idx,
                       const int size) {
@@ -2644,4 +2643,3 @@
     kernel += (size * size);
   }
 }
-#endif
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 58a3764..54bc487 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -166,8 +166,6 @@
                    "AV2 experiment flag to disable ORIP for DC mode.")
 set_aom_config_var(CONFIG_ORIP_NONDC_DISABLED 0
                    "AV2 experiment flag to disable ORIP for non-DC modes.")
-set_aom_config_var(CONFIG_IST 1 NUMBER
-                   "AV2 experiment flag to enable intra secondary transform.")
 set_aom_config_var(CONFIG_SMVP_IMPROVEMENT 1 "Enable SMVP improvement")
 set_aom_config_var(CONFIG_TMVP_IMPROVEMENT 1 "Enable TMVP improvement")
 set_aom_config_var(CONFIG_REF_MV_BANK 1 "AV2 ref mv bank experiment flag")
@@ -181,8 +179,6 @@
 set_aom_config_var(CONFIG_AIMC 1 "AV2 adaptive intra mode coding flag.")
 set_aom_config_var(CONFIG_COMPLEXITY_SCALABLE_MVP 1
                    "Enable complexity scalable mvp")
-set_aom_config_var(CONFIG_IST_FIX_B076 1
-                   "AV2 experiment flag to enable IST scan alignment.")
 set_aom_config_var(
   CONFIG_CONTEXT_DERIVATION 1
   "AV2 experiment flag to enable modified context derivation : CWG-B065.")
@@ -206,9 +202,6 @@
 # Source of throughput analysis : CWG-B065
 set_aom_config_var(CONFIG_THROUGHPUT_ANALYSIS 0
                    "AV2 experiment flag to measure throughput.")
-set_aom_config_var(
-  CONFIG_IST_FIX_B098 1
-  "AV2 experiment flag to enable IST SIMD fix and further encoder updates.")
 set_aom_config_var(CONFIG_IBC_SR_EXT 1 "Enables IntraBC search range extension")
 set_aom_config_var(CONFIG_BVP_IMPROVEMENT 1 "Enables BVP improvements")
 set_aom_config_var(CONFIG_BVCOST_UPDATE 1 "Enables sb-level update for bv cost")
diff --git a/build/cmake/aom_experiment_deps.cmake b/build/cmake/aom_experiment_deps.cmake
index 80981a1..760ed4b 100644
--- a/build/cmake/aom_experiment_deps.cmake
+++ b/build/cmake/aom_experiment_deps.cmake
@@ -25,24 +25,12 @@
     change_config_and_warn(CONFIG_DIST_8X8 0 CONFIG_MULTITHREAD)
   endif()
 
-  # CONFIG_IST_FIX_B076 requires CONFIG_IST. If CONFIG_IST is off, we also turn
-  # off CONFIG_IST_FIX_B076.
-  if(NOT CONFIG_IST AND CONFIG_IST_FIX_B076)
-    change_config_and_warn(CONFIG_IST_FIX_B076 0 !CONFIG_IST)
-  endif()
-
   # CONFIG_THROUGHPUT_ANALYSIS requires CONFIG_ACCOUNTING. If CONFIG_ACCOUNTING
   # is off, we also turn off CONFIG_THROUGHPUT_ANALYSIS.
   if(NOT CONFIG_ACCOUNTING AND CONFIG_THROUGHPUT_ANALYSIS)
     change_config_and_warn(CONFIG_THROUGHPUT_ANALYSIS 0 !CONFIG_ACCOUNTING)
   endif()
 
-  # CONFIG_IST_FIX_B098 requires CONFIG_IST. If CONFIG_IST is off, we also turn
-  # off CONFIG_IST_FIX_B098.
-  if(NOT CONFIG_IST AND CONFIG_IST_FIX_B098)
-    change_config_and_warn(CONFIG_IST_FIX_B098 0 !CONFIG_IST)
-  endif()
-
   # CONFIG_CCSO_EXT is dependent on CONFIG_CCSO. If CONFIG_CCSO is off,
   # CONFIG_CCSO_EXT needs to be turned off.
   if(NOT CONFIG_CCSO AND CONFIG_CCSO_EXT)
diff --git a/common/args.c b/common/args.c
index b4fc0c5..ffec73b 100644
--- a/common/args.c
+++ b/common/args.c
@@ -100,9 +100,7 @@
 #if CONFIG_ORIP
     GET_PARAMS(enable_orip);
 #endif
-#if CONFIG_IST
     GET_PARAMS(enable_ist);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
     GET_PARAMS(enable_cctx);
 #endif  // CONFIG_CROSS_CHROMA_TX
diff --git a/common/av1_config.c b/common/av1_config.c
index 297f7a0..e8a9215 100644
--- a/common/av1_config.c
+++ b/common/av1_config.c
@@ -245,9 +245,7 @@
   }
   AV1C_READ_BIT_OR_RETURN_ERROR(explicit_ref_frame_map);
   AV1C_READ_BIT_OR_RETURN_ERROR(enable_sdp);
-#if CONFIG_IST
   AV1C_READ_BIT_OR_RETURN_ERROR(enable_ist);
-#endif
 #if CONFIG_CROSS_CHROMA_TX
   AV1C_READ_BIT_OR_RETURN_ERROR(enable_cctx);
 #endif  // CONFIG_CROSS_CHROMA_TX
