diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp
index 5fdb9f4..1e6cd94 100644
--- a/media/libmediaplayerservice/Drm.cpp
+++ b/media/libmediaplayerservice/Drm.cpp
@@ -47,6 +47,7 @@
 
 Drm::Drm()
     : mInitCheck(NO_INIT),
+      mListener(NULL),
       mFactory(NULL),
       mPlugin(NULL) {
 }
@@ -67,6 +68,41 @@
     return mInitCheck;
 }
 
+status_t Drm::setListener(const sp<IDrmClient>& listener)
+{
+    Mutex::Autolock lock(mEventLock);
+    mListener = listener;
+    return NO_ERROR;
+}
+
+void Drm::sendEvent(DrmPlugin::EventType eventType, int extra,
+                    Vector<uint8_t> const *sessionId,
+                    Vector<uint8_t> const *data)
+{
+    mEventLock.lock();
+    sp<IDrmClient> listener = mListener;
+    mEventLock.unlock();
+
+    if (listener != NULL) {
+        Parcel obj;
+        if (sessionId && sessionId->size()) {
+            obj.writeInt32(sessionId->size());
+            obj.write(sessionId->array(), sessionId->size());
+        } else {
+            obj.writeInt32(0);
+        }
+
+        if (data && data->size()) {
+            obj.writeInt32(data->size());
+            obj.write(data->array(), data->size());
+        } else {
+            obj.writeInt32(0);
+        }
+
+        Mutex::Autolock lock(mNotifyLock);
+        listener->notify(eventType, extra, &obj);
+    }
+}
 
 /*
  * Search the plugins directory for a plugin that supports the scheme
@@ -195,7 +231,9 @@
         return mInitCheck;
     }
 
-    return mFactory->createDrmPlugin(uuid, &mPlugin);
+    status_t result = mFactory->createDrmPlugin(uuid, &mPlugin);
+    mPlugin->setListener(this);
+    return result;
 }
 
 status_t Drm::destroyPlugin() {
