diff --git a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp
index 0cc8a39..a1a47e8 100644
--- a/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp
+++ b/modules/sensors/dynamic_sensor/DummyDynamicAccelDaemon.cpp
@@ -28,7 +28,7 @@
 #include <netinet/in.h>
 #include <algorithm>            //std::max
 
-#define SYSPROP_PREFIX                  "vendor.dynamic_sensor.mock"
+#define SYSPROP_PREFIX                  "dynamic_sensor.dummy"
 #define FILE_NAME_BASE                  "dummy_accel_file"
 #define FILE_NAME_REGEX                 ("^" FILE_NAME_BASE "[0-9]$")
 
diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
index 9f9a9fe..df636a3 100644
--- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
+++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.cpp
@@ -20,22 +20,12 @@
 #include <log/log.h>
 
 using ::android::hardware::sensors::V1_0::Result;
-using ::android::hardware::sensors::V2_1::SensorInfo;
-using ::android::hardware::sensors::V2_1::SensorType;
 template<class T> using Return = ::android::hardware::Return<T>;
 using ::android::hardware::Void;
 
 namespace android {
 namespace SensorHalExt {
 
-DynamicSensorsSubHal::DynamicSensorsSubHal() {
-    // initialize dynamic sensor manager
-    mDynamicSensorManager.reset(
-            DynamicSensorManager::createInstance(kDynamicHandleBase,
-                                                 kMaxDynamicHandleCount,
-                                                 nullptr /* callback */));
-}
-
 // ISensors.
 Return<Result> DynamicSensorsSubHal::setOperationMode(OperationMode mode) {
     return (mode == static_cast<OperationMode>(SENSOR_HAL_NORMAL_MODE) ?
@@ -87,32 +77,9 @@
 }
 
 Return<void> DynamicSensorsSubHal::getSensorsList_2_1(
-        getSensorsList_2_1_cb callback) {
-    const sensor_t& sensor_info = mDynamicSensorManager->getDynamicMetaSensor();
-    std::vector<SensorInfo> sensors;
-
+        getSensorsList_2_1_cb callback __unused) {
     ALOGD("DynamicSensorsSubHal::getSensorsList_2_1 invoked.");
 
-    // get the dynamic sensor info
-    sensors.resize(1);
-    sensors[0].sensorHandle = sensor_info.handle;
-    sensors[0].name = sensor_info.name;
-    sensors[0].vendor = sensor_info.vendor;
-    sensors[0].version = 1;
-    sensors[0].type = static_cast<SensorType>(sensor_info.type);
-    sensors[0].typeAsString = sensor_info.stringType;
-    sensors[0].maxRange = sensor_info.maxRange;
-    sensors[0].resolution = sensor_info.resolution;
-    sensors[0].power = sensor_info.power;
-    sensors[0].minDelay = sensor_info.minDelay;
-    sensors[0].fifoReservedEventCount = sensor_info.fifoReservedEventCount;
-    sensors[0].fifoMaxEventCount = sensor_info.fifoMaxEventCount;
-    sensors[0].requiredPermission = sensor_info.requiredPermission;
-    sensors[0].maxDelay = sensor_info.maxDelay;
-    sensors[0].flags = sensor_info.flags;
-
-    callback(sensors);
-
     return Void();
 }
 
diff --git a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h
index ab5d299..36ed9f5 100644
--- a/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h
+++ b/modules/sensors/dynamic_sensor/DynamicSensorsSubHal.h
@@ -17,8 +17,6 @@
 #ifndef ANDROID_SENSORHAL_EXT_DYNAMIC_SENSORS_SUB_HAL_H
 #define ANDROID_SENSORHAL_EXT_DYNAMIC_SENSORS_SUB_HAL_H
 
-#include "DynamicSensorManager.h"
-
 #include <V2_1/SubHal.h>
 
 namespace android {
@@ -39,8 +37,6 @@
     using SharedMemInfo = ::android::hardware::sensors::V1_0::SharedMemInfo;
 
 public:
-    DynamicSensorsSubHal();
-
     // ISensors.
     Return<Result> setOperationMode(OperationMode mode) override;
     Return<Result> activate(int32_t sensor_handle, bool enabled) override;
@@ -64,14 +60,6 @@
     const std::string getName() override { return "Dynamic-SubHAL"; }
     Return<Result> initialize(
             const sp<IHalProxyCallback>& hal_proxy_callback) override;
-
-private:
-    static constexpr int32_t kDynamicHandleBase = 0;
-    static constexpr int32_t kDynamicHandleEnd = 0x1000000;
-    static constexpr int32_t kMaxDynamicHandleCount = kDynamicHandleEnd -
-                                                      kDynamicHandleBase;
-
-    std::unique_ptr<DynamicSensorManager> mDynamicSensorManager;
 };
 
 } // namespace SensorHalExt
