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;
diff --git a/storaged/include/storaged.h b/storaged/include/storaged.h
index f9ab2d5..edaa32f 100644
--- a/storaged/include/storaged.h
+++ b/storaged/include/storaged.h
@@ -130,7 +130,7 @@
 
     void init_health_service();
     virtual ::android::hardware::Return<void> healthInfoChanged(
-        const ::android::hardware::health::V2_0::HealthInfo& info);
+        const ::android::hardware::health::V1_0::HealthInfo& info);
     void serviceDied(uint64_t cookie, const wp<::android::hidl::base::V1_0::IBase>& who);
 
     void report_storage_info();
diff --git a/storaged/storaged.cpp b/storaged/storaged.cpp
index 39c347a..e5130c3 100644
--- a/storaged/storaged.cpp
+++ b/storaged/storaged.cpp
@@ -62,7 +62,7 @@
 
 using android::hardware::health::V1_0::BatteryStatus;
 using android::hardware::health::V1_0::toString;
-using android::hardware::health::V2_0::HealthInfo;
+using android::hardware::health::V1_0::HealthInfo;
 using android::hardware::health::V2_0::IHealth;
 using android::hardware::health::V2_0::Result;
 using android::hardware::interfacesEqual;
@@ -71,10 +71,6 @@
 
 static sp<IHealth> get_health_service() {
     for (auto&& instanceName : {"default", "backup"}) {
-        if (IServiceManager::getService()->getTransport(IHealth::descriptor, instanceName) ==
-                IServiceManager::Transport::EMPTY) {
-            continue;
-        }
         auto ret = IHealth::getService(instanceName);
         if (ret != nullptr) {
             return ret;
@@ -90,7 +86,7 @@
 }
 
 Return<void> storaged_t::healthInfoChanged(const HealthInfo& props) {
-    mUidm.set_charger_state(is_charger_on(props.legacy.batteryStatus));
+    mUidm.set_charger_state(is_charger_on(props.batteryStatus));
     return android::hardware::Void();
 }
 
