diff --git a/libhwcomposer/hwc_qclient.cpp b/libhwcomposer/hwc_qclient.cpp
index 6bde3d2..fd0a36c 100644
--- a/libhwcomposer/hwc_qclient.cpp
+++ b/libhwcomposer/hwc_qclient.cpp
@@ -165,35 +165,27 @@
     }
 }
 
-static void pauseWFD(hwc_context_t *ctx, uint32_t pause) {
-    /* TODO: Will remove pauseWFD once all the clients start using
-     * setWfdStatus to indicate the status of WFD display
-     */
-    int dpy = HWC_DISPLAY_VIRTUAL;
-    if(pause) {
-        //WFD Pause
-        handle_pause(ctx, dpy);
+// USed for setting the secondary(hdmi/wfd) status
+static void setSecondaryDisplayStatus(hwc_context_t *ctx,
+                                      const Parcel* inParcel) {
+    uint32_t dpy = inParcel->readInt32();
+    uint32_t status = inParcel->readInt32();
+    ALOGD_IF(QCLIENT_DEBUG, "%s: dpy = %d status = %s", __FUNCTION__,
+                                        dpy, getExternalDisplayState(status));
+
+    if(dpy > HWC_DISPLAY_PRIMARY && dpy <= HWC_DISPLAY_VIRTUAL) {
+        if(dpy == HWC_DISPLAY_VIRTUAL && status == EXTERNAL_OFFLINE) {
+            ctx->mWfdSyncLock.lock();
+            ctx->mWfdSyncLock.signal();
+            ctx->mWfdSyncLock.unlock();
+        } else if(status == EXTERNAL_PAUSE) {
+            handle_pause(ctx, dpy);
+        } else if(status == EXTERNAL_RESUME) {
+            handle_resume(ctx, dpy);
+        }
     } else {
-        //WFD Resume
-        handle_resume(ctx, dpy);
-    }
-}
-
-static void setWfdStatus(hwc_context_t *ctx, uint32_t wfdStatus) {
-
-    ALOGD_IF(HWC_WFDDISPSYNC_LOG,
-             "%s: Received a binder call that WFD state is %s",
-             __FUNCTION__,getExternalDisplayState(wfdStatus));
-    int dpy = HWC_DISPLAY_VIRTUAL;
-
-    if(wfdStatus == EXTERNAL_OFFLINE) {
-        ctx->mWfdSyncLock.lock();
-        ctx->mWfdSyncLock.signal();
-        ctx->mWfdSyncLock.unlock();
-    } else if(wfdStatus == EXTERNAL_PAUSE) {
-        handle_pause(ctx, dpy);
-    } else if(wfdStatus == EXTERNAL_RESUME) {
-        handle_resume(ctx, dpy);
+        ALOGE("%s: Invalid dpy", __FUNCTION__, dpy);
+        return;
     }
 }
 
@@ -285,11 +277,8 @@
         case IQService::SET_HSIC_DATA:
             setHSIC(inParcel);
             break;
-        case IQService::PAUSE_WFD:
-            pauseWFD(mHwcContext, inParcel->readInt32());
-            break;
-        case IQService::SET_WFD_STATUS:
-            setWfdStatus(mHwcContext,inParcel->readInt32());
+        case IQService::SET_SECONDARY_DISPLAY_STATUS:
+            setSecondaryDisplayStatus(mHwcContext, inParcel);
             break;
         case IQService::SET_VIEW_FRAME:
             setViewFrame(mHwcContext, inParcel);
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index e541dcd..3eec011 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -2635,15 +2635,46 @@
 }
 
 void handle_pause(hwc_context_t* ctx, int dpy) {
-    if(ctx->mHWCVirtual) {
-        ctx->mHWCVirtual->pause(ctx, dpy);
+    if(ctx->dpyAttr[dpy].connected) {
+        ctx->mDrawLock.lock();
+        ctx->dpyAttr[dpy].isActive = true;
+        ctx->dpyAttr[dpy].isPause = true;
+        ctx->mDrawLock.unlock();
+        ctx->proc->invalidate(ctx->proc);
+
+        usleep(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period
+               * 2 / 1000);
+
+        // At this point all the pipes used by External have been
+        // marked as UNSET.
+        ctx->mDrawLock.lock();
+        // Perform commit to unstage the pipes.
+        if (!Overlay::displayCommit(ctx->dpyAttr[dpy].fd)) {
+            ALOGE("%s: display commit fail! for %d dpy",
+                  __FUNCTION__, dpy);
+        }
+        ctx->mDrawLock.unlock();
+        ctx->proc->invalidate(ctx->proc);
     }
     return;
 }
 
 void handle_resume(hwc_context_t* ctx, int dpy) {
-    if(ctx->mHWCVirtual) {
-        ctx->mHWCVirtual->resume(ctx, dpy);
+    if(ctx->dpyAttr[dpy].connected) {
+        ctx->mDrawLock.lock();
+        ctx->dpyAttr[dpy].isConfiguring = true;
+        ctx->dpyAttr[dpy].isActive = true;
+        ctx->mDrawLock.unlock();
+        ctx->proc->invalidate(ctx->proc);
+
+        usleep(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period
+               * 2 / 1000);
+
+        //At this point external has all the pipes it would need.
+        ctx->mDrawLock.lock();
+        ctx->dpyAttr[dpy].isPause = false;
+        ctx->mDrawLock.unlock();
+        ctx->proc->invalidate(ctx->proc);
     }
     return;
 }
diff --git a/libhwcomposer/hwc_virtual.cpp b/libhwcomposer/hwc_virtual.cpp
index d33a827..61e88c8 100644
--- a/libhwcomposer/hwc_virtual.cpp
+++ b/libhwcomposer/hwc_virtual.cpp
@@ -217,47 +217,6 @@
     return ret;
 }
 
-void HWCVirtualVDS::pause(hwc_context_t* ctx, int dpy) {
-    {
-        Locker::Autolock _l(ctx->mDrawLock);
-        ctx->dpyAttr[dpy].isActive = true;
-        ctx->dpyAttr[dpy].isPause = true;
-        ctx->proc->invalidate(ctx->proc);
-    }
-    usleep(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period
-            * 2 / 1000);
-    // At this point all the pipes used by External have been
-    // marked as UNSET.
-    {
-        Locker::Autolock _l(ctx->mDrawLock);
-        // Perform commit to unstage the pipes.
-        if (!Overlay::displayCommit(ctx->dpyAttr[dpy].fd)) {
-            ALOGE("%s: display commit fail! for %d dpy",
-                    __FUNCTION__, dpy);
-        }
-        ctx->proc->invalidate(ctx->proc);
-    }
-    return;
-}
-
-void HWCVirtualVDS::resume(hwc_context_t* ctx, int dpy) {
-    {
-        Locker::Autolock _l(ctx->mDrawLock);
-        ctx->dpyAttr[dpy].isConfiguring = true;
-        ctx->dpyAttr[dpy].isActive = true;
-        ctx->proc->invalidate(ctx->proc);
-    }
-    usleep(ctx->dpyAttr[HWC_DISPLAY_PRIMARY].vsync_period
-            * 2 / 1000);
-    //At this point external has all the pipes it would need.
-    {
-        Locker::Autolock _l(ctx->mDrawLock);
-        ctx->dpyAttr[dpy].isPause = false;
-        ctx->proc->invalidate(ctx->proc);
-    }
-    return;
-}
-
 /* We set scaling mode on the VD if the output handle width and height
    differs from the virtual frame buffer width and height. */
 void HWCVirtualVDS::setMDPScalingMode(hwc_context_t* ctx,
diff --git a/libhwcomposer/hwc_virtual.h b/libhwcomposer/hwc_virtual.h
index 525ae2a..bd1833c 100644
--- a/libhwcomposer/hwc_virtual.h
+++ b/libhwcomposer/hwc_virtual.h
@@ -43,8 +43,6 @@
     // during virtual display disconnect.
     void destroy(hwc_context_t *ctx, size_t numDisplays,
                        hwc_display_contents_1_t** displays);
-    void pause(hwc_context_t* ctx, int dpy);
-    void resume(hwc_context_t* ctx, int dpy);
     int getScalingHeight() const { return mScalingHeight; };
     int getScalingWidth() const { return mScalingWidth; };
     // We can dump the frame buffer and WB
diff --git a/libqdutils/display_config.cpp b/libqdutils/display_config.cpp
index 7ff106f..b5912ae 100644
--- a/libqdutils/display_config.cpp
+++ b/libqdutils/display_config.cpp
@@ -134,4 +134,22 @@
     return err;
 }
 
+int setSecondaryDisplayStatus(int dpy, uint32_t status) {
+    status_t err = (status_t) FAILED_TRANSACTION;
+    sp<IQService> binder = getBinder();
+    Parcel inParcel, outParcel;
+    inParcel.writeInt32(dpy);
+    inParcel.writeInt32(status);
+
+    if(binder != NULL) {
+        err = binder->dispatch(IQService::SET_SECONDARY_DISPLAY_STATUS,
+                &inParcel, &outParcel);
+    }
+    if(err)
+        ALOGE("%s: Failed for dpy %d status = %d err=%d", __FUNCTION__, dpy,
+                                                        status, err);
+
+    return err;
+}
+
 }; //namespace
diff --git a/libqdutils/display_config.h b/libqdutils/display_config.h
index a69265b..9b6ab56 100644
--- a/libqdutils/display_config.h
+++ b/libqdutils/display_config.h
@@ -43,6 +43,16 @@
 enum {
     DISPLAY_PRIMARY = 0,
     DISPLAY_EXTERNAL,
+    DISPLAY_VIRTUAL,
+};
+
+// External Display states - used in setSecondaryDisplayStatus()
+// To be consistent with the same defined in hwc_utils.h
+enum {
+    EXTERNAL_OFFLINE = 0,
+    EXTERNAL_ONLINE,
+    EXTERNAL_PAUSE,
+    EXTERNAL_RESUME,
 };
 
 // Display Attributes that are available to clients of this library
@@ -76,4 +86,7 @@
 
 // set the view frame information in hwc context from surfaceflinger
 int setViewFrame(int dpy, int l, int t, int r, int b);
+
+// Set the secondary display status(pause/resume/offline etc.,)
+int setSecondaryDisplayStatus(int dpy, uint32_t status);
 }; //namespace
diff --git a/libqservice/IQService.h b/libqservice/IQService.h
index 3be20f1..87d51fc 100644
--- a/libqservice/IQService.h
+++ b/libqservice/IQService.h
@@ -49,8 +49,8 @@
         GET_DISPLAY_ATTRIBUTES,  // Get display attributes
         SET_HSIC_DATA,           // Set HSIC on dspp
         GET_DISPLAY_VISIBLE_REGION,  // Get the visibleRegion for dpy
-        PAUSE_WFD,               // Pause/Resume WFD
-        SET_WFD_STATUS,          // Set if wfd connection is on/off
+        SET_SECONDARY_DISPLAY_STATUS,  // Sets secondary display status
+        UNUSED_SLOT,             // XXX: Unsed - New one can go here
         SET_VIEW_FRAME,          // Set view frame of display
         DYNAMIC_DEBUG,           // Enable more logging on the fly
         SET_IDLE_TIMEOUT,        // Set idle timeout for GPU fallback
diff --git a/libqservice/QServiceUtils.h b/libqservice/QServiceUtils.h
index 08cab31..f53d140 100644
--- a/libqservice/QServiceUtils.h
+++ b/libqservice/QServiceUtils.h
@@ -83,11 +83,4 @@
     return sendSingleParam(qService::IQService::BUFFER_MIRRORMODE, enable);
 }
 
-inline android::status_t pauseWFD(uint32_t pause) {
-    return sendSingleParam(qService::IQService::PAUSE_WFD, pause);
-}
-
-inline android::status_t setWfdStatus(uint32_t wfdStatus) {
-    return sendSingleParam(qService::IQService::SET_WFD_STATUS, wfdStatus);
-}
 #endif /* end of include guard: QSERVICEUTILS_H */
