diff --git a/model/VolumeBase.cpp b/model/VolumeBase.cpp
index b2eff3b..429f134 100644
--- a/model/VolumeBase.cpp
+++ b/model/VolumeBase.cpp
@@ -17,7 +17,6 @@
 #include "Utils.h"
 #include "VolumeBase.h"
 #include "VolumeManager.h"
-#include "ResponseCode.h"
 
 #include <android-base/stringprintf.h>
 #include <android-base/logging.h>
@@ -44,12 +43,9 @@
 
 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) {
@@ -119,12 +115,10 @@
     }
 
     mPath = path;
-#if ENABLE_BINDER
+
     auto listener = getListener();
     if (listener) listener->onVolumePathChanged(getId(), mPath);
-#else
-    notifyEvent(ResponseCode::VolumePathChanged, mPath);
-#endif
+
     return OK;
 }
 
@@ -135,27 +129,13 @@
     }
 
     mInternalPath = internalPath;
-#if ENABLE_BINDER
+
     auto listener = getListener();
     if (listener) listener->onVolumeInternalPathChanged(getId(), mInternalPath);
-#else
-    notifyEvent(ResponseCode::VolumeInternalPathChanged, mInternalPath);
-#endif
+
     return OK;
 }
 
-void VolumeBase::notifyEvent(int event) {
-    if (mSilent) return;
-    VolumeManager::Instance()->getBroadcaster()->sendBroadcast(event,
-            getId().c_str(), false);
-}
-
-void VolumeBase::notifyEvent(int event, const std::string& value) {
-    if (mSilent) return;
-    VolumeManager::Instance()->getBroadcaster()->sendBroadcast(event,
-            StringPrintf("%s %s", getId().c_str(), value.c_str()).c_str(), false);
-}
-
 android::sp<android::os::IVoldListener> VolumeBase::getListener() {
     if (mSilent) {
         return nullptr;
@@ -186,14 +166,11 @@
 
     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;
 }
@@ -212,12 +189,10 @@
         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;
