diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 01f43f9..b1b01bc 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -2817,10 +2817,9 @@
 
 // New function based on HLS R18
 static AOM_INLINE void write_uncompressed_header_obu(
-    AV1_COMP *cpi, MACROBLOCK *const x, struct aom_write_bit_buffer *saved_wb,
+    AV1_COMP *cpi, MACROBLOCKD *const xd, struct aom_write_bit_buffer *saved_wb,
     struct aom_write_bit_buffer *wb) {
   AV1_COMMON *const cm = &cpi->common;
-  MACROBLOCKD *const xd = &x->e_mbd;
   const SequenceHeader *const seq_params = cm->seq_params;
   const CommonQuantParams *quant_params = &cm->quant_params;
   CurrentFrame *const current_frame = &cm->current_frame;
@@ -2901,7 +2900,7 @@
 
     if (cm->superres_upscaled_width > seq_params->max_frame_width ||
         cm->superres_upscaled_height > seq_params->max_frame_height) {
-      aom_internal_error(x->error_info, AOM_CODEC_UNSUP_BITSTREAM,
+      aom_internal_error(cm->error, AOM_CODEC_UNSUP_BITSTREAM,
                          "Frame dimensions are larger than the maximum values");
     }
 
@@ -2940,7 +2939,7 @@
                 seq_params->decoder_model_info.buffer_removal_time_length);
             cm->buffer_removal_times[op_num]++;
             if (cm->buffer_removal_times[op_num] == 0) {
-              aom_internal_error(x->error_info, AOM_CODEC_UNSUP_BITSTREAM,
+              aom_internal_error(cm->error, AOM_CODEC_UNSUP_BITSTREAM,
                                  "buffer_removal_time overflowed");
             }
           }
@@ -3027,7 +3026,7 @@
               1;
           if (delta_frame_id_minus_1 < 0 ||
               delta_frame_id_minus_1 >= (1 << diff_len)) {
-            aom_internal_error(x->error_info, AOM_CODEC_ERROR,
+            aom_internal_error(cm->error, AOM_CODEC_ERROR,
                                "Invalid delta_frame_id_minus_1");
           }
           aom_wb_write_literal(wb, delta_frame_id_minus_1, diff_len);
@@ -3402,12 +3401,12 @@
   return size;
 }
 
-static uint32_t write_frame_header_obu(AV1_COMP *cpi, MACROBLOCK *const x,
+static uint32_t write_frame_header_obu(AV1_COMP *cpi, MACROBLOCKD *const xd,
                                        struct aom_write_bit_buffer *saved_wb,
                                        uint8_t *const dst,
                                        int append_trailing_bits) {
   struct aom_write_bit_buffer wb = { dst, 0 };
-  write_uncompressed_header_obu(cpi, x, saved_wb, &wb);
+  write_uncompressed_header_obu(cpi, xd, saved_wb, &wb);
   if (append_trailing_bits) add_trailing_bits(&wb);
   return aom_wb_bytes_written(&wb);
 }
@@ -3453,7 +3452,7 @@
   *data += lst_obu->tg_hdr_size;
 
   const uint32_t frame_header_size =
-      write_frame_header_obu(cpi, &cpi->td.mb, saved_wb, *data, 0);
+      write_frame_header_obu(cpi, &cpi->td.mb.e_mbd, saved_wb, *data, 0);
   *data += frame_header_size;
   lst_obu->frame_header_size = frame_header_size;
   // (yunqing) This test ensures the correctness of large scale tile coding.
@@ -3547,7 +3546,6 @@
       // even for the last one, unless no tiling is used at all.
       *total_size += data_offset;
       cpi->td.mb.e_mbd.tile_ctx = &this_tile->tctx;
-      cpi->td.mb.error_info = cm->error;
       mode_bc.allow_update_cdf = !tiles->large_scale;
       mode_bc.allow_update_cdf =
           mode_bc.allow_update_cdf && !cm->features.disable_cdf_update;
@@ -3631,7 +3629,7 @@
 }
 
 // Writes obu, tile group and uncompressed headers to bitstream.
-void av1_write_obu_tg_tile_headers(AV1_COMP *const cpi, MACROBLOCK *const x,
+void av1_write_obu_tg_tile_headers(AV1_COMP *const cpi, MACROBLOCKD *const xd,
                                    PackBSParams *const pack_bs_params,
                                    const int tile_idx) {
   AV1_COMMON *const cm = &cpi->common;
@@ -3651,7 +3649,7 @@
 
   if (cpi->num_tg == 1)
     *curr_tg_hdr_size += write_frame_header_obu(
-        cpi, x, pack_bs_params->saved_wb,
+        cpi, xd, pack_bs_params->saved_wb,
         pack_bs_params->tile_data_curr + *curr_tg_hdr_size, 0);
   *curr_tg_hdr_size += write_tile_group_header(
       pack_bs_params->tile_data_curr + *curr_tg_hdr_size, tile_idx,
@@ -3778,7 +3776,7 @@
     unsigned int *max_tile_size, uint32_t *const obu_header_size,
     uint8_t **tile_data_start) {
   AV1_COMMON *const cm = &cpi->common;
-  MACROBLOCK *const x = &cpi->td.mb;
+  MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
   const CommonTileParams *const tiles = &cm->tiles;
   const int tile_cols = tiles->cols;
   const int tile_rows = tiles->rows;
@@ -3807,8 +3805,7 @@
       if (tile_count == tg_size || tile_idx == (tile_cols * tile_rows - 1))
         is_last_tile_in_tg = 1;
 
-      cpi->td.mb.e_mbd.tile_ctx = &this_tile->tctx;
-      cpi->td.mb.error_info = cm->error;
+      xd->tile_ctx = &this_tile->tctx;
 
       // PackBSParams stores all parameters required to pack tile and header
       // info.
@@ -3826,7 +3823,7 @@
       pack_bs_params.total_size = total_size;
 
       if (new_tg)
-        av1_write_obu_tg_tile_headers(cpi, x, &pack_bs_params, tile_idx);
+        av1_write_obu_tg_tile_headers(cpi, xd, &pack_bs_params, tile_idx);
 
       av1_pack_tile_info(cpi, &cpi->td, &pack_bs_params);
 
@@ -4077,7 +4074,7 @@
     obu_header_size =
         av1_write_obu_header(level_params, &cpi->frame_header_count,
                              OBU_FRAME_HEADER, obu_extension_header, data);
-    obu_payload_size = write_frame_header_obu(cpi, &cpi->td.mb, &saved_wb,
+    obu_payload_size = write_frame_header_obu(cpi, &cpi->td.mb.e_mbd, &saved_wb,
                                               data + obu_header_size, 1);
 
     length_field = av1_obu_memmove(obu_header_size, obu_payload_size, data);
diff --git a/av1/encoder/bitstream.h b/av1/encoder/bitstream.h
index da321d2..dfbe7bf 100644
--- a/av1/encoder/bitstream.h
+++ b/av1/encoder/bitstream.h
@@ -20,7 +20,6 @@
 #include "av1/common/blockd.h"
 #include "av1/common/enums.h"
 #include "av1/encoder/level.h"
-#include "av1/encoder/block.h"
 #include "aom_dsp/bitwriter.h"
 
 struct aom_write_bit_buffer;
@@ -123,7 +122,7 @@
                                         struct ThreadData const *td);
 
 void av1_write_obu_tg_tile_headers(struct AV1_COMP *const cpi,
-                                   MACROBLOCK *const x,
+                                   MACROBLOCKD *const xd,
                                    PackBSParams *const pack_bs_params,
                                    const int tile_idx);
 #ifdef __cplusplus
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 58add99..fd32458 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -917,8 +917,6 @@
   CompoundTypeRdBuffers comp_rd_buffer;
   //! Buffer to store convolution during averaging process in compound mode.
   CONV_BUF_TYPE *tmp_conv_dst;
-  //! Pointer to error_info.
-  struct aom_internal_error_info *error_info;
 
   /*! \brief Temporary buffer to hold prediction.
    *
diff --git a/av1/encoder/ethread.c b/av1/encoder/ethread.c
index 075ec67..a9e158e 100644
--- a/av1/encoder/ethread.c
+++ b/av1/encoder/ethread.c
@@ -1853,7 +1853,7 @@
                                      struct aom_write_bit_buffer *saved_wb,
                                      PackBSParams *const pack_bs_params_arr,
                                      uint8_t obu_extn_header) {
-  MACROBLOCK *const x = &cpi->td.mb;
+  MACROBLOCKD *const xd = &cpi->td.mb.e_mbd;
   AV1_COMMON *const cm = &cpi->common;
   const CommonTileParams *const tiles = &cm->tiles;
   const int num_tiles = tiles->cols * tiles->rows;
@@ -1869,10 +1869,6 @@
   int tg_idx = 0;
   int tile_count_in_tg = 0;
   int new_tg = 1;
-  // TODO(Cherma): As header preparation is moved out of multithreading scope,
-  // error_info need not be in thread specific memory. Modify error_info access
-  // from MACROBLOCK structure to AV1_COMMON in av1_write_obu_tg_tile_headers().
-  x->error_info = cm->error;
 
   // Populate pack bitstream params of all tiles.
   for (tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
@@ -1928,7 +1924,7 @@
 
     // Write obu, tile group and frame header at first tile in the tile
     // group.
-    av1_write_obu_tg_tile_headers(cpi, x, pack_bs_params, tile_idx);
+    av1_write_obu_tg_tile_headers(cpi, xd, pack_bs_params, tile_idx);
     tile_dst += tg_buf_size[tg_idx];
 
     // Exclude headers from tile group buffer size.
