diff --git a/healthd/Health.cpp b/healthd/Health.cpp
index ec05398..74f3eec 100644
--- a/healthd/Health.cpp
+++ b/healthd/Health.cpp
@@ -120,7 +120,7 @@
     }
 
     // Retrieve all information and call healthd_mode_ops->battery_update, which calls
-    // updateAndNotify.
+    // notifyListeners.
     bool chargerOnline = battery_monitor_->update();
 
     // adjust uevent / wakealarm periods
@@ -129,19 +129,10 @@
     return Result::SUCCESS;
 }
 
-void Health::updateAndNotify(HealthInfo* info) {
-    // update 2.0 specific fields
-    struct BatteryProperty prop;
-    if (battery_monitor_->getProperty(BATTERY_PROP_CURRENT_AVG, &prop) == OK)
-        info->batteryCurrentAverage = static_cast<int32_t>(prop.valueInt64);
-    if (battery_monitor_->getProperty(BATTERY_PROP_CAPACITY, &prop) == OK)
-        info->batteryCapacity = static_cast<int32_t>(prop.valueInt64);
-    if (battery_monitor_->getProperty(BATTERY_PROP_ENERGY_COUNTER, &prop) == OK)
-        info->energyCounter = prop.valueInt64;
-
+void Health::notifyListeners(const HealthInfo& info) {
     std::lock_guard<std::mutex> _lock(callbacks_lock_);
     for (auto it = callbacks_.begin(); it != callbacks_.end();) {
-        auto ret = (*it)->healthInfoChanged(*info);
+        auto ret = (*it)->healthInfoChanged(info);
         if (!ret.isOk() && ret.isDeadObject()) {
             it = callbacks_.erase(it);
         } else {
diff --git a/healthd/HealthService.cpp b/healthd/HealthService.cpp
index 29a29ed..e8a1a85 100644
--- a/healthd/HealthService.cpp
+++ b/healthd/HealthService.cpp
@@ -28,8 +28,8 @@
 
 using android::hardware::IPCThreadState;
 using android::hardware::configureRpcThreadpool;
+using android::hardware::health::V1_0::HealthInfo;
 using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo;
-using android::hardware::health::V2_0::HealthInfo;
 using android::hardware::health::V2_0::IHealth;
 using android::hardware::health::V2_0::implementation::Health;
 
@@ -89,9 +89,9 @@
     // Implementation-defined update logic goes here. An implementation
     // can make modifications to prop before broadcasting it to all callbacks.
 
-    HealthInfo info{};
-    convertToHealthInfo(prop, info.legacy);
-    static_cast<Health*>(gHealth.get())->updateAndNotify(&info);
+    HealthInfo info;
+    convertToHealthInfo(prop, info);
+    static_cast<Health*>(gHealth.get())->notifyListeners(info);
 }
 
 static struct healthd_mode_ops healthd_mode_service_2_0_ops = {
diff --git a/healthd/include/health2/Health.h b/healthd/include/health2/Health.h
index d390b92..4e78380 100644
--- a/healthd/include/health2/Health.h
+++ b/healthd/include/health2/Health.h
@@ -16,6 +16,7 @@
 namespace implementation {
 
 using V1_0::BatteryStatus;
+using V1_0::HealthInfo;
 
 using ::android::hidl::base::V1_0::IBase;
 
@@ -24,7 +25,7 @@
     Health(struct healthd_config* c);
 
     // TODO(b/62229583): clean up and hide these functions.
-    void updateAndNotify(HealthInfo* info);
+    void notifyListeners(const HealthInfo& info);
 
     // Methods from IHealth follow.
     Return<Result> registerCallback(const sp<IHealthInfoCallback>& callback) override;
