diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h
index cef66f02ecf0d7110c45aa71f98cec21d0b872e4..d51e881b4251f60bfcd22e758e9e8a67bc75b655 100644
--- a/vp8/common/blockd.h
+++ b/vp8/common/blockd.h
@@ -180,6 +180,9 @@ typedef struct
 {
     MB_PREDICTION_MODE mode, uv_mode;
     MV_REFERENCE_FRAME ref_frame;
+#if CONFIG_T8X8
+    TX_SIZE txfm_size;
+#endif
     int_mv mv;
     unsigned char partitioning;
     unsigned char mb_skip_coeff;                                /* does this mb has coefficients at all, 1=no coefficients, 0=need decode tokens */
diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c
index 3d2ba2da9ea5002453c29c013206a2e54178e834..a3421ef89ea58963a6eaaefd3974ce3f17abffac 100644
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -210,10 +210,11 @@ static void decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
     int i;
 
 #if CONFIG_T8X8
-    int tx_type = get_seg_tx_type(xd, xd->mode_info_context->mbmi.segment_id);
+    int tx_type = get_seg_tx_type( xd,
+                                  xd->mode_info_context->mbmi.segment_id);
+    xd->mode_info_context->mbmi.txfm_size = tx_type;
 #endif
 
-
     if (xd->mode_info_context->mbmi.mb_skip_coeff)
     {
         vp8_reset_mb_tokens_context(xd);
diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c
index ee1e8784714d946113a052e7b2fed7a962e09007..3c0456092e2b614a47273878e259024dd4ce014e 100644
--- a/vp8/encoder/encodeintra.c
+++ b/vp8/encoder/encodeintra.c
@@ -100,6 +100,7 @@ void vp8_encode_intra16x16mby(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
 #if CONFIG_T8X8
     int tx_type = get_seg_tx_type(&x->e_mbd,
                                   x->e_mbd.mode_info_context->mbmi.segment_id);
+    x->e_mbd.mode_info_context->mbmi.txfm_size = tx_type;
 #endif
 
     RECON_INVOKE(&rtcd->common->recon, build_intra_predictors_mby)(&x->e_mbd);
@@ -178,6 +179,7 @@ void vp8_encode_intra16x16mbuv(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
 #if CONFIG_T8X8
     int tx_type = get_seg_tx_type(&x->e_mbd,
                                   x->e_mbd.mode_info_context->mbmi.segment_id);
+    x->e_mbd.mode_info_context->mbmi.txfm_size = tx_type;
 #endif
 
     RECON_INVOKE(&rtcd->common->recon, build_intra_predictors_mbuv)(&x->e_mbd);
diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c
index da727eb5624dc2f36d4d9def39b2f70da50fa659..483ec768f7e296a90a73f7c769c0db137381bd54 100644
--- a/vp8/encoder/encodemb.c
+++ b/vp8/encoder/encodemb.c
@@ -1277,6 +1277,7 @@ void vp8_encode_inter16x16(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
 #if CONFIG_T8X8
     int tx_type = get_seg_tx_type(&x->e_mbd,
                                   x->e_mbd.mode_info_context->mbmi.segment_id);
+    x->e_mbd.mode_info_context->mbmi.txfm_size = tx_type;
 #endif
 
     vp8_build_inter_predictors_mb(&x->e_mbd);
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index 799a656eb8157ea332489bacb3cf31f696283792..c9d91aeaf91cfc89435e1e3918c1a1c8fc1113be 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -476,18 +476,8 @@ static void init_seg_features(VP8_COMP *cpi)
             // Where relevant assume segment data is delta data
             xd->mb_segement_abs_delta = SEGMENT_DELTADATA;
 
-#if CONFIG_T8X8
-            // 8x8TX test code.
-            // This assignment does not necessarily make sense but is
-            // just to test the mechanism for now.
-            enable_segfeature(xd, 0, SEG_LVL_TRANSFORM);
-            set_segdata( xd, 0, SEG_LVL_TRANSFORM, TX_4X4 );
-            enable_segfeature(xd, 1, SEG_LVL_TRANSFORM);
-            set_segdata( xd, 1, SEG_LVL_TRANSFORM, TX_8X8 );
-#endif
         }
     }
-
     // All other frames if segmentation has been enabled
     else if ( xd->segmentation_enabled )
     {
@@ -586,6 +576,25 @@ static void init_seg_features(VP8_COMP *cpi)
             // No updeates.. leave things as they are.
             xd->update_mb_segmentation_map = 0;
             xd->update_mb_segmentation_data = 0;
+
+#if CONFIG_T8X8
+            {
+                vp8_disable_segmentation((VP8_PTR)cpi);
+                clearall_segfeatures(xd);
+                vp8_enable_segmentation((VP8_PTR)cpi);
+                // 8x8TX test code.
+                // This assignment does not necessarily make sense but is
+                // just to test the mechanism for now.
+                enable_segfeature(xd, 0, SEG_LVL_TRANSFORM);
+                set_segdata( xd, 0, SEG_LVL_TRANSFORM, TX_4X4 );
+                enable_segfeature(xd, 1, SEG_LVL_TRANSFORM);
+                set_segdata( xd, 1, SEG_LVL_TRANSFORM, TX_8X8 );
+                /* force every mb to use 8x8 transform for testing*/
+                vpx_memset(cpi->segmentation_map, 1,
+                    cpi->common.mb_rows * cpi->common.mb_cols);
+
+            }
+#endif
         }
     }
 }
diff --git a/vp8/encoder/tokenize.c b/vp8/encoder/tokenize.c
index e01093ef7ddb0811913a33ceff8581312310ece4..304bb4f9844f131245f520066e4d3b27d4b7141b 100644
--- a/vp8/encoder/tokenize.c
+++ b/vp8/encoder/tokenize.c
@@ -457,7 +457,7 @@ static int mb_is_skippable_8x8(MACROBLOCKD *x)
     int has_y2_block;
     int skip = 1;
     int i = 0;
- 
+
     has_y2_block = (x->mode_info_context->mbmi.mode != B_PRED
                     && x->mode_info_context->mbmi.mode != SPLITMV);
     if (has_y2_block)