diff --git a/videoencoder/VideoEncoderBase.cpp b/videoencoder/VideoEncoderBase.cpp
index aa556e3..813fc98 100644
--- a/videoencoder/VideoEncoderBase.cpp
+++ b/videoencoder/VideoEncoderBase.cpp
@@ -29,6 +29,7 @@
     ,mRenderBitRate(false)
     ,mRenderHrd(false)
     ,mRenderMultiTemporal(false)
+    ,mForceKFrame(false)
     ,mSeqParamBuf(0)
     ,mPicParamBuf(0)
     ,mSliceParamBuf(0)
@@ -1019,18 +1020,18 @@
             break;
         }
 
-        case VideoParamsTypeTemporalLayerNumber:{
-            VideoParamsTemporalLayerNumber *numberoflayer =
-                    reinterpret_cast <VideoParamsTemporalLayerNumber *> (videoEncParams);
+        case VideoParamsTypeTemporalLayer:{
+            VideoParamsTemporalLayer *temporallayer =
+                    reinterpret_cast <VideoParamsTemporalLayer *> (videoEncParams);
 
-            if (numberoflayer->size != sizeof(VideoParamsTemporalLayerNumber)) {
+            if (temporallayer->size != sizeof(VideoParamsTemporalLayer)) {
                  return ENCODE_INVALID_PARAMS;
             }
 
-            mComParams.numberOfLayer = numberoflayer->numberOfLayer;
-            mComParams.nPeriodicity = numberoflayer->nPeriodicity;
-            for(int i=0;i<numberoflayer->nPeriodicity;i++)
-                mComParams.nLayerID[i] = numberoflayer->nLayerID[i];
+            mComParams.numberOfLayer = temporallayer->numberOfLayer;
+            mComParams.nPeriodicity = temporallayer->nPeriodicity;
+            for(int i=0;i<temporallayer->nPeriodicity;i++)
+                mComParams.nLayerID[i] = temporallayer->nLayerID[i];
             mRenderMultiTemporal = true;
             break;
         }
@@ -1146,15 +1147,15 @@
             }
         }
 
-        case VideoParamsTypeTemporalLayerNumber:{
-            VideoParamsTemporalLayerNumber *numberoflayer =
-                reinterpret_cast <VideoParamsTemporalLayerNumber *> (videoEncParams);
+        case VideoParamsTypeTemporalLayer:{
+            VideoParamsTemporalLayer *temporallayer =
+                reinterpret_cast <VideoParamsTemporalLayer *> (videoEncParams);
 
-            if(numberoflayer->size != sizeof(VideoParamsTemporalLayerNumber)) {
+            if(temporallayer->size != sizeof(VideoParamsTemporalLayer)) {
                 return ENCODE_INVALID_PARAMS;
             }
 
-            numberoflayer->numberOfLayer = mComParams.numberOfLayer;
+            temporallayer->numberOfLayer = mComParams.numberOfLayer;
 
             break;
         }
diff --git a/videoencoder/VideoEncoderBase.h b/videoencoder/VideoEncoderBase.h
index 80532b9..7b1fb18 100644
--- a/videoencoder/VideoEncoderBase.h
+++ b/videoencoder/VideoEncoderBase.h
@@ -122,6 +122,7 @@
     bool mRenderHrd;
     bool mRenderMaxFrameSize;
     bool mRenderMultiTemporal;
+    bool mForceKFrame;
 
     VABufferID mSeqParamBuf;
     VABufferID mRcParamBuf;
diff --git a/videoencoder/VideoEncoderDef.h b/videoencoder/VideoEncoderDef.h
index c57be9f..d1bf81e 100644
--- a/videoencoder/VideoEncoderDef.h
+++ b/videoencoder/VideoEncoderDef.h
@@ -320,7 +320,7 @@
     VideoParamsTypeStoreMetaDataInBuffers,
     VideoParamsTypeProfileLevel,
     VideoParamsTypeVP8,
-    VideoParamsTypeTemporalLayerNumber,
+    VideoParamsTypeTemporalLayer,
 
     VideoConfigTypeFrameRate,
     VideoConfigTypeBitRate,
@@ -531,11 +531,11 @@
     bool isSupported;
 };
 
-struct VideoParamsTemporalLayerNumber : VideoParamConfigSet {
+struct VideoParamsTemporalLayer : VideoParamConfigSet {
 
-    VideoParamsTemporalLayerNumber() {
-        type = VideoParamsTypeTemporalLayerNumber;
-        size = sizeof(VideoParamsTemporalLayerNumber);
+    VideoParamsTemporalLayer() {
+        type = VideoParamsTypeTemporalLayer;
+        size = sizeof(VideoParamsTemporalLayer);
     }
 
     uint32_t numberOfLayer;
diff --git a/videoencoder/VideoEncoderVP8.cpp b/videoencoder/VideoEncoderVP8.cpp
index 936fc6b..486c5ba 100644
--- a/videoencoder/VideoEncoderVP8.cpp
+++ b/videoencoder/VideoEncoderVP8.cpp
@@ -50,6 +50,23 @@
 VideoEncoderVP8::~VideoEncoderVP8() {
 }
 
+Encode_Status VideoEncoderVP8::start() {
+
+    Encode_Status ret = ENCODE_SUCCESS;
+    LOG_V( "Begin\n");
+
+    ret = VideoEncoderBase::start ();
+    CHECK_ENCODE_STATUS_RETURN("VideoEncoderBase::start");
+
+    if (mComParams.rcMode == VA_RC_VCM) {
+        mRenderBitRate = false;
+    }
+
+    LOG_V( "end\n");
+    return ret;
+}
+
+
 Encode_Status VideoEncoderVP8::renderSequenceParams() {
     Encode_Status ret = ENCODE_SUCCESS;
     VAStatus vaStatus = VA_STATUS_SUCCESS;
@@ -344,6 +361,11 @@
     ret = renderPictureParams(task);
     CHECK_ENCODE_STATUS_RETURN("renderPictureParams");
 
+    if(mForceKFrame) {
+        mVideoConfigVP8.force_kf = 0;//rest it as default value
+        mForceKFrame = false;
+    }
+
     LOG_V( "End\n");
     return ret;
 }
@@ -475,6 +497,15 @@
 		}
                 break;
 
+                case VideoConfigTypeIDRRequest:{
+                        VideoParamConfigSet *encConfigVP8KFrameRequest =
+                                reinterpret_cast<VideoParamConfigSet*> (videoEncConfig);
+
+                        mVideoConfigVP8.force_kf = 1;
+                        mForceKFrame = true;
+                 }
+                 break;
+
                 default: {
             LOG_E ("Invalid Config Type");
             break;
diff --git a/videoencoder/VideoEncoderVP8.h b/videoencoder/VideoEncoderVP8.h
index c8335be..9456625 100644
--- a/videoencoder/VideoEncoderVP8.h
+++ b/videoencoder/VideoEncoderVP8.h
@@ -18,6 +18,7 @@
 public:
     VideoEncoderVP8();
     virtual ~VideoEncoderVP8();
+    virtual Encode_Status start();
 
 
 
