diff --git a/vp8/vp8_cx_iface.c b/vp8/vp8_cx_iface.c
index 683194a1d633b4da2d4d01dd168823c557a24f7c..d67d9014583c178ea9f7bf075c757df9ca6c8915 100644
--- a/vp8/vp8_cx_iface.c
+++ b/vp8/vp8_cx_iface.c
@@ -757,6 +757,9 @@ static vpx_codec_err_t vp8e_encode(vpx_codec_alg_priv_t  *ctx,
 {
     vpx_codec_err_t res = VPX_CODEC_OK;
 
+    if (!ctx->cfg.rc_target_bitrate)
+        return res;
+
     if (img)
         res = validate_img(ctx, img);
 
diff --git a/vp8_multi_resolution_encoder.c b/vp8_multi_resolution_encoder.c
index 633c039ec59454cbcc12221672fd2cac60a179a1..78f50c2946e4c15a316f234ae4361908bb4cb702 100644
--- a/vp8_multi_resolution_encoder.c
+++ b/vp8_multi_resolution_encoder.c
@@ -224,9 +224,6 @@ int main(int argc, char **argv)
        dsf[1] controls down sampling from level 1 to level 2;
        dsf[2] is not used. */
     vpx_rational_t dsf[NUM_ENCODERS] = {{2, 1}, {2, 1}, {1, 1}};
-    /* Encode starting from which resolution level. Normally it is 0 that
-     * means the original(highest) resolution. */
-    int                  s_lvl = 0;
 
     if(argc!= (5+NUM_ENCODERS))
         die("Usage: %s <width> <height> <infile> <outfile(s)> <output psnr?>\n",
@@ -240,21 +237,6 @@ int main(int argc, char **argv)
     if(width < 16 || width%2 || height <16 || height%2)
         die("Invalid resolution: %ldx%ld", width, height);
 
-    /* Check to see if we need to encode all resolution levels */
-    for (i=0; i<NUM_ENCODERS; i++)
-    {
-        if (target_bitrate[i])
-            break;
-        else
-            s_lvl += 1;
-    }
-
-    if (s_lvl >= NUM_ENCODERS)
-    {
-        printf("No encoding: total number of encoders is 0!");
-        return 0;
-    }
-
     /* Open input video file for encoding */
     if(!(infile = fopen(argv[3], "rb")))
         die("Failed to open %s for reading", argv[3]);
@@ -262,6 +244,12 @@ int main(int argc, char **argv)
     /* Open output file for each encoder to output bitstreams */
     for (i=0; i< NUM_ENCODERS; i++)
     {
+        if(!target_bitrate[i])
+        {
+            outfile[i] = NULL;
+            continue;
+        }
+
         if(!(outfile[i] = fopen(argv[i+4], "wb")))
             die("Failed to open %s for writing", argv[i+4]);
     }
@@ -342,15 +330,18 @@ int main(int argc, char **argv)
     else
         read_frame_p = read_frame_by_row;
 
+    for (i=0; i< NUM_ENCODERS; i++)
+        if(outfile[i])
+            write_ivf_file_header(outfile[i], &cfg[i], 0);
+
     /* Initialize multi-encoder */
-    if(vpx_codec_enc_init_multi(&codec[s_lvl], interface, &cfg[s_lvl], s_lvl,
-                             NUM_ENCODERS,
-                             (show_psnr ? VPX_CODEC_USE_PSNR : 0), &dsf[s_lvl]))
-        die_codec(&codec[s_lvl], "Failed to initialize encoder");
+    if(vpx_codec_enc_init_multi(&codec[0], interface, &cfg[0], NUM_ENCODERS,
+                                (show_psnr ? VPX_CODEC_USE_PSNR : 0), &dsf[0]))
+        die_codec(&codec[0], "Failed to initialize encoder");
 
     /* The extra encoding configuration parameters can be set as follows. */
     /* Set encoding speed */
-    for ( i=s_lvl; i<NUM_ENCODERS; i++)
+    for ( i=0; i<NUM_ENCODERS; i++)
     {
         int speed = -6;
         if(vpx_codec_control(&codec[i], VP8E_SET_CPUUSED, speed))
@@ -360,25 +351,20 @@ int main(int argc, char **argv)
      * better performance. */
     {
         unsigned int static_thresh = 1000;
-        if(vpx_codec_control(&codec[s_lvl], VP8E_SET_STATIC_THRESHOLD,
-                             static_thresh))
-            die_codec(&codec[s_lvl], "Failed to set static threshold");
+        if(vpx_codec_control(&codec[0], VP8E_SET_STATIC_THRESHOLD, static_thresh))
+            die_codec(&codec[0], "Failed to set static threshold");
     }
     /* Set static thresh = 0 for other encoders for better quality */
-    for ( i=s_lvl+1; i<NUM_ENCODERS; i++)
+    for ( i=1; i<NUM_ENCODERS; i++)
     {
         unsigned int static_thresh = 0;
-        if(vpx_codec_control(&codec[i], VP8E_SET_STATIC_THRESHOLD,
-                             static_thresh))
+        if(vpx_codec_control(&codec[i], VP8E_SET_STATIC_THRESHOLD, static_thresh))
             die_codec(&codec[i], "Failed to set static threshold");
     }
 
     frame_avail = 1;
     got_data = 0;
 
-    for (i=s_lvl ; i< NUM_ENCODERS; i++)
-        write_ivf_file_header(outfile[i], &cfg[i], 0);
-
     while(frame_avail || got_data)
     {
         vpx_codec_iter_t iter[NUM_ENCODERS]={NULL};
@@ -405,11 +391,11 @@ int main(int argc, char **argv)
         }
 
         /* Encode each frame at multi-levels */
-        if(vpx_codec_encode(&codec[s_lvl], frame_avail? &raw[s_lvl] : NULL,
+        if(vpx_codec_encode(&codec[0], frame_avail? &raw[0] : NULL,
             frame_cnt, 1, flags, arg_deadline))
-            die_codec(&codec[s_lvl], "Failed to encode frame");
+            die_codec(&codec[0], "Failed to encode frame");
 
-        for (i=NUM_ENCODERS-1; i>=s_lvl ; i--)
+        for (i=NUM_ENCODERS-1; i>=0 ; i--)
         {
             got_data = 0;
 
@@ -452,10 +438,9 @@ int main(int argc, char **argv)
 
     fclose(infile);
 
-    for (i=s_lvl; i< NUM_ENCODERS; i++)
+    printf("Processed %ld frames.\n",(long int)frame_cnt-1);
+    for (i=0; i< NUM_ENCODERS; i++)
     {
-        printf("Processed %ld frames.\n",(long int)frame_cnt-1);
-
         /* Calculate PSNR and print it out */
         if ( (show_psnr) && (psnr_count[i]>0) )
         {
@@ -475,16 +460,17 @@ int main(int argc, char **argv)
         if(vpx_codec_destroy(&codec[i]))
             die_codec(&codec[i], "Failed to destroy codec");
 
+        vpx_img_free(&raw[i]);
+
+        if(!outfile[i])
+            continue;
+
         /* Try to rewrite the file header with the actual frame count */
         if(!fseek(outfile[i], 0, SEEK_SET))
             write_ivf_file_header(outfile[i], &cfg[i], frame_cnt-1);
-    }
-
-    for (i=0; i< NUM_ENCODERS; i++)
-    {
         fclose(outfile[i]);
-        vpx_img_free(&raw[i]);
     }
+    printf("\n");
 
     return EXIT_SUCCESS;
 }
diff --git a/vpx/src/vpx_encoder.c b/vpx/src/vpx_encoder.c
index 886cbb5fb01234967d87cd4aa5872ee6c194f0ad..03ddc62b289e65c908c3ac83ac89a7f98c6aec37 100644
--- a/vpx/src/vpx_encoder.c
+++ b/vpx/src/vpx_encoder.c
@@ -69,7 +69,6 @@ vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t      *ctx,
 vpx_codec_err_t vpx_codec_enc_init_multi_ver(vpx_codec_ctx_t      *ctx,
                                              vpx_codec_iface_t    *iface,
                                              vpx_codec_enc_cfg_t  *cfg,
-                                             int                   s_lvl,
                                              int                   num_enc,
                                              vpx_codec_flags_t     flags,
                                              vpx_rational_t       *dsf,
@@ -100,7 +99,7 @@ vpx_codec_err_t vpx_codec_enc_init_multi_ver(vpx_codec_ctx_t      *ctx,
 
         if(!(res = iface->enc.mr_get_mem_loc(cfg, &mem_loc)))
         {
-            for (i = s_lvl; i < num_enc; i++)
+            for (i = 0; i < num_enc; i++)
             {
                 vpx_codec_priv_enc_mr_cfg_t mr_cfg;
 
@@ -113,7 +112,7 @@ vpx_codec_err_t vpx_codec_enc_init_multi_ver(vpx_codec_ctx_t      *ctx,
                 }
 
                 mr_cfg.mr_low_res_mode_info = mem_loc;
-                mr_cfg.mr_total_resolutions = num_enc - s_lvl;
+                mr_cfg.mr_total_resolutions = num_enc;
                 mr_cfg.mr_encoder_id = num_enc-1-i;
                 mr_cfg.mr_down_sampling_factor.num = dsf->num;
                 mr_cfg.mr_down_sampling_factor.den = dsf->den;
diff --git a/vpx/vpx_encoder.h b/vpx/vpx_encoder.h
index c5429c9bc837ee65a6f8118e01fd96afcf9d7f41..885ca229f96d9472f6a3e8a43a6bab064fc582dd 100644
--- a/vpx/vpx_encoder.h
+++ b/vpx/vpx_encoder.h
@@ -688,7 +688,6 @@ extern "C" {
      * \param[in]    ctx     Pointer to this instance's context.
      * \param[in]    iface   Pointer to the algorithm interface to use.
      * \param[in]    cfg     Configuration to use, if known. May be NULL.
-     * \param[in]    s_lvl   Starting encoder id. Normally it is 0.
      * \param[in]    num_enc Total number of encoders.
      * \param[in]    flags   Bitfield of VPX_CODEC_USE_* flags
      * \param[in]    dsf     Pointer to down-sampling factors.
@@ -702,7 +701,6 @@ extern "C" {
     vpx_codec_err_t vpx_codec_enc_init_multi_ver(vpx_codec_ctx_t      *ctx,
                                                  vpx_codec_iface_t    *iface,
                                                  vpx_codec_enc_cfg_t  *cfg,
-                                                 int                   s_lvl,
                                                  int                   num_enc,
                                                  vpx_codec_flags_t     flags,
                                                  vpx_rational_t       *dsf,
@@ -713,8 +711,8 @@ extern "C" {
      *
      * Ensures the ABI version parameter is properly set.
      */
-#define vpx_codec_enc_init_multi(ctx, iface, cfg, s_lvl, num_enc, flags, dsf) \
-    vpx_codec_enc_init_multi_ver(ctx, iface, cfg, s_lvl, num_enc, flags, dsf, \
+#define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \
+    vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \
                                  VPX_ENCODER_ABI_VERSION)