diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
index 031e63ac774e7dc6216c9ed97695ec1b732ebc8f..b24b39633a9ce1da49087c989173abc9fcf1e047 100644
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -674,25 +674,19 @@ void encode_mb_row(VP8_COMP *cpi,
             vp8_activity_masking(cpi, x);
 
         // Is segmentation enabled
-        // MB level adjutment to quantizer
         if (xd->segmentation_enabled)
         {
-            // Code to set segment id in xd->mbmi.segment_id for current MB (with range checking)
-#if CONFIG_T8X8
-            // Reset segment_id to 0 or 1 so that the default transform mode is 4x4
-            if (cpi->segmentation_map[map_index+mb_col] <= 3)
-                xd->mode_info_context->mbmi.segment_id = cpi->segmentation_map[map_index+mb_col]&1;
-#else
+            // Code to set segment id in xd->mbmi.segment_id
             if (cpi->segmentation_map[map_index+mb_col] <= 3)
                 xd->mode_info_context->mbmi.segment_id = cpi->segmentation_map[map_index+mb_col];
-#endif
             else
                 xd->mode_info_context->mbmi.segment_id = 0;
 
             vp8cx_mb_init_quantizer(cpi, x);
         }
         else
-            xd->mode_info_context->mbmi.segment_id = 0;         // Set to Segment 0 by default
+            // Set to Segment 0 by default
+            xd->mode_info_context->mbmi.segment_id = 0;
 
         x->active_ptr = cpi->active_map + map_index + mb_col;
 
@@ -1522,10 +1516,6 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
 {
     int rate;
 
-#if CONFIG_T8X8
-    if (x->e_mbd.segmentation_enabled)
-        x->e_mbd.update_mb_segmentation_map = 1;
-#endif
     if (cpi->sf.RD && cpi->compressor_speed != 2)
         vp8_rd_pick_intra_mode(cpi, x, &rate);
     else
@@ -1549,10 +1539,6 @@ int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x, TOKENEXTRA **t)
         vp8_encode_intra4x4mby(IF_RTCD(&cpi->rtcd), x);
     else
     {
-#if CONFIG_T8X8
-        if (x->e_mbd.segmentation_enabled)
-            x->e_mbd.mode_info_context->mbmi.segment_id |= (vp8_8x8_selection_intra(x) << 1);
-#endif
         vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x);
     }
 #if CONFIG_I8X8
@@ -1729,11 +1715,6 @@ int vp8cx_encode_inter_macroblock
         cpi->count_mb_ref_frame_usage[xd->mode_info_context->mbmi.ref_frame]++;
     }
 
-#if CONFIG_T8X8
-    if (xd->segmentation_enabled)
-        x->e_mbd.update_mb_segmentation_map = 1;
-#endif
-
     if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
     {
         if (xd->mode_info_context->mbmi.mode == B_PRED)
@@ -1743,10 +1724,6 @@ int vp8cx_encode_inter_macroblock
         }
         else
         {
-#if CONFIG_T8X8
-            if (xd->segmentation_enabled)
-                *segment_id |= (vp8_8x8_selection_intra(x) << 1);
-#endif
             vp8_encode_intra16x16mbuv(IF_RTCD(&cpi->rtcd), x);
             vp8_encode_intra16x16mby(IF_RTCD(&cpi->rtcd), x);
         }
@@ -1756,10 +1733,6 @@ int vp8cx_encode_inter_macroblock
     else
     {
         int ref_fb_idx;
-#if CONFIG_T8X8
-        if (xd->segmentation_enabled)
-            *segment_id |= (vp8_8x8_selection_inter(x) << 1);
-#endif
 
         if (xd->mode_info_context->mbmi.ref_frame == LAST_FRAME)
             ref_fb_idx = cpi->common.lst_fb_idx;
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index 05cb4243922690ef6e765eeeba0a5d0633141a97..c98c9805987d62cb19a483fc8b8260308ce1715c 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -488,19 +488,6 @@ static void init_seg_features(VP8_COMP *cpi)
         return;
     }
 
-#if CONFIG_T8X8
-    // TODO
-    // For now 8x8TX mode just set segments up for 8x8 and 4x4 modes and exit.
-    enable_segfeature(xd, 0, SEG_LVL_TRANSFORM);
-    set_segdata( xd, 0, SEG_LVL_TRANSFORM, TX_4X4 );
-    enable_segfeature(xd, 2, SEG_LVL_TRANSFORM);
-    set_segdata( xd, 2, SEG_LVL_TRANSFORM, TX_8X8 );
-
-    // Turn on segmentation
-    vp8_enable_segmentation((VP8_PTR)cpi);
-    return;
-#endif
-
     // Disable and clear down for KF
     if ( cm->frame_type == KEY_FRAME  )
     {
@@ -547,6 +534,16 @@ 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
         }
     }
 
@@ -577,8 +574,13 @@ static void init_seg_features(VP8_COMP *cpi)
                     set_segdata( xd, 1, SEG_LVL_MODE, ZEROMV );
                     enable_segfeature(xd, 1, SEG_LVL_MODE);
 
-                    set_segdata( xd, 1, SEG_LVL_EOB, 0 );
-                    enable_segfeature(xd, 1, SEG_LVL_EOB);
+                    if ( !segfeature_active( xd, 1, SEG_LVL_TRANSFORM ) ||
+                         get_seg_tx_type( xd, 1 ) == TX_4X4 )
+                    {
+                        // EOB segment coding not fixed for 8x8 yet
+                        set_segdata( xd, 1, SEG_LVL_EOB, 0 );
+                        enable_segfeature(xd, 1, SEG_LVL_EOB);
+                    }
                 }
             }
 
@@ -617,10 +619,21 @@ static void init_seg_features(VP8_COMP *cpi)
             // Skip all MBs if high Q
             if ( high_q )
             {
-                enable_segfeature(xd, 0, SEG_LVL_EOB);
-                enable_segfeature(xd, 1, SEG_LVL_EOB);
-                set_segdata( xd, 0, SEG_LVL_EOB, 0 );
-                set_segdata( xd, 1, SEG_LVL_EOB, 0 );
+                // EOB segment coding not fixed for 8x8 yet
+                if ( !segfeature_active( xd, 0, SEG_LVL_TRANSFORM ) ||
+                     get_seg_tx_type( xd, 0 ) == TX_4X4 )
+                {
+                    enable_segfeature(xd, 0, SEG_LVL_EOB);
+                    set_segdata( xd, 0, SEG_LVL_EOB, 0 );
+                }
+
+                // EOB segment coding not fixed for 8x8 yet
+                if ( !segfeature_active( xd, 1, SEG_LVL_TRANSFORM ) ||
+                     get_seg_tx_type( xd, 1 ) == TX_4X4 )
+                {
+                    enable_segfeature(xd, 1, SEG_LVL_EOB);
+                    set_segdata( xd, 1, SEG_LVL_EOB, 0 );
+                }
             }
 
             // Enable data udpate
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c
index 71c2a14305e5806ed94d727a5d8d394ea8cd0550..4d8c0b97be5de3c699fce0f7a3096c2ab22cbd8c 100644
--- a/vp8/encoder/pickinter.c
+++ b/vp8/encoder/pickinter.c
@@ -539,6 +539,12 @@ void vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset,
         {
             continue;
         }
+        // No 4x4 modes if segment flagged as 8x8
+        else if ( ( get_seg_tx_type( xd, segment_id ) == TX_8X8 ) &&
+                  ( (this_mode == B_PRED) || (this_mode == SPLITMV) ) )
+        {
+            continue;
+        }
 //#if !CONFIG_SEGFEATURES
         // Disable this drop out case if either the mode or ref frame
         // segment level feature is enabled for this segment. This is to
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 3941474a87356b90b6291d6052a0cb3811cbb0b6..688451f0502a9871a53f83192a8b61be2398e96f 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -2146,6 +2146,12 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
         {
             continue;
         }
+        // No 4x4 modes if segment flagged as 8x8
+        else if ( ( get_seg_tx_type( xd, segment_id ) == TX_8X8 ) &&
+                  ( (this_mode == B_PRED) || (this_mode == SPLITMV) ) )
+        {
+            continue;
+        }
 //#if !CONFIG_SEGFEATURES
         // Disable this drop out case if either the mode or ref frame
         // segment level feature is enabled for this segment. This is to