diff --git a/model/Disk.cpp b/model/Disk.cpp
index 9c22400..151937f 100644
--- a/model/Disk.cpp
+++ b/model/Disk.cpp
@@ -151,7 +151,12 @@
 status_t Disk::create() {
     CHECK(!mCreated);
     mCreated = true;
+#if ENABLE_BINDER
+    auto listener = VolumeManager::Instance()->getListener();
+    if (listener) listener->onDiskCreated(getId(), mFlags);
+#else
     notifyEvent(ResponseCode::DiskCreated, StringPrintf("%d", mFlags));
+#endif
     readMetadata();
     readPartitions();
     return OK;
@@ -161,7 +166,12 @@
     CHECK(mCreated);
     destroyAllVolumes();
     mCreated = false;
+#if ENABLE_BINDER
+    auto listener = VolumeManager::Instance()->getListener();
+    if (listener) listener->onDiskDestroyed(getId());
+#else
     notifyEvent(ResponseCode::DiskDestroyed);
+#endif
     return OK;
 }
 
@@ -281,9 +291,15 @@
     }
     }
 
+#if ENABLE_BINDER
+    auto listener = VolumeManager::Instance()->getListener();
+    if (listener) listener->onDiskMetadataChanged(getId(),
+            mSize, mLabel, mSysPath);
+#else
     notifyEvent(ResponseCode::DiskSizeChanged, StringPrintf("%" PRIu64, mSize));
     notifyEvent(ResponseCode::DiskLabelChanged, mLabel);
     notifyEvent(ResponseCode::DiskSysPathChanged, mSysPath);
+#endif
     return OK;
 }
 
@@ -306,7 +322,12 @@
     status_t res = ForkExecvp(cmd, output);
     if (res != OK) {
         LOG(WARNING) << "sgdisk failed to scan " << mDevPath;
+#if ENABLE_BINDER
+        auto listener = VolumeManager::Instance()->getListener();
+        if (listener) listener->onDiskScanned(getId());
+#else
         notifyEvent(ResponseCode::DiskScanned);
+#endif
         mJustPartitioned = false;
         return res;
     }
@@ -372,7 +393,12 @@
         }
     }
 
+#if ENABLE_BINDER
+    auto listener = VolumeManager::Instance()->getListener();
+    if (listener) listener->onDiskScanned(getId());
+#else
     notifyEvent(ResponseCode::DiskScanned);
+#endif
     mJustPartitioned = false;
     return OK;
 }
diff --git a/model/PrivateVolume.cpp b/model/PrivateVolume.cpp
index e66e04d..9a96082 100644
--- a/model/PrivateVolume.cpp
+++ b/model/PrivateVolume.cpp
@@ -55,9 +55,14 @@
 
 status_t PrivateVolume::readMetadata() {
     status_t res = ReadMetadata(mDmDevPath, mFsType, mFsUuid, mFsLabel);
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeMetadataChanged(getId(), mFsType, mFsUuid, mFsLabel);
+#else
     notifyEvent(ResponseCode::VolumeFsTypeChanged, mFsType);
     notifyEvent(ResponseCode::VolumeFsUuidChanged, mFsUuid);
     notifyEvent(ResponseCode::VolumeFsLabelChanged, mFsLabel);
+#endif
     return res;
 }
 
diff --git a/model/PublicVolume.cpp b/model/PublicVolume.cpp
index f976c4a..04bafed 100644
--- a/model/PublicVolume.cpp
+++ b/model/PublicVolume.cpp
@@ -53,9 +53,14 @@
 
 status_t PublicVolume::readMetadata() {
     status_t res = ReadMetadataUntrusted(mDevPath, mFsType, mFsUuid, mFsLabel);
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeMetadataChanged(getId(), mFsType, mFsUuid, mFsLabel);
+#else
     notifyEvent(ResponseCode::VolumeFsTypeChanged, mFsType);
     notifyEvent(ResponseCode::VolumeFsUuidChanged, mFsUuid);
     notifyEvent(ResponseCode::VolumeFsLabelChanged, mFsLabel);
+#endif
     return res;
 }
 
diff --git a/model/VolumeBase.cpp b/model/VolumeBase.cpp
index 3f27d87..b2eff3b 100644
--- a/model/VolumeBase.cpp
+++ b/model/VolumeBase.cpp
@@ -44,7 +44,12 @@
 
 void VolumeBase::setState(State state) {
     mState = state;
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeStateChanged(getId(), static_cast<int32_t>(mState));
+#else
     notifyEvent(ResponseCode::VolumeStateChanged, StringPrintf("%d", mState));
+#endif
 }
 
 status_t VolumeBase::setDiskId(const std::string& diskId) {
@@ -114,7 +119,12 @@
     }
 
     mPath = path;
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumePathChanged(getId(), mPath);
+#else
     notifyEvent(ResponseCode::VolumePathChanged, mPath);
+#endif
     return OK;
 }
 
@@ -125,7 +135,12 @@
     }
 
     mInternalPath = internalPath;
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeInternalPathChanged(getId(), mInternalPath);
+#else
     notifyEvent(ResponseCode::VolumeInternalPathChanged, mInternalPath);
+#endif
     return OK;
 }
 
@@ -141,6 +156,14 @@
             StringPrintf("%s %s", getId().c_str(), value.c_str()).c_str(), false);
 }
 
+android::sp<android::os::IVoldListener> VolumeBase::getListener() {
+    if (mSilent) {
+        return nullptr;
+    } else {
+        return VolumeManager::Instance()->getListener();
+    }
+}
+
 void VolumeBase::addVolume(const std::shared_ptr<VolumeBase>& volume) {
     mVolumes.push_back(volume);
 }
@@ -163,8 +186,14 @@
 
     mCreated = true;
     status_t res = doCreate();
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeCreated(getId(),
+            static_cast<int32_t>(mType), mDiskId, mPartGuid);
+#else
     notifyEvent(ResponseCode::VolumeCreated,
             StringPrintf("%d \"%s\" \"%s\"", mType, mDiskId.c_str(), mPartGuid.c_str()));
+#endif
     setState(State::kUnmounted);
     return res;
 }
@@ -183,7 +212,12 @@
         setState(State::kRemoved);
     }
 
+#if ENABLE_BINDER
+    auto listener = getListener();
+    if (listener) listener->onVolumeDestroyed(getId());
+#else
     notifyEvent(ResponseCode::VolumeDestroyed);
+#endif
     status_t res = doDestroy();
     mCreated = false;
     return res;
diff --git a/model/VolumeBase.h b/model/VolumeBase.h
index d417019..ac111c2 100644
--- a/model/VolumeBase.h
+++ b/model/VolumeBase.h
@@ -17,6 +17,7 @@
 #ifndef ANDROID_VOLD_VOLUME_BASE_H
 #define ANDROID_VOLD_VOLUME_BASE_H
 
+#include "android/os/IVoldListener.h"
 #include "Utils.h"
 
 #include <cutils/multiuser.h>
@@ -117,6 +118,8 @@
     void notifyEvent(int msg);
     void notifyEvent(int msg, const std::string& value);
 
+    android::sp<android::os::IVoldListener> getListener();
+
 private:
     /* ID that uniquely references volume while alive */
     std::string mId;
