diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
index ef39713..72e6313 100644
--- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
@@ -1297,6 +1297,10 @@
     return true;
 }
 
+static inline size_t MIN(size_t a, size_t b) {
+    return (a < b) ? a : b;
+}
+
 status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit(
         size_t trackIndex, const sp<ABuffer> &accessUnit) {
     const sp<Track> &track = mTracks.valueFor(trackIndex);
@@ -1309,8 +1313,20 @@
     if (mHDCP != NULL && !track->isAudio()) {
         isHDCPEncrypted = true;
 
+#if 0
+        ALOGI("in:");
+        hexdump(accessUnit->data(), MIN(64, accessUnit->size()));
+#endif
+
+        if (mTempAccessUnit == NULL
+                || mTempAccessUnit->capacity() < accessUnit->size()) {
+            mTempAccessUnit = new ABuffer(accessUnit->size());
+        }
+
+        memcpy(mTempAccessUnit->data(), accessUnit->data(), accessUnit->size());
+
         status_t err = mHDCP->encrypt(
-                accessUnit->data(), accessUnit->size(),
+                mTempAccessUnit->data(), mTempAccessUnit->size(),
                 trackIndex  /* streamCTR */,
                 &inputCTR,
                 accessUnit->data());
@@ -1320,6 +1336,12 @@
                   err);
 
             return err;
+        } else {
+#if 0
+            ALOGI("out:");
+            hexdump(accessUnit->data(), MIN(64, accessUnit->size()));
+            ALOGI("inputCTR: 0x%016llx", inputCTR);
+#endif
         }
 
         HDCP_private_data[0] = 0x00;
diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.h b/media/libstagefright/wifi-display/source/PlaybackSession.h
index 6f74382..682fe2e 100644
--- a/media/libstagefright/wifi-display/source/PlaybackSession.h
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.h
@@ -164,6 +164,8 @@
 
     uint64_t mTotalBytesSent;
 
+    sp<ABuffer> mTempAccessUnit;
+
 #if LOG_TRANSPORT_STREAM
     FILE *mLogFile;
 #endif
diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
index e9811f5..daa70f6 100644
--- a/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
+++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.cpp
@@ -230,20 +230,18 @@
 
         case kWhatStop:
         {
-            uint32_t replyID;
-            CHECK(msg->senderAwaitsResponse(&replyID));
+            CHECK(msg->senderAwaitsResponse(&mStopReplyID));
 
             if (mSessionID != 0 && mClientSessionID != 0) {
                 status_t err = sendM5(
                         mClientSessionID, true /* requestShutdown */);
 
                 if (err == OK) {
-                    mStopReplyID = replyID;
                     break;
                 }
             }
 
-            finishStop(replyID);
+            finishStop();
             break;
         }
 
@@ -339,7 +337,7 @@
             CHECK(msg->findInt32("ext1", &ext1));
             CHECK(msg->findInt32("ext2", &ext2));
 
-            ALOGV("Saw HDCP notification code %d, ext1 %d, ext2 %d",
+            ALOGI("Saw HDCP notification code %d, ext1 %d, ext2 %d",
                     msgCode, ext1, ext2);
 
             switch (msgCode) {
@@ -355,6 +353,12 @@
                     break;
                 }
 
+                case HDCPModule::HDCP_SHUTDOWN_COMPLETE:
+                {
+                    finishStop2();
+                    break;
+                }
+
                 default:
                 {
                     ALOGE("HDCP failure, shutting down.");
@@ -1080,8 +1084,7 @@
     }
 
     if (mStopReplyID != 0) {
-        finishStop(mStopReplyID);
-        mStopReplyID = 0;
+        finishStop();
     } else {
         disconnectClient(UNKNOWN_ERROR);
     }
@@ -1089,21 +1092,29 @@
     return OK;
 }
 
-void WifiDisplaySource::finishStop(uint32_t replyID) {
+void WifiDisplaySource::finishStop() {
     disconnectClient(OK);
 
 #if REQUIRE_HDCP
     if (mHDCP != NULL) {
         mHDCP->shutdownAsync();
-        mHDCP.clear();
+        return;
     }
 #endif
 
+    finishStop2();
+}
+
+void WifiDisplaySource::finishStop2() {
+#if REQUIRE_HDCP
+    mHDCP.clear();
+#endif
+
     status_t err = OK;
 
     sp<AMessage> response = new AMessage;
     response->setInt32("err", err);
-    response->postReply(replyID);
+    response->postReply(mStopReplyID);
 }
 
 status_t WifiDisplaySource::onGetParameterRequest(
@@ -1195,8 +1206,7 @@
 
     response.append("\r\n");
 
-    status_t err = mNetSession->sendRequest(sessionID, response.c_str());
-    CHECK_EQ(err, (status_t)OK);
+    mNetSession->sendRequest(sessionID, response.c_str());
 }
 
 int32_t WifiDisplaySource::makeUniquePlaybackSessionID() const {
diff --git a/media/libstagefright/wifi-display/source/WifiDisplaySource.h b/media/libstagefright/wifi-display/source/WifiDisplaySource.h
index 1f0e375..fb4f53d 100644
--- a/media/libstagefright/wifi-display/source/WifiDisplaySource.h
+++ b/media/libstagefright/wifi-display/source/WifiDisplaySource.h
@@ -205,7 +205,8 @@
     // A listener is notified accordingly.
     void disconnectClient(status_t err);
 
-    void finishStop(uint32_t replyID);
+    void finishStop();
+    void finishStop2();
 
     DISALLOW_EVIL_CONSTRUCTORS(WifiDisplaySource);
 };
