diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h
index 2d5df4a1cfaaf58ea42e747538eed3a836e75650..ad78b0dc4cfdc7f597c6d28bc3b91cd0a7b0b2c9 100644
--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -122,7 +122,6 @@ typedef struct {
   TX_SIZE tx_size;
   int_mv mv[2];                // for each reference frame used
   int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
-  int_mv best_mv[2];
 
   uint8_t mode_context[MAX_REF_FRAMES];
 
diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c
index ec4dc14f43332b37b1870097fa3f6979c5ff8962..2ab4c7907aa1cb52a634e622f75e9b3c535d31f9 100644
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -260,6 +260,7 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
   struct segmentation *seg = &cm->seg;
   MB_MODE_INFO *const mi = &m->mbmi;
   const MV_REFERENCE_FRAME rf = mi->ref_frame[0];
+  const MV_REFERENCE_FRAME sec_rf = mi->ref_frame[1];
   const MB_PREDICTION_MODE mode = mi->mode;
   const int segment_id = mi->segment_id;
   int skip_coeff;
@@ -355,11 +356,11 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
             active_section = 11;
 #endif
             vp9_encode_mv(cpi, bc, &m->bmi[j].as_mv[0].as_mv,
-                          &mi->best_mv[0].as_mv, nmvc, allow_hp);
+                          &mi->ref_mvs[rf][0].as_mv, nmvc, allow_hp);
 
             if (has_second_ref(mi))
               vp9_encode_mv(cpi, bc, &m->bmi[j].as_mv[1].as_mv,
-                            &mi->best_mv[1].as_mv, nmvc, allow_hp);
+                            &mi->ref_mvs[sec_rf][0].as_mv, nmvc, allow_hp);
           }
         }
       }
@@ -368,11 +369,11 @@ static void pack_inter_mode_mvs(VP9_COMP *cpi, MODE_INFO *m, vp9_writer *bc) {
       active_section = 5;
 #endif
       vp9_encode_mv(cpi, bc, &mi->mv[0].as_mv,
-                    &mi->best_mv[0].as_mv, nmvc, allow_hp);
+                    &mi->ref_mvs[rf][0].as_mv, nmvc, allow_hp);
 
       if (has_second_ref(mi))
         vp9_encode_mv(cpi, bc, &mi->mv[1].as_mv,
-                      &mi->best_mv[1].as_mv, nmvc, allow_hp);
+                      &mi->ref_mvs[sec_rf][0].as_mv, nmvc, allow_hp);
     }
   }
 }
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index a66b9fb8e3cc1def8df7a26d2fb8dd5f05659eaf..9966cb6ae751bfe9e549eb4073a35ccf1571e93c 100644
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -500,17 +500,8 @@ static void update_state(VP9_COMP *cpi, PICK_MODE_CONTEXT *ctx,
     if (is_inter_block(mbmi) &&
         (mbmi->sb_type < BLOCK_8X8 || mbmi->mode == NEWMV)) {
       int_mv best_mv[2];
-      const MV_REFERENCE_FRAME rf1 = mbmi->ref_frame[0];
-      const MV_REFERENCE_FRAME rf2 = mbmi->ref_frame[1];
-      best_mv[0].as_int = ctx->best_ref_mv[0].as_int;
-      best_mv[1].as_int = ctx->best_ref_mv[1].as_int;
-      if (mbmi->mode == NEWMV) {
-        best_mv[0].as_int = mbmi->ref_mvs[rf1][0].as_int;
-        if (rf2 > 0)
-          best_mv[1].as_int = mbmi->ref_mvs[rf2][0].as_int;
-      }
-      mbmi->best_mv[0].as_int = best_mv[0].as_int;
-      mbmi->best_mv[1].as_int = best_mv[1].as_int;
+      for (i = 0; i < 2; ++i)
+        best_mv[i].as_int = mbmi->ref_mvs[mbmi->ref_frame[i]][0].as_int;
       vp9_update_mv_count(cpi, x, best_mv);
     }