diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
index fdc66c0c65a06e197190e33651aa46ca68997730..8feea41a655a294bebf244351a65b203e4f3bd2d 100644
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -1168,18 +1168,6 @@ int vp8cx_encode_inter_macroblock
         int zbin_mode_boost_enabled = cpi->zbin_mode_boost_enabled;
         int single, compound, hybrid;
 
-        /* Are we using the fast quantizer for the mode selection? */
-        if(cpi->sf.use_fastquant_for_pick)
-        {
-            cpi->mb.quantize_b      = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                      fastquantb);
-            cpi->mb.quantize_b_pair = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                      fastquantb_pair);
-
-            /* the fast quantizer does not use zbin_extra, so
-             * do not recalculate */
-            cpi->zbin_mode_boost_enabled = 0;
-        }
         vp8_rd_pick_inter_mode(cpi, x, recon_yoffset, recon_uvoffset, &rate,
                                &distortion, &intra_error, &single, &compound, &hybrid);
 
@@ -1215,14 +1203,6 @@ int vp8cx_encode_inter_macroblock
             cpi->t4x4_count++;
         }
 
-        /* switch back to the regular quantizer for the encode */
-        if (cpi->sf.improved_quant)
-        {
-            cpi->mb.quantize_b      = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                      quantb);
-            cpi->mb.quantize_b_pair = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                      quantb_pair);
-        }
         /* restore cpi->zbin_mode_boost_enabled */
         cpi->zbin_mode_boost_enabled = zbin_mode_boost_enabled;
 
@@ -1263,10 +1243,7 @@ int vp8cx_encode_inter_macroblock
             }
         }
 
-        /* The fast quantizer doesn't use zbin_extra, only do so with
-         * the regular quantizer. */
-        if (cpi->sf.improved_quant)
-            vp8_update_zbin_extra(cpi, x);
+        vp8_update_zbin_extra(cpi, x);
     }
 
     seg_ref_active = segfeature_active( xd, *segment_id, SEG_LVL_REF_FRAME );
diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c
index ab0f1c13e6da6080a6aff5138d7fd871daea25fc..ae8ab8846fb9d6baa06d199dbcdf4d8770ae792d 100644
--- a/vp8/encoder/encodemb.c
+++ b/vp8/encoder/encodemb.c
@@ -399,13 +399,6 @@ static void optimize_b(MACROBLOCK *mb, int ib, int type,
     b = &mb->block[ib];
     d = &mb->e_mbd.block[ib];
 
-    /* Enable this to test the effect of RDO as a replacement for the dynamic
-     *  zero bin instead of an augmentation of it.
-     */
-#if 0
-    vp8_strict_quantize_b(b, d);
-#endif
-
     dequant_ptr = d->dequant;
     coeff_ptr = b->coeff;
     qcoeff_ptr = d->qcoeff;
@@ -831,13 +824,6 @@ void optimize_b_8x8(MACROBLOCK *mb, int i, int type,
     b = &mb->block[i];
     d = &mb->e_mbd.block[i];
 
-    /* Enable this to test the effect of RDO as a replacement for the dynamic
-     *  zero bin instead of an augmentation of it.
-     */
-#if 0
-    vp8_strict_quantize_b(b, d);
-#endif
-
     dequant_ptr = d->dequant;
     coeff_ptr = b->coeff;
     qcoeff_ptr = d->qcoeff;
diff --git a/vp8/encoder/generic/csystemdependent.c b/vp8/encoder/generic/csystemdependent.c
index ebb16e3f090cfa34dffc203a14fd59289cea50a5..59b30a7628c86ab46b508017014a128c14f869a3 100644
--- a/vp8/encoder/generic/csystemdependent.c
+++ b/vp8/encoder/generic/csystemdependent.c
@@ -84,14 +84,6 @@ void vp8_cmachine_specific_config(VP8_COMP *cpi)
     cpi->rtcd.encodemb.submby                = vp8_subtract_mby_c;
     cpi->rtcd.encodemb.submbuv               = vp8_subtract_mbuv_c;
 
-    cpi->rtcd.quantize.quantb                = vp8_regular_quantize_b;
-    cpi->rtcd.quantize.quantb_pair           = vp8_regular_quantize_b_pair;
-    cpi->rtcd.quantize.fastquantb            = vp8_fast_quantize_b_c;
-    cpi->rtcd.quantize.fastquantb_pair       = vp8_fast_quantize_b_pair_c;
-    cpi->rtcd.quantize.quantb_8x8            = vp8_regular_quantize_b_8x8;
-    cpi->rtcd.quantize.fastquantb_8x8        = vp8_fast_quantize_b_8x8_c;
-    cpi->rtcd.quantize.quantb_2x2            = vp8_regular_quantize_b_2x2;
-    cpi->rtcd.quantize.fastquantb_2x2        = vp8_fast_quantize_b_2x2_c;
     cpi->rtcd.search.full_search             = vp8_full_search_sad;
     cpi->rtcd.search.refining_search         = vp8_refining_search_sad;
     cpi->rtcd.search.diamond_search          = vp8_diamond_search_sad;
diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
index 6195c4c4856894e5fcac8a1705de761b080b4302..021c450be49653e9851dd4a14079eaaa2255989e 100644
--- a/vp8/encoder/onyx_if.c
+++ b/vp8/encoder/onyx_if.c
@@ -652,7 +652,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
     int Speed = cpi->Speed;
     int i;
     VP8_COMMON *cm = &cpi->common;
-    int last_improved_quant = sf->improved_quant;
 
     // Only modes 0 and 1 supported for now in experimental code basae
     if ( Mode > 1 )
@@ -671,7 +670,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
     // best quality defaults
     sf->RD = 1;
     sf->search_method = NSTEP;
-    sf->improved_quant = 1;
     sf->improved_dct = 1;
     sf->auto_filter = 1;
     sf->recode_loop = 1;
@@ -679,7 +677,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
     sf->half_pixel_search = 1;
     sf->iterative_sub_pixel = 1;
     sf->optimize_coefficients = 1;
-    sf->use_fastquant_for_pick = 0;
     sf->no_skip_block4x4_search = 1;
 
     sf->first_step = 0;
@@ -791,7 +788,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
         {
             /* Disable coefficient optimization above speed 0 */
             sf->optimize_coefficients = 0;
-            sf->use_fastquant_for_pick = 1;
             sf->no_skip_block4x4_search = 0;
 
             sf->first_step = 1;
@@ -902,7 +898,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
             sf->thresh_mult[THR_COMP_NEWLA    ] = 2500;
             sf->thresh_mult[THR_COMP_NEWGA    ] = 2500;
 
-            sf->improved_quant = 0;
             sf->improved_dct = 0;
 
             // Only do recode loop on key frames, golden frames and
@@ -971,7 +966,6 @@ void vp8_set_speed_features(VP8_COMP *cpi)
     // so make sure they are always turned off.
     if ( cpi->pass == 1 )
     {
-        sf->improved_quant = 0;
         sf->optimize_coefficients = 0;
         sf->improved_dct = 0;
     }
@@ -1001,26 +995,13 @@ void vp8_set_speed_features(VP8_COMP *cpi)
     cpi->mb.short_walsh4x4 = FDCT_INVOKE(&cpi->rtcd.fdct, walsh_short4x4);
     cpi->mb.short_fhaar2x2 = FDCT_INVOKE(&cpi->rtcd.fdct, haar_short2x2);
 
-    if (cpi->sf.improved_quant)
-    {
-        cpi->mb.quantize_b      = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                  quantb);
-        cpi->mb.quantize_b_pair = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                  quantb_pair);
-        cpi->mb.quantize_b_8x8  = QUANTIZE_INVOKE(&cpi->rtcd.quantize, quantb_8x8);
-        cpi->mb.quantize_b_2x2  = QUANTIZE_INVOKE(&cpi->rtcd.quantize, quantb_2x2);
-    }
-    else
-    {
-        cpi->mb.quantize_b      = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                  fastquantb);
-        cpi->mb.quantize_b_pair = QUANTIZE_INVOKE(&cpi->rtcd.quantize,
-                                                  fastquantb_pair);
-        cpi->mb.quantize_b_8x8  = QUANTIZE_INVOKE(&cpi->rtcd.quantize, fastquantb_8x8);
-        cpi->mb.quantize_b_2x2  = QUANTIZE_INVOKE(&cpi->rtcd.quantize, fastquantb_2x2);
-    }
-    if (cpi->sf.improved_quant != last_improved_quant)
-        vp8cx_init_quantizer(cpi);
+
+    cpi->mb.quantize_b      = vp8_regular_quantize_b;
+    cpi->mb.quantize_b_pair = vp8_regular_quantize_b_pair;
+    cpi->mb.quantize_b_8x8  = vp8_regular_quantize_b_8x8;
+    cpi->mb.quantize_b_2x2  = vp8_regular_quantize_b_2x2;
+
+    vp8cx_init_quantizer(cpi);
 
 #if CONFIG_RUNTIME_CPU_DETECT
     cpi->mb.e_mbd.rtcd = &cpi->common.rtcd;
diff --git a/vp8/encoder/onyx_int.h b/vp8/encoder/onyx_int.h
index 158f5613f55794686ef47eb7201b22acd0c52f7f..ed3a8823439e99b9cba0dd4a397a9d234cf5f3e2 100644
--- a/vp8/encoder/onyx_int.h
+++ b/vp8/encoder/onyx_int.h
@@ -220,7 +220,6 @@ typedef struct
 {
     int RD;
     SEARCH_METHODS search_method;
-    int improved_quant;
     int improved_dct;
     int auto_filter;
     int recode_loop;
@@ -231,8 +230,6 @@ typedef struct
     int max_step_search_steps;
     int first_step;
     int optimize_coefficients;
-
-    int use_fastquant_for_pick;
     int no_skip_block4x4_search;
     int improved_mv_pred;
 
@@ -269,7 +266,6 @@ typedef struct VP8_ENCODER_RTCD
     vp8_variance_rtcd_vtable_t  variance;
     vp8_fdct_rtcd_vtable_t      fdct;
     vp8_encodemb_rtcd_vtable_t  encodemb;
-    vp8_quantize_rtcd_vtable_t  quantize;
     vp8_search_rtcd_vtable_t    search;
     vp8_temporal_rtcd_vtable_t  temporal;
 } VP8_ENCODER_RTCD;
diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c
index b50a424344379ac10c8870c7c3836888fe3904a3..91b48eae7db876d04ad166029ef316e2206f339d 100644
--- a/vp8/encoder/quantize.c
+++ b/vp8/encoder/quantize.c
@@ -22,41 +22,6 @@
 extern int enc_debug;
 #endif
 
-void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d)
-{
-    int i, rc, eob;
-    int x, y, z, sz;
-    short *coeff_ptr   = b->coeff;
-    short *round_ptr   = b->round;
-    short *quant_ptr   = b->quant_fast;
-    short *qcoeff_ptr  = d->qcoeff;
-    short *dqcoeff_ptr = d->dqcoeff;
-    short *dequant_ptr = d->dequant;
-    vpx_memset(qcoeff_ptr, 0, 32);
-    vpx_memset(dqcoeff_ptr, 0, 32);
-
-    eob = -1;
-    for (i = 0; i < 16; i++)
-    {
-        rc   = vp8_default_zig_zag1d[i];
-        z    = coeff_ptr[rc];
-
-        sz = (z >> 31);                                 // sign of z
-        x  = (z ^ sz) - sz;                             // x = abs(z)
-
-        y  = ((x + round_ptr[rc]) * quant_ptr[rc]) >> 16; // quantize (x)
-        x  = (y ^ sz) - sz;                         // get the sign back
-        qcoeff_ptr[rc] = x;                          // write to destination
-        dqcoeff_ptr[rc] = x * dequant_ptr[rc];        // dequantized value
-
-        if (y)
-        {
-            eob = i;                                // last nonzero coeffs
-        }
-    }
-    d->eob = eob + 1;
-}
-
 void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d)
 {
     int i, rc, eob;
@@ -109,66 +74,6 @@ void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d)
     d->eob = eob + 1;
 }
 
-/* Perform regular quantization, with unbiased rounding and no zero bin. */
-void vp8_strict_quantize_b(BLOCK *b, BLOCKD *d)
-{
-    int i;
-    int rc;
-    int eob;
-    int x;
-    int y;
-    int z;
-    int sz;
-    short *coeff_ptr;
-    short *quant_ptr;
-    unsigned char *quant_shift_ptr;
-    short *qcoeff_ptr;
-    short *dqcoeff_ptr;
-    short *dequant_ptr;
-
-    coeff_ptr       = b->coeff;
-    quant_ptr       = b->quant;
-    quant_shift_ptr = b->quant_shift;
-    qcoeff_ptr      = d->qcoeff;
-    dqcoeff_ptr     = d->dqcoeff;
-    dequant_ptr     = d->dequant;
-    eob = - 1;
-    vpx_memset(qcoeff_ptr, 0, 32);
-    vpx_memset(dqcoeff_ptr, 0, 32);
-    for (i = 0; i < 16; i++)
-    {
-        int dq;
-        int round;
-
-        /*TODO: These arrays should be stored in zig-zag order.*/
-        rc = vp8_default_zig_zag1d[i];
-        z = coeff_ptr[rc];
-        dq = dequant_ptr[rc];
-        round = dq >> 1;
-        /* Sign of z. */
-        sz = -(z < 0);
-        x = (z + sz) ^ sz;
-        x += round;
-        if (x >= dq)
-        {
-            /* Quantize x. */
-            y  = (((x * quant_ptr[rc]) >> 16) + x) >> quant_shift_ptr[rc];
-            /* Put the sign back. */
-            x = (y + sz) ^ sz;
-            /* Save the coefficient and its dequantized value. */
-            qcoeff_ptr[rc] = x;
-            dqcoeff_ptr[rc] = x * dq;
-            /* Remember the last non-zero coefficient. */
-            if (y)
-            {
-                eob = i;
-            }
-        }
-    }
-
-    d->eob = eob + 1;
-}
-
 void vp8_quantize_mby_c(MACROBLOCK *x)
 {
     int i;
@@ -203,103 +108,6 @@ void vp8_quantize_mbuv_c(MACROBLOCK *x)
         x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
 }
 
-void vp8_fast_quantize_b_2x2_c(BLOCK *b, BLOCKD *d)
-{
-  int i, rc, eob;
-  int zbin;
-  int x, y, z, sz;
-  short *coeff_ptr  = b->coeff;
-  short *zbin_ptr   = b->zbin;
-  short *round_ptr  = b->round;
-  short *quant_ptr  = b->quant;
-  short *qcoeff_ptr = d->qcoeff;
-  short *dqcoeff_ptr = d->dqcoeff;
-  short *dequant_ptr = d->dequant;
-  //double q2nd = 4;
-  vpx_memset(qcoeff_ptr, 0, 32);
-  vpx_memset(dqcoeff_ptr, 0, 32);
-
-  eob = -1;
-
-  for (i = 0; i < 4; i++)
-  {
-    rc   = vp8_default_zig_zag1d[i];
-    z    = coeff_ptr[rc];
-    //zbin = zbin_ptr[rc]/q2nd;
-    zbin = zbin_ptr[rc];
-
-    sz = (z >> 31);                                 // sign of z
-    x  = (z ^ sz) - sz;                             // x = abs(z)
-
-    if (x >= zbin)
-    {
-      //y  = ((int)((x + round_ptr[rc]/q2nd) * quant_ptr[rc] * q2nd)) >> 16; // quantize (x)
-      y  = ((int)((x + round_ptr[rc]) * quant_ptr[rc])) >> 16; // quantize (x)
-      x  = (y ^ sz) - sz;                         // get the sign back
-      qcoeff_ptr[rc] = x;                          // write to destination
-      //dqcoeff_ptr[rc] = x * dequant_ptr[rc] / q2nd;        // dequantized value
-      dqcoeff_ptr[rc] = x * dequant_ptr[rc];        // dequantized value
-      dqcoeff_ptr[rc] = (dqcoeff_ptr[rc]+2)>>2;
-
-      if (y)
-      {
-        eob = i;                                // last nonzero coeffs
-      }
-    }
-  }
-  d->eob = eob + 1;
-}
-
-void vp8_fast_quantize_b_8x8_c(BLOCK *b, BLOCKD *d)
-{
-    int i, rc, eob;
-    int zbin;
-    int x, y, z, sz;
-    short *coeff_ptr  = b->coeff;
-    short *zbin_ptr   = b->zbin;
-    short *round_ptr  = b->round;
-    short *quant_ptr  = b->quant;
-    short *qcoeff_ptr = d->qcoeff;
-    short *dqcoeff_ptr = d->dqcoeff;
-    short *dequant_ptr = d->dequant;
-    //double q1st = 2;
-    vpx_memset(qcoeff_ptr, 0, 64*sizeof(short));
-    vpx_memset(dqcoeff_ptr, 0, 64*sizeof(short));
-
-    eob = -1;
-
-
-
-    for (i = 0; i < 64; i++)
-    {
-
-        rc   = vp8_default_zig_zag1d_8x8[i];
-        z    = coeff_ptr[rc];
-        //zbin = zbin_ptr[rc!=0]/q1st ;
-        zbin = zbin_ptr[rc!=0] ;
-
-        sz = (z >> 31);                                 // sign of z
-        x  = (z ^ sz) - sz;                             // x = abs(z)
-
-        if (x >= zbin)
-        {
-            //y  = ((int)((x + round_ptr[rc!=0] / q1st) * quant_ptr[rc!=0] * q1st)) >> 16;
-            y  = ((int)((x + round_ptr[rc!=0]) * quant_ptr[rc!=0])) >> 16;
-            x  = (y ^ sz) - sz;                         // get the sign back
-            qcoeff_ptr[rc] = x;                         // write to destination
-            //dqcoeff_ptr[rc] = x * dequant_ptr[rc!=0] / q1st;        // dequantized value
-            dqcoeff_ptr[rc] = x * dequant_ptr[rc!=0];        // dequantized value
-            dqcoeff_ptr[rc] = (dqcoeff_ptr[rc]+2)>>2;
-
-            if (y)
-            {
-                eob = i;                                // last nonzero coeffs
-            }
-        }
-    }
-    d->eob = eob + 1;
-}
-
 
 
 
@@ -420,127 +228,6 @@ void vp8_regular_quantize_b_8x8(BLOCK *b, BLOCKD *d)
   d->eob = eob + 1;
 }
 
-void vp8_strict_quantize_b_2x2(BLOCK *b, BLOCKD *d)
-{
-  int i;
-  int rc;
-  int eob;
-  int x;
-  int y;
-  int z;
-  int sz;
-  short *coeff_ptr;
-  short *quant_ptr;
-  unsigned char *quant_shift_ptr;
-  short *qcoeff_ptr;
-  short *dqcoeff_ptr;
-  short *dequant_ptr;
-  //double q2nd = 4;
-  coeff_ptr = b->coeff;
-  quant_ptr = b->quant;
-  quant_shift_ptr = b->quant_shift;
-  qcoeff_ptr = d->qcoeff;
-  dqcoeff_ptr = d->dqcoeff;
-  dequant_ptr = d->dequant;
-  eob = - 1;
-  vpx_memset(qcoeff_ptr, 0, 32);
-  vpx_memset(dqcoeff_ptr, 0, 32);
-  for (i = 0; i < 4; i++)
-  {
-    int dq;
-    int round;
-
-    /*TODO: These arrays should be stored in zig-zag order.*/
-    rc = vp8_default_zig_zag1d[i];
-    z = coeff_ptr[rc];
-    //z = z * q2nd;
-    //dq = dequant_ptr[rc]/q2nd;
-    dq = dequant_ptr[rc];
-    round = dq >> 1;
-    /* Sign of z. */
-    sz = -(z < 0);
-    x = (z + sz) ^ sz;
-    x += round;
-    if (x >= dq)
-    {
-      /* Quantize x */
-      y  = (((x * quant_ptr[rc]) >> 16) + x) >> quant_shift_ptr[rc];
-      /* Put the sign back. */
-      x = (y + sz) ^ sz;
-      /* Save * the * coefficient and its dequantized value. */
-      qcoeff_ptr[rc] = x;
-      dqcoeff_ptr[rc] = x * dq;
-      /* Remember the last non-zero coefficient. */
-      if (y)
-      {
-        eob = i;
-      }
-    }
-  }
-  d->eob = eob + 1;
-}
-
-void vp8_strict_quantize_b_8x8(BLOCK *b, BLOCKD *d)
-{
-  int i;
-  int rc;
-  int eob;
-  int x;
-  int y;
-  int z;
-  int sz;
-  short *coeff_ptr;
-  short *quant_ptr;
-  unsigned char *quant_shift_ptr;
-  short *qcoeff_ptr;
-  short *dqcoeff_ptr;
-  short *dequant_ptr;
-  //double q1st = 2;
-  printf("call strict quantizer\n");
-  coeff_ptr = b->coeff;
-  quant_ptr = b->quant;
-  quant_shift_ptr = b->quant_shift;
-  qcoeff_ptr = d->qcoeff;
-  dqcoeff_ptr = d->dqcoeff;
-  dequant_ptr = d->dequant;
-  eob = - 1;
-  vpx_memset(qcoeff_ptr, 0, 64*sizeof(short));
-  vpx_memset(dqcoeff_ptr, 0, 64*sizeof(short));
-  for (i = 0; i < 64; i++)
-  {
-    int dq;
-    int round;
-
-    /*TODO: These arrays should be stored in zig-zag order.*/
-    rc = vp8_default_zig_zag1d_8x8[i];
-    z = coeff_ptr[rc];
-    //z = z * q1st;
-    //dq = dequant_ptr[rc!=0]/q1st;
-    dq = dequant_ptr[rc!=0];
-    round = dq >> 1;
-    /* Sign of z. */
-    sz = -(z < 0);
-    x = (z + sz) ^ sz;
-    x += round;
-    if (x >= dq)
-    {
-      /* Quantize x. */
-      y  = ((int)(((int)((x * quant_ptr[rc!=0])) >> 16) + x)) >> quant_shift_ptr[rc!=0];
-      /* Put the sign back. */
-      x = (y + sz) ^ sz;
-      /* Save the coefficient and its dequantized value.  * */
-      qcoeff_ptr[rc] = x;
-      dqcoeff_ptr[rc] = x * dq;
-      /* Remember the last non-zero coefficient. */
-      if (y)
-      {
-        eob = i;
-      }
-    }
-  }
-  d->eob = eob + 1;
-}
-
 void vp8_quantize_mby_8x8(MACROBLOCK *x)
 {
   int i;
@@ -599,32 +286,17 @@ void vp8_regular_quantize_b_pair(BLOCK *b1, BLOCK *b2, BLOCKD *d1, BLOCKD *d2)
     vp8_regular_quantize_b(b2, d2);
 }
 
-void vp8_fast_quantize_b_pair_c(BLOCK *b1, BLOCK *b2, BLOCKD *d1, BLOCKD *d2)
+static void invert_quant(short *quant,
+                         unsigned char *shift, short d)
 {
-    vp8_fast_quantize_b_c(b1, d1);
-    vp8_fast_quantize_b_c(b2, d2);
-}
-
-
-static void invert_quant(int improved_quant, short *quant,
-                               unsigned char *shift, short d)
-{
-    if(improved_quant)
-    {
-        unsigned t;
-        int l;
-        t = d;
-        for(l = 0; t > 1; l++)
-            t>>=1;
-        t = 1 + (1<<(16+l))/d;
-        *quant = (short)(t - (1<<16));
-        *shift = l;
-    }
-    else
-    {
-        *quant = (1 << 16) / d;
-        *shift = 0;
-    }
+    unsigned t;
+    int l;
+    t = d;
+    for(l = 0; t > 1; l++)
+        t>>=1;
+    t = 1 + (1<<(16+l))/d;
+    *quant = (short)(t - (1<<16));
+    *shift = l;
 }
 
 
@@ -644,7 +316,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
         // dc values
         quant_val = vp8_dc_quant(Q, cpi->common.y1dc_delta_q);
         cpi->Y1quant_fast[Q][0] = (1 << 16) / quant_val;
-        invert_quant(cpi->sf.improved_quant, cpi->Y1quant[Q] + 0,
+        invert_quant(cpi->Y1quant[Q] + 0,
                      cpi->Y1quant_shift[Q] + 0, quant_val);
         cpi->Y1zbin[Q][0] = ((qzbin_factor * quant_val) + 64) >> 7;
         cpi->Y1round[Q][0] = (qrounding_factor * quant_val) >> 7;
@@ -653,7 +325,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
 
         quant_val = vp8_dc2quant(Q, cpi->common.y2dc_delta_q);
         cpi->Y2quant_fast[Q][0] = (1 << 16) / quant_val;
-        invert_quant(cpi->sf.improved_quant, cpi->Y2quant[Q] + 0,
+        invert_quant(cpi->Y2quant[Q] + 0,
                      cpi->Y2quant_shift[Q] + 0, quant_val);
         cpi->Y2zbin[Q][0] = ((qzbin_factor * quant_val) + 64) >> 7;
         cpi->Y2round[Q][0] = (qrounding_factor * quant_val) >> 7;
@@ -662,7 +334,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
 
         quant_val = vp8_dc_uv_quant(Q, cpi->common.uvdc_delta_q);
         cpi->UVquant_fast[Q][0] = (1 << 16) / quant_val;
-        invert_quant(cpi->sf.improved_quant, cpi->UVquant[Q] + 0,
+        invert_quant(cpi->UVquant[Q] + 0,
                      cpi->UVquant_shift[Q] + 0, quant_val);
         cpi->UVzbin[Q][0] = ((qzbin_factor * quant_val) + 64) >> 7;;
         cpi->UVround[Q][0] = (qrounding_factor * quant_val) >> 7;
@@ -676,7 +348,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
 
             quant_val = vp8_ac_yquant(Q);
             cpi->Y1quant_fast[Q][rc] = (1 << 16) / quant_val;
-            invert_quant(cpi->sf.improved_quant, cpi->Y1quant[Q] + rc,
+            invert_quant(cpi->Y1quant[Q] + rc,
                          cpi->Y1quant_shift[Q] + rc, quant_val);
             cpi->Y1zbin[Q][rc] = ((qzbin_factor * quant_val) + 64) >> 7;
             cpi->Y1round[Q][rc] = (qrounding_factor * quant_val) >> 7;
@@ -685,7 +357,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
 
             quant_val = vp8_ac2quant(Q, cpi->common.y2ac_delta_q);
             cpi->Y2quant_fast[Q][rc] = (1 << 16) / quant_val;
-            invert_quant(cpi->sf.improved_quant, cpi->Y2quant[Q] + rc,
+            invert_quant(cpi->Y2quant[Q] + rc,
                          cpi->Y2quant_shift[Q] + rc, quant_val);
             cpi->Y2zbin[Q][rc] = ((qzbin_factor * quant_val) + 64) >> 7;
             cpi->Y2round[Q][rc] = (qrounding_factor * quant_val) >> 7;
@@ -694,7 +366,7 @@ void vp8cx_init_quantizer(VP8_COMP *cpi)
 
             quant_val = vp8_ac_uv_quant(Q, cpi->common.uvac_delta_q);
             cpi->UVquant_fast[Q][rc] = (1 << 16) / quant_val;
-            invert_quant(cpi->sf.improved_quant, cpi->UVquant[Q] + rc,
+            invert_quant(cpi->UVquant[Q] + rc,
                          cpi->UVquant_shift[Q] + rc, quant_val);
             cpi->UVzbin[Q][rc] = ((qzbin_factor * quant_val) + 64) >> 7;
             cpi->UVround[Q][rc] = (qrounding_factor * quant_val) >> 7;
diff --git a/vp8/encoder/quantize.h b/vp8/encoder/quantize.h
index 37221839eea2e557396fb941371872abcd33c954..3d11634b58241793e2dc7eebd48f76992cc9c31f 100644
--- a/vp8/encoder/quantize.h
+++ b/vp8/encoder/quantize.h
@@ -41,49 +41,16 @@ extern prototype_quantize_block(vp8_quantize_quantb);
 #endif
 extern prototype_quantize_block_pair(vp8_quantize_quantb_pair);
 
-#ifndef vp8_quantize_fastquantb
-#define vp8_quantize_fastquantb vp8_fast_quantize_b_c
-#endif
-extern prototype_quantize_block(vp8_quantize_fastquantb);
-
 #ifndef vp8_quantize_quantb_8x8
 #define vp8_quantize_quantb_8x8 vp8_regular_quantize_b_8x8
 #endif
 extern prototype_quantize_block(vp8_quantize_quantb_8x8);
 
-#ifndef vp8_quantize_fastquantb_8x8
-#define vp8_quantize_fastquantb_8x8 vp8_fast_quantize_b_8x8_c
-#endif
-extern prototype_quantize_block(vp8_quantize_fastquantb_8x8);
-
 #ifndef vp8_quantize_quantb_2x2
 #define vp8_quantize_quantb_2x2 vp8_regular_quantize_b_2x2
 #endif
 extern prototype_quantize_block(vp8_quantize_quantb_2x2);
 
-#ifndef vp8_quantize_fastquantb_2x2
-#define vp8_quantize_fastquantb_2x2 vp8_fast_quantize_b_2x2_c
-#endif
-extern prototype_quantize_block(vp8_quantize_fastquantb_2x2);
-
-
-#ifndef vp8_quantize_fastquantb_pair
-#define vp8_quantize_fastquantb_pair vp8_fast_quantize_b_pair_c
-#endif
-extern prototype_quantize_block_pair(vp8_quantize_fastquantb_pair);
-
-typedef struct
-{
-    prototype_quantize_block(*quantb);
-    prototype_quantize_block_pair(*quantb_pair);
-    prototype_quantize_block(*fastquantb);
-    prototype_quantize_block(*quantb_8x8);
-    prototype_quantize_block(*fastquantb_8x8);
-    prototype_quantize_block(*quantb_2x2);
-    prototype_quantize_block(*fastquantb_2x2);
-    prototype_quantize_block_pair(*fastquantb_pair);
-} vp8_quantize_rtcd_vtable_t;
-
 #ifndef vp8_quantize_mb
 #define vp8_quantize_mb vp8_quantize_mb_c
 #endif
@@ -99,15 +66,6 @@ extern prototype_quantize_mb(vp8_quantize_mbuv);
 #endif
 extern prototype_quantize_mb(vp8_quantize_mby);
 
-#if CONFIG_RUNTIME_CPU_DETECT
-#define QUANTIZE_INVOKE(ctx,fn) (ctx)->fn
-#else
-#define QUANTIZE_INVOKE(ctx,fn) vp8_quantize_##fn
-#endif
-
-extern void vp8_strict_quantize_b(BLOCK *b,BLOCKD *d);
-extern void vp8_strict_quantize_b_8x8(BLOCK *b,BLOCKD *d);
-extern void vp8_strict_quantize_b_2x2(BLOCK *b,BLOCKD *d);
 extern prototype_quantize_mb(vp8_quantize_mby_8x8);
 extern prototype_quantize_mb(vp8_quantize_mbuv_8x8);
 
diff --git a/vp8/encoder/x86/quantize_x86.h b/vp8/encoder/x86/quantize_x86.h
index bbe475f8cc79065cc19566051bca5e2f67ee6be8..449a6bcac039b9b79a93e6ef41d7d38e0706923c 100644
--- a/vp8/encoder/x86/quantize_x86.h
+++ b/vp8/encoder/x86/quantize_x86.h
@@ -24,34 +24,15 @@
 
 #if HAVE_SSE2
 extern prototype_quantize_block(vp8_regular_quantize_b_sse2);
-extern prototype_quantize_block(vp8_fast_quantize_b_sse2);
-
 #if !CONFIG_RUNTIME_CPU_DETECT
 
 #undef vp8_quantize_quantb
 #define vp8_quantize_quantb vp8_regular_quantize_b_sse2
-
-#undef vp8_quantize_fastquantb
-#define vp8_quantize_fastquantb vp8_fast_quantize_b_sse2
-
 #endif /* !CONFIG_RUNTIME_CPU_DETECT */
 
 #endif /* HAVE_SSE2 */
 
 
-#if HAVE_SSSE3
-extern prototype_quantize_block(vp8_fast_quantize_b_ssse3);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-
-#undef vp8_quantize_fastquantb
-#define vp8_quantize_fastquantb vp8_fast_quantize_b_ssse3
-
-#endif /* !CONFIG_RUNTIME_CPU_DETECT */
-
-#endif /* HAVE_SSSE3 */
-
-
 #if HAVE_SSE4_1
 extern prototype_quantize_block(vp8_regular_quantize_b_sse4);
 
diff --git a/vp8/encoder/x86/x86_csystemdependent.c b/vp8/encoder/x86/x86_csystemdependent.c
index 0c30e370714c8acca881a636cdc5e2cb556b02ca..ae803f8608891772f6078e8815c27b9db5338347 100644
--- a/vp8/encoder/x86/x86_csystemdependent.c
+++ b/vp8/encoder/x86/x86_csystemdependent.c
@@ -22,34 +22,6 @@ void vp8_short_fdct8x4_mmx(short *input, short *output, int pitch)
     vp8_short_fdct4x4_mmx(input + 4, output + 16, pitch);
 }
 
-int vp8_fast_quantize_b_impl_mmx(short *coeff_ptr, short *zbin_ptr,
-                                 short *qcoeff_ptr, short *dequant_ptr,
-                                 short *scan_mask, short *round_ptr,
-                                 short *quant_ptr, short *dqcoeff_ptr);
-void vp8_fast_quantize_b_mmx(BLOCK *b, BLOCKD *d)
-{
-    short *scan_mask   = vp8_default_zig_zag_mask;//d->scan_order_mask_ptr;
-    short *coeff_ptr   = b->coeff;
-    short *zbin_ptr    = b->zbin;
-    short *round_ptr   = b->round;
-    short *quant_ptr   = b->quant_fast;
-    short *qcoeff_ptr  = d->qcoeff;
-    short *dqcoeff_ptr = d->dqcoeff;
-    short *dequant_ptr = d->dequant;
-
-    d->eob = vp8_fast_quantize_b_impl_mmx(
-                 coeff_ptr,
-                 zbin_ptr,
-                 qcoeff_ptr,
-                 dequant_ptr,
-                 scan_mask,
-
-                 round_ptr,
-                 quant_ptr,
-                 dqcoeff_ptr
-             );
-}
-
 int vp8_mbblock_error_mmx_impl(short *coeff_ptr, short *dcoef_ptr, int dc);
 int vp8_mbblock_error_mmx(MACROBLOCK *mb, int dc)
 {
@@ -165,8 +137,6 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
         cpi->rtcd.encodemb.subb                  = vp8_subtract_b_mmx;
         cpi->rtcd.encodemb.submby                = vp8_subtract_mby_mmx;
         cpi->rtcd.encodemb.submbuv               = vp8_subtract_mbuv_mmx;
-
-        /*cpi->rtcd.quantize.fastquantb            = vp8_fast_quantize_b_mmx;*/
     }
 #endif
 
@@ -212,8 +182,6 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
         cpi->rtcd.encodemb.subb                  = vp8_subtract_b_sse2;
         cpi->rtcd.encodemb.submby                = vp8_subtract_mby_sse2;
         cpi->rtcd.encodemb.submbuv               = vp8_subtract_mbuv_sse2;
-
-        cpi->rtcd.quantize.fastquantb            = vp8_fast_quantize_b_sse2;
         cpi->rtcd.temporal.apply                 = vp8_temporal_filter_apply_sse2;
 
 #if CONFIG_INTERNAL_STATS
@@ -254,8 +222,6 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
 
         cpi->rtcd.variance.subpixvar16x8         = vp8_sub_pixel_variance16x8_ssse3;
         cpi->rtcd.variance.subpixvar16x16        = vp8_sub_pixel_variance16x16_ssse3;
-
-        cpi->rtcd.quantize.fastquantb            = vp8_fast_quantize_b_ssse3;
     }
 #endif