diff --git a/aomenc.c b/aomenc.c
index 74fb60c..478bd1f 100644
--- a/aomenc.c
+++ b/aomenc.c
@@ -418,14 +418,12 @@
 static const arg_def_t qm_max = ARG_DEF(
     NULL, "qm-max", 1, "Max quant matrix flatness (0..15), default is 16");
 #endif
-#if CONFIG_TILE_GROUPS
 static const arg_def_t num_tg = ARG_DEF(
     NULL, "num-tile-groups", 1, "Maximum number of tile groups, default is 1");
 static const arg_def_t mtu_size =
     ARG_DEF(NULL, "mtu-size", 1,
             "MTU size for a tile group, default is 0 (no MTU targeting), "
             "overrides maximum number of tile groups");
-#endif
 #if CONFIG_TEMPMV_SIGNALING
 static const arg_def_t disable_tempmv = ARG_DEF(
     NULL, "disable-tempmv", 1, "Disable temporal mv prediction (default is 0)");
@@ -581,10 +579,8 @@
 #if CONFIG_EXT_PARTITION
                                        &superblock_size,
 #endif  // CONFIG_EXT_PARTITION
-#if CONFIG_TILE_GROUPS
                                        &num_tg,
                                        &mtu_size,
-#endif
 #if CONFIG_TEMPMV_SIGNALING
                                        &disable_tempmv,
 #endif
@@ -639,10 +635,8 @@
 #if CONFIG_EXT_PARTITION
                                         AV1E_SET_SUPERBLOCK_SIZE,
 #endif  // CONFIG_EXT_PARTITION
-#if CONFIG_TILE_GROUPS
                                         AV1E_SET_NUM_TG,
                                         AV1E_SET_MTU,
-#endif
 #if CONFIG_TEMPMV_SIGNALING
                                         AV1E_SET_DISABLE_TEMPMV,
 #endif
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 1475a91..81fffd1 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -55,10 +55,8 @@
   unsigned int qm_min;
   unsigned int qm_max;
 #endif
-#if CONFIG_TILE_GROUPS
   unsigned int num_tg;
   unsigned int mtu_size;
-#endif
 #if CONFIG_TEMPMV_SIGNALING
   unsigned int disable_tempmv;
 #endif
@@ -121,10 +119,8 @@
   DEFAULT_QM_FIRST,  // qm_min
   DEFAULT_QM_LAST,   // qm_max
 #endif
-#if CONFIG_TILE_GROUPS
   1,  // max number of tile groups
   0,  // mtu_size
-#endif
 #if CONFIG_TEMPMV_SIGNALING
   0,  // disable temporal mv prediction
 #endif
@@ -482,14 +478,12 @@
   oxcf->qm_maxlevel = extra_cfg->qm_max;
 #endif
 
-#if CONFIG_TILE_GROUPS
   oxcf->num_tile_groups = extra_cfg->num_tg;
 #if CONFIG_EXT_TILE
   // In large-scale tile encoding mode, num_tile_groups is always 1.
   if (cfg->large_scale_tile) oxcf->num_tile_groups = 1;
 #endif  // CONFIG_EXT_TILE
   oxcf->mtu = extra_cfg->mtu_size;
-#endif
 
 #if CONFIG_TEMPMV_SIGNALING
   oxcf->disable_tempmv = extra_cfg->disable_tempmv;
@@ -869,7 +863,6 @@
 }
 #endif
 
-#if CONFIG_TILE_GROUPS
 static aom_codec_err_t ctrl_set_num_tg(aom_codec_alg_priv_t *ctx,
                                        va_list args) {
   struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -882,7 +875,6 @@
   extra_cfg.mtu_size = CAST(AV1E_SET_MTU, args);
   return update_extra_cfg(ctx, &extra_cfg);
 }
-#endif
 #if CONFIG_TEMPMV_SIGNALING
 static aom_codec_err_t ctrl_set_disable_tempmv(aom_codec_alg_priv_t *ctx,
                                                va_list args) {
@@ -1545,10 +1537,8 @@
   { AV1E_SET_QM_MIN, ctrl_set_qm_min },
   { AV1E_SET_QM_MAX, ctrl_set_qm_max },
 #endif
-#if CONFIG_TILE_GROUPS
   { AV1E_SET_NUM_TG, ctrl_set_num_tg },
   { AV1E_SET_MTU, ctrl_set_mtu },
-#endif
 #if CONFIG_TEMPMV_SIGNALING
   { AV1E_SET_DISABLE_TEMPMV, ctrl_set_disable_tempmv },
 #endif
diff --git a/av1/common/mvref_common.h b/av1/common/mvref_common.h
index bc33a21..8caa745 100644
--- a/av1/common/mvref_common.h
+++ b/av1/common/mvref_common.h
@@ -196,11 +196,7 @@
   const int dependent_horz_tile_flag = 0;
   (void)cm;
 #endif
-#if CONFIG_TILE_GROUPS
   if (dependent_horz_tile_flag && !tile->tg_horz_boundary) {
-#else
-  if (dependent_horz_tile_flag) {
-#endif
     return !(mi_row + mi_pos->row < 0 ||
              mi_col + mi_pos->col < tile->mi_col_start ||
              mi_row + mi_pos->row >= mi_rows ||
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 07aa859..8647e11 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -365,11 +365,9 @@
 
 #if CONFIG_DEPENDENT_HORZTILES
   int dependent_horz_tiles;
-#if CONFIG_TILE_GROUPS
   int tile_group_start_row[MAX_TILE_ROWS][MAX_TILE_COLS];
   int tile_group_start_col[MAX_TILE_ROWS][MAX_TILE_COLS];
 #endif
-#endif
 #if CONFIG_LOOPFILTERING_ACROSS_TILES
   int loop_filter_across_tiles_enabled;
 #endif  // CONFIG_LOOPFILTERING_ACROSS_TILES
@@ -427,9 +425,7 @@
   int delta_lf_res;
 #endif
 #endif
-#if CONFIG_TILE_GROUPS
   int num_tg;
-#endif
 #if CONFIG_REFERENCE_BUFFER
   int current_frame_id;
   int ref_frame_id[REF_FRAMES];
@@ -654,11 +650,7 @@
 
 #if CONFIG_DEPENDENT_HORZTILES
   if (dependent_horz_tile_flag) {
-#if CONFIG_TILE_GROUPS
     xd->up_available = (mi_row > tile->mi_row_start) || !tile->tg_horz_boundary;
-#else
-    xd->up_available = (mi_row > 0);
-#endif  // CONFIG_TILE_GROUPS
   } else {
 #endif  // CONFIG_DEPENDENT_HORZTILES
     // Are edges available for intra prediction?
diff --git a/av1/common/tile_common.c b/av1/common/tile_common.c
index c4ffc26..3bff53c 100644
--- a/av1/common/tile_common.c
+++ b/av1/common/tile_common.c
@@ -23,7 +23,7 @@
   tile->mi_col_end = AOMMIN(tile->mi_col_start + cm->tile_width, cm->mi_cols);
 }
 
-#if CONFIG_DEPENDENT_HORZTILES && CONFIG_TILE_GROUPS
+#if CONFIG_DEPENDENT_HORZTILES
 void av1_tile_set_tg_boundary(TileInfo *tile, const AV1_COMMON *const cm,
                               int row, int col) {
   if (row < cm->tile_rows - 1) {
@@ -41,7 +41,7 @@
 void av1_tile_init(TileInfo *tile, const AV1_COMMON *cm, int row, int col) {
   av1_tile_set_row(tile, cm, row);
   av1_tile_set_col(tile, cm, col);
-#if CONFIG_DEPENDENT_HORZTILES && CONFIG_TILE_GROUPS
+#if CONFIG_DEPENDENT_HORZTILES
   av1_tile_set_tg_boundary(tile, cm, row, col);
 #endif
 }
@@ -119,11 +119,7 @@
     int row, col;
 
 #if CONFIG_DEPENDENT_HORZTILES
-#if CONFIG_TILE_GROUPS
     if (!cm->dependent_horz_tiles || tile_info->tg_horz_boundary)
-#else
-    if (!cm->dependent_horz_tiles)
-#endif  // CONFIG_TILE_GROUPS
 #endif  // CONFIG_DEPENDENT_HORZTILES
     {
       mi = mi_start;
diff --git a/av1/common/tile_common.h b/av1/common/tile_common.h
index 27eaee7..e5b8a0b 100644
--- a/av1/common/tile_common.h
+++ b/av1/common/tile_common.h
@@ -20,9 +20,7 @@
 
 struct AV1Common;
 
-#if CONFIG_TILE_GROUPS
 #define DEFAULT_MAX_NUM_TG 1
-#endif
 
 typedef struct TileInfo {
   int mi_row_start, mi_row_end;
@@ -37,7 +35,7 @@
 
 void av1_tile_set_row(TileInfo *tile, const struct AV1Common *cm, int row);
 void av1_tile_set_col(TileInfo *tile, const struct AV1Common *cm, int col);
-#if CONFIG_DEPENDENT_HORZTILES && CONFIG_TILE_GROUPS
+#if CONFIG_DEPENDENT_HORZTILES
 void av1_tile_set_tg_boundary(TileInfo *tile, const struct AV1Common *const cm,
                               int row, int col);
 #endif
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 429e1fa..dce0eaa 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -3361,16 +3361,12 @@
     cm->tile_width = ALIGN_POWER_OF_TWO(cm->tile_width, MAX_MIB_SIZE_LOG2);
     cm->tile_height = ALIGN_POWER_OF_TWO(cm->tile_height, MAX_MIB_SIZE_LOG2);
 
-// tile size magnitude
-#if !CONFIG_TILE_GROUPS
-    if (cm->tile_rows > 1 || cm->tile_cols > 1)
-#endif
-      pbi->tile_size_bytes = aom_rb_read_literal(rb, 2) + 1;
+    // tile size magnitude
+    pbi->tile_size_bytes = aom_rb_read_literal(rb, 2) + 1;
 #if CONFIG_EXT_TILE
   }
 #endif  // CONFIG_EXT_TILE
 
-#if CONFIG_TILE_GROUPS
   // Store an index to the location of the tile group information
   pbi->tg_size_bit_offset = rb->bit_offset;
   pbi->tg_size = 1 << (cm->log2_tile_rows + cm->log2_tile_cols);
@@ -3380,7 +3376,6 @@
     pbi->tg_size =
         1 + aom_rb_read_literal(rb, cm->log2_tile_rows + cm->log2_tile_cols);
   }
-#endif
 }
 
 static int mem_get_varsize(const uint8_t *src, int sz) {
@@ -3581,7 +3576,6 @@
     AV1Decoder *pbi, const uint8_t *data, const uint8_t *data_end,
     TileBufferDec (*const tile_buffers)[MAX_TILE_COLS]) {
   AV1_COMMON *const cm = &pbi->common;
-#if CONFIG_TILE_GROUPS
   int r, c;
   const int tile_cols = cm->tile_cols;
   const int tile_rows = cm->tile_rows;
@@ -3628,21 +3622,6 @@
 #endif
     }
   }
-#else
-  int r, c;
-  const int tile_cols = cm->tile_cols;
-  const int tile_rows = cm->tile_rows;
-
-  for (r = 0; r < tile_rows; ++r) {
-    for (c = 0; c < tile_cols; ++c) {
-      const int is_last = (r == tile_rows - 1) && (c == tile_cols - 1);
-      TileBufferDec *const buf = &tile_buffers[r][c];
-      buf->col = c;
-      get_tile_buffer(data_end, pbi->tile_size_bytes, is_last, &cm->error,
-                      &data, pbi->decrypt_cb, pbi->decrypt_state, buf);
-    }
-  }
-#endif
 }
 
 #if CONFIG_PVQ
@@ -3853,13 +3832,9 @@
       av1_tile_set_col(&tile_info, cm, col);
 
 #if CONFIG_DEPENDENT_HORZTILES
-#if CONFIG_TILE_GROUPS
       av1_tile_set_tg_boundary(&tile_info, cm, tile_row, tile_col);
       if (!cm->dependent_horz_tiles || tile_row == 0 ||
           tile_info.tg_horz_boundary) {
-#else
-      if (!cm->dependent_horz_tiles || tile_row == 0) {
-#endif
         av1_zero_above_context(cm, tile_info.mi_col_start,
                                tile_info.mi_col_end);
       }
@@ -4004,11 +3979,7 @@
   tile_data->error_info.setjmp = 1;
   tile_data->xd.error_info = &tile_data->error_info;
 #if CONFIG_DEPENDENT_HORZTILES
-#if CONFIG_TILE_GROUPS
   if (!cm->dependent_horz_tiles || tile->tg_horz_boundary) {
-#else
-  if (!cm->dependent_horz_tiles) {
-#endif
     av1_zero_above_context(&pbi->common, tile->mi_col_start, tile->mi_col_end);
   }
 #else
@@ -5253,10 +5224,8 @@
   }
 #endif  // CONFIG_EXT_TILE
 
-#if CONFIG_TILE_GROUPS
   pbi->first_partition_size = first_partition_size;
   pbi->uncomp_hdr_size = aom_rb_bytes_read(&rb);
-#endif
   new_fb = get_frame_new_buffer(cm);
   xd->cur_buf = new_fb;
 #if CONFIG_INTRABC
diff --git a/av1/decoder/decoder.h b/av1/decoder/decoder.h
index 7a6e7cd..5e6afc2 100644
--- a/av1/decoder/decoder.h
+++ b/av1/decoder/decoder.h
@@ -135,11 +135,9 @@
 #endif
   size_t uncomp_hdr_size;       // Size of the uncompressed header
   size_t first_partition_size;  // Size of the compressed header
-#if CONFIG_TILE_GROUPS
-  int tg_size;   // Number of tiles in the current tilegroup
-  int tg_start;  // First tile in the current tilegroup
+  int tg_size;                  // Number of tiles in the current tilegroup
+  int tg_start;                 // First tile in the current tilegroup
   int tg_size_bit_offset;
-#endif
 #if CONFIG_REFERENCE_BUFFER
   SequenceHeader seq_params;
 #endif
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 8704469..69d16d1 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -452,11 +452,7 @@
 static void update_inter_mode_probs(AV1_COMMON *cm, aom_writer *w,
                                     FRAME_COUNTS *counts) {
   int i;
-#if CONFIG_TILE_GROUPS
   const int probwt = cm->num_tg;
-#else
-  const int probwt = 1;
-#endif
   for (i = 0; i < NEWMV_MODE_CONTEXTS; ++i)
     av1_cond_prob_diff_update(w, &cm->fc->newmv_prob[i], counts->newmv_mode[i],
                               probwt);
@@ -628,11 +624,7 @@
 static void update_skip_probs(AV1_COMMON *cm, aom_writer *w,
                               FRAME_COUNTS *counts) {
   int k;
-#if CONFIG_TILE_GROUPS
   const int probwt = cm->num_tg;
-#else
-  const int probwt = 1;
-#endif
   for (k = 0; k < SKIP_CONTEXTS; ++k) {
     av1_cond_prob_diff_update(w, &cm->fc->skip_probs[k], counts->skip[k],
                               probwt);
@@ -3127,12 +3119,8 @@
   int mi_row, mi_col;
 
 #if CONFIG_DEPENDENT_HORZTILES
-#if CONFIG_TILE_GROUPS
   if (!cm->dependent_horz_tiles || mi_row_start == 0 ||
       tile->tg_horz_boundary) {
-#else
-  if (!cm->dependent_horz_tiles || mi_row_start == 0) {
-#endif
     av1_zero_above_context(cm, mi_col_start, mi_col_end);
   }
 #else
@@ -3736,7 +3724,6 @@
   const int tile_rows = cm->tile_rows;
   unsigned int tile_size = 0;
   const int have_tiles = tile_cols * tile_rows > 1;
-#if CONFIG_TILE_GROUPS
   struct aom_write_bit_buffer wb = { dst, 0 };
   const int n_log2_tiles = cm->log2_tile_rows + cm->log2_tile_cols;
   uint32_t comp_hdr_size;
@@ -3761,7 +3748,6 @@
   int mtu_size = cpi->oxcf.mtu;
   int curr_tg_data_size = 0;
   int hdr_size;
-#endif
 
   *max_tile_size = 0;
   *max_tile_col_size = 0;
@@ -3862,7 +3848,6 @@
     }
   } else {
 #endif  // CONFIG_EXT_TILE
-#if CONFIG_TILE_GROUPS
     write_uncompressed_header(cpi, &wb);
 
 #if CONFIG_EXT_REFS
@@ -3893,7 +3878,6 @@
     aom_wb_overwrite_literal(&comp_hdr_len_wb, (int)(comp_hdr_size), 16);
     hdr_size = uncompressed_hdr_size + comp_hdr_size;
     total_size += hdr_size;
-#endif
 
     for (tile_row = 0; tile_row < tile_rows; tile_row++) {
       TileInfo tile_info;
@@ -3908,64 +3892,63 @@
         const TOKENEXTRA *tok_end = tok + cpi->tok_count[tile_row][tile_col];
         const int is_last_col = (tile_col == tile_cols - 1);
         const int is_last_tile = is_last_col && is_last_row;
-#if !CONFIG_TILE_GROUPS
-        (void)tile_idx;
-#else
 
-      if ((!mtu_size && tile_count > tg_size) ||
-          (mtu_size && tile_count && curr_tg_data_size >= mtu_size)) {
-        // New tile group
-        tg_count++;
-        // We've exceeded the packet size
-        if (tile_count > 1) {
-          /* The last tile exceeded the packet size. The tile group size
-             should therefore be tile_count-1.
-             Move the last tile and insert headers before it
-           */
-          uint32_t old_total_size = total_size - tile_size - 4;
-          memmove(dst + old_total_size + hdr_size, dst + old_total_size,
-                  (tile_size + 4) * sizeof(uint8_t));
-          // Copy uncompressed header
-          memmove(dst + old_total_size, dst,
-                  uncompressed_hdr_size * sizeof(uint8_t));
-          // Write the number of tiles in the group into the last uncompressed
-          // header before the one we've just inserted
-          aom_wb_overwrite_literal(&tg_params_wb, tile_idx - tile_count,
-                                   n_log2_tiles);
-          aom_wb_overwrite_literal(&tg_params_wb, tile_count - 2, n_log2_tiles);
-          // Update the pointer to the last TG params
-          tg_params_wb.bit_offset = saved_offset + 8 * old_total_size;
-          // Copy compressed header
-          memmove(dst + old_total_size + uncompressed_hdr_size,
-                  dst + uncompressed_hdr_size, comp_hdr_size * sizeof(uint8_t));
-          total_size += hdr_size;
-          tile_count = 1;
-          curr_tg_data_size = hdr_size + tile_size + 4;
-
-        } else {
-          // We exceeded the packet size in just one tile
-          // Copy uncompressed header
-          memmove(dst + total_size, dst,
-                  uncompressed_hdr_size * sizeof(uint8_t));
-          // Write the number of tiles in the group into the last uncompressed
-          // header
-          aom_wb_overwrite_literal(&tg_params_wb, tile_idx - tile_count,
-                                   n_log2_tiles);
-          aom_wb_overwrite_literal(&tg_params_wb, tile_count - 1, n_log2_tiles);
-          tg_params_wb.bit_offset = saved_offset + 8 * total_size;
-          // Copy compressed header
-          memmove(dst + total_size + uncompressed_hdr_size,
-                  dst + uncompressed_hdr_size, comp_hdr_size * sizeof(uint8_t));
-          total_size += hdr_size;
-          tile_count = 0;
-          curr_tg_data_size = hdr_size;
+        if ((!mtu_size && tile_count > tg_size) ||
+            (mtu_size && tile_count && curr_tg_data_size >= mtu_size)) {
+          // New tile group
+          tg_count++;
+          // We've exceeded the packet size
+          if (tile_count > 1) {
+            /* The last tile exceeded the packet size. The tile group size
+               should therefore be tile_count-1.
+               Move the last tile and insert headers before it
+             */
+            uint32_t old_total_size = total_size - tile_size - 4;
+            memmove(dst + old_total_size + hdr_size, dst + old_total_size,
+                    (tile_size + 4) * sizeof(uint8_t));
+            // Copy uncompressed header
+            memmove(dst + old_total_size, dst,
+                    uncompressed_hdr_size * sizeof(uint8_t));
+            // Write the number of tiles in the group into the last uncompressed
+            // header before the one we've just inserted
+            aom_wb_overwrite_literal(&tg_params_wb, tile_idx - tile_count,
+                                     n_log2_tiles);
+            aom_wb_overwrite_literal(&tg_params_wb, tile_count - 2,
+                                     n_log2_tiles);
+            // Update the pointer to the last TG params
+            tg_params_wb.bit_offset = saved_offset + 8 * old_total_size;
+            // Copy compressed header
+            memmove(dst + old_total_size + uncompressed_hdr_size,
+                    dst + uncompressed_hdr_size,
+                    comp_hdr_size * sizeof(uint8_t));
+            total_size += hdr_size;
+            tile_count = 1;
+            curr_tg_data_size = hdr_size + tile_size + 4;
+          } else {
+            // We exceeded the packet size in just one tile
+            // Copy uncompressed header
+            memmove(dst + total_size, dst,
+                    uncompressed_hdr_size * sizeof(uint8_t));
+            // Write the number of tiles in the group into the last uncompressed
+            // header
+            aom_wb_overwrite_literal(&tg_params_wb, tile_idx - tile_count,
+                                     n_log2_tiles);
+            aom_wb_overwrite_literal(&tg_params_wb, tile_count - 1,
+                                     n_log2_tiles);
+            tg_params_wb.bit_offset = saved_offset + 8 * total_size;
+            // Copy compressed header
+            memmove(dst + total_size + uncompressed_hdr_size,
+                    dst + uncompressed_hdr_size,
+                    comp_hdr_size * sizeof(uint8_t));
+            total_size += hdr_size;
+            tile_count = 0;
+            curr_tg_data_size = hdr_size;
+          }
         }
-      }
-      tile_count++;
-#endif
+        tile_count++;
         av1_tile_set_col(&tile_info, cm, tile_col);
 
-#if CONFIG_DEPENDENT_HORZTILES && CONFIG_TILE_GROUPS
+#if CONFIG_DEPENDENT_HORZTILES
         av1_tile_set_tg_boundary(&tile_info, cm, tile_row, tile_col);
 #endif
         buf->data = dst + total_size;
@@ -4003,9 +3986,7 @@
 
         assert(tile_size > 0);
 
-#if CONFIG_TILE_GROUPS
         curr_tg_data_size += tile_size + 4;
-#endif
         buf->size = tile_size;
 
         if (!is_last_tile) {
@@ -4017,7 +3998,6 @@
         total_size += tile_size;
       }
     }
-#if CONFIG_TILE_GROUPS
     // Write the final tile group size
     if (n_log2_tiles) {
       aom_wb_overwrite_literal(&tg_params_wb, (1 << n_log2_tiles) - tile_count,
@@ -4035,7 +4015,6 @@
       aom_wb_overwrite_literal(&tile_size_bytes_wb, tile_size_bytes - 1, 2);
     }
 
-#endif
 #if CONFIG_EXT_TILE
   }
 #endif  // CONFIG_EXT_TILE
@@ -4585,11 +4564,7 @@
   int j;
 #endif
 
-#if CONFIG_TILE_GROUPS
   const int probwt = cm->num_tg;
-#else
-  const int probwt = 1;
-#endif
   (void)probwt;
   (void)i;
   (void)fc;
@@ -4898,7 +4873,7 @@
 void av1_pack_bitstream(AV1_COMP *const cpi, uint8_t *dst, size_t *size) {
   uint8_t *data = dst;
   uint32_t data_size;
-#if (!CONFIG_TILE_GROUPS) || (CONFIG_TILE_GROUPS && CONFIG_EXT_TILE)
+#if CONFIG_EXT_TILE
   AV1_COMMON *const cm = &cpi->common;
   uint32_t compressed_header_size = 0;
   uint32_t uncompressed_header_size;
@@ -4907,7 +4882,7 @@
   const int have_tiles = cm->tile_cols * cm->tile_rows > 1;
   int tile_size_bytes;
   int tile_col_size_bytes;
-#endif  // (!CONFIG_TILE_GROUPS) || (CONFIG_TILE_GROUPS && CONFIG_EXT_TILE)
+#endif  // CONFIG_EXT_TILE
   unsigned int max_tile_size;
   unsigned int max_tile_col_size;
 
@@ -4915,47 +4890,6 @@
   bitstream_queue_reset_write();
 #endif
 
-#if !CONFIG_TILE_GROUPS
-  // Write the uncompressed header
-  write_uncompressed_header(cpi, &wb);
-
-#if CONFIG_EXT_REFS
-  if (cm->show_existing_frame) {
-    *size = aom_wb_bytes_written(&wb);
-    return;
-  }
-#endif  // CONFIG_EXT_REFS
-
-  // We do not know these in advance. Output placeholder bit.
-  saved_wb = wb;
-  // Write tile size magnitudes
-  if (have_tiles) {
-// Note that the last item in the uncompressed header is the data
-// describing tile configuration.
-#if CONFIG_EXT_TILE
-    if (cm->large_scale_tile) {
-      // Number of bytes in tile column size - 1
-      aom_wb_write_literal(&wb, 0, 2);
-    }
-#endif  // CONFIG_EXT_TILE
-    // Number of bytes in tile size - 1
-    aom_wb_write_literal(&wb, 0, 2);
-  }
-  // Size of compressed header
-  aom_wb_write_literal(&wb, 0, 16);
-
-  uncompressed_header_size = (uint32_t)aom_wb_bytes_written(&wb);
-  data += uncompressed_header_size;
-
-  aom_clear_system_state();
-
-  // Write the compressed header
-  compressed_header_size = write_compressed_header(cpi, data);
-  data += compressed_header_size;
-
-  // Write the encoded tile data
-  data_size = write_tiles(cpi, data, &max_tile_size, &max_tile_col_size);
-#else
 #if CONFIG_EXT_TILE
   if (cm->large_scale_tile) {
     // Write the uncompressed header
@@ -5000,31 +4934,6 @@
 #if CONFIG_EXT_TILE
   }
 #endif  // CONFIG_EXT_TILE
-#endif
-#if !CONFIG_TILE_GROUPS
-  if (have_tiles) {
-    data_size =
-        remux_tiles(cm, data, data_size, max_tile_size, max_tile_col_size,
-                    &tile_size_bytes, &tile_col_size_bytes);
-  }
-
-  data += data_size;
-
-  // Now fill in the gaps in the uncompressed header.
-  if (have_tiles) {
-#if CONFIG_EXT_TILE
-    if (cm->large_scale_tile) {
-      assert(tile_col_size_bytes >= 1 && tile_col_size_bytes <= 4);
-      aom_wb_write_literal(&saved_wb, tile_col_size_bytes - 1, 2);
-    }
-#endif  // CONFIG_EXT_TILE
-    assert(tile_size_bytes >= 1 && tile_size_bytes <= 4);
-    aom_wb_write_literal(&saved_wb, tile_size_bytes - 1, 2);
-  }
-  // TODO(jbb): Figure out what to do if compressed_header_size > 16 bits.
-  assert(compressed_header_size <= 0xffff);
-  aom_wb_write_literal(&saved_wb, compressed_header_size, 16);
-#else
 #if CONFIG_EXT_TILE
   if (cm->large_scale_tile) {
     if (have_tiles) {
@@ -5052,7 +4961,6 @@
 #if CONFIG_EXT_TILE
   }
 #endif  // CONFIG_EXT_TILE
-#endif
 #if CONFIG_ANS && ANS_REVERSE
   // Avoid aliasing the superframe index
   *data++ = 0;
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 71d55a7..f23449e 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4774,12 +4774,8 @@
   int mi_row;
 
 #if CONFIG_DEPENDENT_HORZTILES
-#if CONFIG_TILE_GROUPS
   if ((!cm->dependent_horz_tiles) || (tile_row == 0) ||
       tile_info->tg_horz_boundary) {
-#else
-  if ((!cm->dependent_horz_tiles) || (tile_row == 0)) {
-#endif
     av1_zero_above_context(cm, tile_info->mi_col_start, tile_info->mi_col_end);
   }
 #else
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index a15173c..5b9a7c8 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -140,14 +140,10 @@
 static void update_mv(aom_writer *w, const unsigned int ct[2], aom_prob *cur_p,
                       aom_prob upd_p) {
   (void)upd_p;
-#if CONFIG_TILE_GROUPS
   // 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);
-#else
-  av1_cond_prob_diff_update(w, cur_p, ct, 1);
-#endif
 }
 
 void av1_write_nmv_probs(AV1_COMMON *cm, int usehp, aom_writer *w,
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 7658708..c74a696 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -827,7 +827,7 @@
 
 static void set_tile_info(AV1_COMP *cpi) {
   AV1_COMMON *const cm = &cpi->common;
-#if CONFIG_TILE_GROUPS && CONFIG_DEPENDENT_HORZTILES
+#if CONFIG_DEPENDENT_HORZTILES
   int tile_row, tile_col, num_tiles_in_tg;
   int tg_row_start, tg_col_start;
 #endif
@@ -901,7 +901,6 @@
   }
 #endif  // CONFIG_EXT_TILE
 
-#if CONFIG_TILE_GROUPS
 #if CONFIG_EXT_TILE
   if (!cm->large_scale_tile) {
 #endif  // CONFIG_EXT_TILE
@@ -930,7 +929,6 @@
   }
 #endif  // CONFIG_EXT_TILE
 #endif
-#endif
 
 #if CONFIG_LOOPFILTERING_ACROSS_TILES
   cm->loop_filter_across_tiles_enabled =
@@ -4733,7 +4731,6 @@
       cm->reset_frame_context = RESET_FRAME_CONTEXT_CURRENT;
     }
   }
-#if CONFIG_TILE_GROUPS
   if (cpi->oxcf.mtu == 0) {
     cm->num_tg = cpi->oxcf.num_tile_groups;
   } else {
@@ -4741,7 +4738,6 @@
     // updates
     cm->num_tg = DEFAULT_MAX_NUM_TG;
   }
-#endif
 
 #if CONFIG_EXT_TILE
   cm->large_scale_tile = cpi->oxcf.large_scale_tile;
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index c7bef26..43e8ef0 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -202,10 +202,8 @@
   int qm_minlevel;
   int qm_maxlevel;
 #endif
-#if CONFIG_TILE_GROUPS
   unsigned int num_tile_groups;
   unsigned int mtu;
-#endif
 
 #if CONFIG_TEMPMV_SIGNALING
   unsigned int disable_tempmv;
diff --git a/av1/encoder/segmentation.c b/av1/encoder/segmentation.c
index 46f042c..b61df43 100644
--- a/av1/encoder/segmentation.c
+++ b/av1/encoder/segmentation.c
@@ -300,11 +300,7 @@
   int t_pred_cost = INT_MAX;
 
   int tile_col, tile_row, mi_row, mi_col;
-#if CONFIG_TILE_GROUPS
   const int probwt = cm->num_tg;
-#else
-  const int probwt = 1;
-#endif
 
   unsigned(*temporal_predictor_count)[2] = cm->counts.seg.pred;
   unsigned *no_pred_segcounts = cm->counts.seg.tree_total;
@@ -329,7 +325,7 @@
     for (tile_col = 0; tile_col < cm->tile_cols; tile_col++) {
       MODE_INFO **mi_ptr;
       av1_tile_set_col(&tile_info, cm, tile_col);
-#if CONFIG_TILE_GROUPS && CONFIG_DEPENDENT_HORZTILES
+#if CONFIG_DEPENDENT_HORZTILES
       av1_tile_set_tg_boundary(&tile_info, cm, tile_row, tile_col);
 #endif
       mi_ptr = cm->mi_grid_visible + tile_info.mi_row_start * cm->mi_stride +
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 1f3cb51..250dc9e 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -139,7 +139,6 @@
 set(CONFIG_FILTER_7BIT 1 CACHE NUMBER "Internal flag.")
 set(CONFIG_PARALLEL_DEBLOCKING 1 CACHE NUMBER "Internal flag.")
 set(CONFIG_LOOPFILTERING_ACROSS_TILES 1 CACHE NUMBER "Internal flag.")
-set(CONFIG_TILE_GROUPS 1 CACHE NUMBER "Internal flag.")
 set(CONFIG_TEMPMV_SIGNALING 1 CACHE NUMBER "Internal flag.")
 set(CONFIG_RD_DEBUG 0 CACHE NUMBER "Internal flag.")
 set(CONFIG_REFERENCE_BUFFER 1 CACHE NUMBER "Internal flag.")
diff --git a/configure b/configure
index f77fbe2..f8191b9 100755
--- a/configure
+++ b/configure
@@ -304,7 +304,6 @@
     filter_7bit
     parallel_deblocking
     loopfiltering_across_tiles
-    tile_groups
     tempmv_signaling
     rd_debug
     reference_buffer
@@ -444,7 +443,6 @@
     highbitdepth
     experimental
     colorspace_headers
-    tile_groups
 "
 
 process_cmdline() {
@@ -496,7 +494,6 @@
     soft_enable filter_7bit
     soft_enable reference_buffer
     soft_enable delta_q
-    soft_enable tile_groups
     soft_enable rect_tx
     soft_enable global_motion
     soft_enable ext_tx
diff --git a/third_party/libwebm/common/file_util.h b/third_party/libwebm/common/file_util.h
index 0e71eac..ed89ef3 100644
--- a/third_party/libwebm/common/file_util.h
+++ b/third_party/libwebm/common/file_util.h
@@ -38,4 +38,4 @@
 
 }  // namespace libwebm
 
-#endif  // LIBWEBM_COMMON_FILE_UTIL_H_
\ No newline at end of file
+#endif  // LIBWEBM_COMMON_FILE_UTIL_H_
