diff --git a/common/arm/impeg2_mem_func.s b/common/arm/impeg2_mem_func.s
old mode 100755
new mode 100644
diff --git a/common/impeg2_globals.h b/common/impeg2_globals.h
old mode 100755
new mode 100644
diff --git a/common/impeg2_inter_pred.h b/common/impeg2_inter_pred.h
index be3b0e5..ddd6928 100644
--- a/common/impeg2_inter_pred.h
+++ b/common/impeg2_inter_pred.h
@@ -53,6 +53,9 @@
      */
     WORD32 i4_buf_id;
 
+    /* To store the buffer's picture type */
+    e_pic_type_t e_pic_type;
+
 }pic_buf_t;
 
 typedef void pf_copy_mb_t (yuv_buf_t *src_buf,
diff --git a/common/x86/impeg2_idct_recon_sse42_intr.c b/common/x86/impeg2_idct_recon_sse42_intr.c
old mode 100755
new mode 100644
diff --git a/decoder/arm/impeg2d_function_selector.c b/decoder/arm/impeg2d_function_selector.c
index bc6a688..a344e59 100644
--- a/decoder/arm/impeg2d_function_selector.c
+++ b/decoder/arm/impeg2d_function_selector.c
@@ -65,12 +65,7 @@
 #include "impeg2d_pic_proc.h"
 #include "impeg2d_debug.h"
 #include "impeg2d_mc.h"
-
-void impeg2d_init_function_ptr_generic(void *pv_codec);
-void impeg2d_init_function_ptr_a9q(void *pv_codec);
-#ifdef ARMV8
-void impeg2d_init_function_ptr_av8(void *pv_codec);
-#endif /* ARMV8 */
+#include "impeg2d_function_selector.h"
 
 void impeg2d_init_function_ptr(void *pv_codec)
 {
diff --git a/decoder/impeg2d_api_main.c b/decoder/impeg2d_api_main.c
old mode 100755
new mode 100644
index 451eb93..a96afd5
--- a/decoder/impeg2d_api_main.c
+++ b/decoder/impeg2d_api_main.c
@@ -896,6 +896,20 @@
 
     if(ps_dec_state_multi_core != NULL)
     {
+        if(ps_dec_state->aps_ref_pics[1] != NULL)
+            impeg2_buf_mgr_release(ps_dec_state->pv_pic_buf_mg, ps_dec_state->aps_ref_pics[1]->i4_buf_id, BUF_MGR_REF);
+        if(ps_dec_state->aps_ref_pics[0] != NULL)
+            impeg2_buf_mgr_release(ps_dec_state->pv_pic_buf_mg, ps_dec_state->aps_ref_pics[0]->i4_buf_id, BUF_MGR_REF);
+        while(1)
+        {
+            pic_buf_t *ps_disp_pic = impeg2_disp_mgr_get(&ps_dec_state->s_disp_mgr, &ps_dec_state->i4_disp_buf_id);
+            if(NULL == ps_disp_pic)
+                break;
+            if(0 == ps_dec_state->u4_share_disp_buf)
+                impeg2_buf_mgr_release(ps_dec_state->pv_pic_buf_mg, ps_disp_pic->i4_buf_id, BUF_MGR_DISP);
+
+        }
+
         for(i4_num_threads = 0; i4_num_threads < MAX_THREADS; i4_num_threads++)
         {
 
@@ -908,6 +922,8 @@
             ps_dec_state->u2_header_done    = 0;  /* Header decoding not done */
             ps_dec_state->u4_frm_buf_stride = 0;
             ps_dec_state->u2_is_mpeg2       = 0;
+            ps_dec_state->aps_ref_pics[0] = NULL;
+            ps_dec_state->aps_ref_pics[1] = NULL;
         }
     }
     else
@@ -3138,6 +3154,11 @@
 
             ps_dec_op->s_ivd_video_decode_op_t.u4_progressive_frame_flag           = IV_PROGRESSIVE;
 
+            if (0 == ps_dec_state->u4_frm_buf_stride)
+            {
+                ps_dec_state->u4_frm_buf_stride = ALIGN16(ps_dec_state->u2_horizontal_size);
+            }
+
             ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_wd = ps_dec_state->u2_horizontal_size;
             ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_strd = ps_dec_state->u4_frm_buf_stride;
             ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_ht = ps_dec_state->u2_vertical_size;
@@ -3181,36 +3202,41 @@
                 if (IVD_ERROR_NONE ==
                         ps_dec_op->s_ivd_video_decode_op_t.u4_error_code)
                 {
-                    if(ps_dec_state->ps_disp_pic)
-                    ps_dec_op->s_ivd_video_decode_op_t.u4_output_present = 1;
-                    else
-                    ps_dec_op->s_ivd_video_decode_op_t.u4_output_present = 0;
                     if(ps_dec_state->u1_first_frame_done == 0)
                     {
                         ps_dec_state->u1_first_frame_done = 1;
                     }
 
-                    switch(ps_dec_state->e_pic_type)
+                    if(ps_dec_state->ps_disp_pic)
                     {
-                        case I_PIC :
-                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_I_FRAME;
-                        break;
+                        ps_dec_op->s_ivd_video_decode_op_t.u4_output_present = 1;
+                        switch(ps_dec_state->ps_disp_pic->e_pic_type)
+                        {
+                            case I_PIC :
+                            ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_I_FRAME;
+                            break;
 
-                        case P_PIC:
-                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_P_FRAME;
-                        break;
+                            case P_PIC:
+                            ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_P_FRAME;
+                            break;
 
-                        case B_PIC:
-                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_B_FRAME;
-                        break;
+                            case B_PIC:
+                            ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_B_FRAME;
+                            break;
 
-                        case D_PIC:
-                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_I_FRAME;
-                        break;
+                            case D_PIC:
+                            ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_I_FRAME;
+                            break;
 
-                        default :
-                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_FRAMETYPE_DEFAULT;
-                        break;
+                            default :
+                            ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_FRAMETYPE_DEFAULT;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        ps_dec_op->s_ivd_video_decode_op_t.u4_output_present = 0;
+                        ps_dec_op->s_ivd_video_decode_op_t.e_pic_type = IV_NA_FRAME;
                     }
 
                     ps_dec_state->u4_num_frames_decoded++;
diff --git a/decoder/impeg2d_d_pic.c b/decoder/impeg2d_d_pic.c
index a90e16d..6fcf1f4 100644
--- a/decoder/impeg2d_d_pic.c
+++ b/decoder/impeg2d_d_pic.c
@@ -236,7 +236,7 @@
         {
             return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
         }
-        else if ((ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb) && ((ps_dec->s_bit_stream.u4_offset + START_CODE_PREFIX_LEN) < ps_dec->s_bit_stream.u4_max_offset))
+        else if (ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb)
         {
             ps_dec->u2_mb_x = 0;
             ps_dec->u2_mb_y++;
diff --git a/decoder/impeg2d_dec_hdr.c b/decoder/impeg2d_dec_hdr.c
index 15e61fb..061bf04 100644
--- a/decoder/impeg2d_dec_hdr.c
+++ b/decoder/impeg2d_dec_hdr.c
@@ -1129,12 +1129,12 @@
     while(1)
     {
         WORD32 i4_is_slice;
-        u4_bits = impeg2d_bit_stream_nxt(&s_bitstrm,START_CODE_LEN);
-        if(s_bitstrm.u4_offset >= s_bitstrm.u4_max_offset)
+
+        if(s_bitstrm.u4_offset + START_CODE_LEN >= s_bitstrm.u4_max_offset)
         {
             break;
         }
-
+        u4_bits = impeg2d_bit_stream_nxt(&s_bitstrm,START_CODE_LEN);
 
         i4_row = u4_bits & 0xFF;
 
diff --git a/decoder/impeg2d_decoder.c b/decoder/impeg2d_decoder.c
old mode 100755
new mode 100644
index ae58675..7bc3253
--- a/decoder/impeg2d_decoder.c
+++ b/decoder/impeg2d_decoder.c
@@ -143,7 +143,6 @@
         ps_op->s_ivd_video_decode_op_t.u4_frame_decoded_flag = 0;
         /* MOD */
         ps_dec->u2_header_done = 1;
-        ps_dec->u2_decode_header = 0;
 
     }
 }
diff --git a/decoder/impeg2d_function_selector.h b/decoder/impeg2d_function_selector.h
new file mode 100644
index 0000000..19915b3
--- /dev/null
+++ b/decoder/impeg2d_function_selector.h
@@ -0,0 +1,75 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *****************************************************************************
+ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
+*/
+
+/**
+ *******************************************************************************
+ * @file
+ *  impeg2d_function_selector.h
+ *
+ * @brief
+ *  Structure definitions used in the decoder
+ *
+ * @author
+ *  Harish
+ *
+ * @par List of Functions:
+ *
+ * @remarks
+ *  None
+ *
+ *******************************************************************************
+ */
+
+#ifndef _IMPEG2D_FUNCTION_SELECTOR_H_
+#define _IMPEG2D_FUNCTION_SELECTOR_H_
+
+#define D_ARCH_NA                   1
+#define D_ARCH_ARM_NONEON           2
+#define D_ARCH_ARM_A9Q              3
+#define D_ARCH_ARM_A9A              4
+#define D_ARCH_ARM_A9               5
+#define D_ARCH_ARM_A7               6
+#define D_ARCH_ARM_A5               7
+#define D_ARCH_ARM_A15              8
+#define D_ARCH_ARM_NEONINTR         9
+#define D_ARCH_ARMV8_GENERIC        10
+#define D_ARCH_X86_GENERIC          11
+#define D_ARCH_X86_SSSE3            12
+#define D_ARCH_X86_SSE42            13
+#define D_ARCH_X86_AVX2             14
+#define D_ARCH_MIPS_GENERIC         15
+#define D_ARCH_MIPS_32              16
+
+void impeg2d_init_arch(void *ps_codec);
+
+void impeg2d_init_function_ptr(void *ps_codec);
+
+void impeg2d_init_function_ptr_generic(void *ps_codec);
+void impeg2d_init_function_ptr_ssse3(void *ps_codec);
+void impeg2d_init_function_ptr_sse42(void *ps_codec);
+
+#ifndef DISABLE_AVX2
+void impeg2d_init_function_ptr_avx2(void *ps_codec);
+#endif
+
+void impeg2d_init_function_ptr_a9q(void *ps_codec);
+void impeg2d_init_function_ptr_av8(void *ps_codec);
+
+#endif /* _IMPEG2D_FUNCTION_SELECTOR_H_ */
diff --git a/decoder/impeg2d_i_pic.c b/decoder/impeg2d_i_pic.c
index 1b45350..2e20983 100644
--- a/decoder/impeg2d_i_pic.c
+++ b/decoder/impeg2d_i_pic.c
@@ -316,7 +316,7 @@
         {
             return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
         }
-        else if ((ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb) && ((ps_dec->s_bit_stream.u4_offset + START_CODE_PREFIX_LEN) < ps_dec->s_bit_stream.u4_max_offset))
+        else if (ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb)
         {
             ps_dec->u2_mb_x = 0;
             ps_dec->u2_mb_y++;
diff --git a/decoder/impeg2d_mc.c b/decoder/impeg2d_mc.c
index da13a8c..79c5ef6 100644
--- a/decoder/impeg2d_mc.c
+++ b/decoder/impeg2d_mc.c
@@ -591,7 +591,7 @@
         ps_dec->u2_mb_x++;
         ps_dec->u2_num_mbs_left--;
 
-        if ((ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb) && ((ps_dec->s_bit_stream.u4_offset + START_CODE_PREFIX_LEN) < ps_dec->s_bit_stream.u4_max_offset))
+        if (ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb)
         {
             ps_dec->u2_mb_x = 0;
             ps_dec->u2_mb_y++;
@@ -704,7 +704,7 @@
         ps_dec->u2_mb_x++;
         ps_dec->u2_num_mbs_left--;
 
-        if ((ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb) && ((ps_dec->s_bit_stream.u4_offset + START_CODE_PREFIX_LEN) < ps_dec->s_bit_stream.u4_max_offset))
+        if (ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb)
         {
             ps_dec->u2_mb_x = 0;
             ps_dec->u2_mb_y++;
diff --git a/decoder/impeg2d_pic_proc.c b/decoder/impeg2d_pic_proc.c
old mode 100755
new mode 100644
index 3dececb..e79e87a
--- a/decoder/impeg2d_pic_proc.c
+++ b/decoder/impeg2d_pic_proc.c
@@ -367,6 +367,7 @@
             impeg2_buf_mgr_set_status((buf_mgr_t *)ps_dec->pv_pic_buf_mg, ps_dec->i4_cur_buf_id, BUF_MGR_REF);
 
             ps_pic_buf->u4_ts = ps_dec->u4_inp_ts;
+            ps_pic_buf->e_pic_type = ps_dec->e_pic_type;
             ps_dec->ps_cur_pic = ps_pic_buf;
             ps_dec->s_cur_frm_buf.pu1_y = ps_pic_buf->pu1_y;
             ps_dec->s_cur_frm_buf.pu1_u = ps_pic_buf->pu1_u;
@@ -407,6 +408,7 @@
         impeg2_buf_mgr_set_status((buf_mgr_t *)ps_dec->pv_pic_buf_mg, ps_dec->i4_cur_buf_id, BUF_MGR_REF);
 
         ps_pic_buf->u4_ts = ps_dec->u4_inp_ts;
+        ps_pic_buf->e_pic_type = ps_dec->e_pic_type;
         ps_dec->ps_cur_pic = ps_pic_buf;
         ps_dec->s_cur_frm_buf.pu1_y = ps_pic_buf->pu1_y;
         ps_dec->s_cur_frm_buf.pu1_u = ps_pic_buf->pu1_u;
diff --git a/decoder/impeg2d_pnb_pic.c b/decoder/impeg2d_pnb_pic.c
index 036c7d1..0960c24 100644
--- a/decoder/impeg2d_pnb_pic.c
+++ b/decoder/impeg2d_pnb_pic.c
@@ -686,7 +686,7 @@
         {
             return IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR;
         }
-        else if ((ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb) && ((ps_dec->s_bit_stream.u4_offset + START_CODE_PREFIX_LEN) < ps_dec->s_bit_stream.u4_max_offset))
+        else if (ps_dec->u2_mb_x == ps_dec->u2_num_horiz_mb)
         {
             ps_dec->u2_mb_x = 0;
             ps_dec->u2_mb_y++;
diff --git a/decoder/impeg2d_structs.h b/decoder/impeg2d_structs.h
old mode 100755
new mode 100644
diff --git a/decoder/mips/impeg2d_function_selector.c b/decoder/mips/impeg2d_function_selector.c
index a72c1f9..3b2677a 100644
--- a/decoder/mips/impeg2d_function_selector.c
+++ b/decoder/mips/impeg2d_function_selector.c
@@ -65,8 +65,7 @@
 #include "impeg2d_pic_proc.h"
 #include "impeg2d_debug.h"
 #include "impeg2d_mc.h"
-
-void impeg2d_init_function_ptr_generic(void *pv_codec);
+#include "impeg2d_function_selector.h"
 
 void impeg2d_init_function_ptr(void *pv_codec)
 {
diff --git a/decoder/x86/impeg2d_function_selector.c b/decoder/x86/impeg2d_function_selector.c
old mode 100755
new mode 100644
index ddadb02..9596aef
--- a/decoder/x86/impeg2d_function_selector.c
+++ b/decoder/x86/impeg2d_function_selector.c
@@ -62,11 +62,7 @@
 #include "impeg2d_bitstream.h"
 #include "impeg2d_debug.h"
 #include "impeg2d_structs.h"
-
-void impeg2d_init_function_ptr_generic(void *pv_codec);
-void impeg2d_init_function_ptr_ssse3(void *pv_codec);
-void impeg2d_init_function_ptr_sse42(void *pv_codec);
-void impeg2d_init_function_ptr_avx2(void *pv_codec);
+#include "impeg2d_function_selector.h"
 
 void impeg2d_init_function_ptr(void *pv_codec)
 {
