diff --git a/drm/common/IDrmManagerService.cpp b/drm/common/IDrmManagerService.cpp
index a6d33b0..e234547 100644
--- a/drm/common/IDrmManagerService.cpp
+++ b/drm/common/IDrmManagerService.cpp
@@ -33,7 +33,6 @@
 
 #include "IDrmManagerService.h"
 
-#define INVALID_BUFFER_LENGTH (-1)
 #define MAX_BINDER_TRANSACTION_SIZE ((1*1024*1024)-(4096*2))
 
 using namespace android;
@@ -44,26 +43,6 @@
     data->writeString8(handle->mimeType);
     data->writeInt32(handle->decryptApiType);
     data->writeInt32(handle->status);
-
-    int size = handle->copyControlVector.size();
-    data->writeInt32(size);
-    for (int i = 0; i < size; i++) {
-        data->writeInt32(handle->copyControlVector.keyAt(i));
-        data->writeInt32(handle->copyControlVector.valueAt(i));
-    }
-
-    size = handle->extendedData.size();
-    data->writeInt32(size);
-    for (int i = 0; i < size; i++) {
-        data->writeString8(handle->extendedData.keyAt(i));
-        data->writeString8(handle->extendedData.valueAt(i));
-    }
-
-    if (NULL != handle->decryptInfo) {
-        data->writeInt32(handle->decryptInfo->decryptBufferLength);
-    } else {
-        data->writeInt32(INVALID_BUFFER_LENGTH);
-    }
 }
 
 static void readDecryptHandleFromParcelData(
@@ -76,39 +55,12 @@
     handle->mimeType = data.readString8();
     handle->decryptApiType = data.readInt32();
     handle->status = data.readInt32();
-
-    int size = data.readInt32();
-    for (int i = 0; i < size; i++) {
-        DrmCopyControl key = (DrmCopyControl)data.readInt32();
-        int value = data.readInt32();
-        handle->copyControlVector.add(key, value);
-    }
-
-    size = data.readInt32();
-    for (int i = 0; i < size; i++) {
-        String8 key = data.readString8();
-        String8 value = data.readString8();
-        handle->extendedData.add(key, value);
-    }
-
-    handle->decryptInfo = NULL;
-    const int bufferLen = data.readInt32();
-    if (INVALID_BUFFER_LENGTH != bufferLen) {
-        handle->decryptInfo = new DecryptInfo();
-        handle->decryptInfo->decryptBufferLength = bufferLen;
-    }
 }
 
 static void clearDecryptHandle(sp<DecryptHandle> &handle) {
     if (handle == NULL) {
         return;
     }
-    if (handle->decryptInfo) {
-        delete handle->decryptInfo;
-        handle->decryptInfo = NULL;
-    }
-    handle->copyControlVector.clear();
-    handle->extendedData.clear();
 }
 
 int BpDrmManagerService::addUniqueId(bool isNative) {
diff --git a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
index 769de0c..86a2c8f 100644
--- a/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
+++ b/drm/libdrmframework/plugins/forward-lock/FwdLockEngine/src/FwdLockEngine.cpp
@@ -512,7 +512,6 @@
             decryptHandle->mimeType = MimeTypeUtil::convertMimeType(contentType);
             decryptHandle->decryptApiType = DecryptApiType::CONTAINER_BASED;
             decryptHandle->status = RightsStatus::RIGHTS_VALID;
-            decryptHandle->decryptInfo = NULL;
             result = DRM_NO_ERROR;
         } else {
             if (retVal && NULL != decodeSession) {
@@ -579,13 +578,6 @@
     }
 
     if (NULL != decryptHandle.get()) {
-        if (NULL != decryptHandle->decryptInfo) {
-            delete decryptHandle->decryptInfo;
-            decryptHandle->decryptInfo = NULL;
-        }
-
-        decryptHandle->copyControlVector.clear();
-        decryptHandle->extendedData.clear();
         decryptHandle.clear();
     }
 
diff --git a/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp b/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
index 0fa3478..976b820 100644
--- a/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
+++ b/drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp
@@ -244,7 +244,6 @@
     decryptHandle->mimeType = String8("video/passthru");
     decryptHandle->decryptApiType = DecryptApiType::ELEMENTARY_STREAM_BASED;
     decryptHandle->status = DRM_NO_ERROR;
-    decryptHandle->decryptInfo = NULL;
     return DRM_NO_ERROR;
 #else
     (void)(decryptHandle.get()); // unused
@@ -261,9 +260,6 @@
 status_t DrmPassthruPlugIn::onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
     ALOGV("DrmPassthruPlugIn::onCloseDecryptSession() : %d", uniqueId);
     if (NULL != decryptHandle.get()) {
-        if (NULL != decryptHandle->decryptInfo) {
-            delete decryptHandle->decryptInfo; decryptHandle->decryptInfo = NULL;
-        }
         decryptHandle.clear();
     }
     return DRM_NO_ERROR;
diff --git a/include/drm/drm_framework_common.h b/include/drm/drm_framework_common.h
index d5f3ba2..7e3c28f 100644
--- a/include/drm/drm_framework_common.h
+++ b/include/drm/drm_framework_common.h
@@ -49,17 +49,6 @@
 };
 
 /**
- * copy control settings used in DecryptHandle::copyControlVector
- */
-enum DrmCopyControl {
-    DRM_COPY_CONTROL_BASE = 1000,
-    // the key used to set the value for HDCP
-    // if the associated value is 1, then HDCP is required
-    // otherwise, HDCP is not required
-    DRM_COPY_CONTROL_HDCP = DRM_COPY_CONTROL_BASE
-};
-
-/**
  * Defines DRM Buffer
  */
 class DrmBuffer {
@@ -237,20 +226,6 @@
 };
 
 /**
- * Defines decryption information
- */
-class DecryptInfo {
-public:
-    /**
-     * size of memory to be allocated to get the decrypted content.
-     */
-    int decryptBufferLength;
-    /**
-     * reserved for future purpose
-     */
-};
-
-/**
  * Defines decryption handle
  */
 class DecryptHandle : public RefBase {
@@ -287,35 +262,16 @@
      *     RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED
      */
     int status;
-    /**
-     * Information required to decrypt content
-     * e.g. size of memory to be allocated to get the decrypted content.
-     */
-    DecryptInfo* decryptInfo;
-    /**
-     * Defines a vector for the copy control settings sent from the DRM plugin
-     * to the player
-     */
-    KeyedVector<DrmCopyControl, int> copyControlVector;
-
-    /**
-     * Defines a vector for any extra data the DRM plugin wants to send
-     * to the native code
-     */
-    KeyedVector<String8, String8> extendedData;
 
 public:
     DecryptHandle():
             decryptId(INVALID_VALUE),
             mimeType(""),
             decryptApiType(INVALID_VALUE),
-            status(INVALID_VALUE),
-            decryptInfo(NULL) {
-
+            status(INVALID_VALUE) {
     }
 
     ~DecryptHandle() {
-        delete decryptInfo; decryptInfo = NULL;
     }
 };
 
