diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index b6e90e9284cbbb11d4da1a174a1be5922882618b..87dd5fb984cbe2e5638dd82aa2515e28d1cb23e3 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -3834,6 +3834,7 @@ static void encode_picture(MpegEncContext *s, int picture_number)
                     if(best_s.mv_type==MV_TYPE_16X16 && !(best_s.mv_dir&MV_DIRECT)){
                         const int last_qp= backup_s.qscale;
                         int dquant, dir, qp, dc[6];
+                        DCTELEM ac[6][16];
                         
                         assert(backup_s.dquant == 0);
 
@@ -3853,15 +3854,21 @@ static void encode_picture(MpegEncContext *s, int picture_number)
                             if(qp < s->avctx->qmin || qp > s->avctx->qmax)
                                 break;
                             backup_s.dquant= dquant;
-                            for(i=0; i<6; i++){
-                                dc[i]= s->dc_val[0][ s->block_index[i] ]; //FIXME AC
+                            if(s->mb_intra){
+                                for(i=0; i<6; i++){
+                                    dc[i]= s->dc_val[0][ s->block_index[i] ];
+                                    memcpy(ac[i], s->ac_val[0][s->block_index[i]], sizeof(DCTELEM)*16);
+                                }
                             }
-//printf("%d %d\n", backup_s.dquant, backup_s.qscale);
+
                             encode_mb_hq(s, &backup_s, &best_s, MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb, 
                                          &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]);
                             if(best_s.qscale != qp){
-                                for(i=0; i<6; i++){
-                                    s->dc_val[0][ s->block_index[i] ]= dc[i];
+                                if(s->mb_intra){
+                                    for(i=0; i<6; i++){
+                                        s->dc_val[0][ s->block_index[i] ]= dc[i];
+                                        memcpy(s->ac_val[0][s->block_index[i]], ac[i], sizeof(DCTELEM)*16);
+                                    }
                                 }
                                 if(dir > 0 && dquant==dir){
                                     dquant= 0;