diff --git a/public/hal_audio.te b/public/hal_audio.te
index d97910389ac68fd8a47568e102e98abaaa2436d0..9ffb769a9268aa7213c847cc581f13aecd2e6654 100644
--- a/public/hal_audio.te
+++ b/public/hal_audio.te
@@ -2,8 +2,7 @@
 binder_call(hal_audio_client, hal_audio_server)
 binder_call(hal_audio_server, hal_audio_client)
 
-add_hwservice(hal_audio_server, hal_audio_hwservice)
-hal_attribute_hwservice_client(hal_audio, hal_audio_hwservice)
+hal_attribute_hwservice(hal_audio, hal_audio_hwservice)
 
 allow hal_audio ion_device:chr_file r_file_perms;
 
diff --git a/public/hal_audiocontrol.te b/public/hal_audiocontrol.te
index dc4aaa0cc66b8d3e78a8b1251e8d780a9c75b779..4a52b89548ee12094425cd485b7ae30e78df2772 100644
--- a/public/hal_audiocontrol.te
+++ b/public/hal_audiocontrol.te
@@ -2,5 +2,4 @@
 binder_call(hal_audiocontrol_client, hal_audiocontrol_server)
 binder_call(hal_audiocontrol_server, hal_audiocontrol_client)
 
-add_hwservice(hal_audiocontrol_server, hal_audiocontrol_hwservice)
-hal_attribute_hwservice_client(hal_audiocontrol, hal_audiocontrol_hwservice)
+hal_attribute_hwservice(hal_audiocontrol, hal_audiocontrol_hwservice)
diff --git a/public/hal_authsecret.te b/public/hal_authsecret.te
index f58b8aac94eed0ac1b9b36cb460215d2e7620634..daf8d4877dbca8ed30e652ee848bec83654a884e 100644
--- a/public/hal_authsecret.te
+++ b/public/hal_authsecret.te
@@ -1,5 +1,4 @@
 # HwBinder IPC from client to server
 binder_call(hal_authsecret_client, hal_authsecret_server)
 
-add_hwservice(hal_authsecret_server, hal_authsecret_hwservice)
-hal_attribute_hwservice_client(hal_authsecret, hal_authsecret_hwservice)
+hal_attribute_hwservice(hal_authsecret, hal_authsecret_hwservice)
diff --git a/public/hal_bluetooth.te b/public/hal_bluetooth.te
index b0c68bf721254414dd05e4d5d5747bff3730c349..09c3ce6800b995e562ee81d9cccce25928e8cff6 100644
--- a/public/hal_bluetooth.te
+++ b/public/hal_bluetooth.te
@@ -2,8 +2,7 @@
 binder_call(hal_bluetooth_client, hal_bluetooth_server)
 binder_call(hal_bluetooth_server, hal_bluetooth_client)
 
-add_hwservice(hal_bluetooth_server, hal_bluetooth_hwservice)
-hal_attribute_hwservice_client(hal_bluetooth, hal_bluetooth_hwservice)
+hal_attribute_hwservice(hal_bluetooth, hal_bluetooth_hwservice)
 
 wakelock_use(hal_bluetooth);
 
diff --git a/public/hal_bootctl.te b/public/hal_bootctl.te
index a901cf292db735a27fde5bd99d3734d9212a13c2..9c13f5584ba8e8bab63ab033e88d4db8254e11b2 100644
--- a/public/hal_bootctl.te
+++ b/public/hal_bootctl.te
@@ -2,7 +2,6 @@
 binder_call(hal_bootctl_client, hal_bootctl_server)
 binder_call(hal_bootctl_server, hal_bootctl_client)
 
-add_hwservice(hal_bootctl_server, hal_bootctl_hwservice)
-hal_attribute_hwservice_client(hal_bootctl, hal_bootctl_hwservice)
+hal_attribute_hwservice(hal_bootctl, hal_bootctl_hwservice)
 
 dontaudit hal_bootctl self:capability sys_rawio;
diff --git a/public/hal_broadcastradio.te b/public/hal_broadcastradio.te
index 45adb4a7af81afd1e66c018f087017179d5f9450..5653afab49a751f70f85da90d5d9a69a262a0a11 100644
--- a/public/hal_broadcastradio.te
+++ b/public/hal_broadcastradio.te
@@ -1,4 +1,3 @@
 binder_call(hal_broadcastradio_client, hal_broadcastradio_server)
 
-add_hwservice(hal_broadcastradio_server, hal_broadcastradio_hwservice)
-hal_attribute_hwservice_client(hal_broadcastradio, hal_broadcastradio_hwservice)
+hal_attribute_hwservice(hal_broadcastradio, hal_broadcastradio_hwservice)
diff --git a/public/hal_camera.te b/public/hal_camera.te
index 4e807948417b54236de5ecd101bb1ccec695b14e..77216e4a388d35411ec6197ad51b9c49d2a63bd5 100644
--- a/public/hal_camera.te
+++ b/public/hal_camera.te
@@ -2,8 +2,7 @@
 binder_call(hal_camera_client, hal_camera_server)
 binder_call(hal_camera_server, hal_camera_client)
 
-add_hwservice(hal_camera_server, hal_camera_hwservice)
-hal_attribute_hwservice_client(hal_camera, hal_camera_hwservice)
+hal_attribute_hwservice(hal_camera, hal_camera_hwservice)
 
 allow hal_camera device:dir r_dir_perms;
 allow hal_camera video_device:dir r_dir_perms;
diff --git a/public/hal_cas.te b/public/hal_cas.te
index 0ba39edac62c153f6ac75112d4d8f9a5b97ff640..7de6a135325c4da50f873ae002bd751fdbcd2b0a 100644
--- a/public/hal_cas.te
+++ b/public/hal_cas.te
@@ -2,8 +2,7 @@
 binder_call(hal_cas_client, hal_cas_server)
 binder_call(hal_cas_server, hal_cas_client)
 
-add_hwservice(hal_cas_server, hal_cas_hwservice)
-hal_attribute_hwservice_client(hal_cas, hal_cas_hwservice)
+hal_attribute_hwservice(hal_cas, hal_cas_hwservice)
 allow hal_cas_server hidl_memory_hwservice:hwservice_manager find;
 
 # Permit reading device's serial number from system properties
diff --git a/public/hal_confirmationui.te b/public/hal_confirmationui.te
index 9a7e697834c1fdb83e43a81a50548b003b2678c1..5d2e4b7a14dfe7b2003e3d9a626074a83a27e07d 100644
--- a/public/hal_confirmationui.te
+++ b/public/hal_confirmationui.te
@@ -1,5 +1,4 @@
 # HwBinder IPC from client to server
 binder_call(hal_confirmationui_client, hal_confirmationui_server)
 
-add_hwservice(hal_confirmationui_server, hal_confirmationui_hwservice)
-hal_attribute_hwservice_client(hal_confirmationui, hal_confirmationui_hwservice)
+hal_attribute_hwservice(hal_confirmationui, hal_confirmationui_hwservice)
diff --git a/public/hal_contexthub.te b/public/hal_contexthub.te
index 0f23ae51b8c3a960ec60f779c5a73f06632c960d..34acb38d662fc4f9a21daaff4b72eacf2dedfba4 100644
--- a/public/hal_contexthub.te
+++ b/public/hal_contexthub.te
@@ -2,5 +2,4 @@
 binder_call(hal_contexthub_client, hal_contexthub_server)
 binder_call(hal_contexthub_server, hal_contexthub_client)
 
-add_hwservice(hal_contexthub_server, hal_contexthub_hwservice)
-hal_attribute_hwservice_client(hal_contexthub, hal_contexthub_hwservice)
+hal_attribute_hwservice(hal_contexthub, hal_contexthub_hwservice)
diff --git a/public/hal_drm.te b/public/hal_drm.te
index 0a03a95a30e5891ddea9ef40b1f57639ac598709..339af52663aee9a9834e5cc363357068f6a26da4 100644
--- a/public/hal_drm.te
+++ b/public/hal_drm.te
@@ -2,8 +2,7 @@
 binder_call(hal_drm_client, hal_drm_server)
 binder_call(hal_drm_server, hal_drm_client)
 
-add_hwservice(hal_drm_server, hal_drm_hwservice)
-hal_attribute_hwservice_client(hal_drm, hal_drm_hwservice)
+hal_attribute_hwservice(hal_drm, hal_drm_hwservice)
 
 allow hal_drm hidl_memory_hwservice:hwservice_manager find;
 
diff --git a/public/hal_dumpstate.te b/public/hal_dumpstate.te
index 75e59f3b45fc8e369e828c99f777191dfc73b530..b7676ed290cfe3f399f36d08315a689ea2fadb65 100644
--- a/public/hal_dumpstate.te
+++ b/public/hal_dumpstate.te
@@ -2,8 +2,7 @@
 binder_call(hal_dumpstate_client, hal_dumpstate_server)
 binder_call(hal_dumpstate_server, hal_dumpstate_client)
 
-add_hwservice(hal_dumpstate_server, hal_dumpstate_hwservice)
-hal_attribute_hwservice_client(hal_dumpstate, hal_dumpstate_hwservice)
+hal_attribute_hwservice(hal_dumpstate, hal_dumpstate_hwservice)
 
 # write bug reports in /data/data/com.android.shell/files/bugreports/bugreport
 allow hal_dumpstate shell_data_file:file write;
diff --git a/public/hal_fingerprint.te b/public/hal_fingerprint.te
index 240f1ddade10044edc49d04eaab63e0dd426ef73..b673e291b50ed6ac1f07d06c389554f032efbd5c 100644
--- a/public/hal_fingerprint.te
+++ b/public/hal_fingerprint.te
@@ -2,8 +2,7 @@
 binder_call(hal_fingerprint_client, hal_fingerprint_server)
 binder_call(hal_fingerprint_server, hal_fingerprint_client)
 
-add_hwservice(hal_fingerprint_server, hal_fingerprint_hwservice)
-hal_attribute_hwservice_client(hal_fingerprint, hal_fingerprint_hwservice)
+hal_attribute_hwservice(hal_fingerprint, hal_fingerprint_hwservice)
 
 # For memory allocation
 allow hal_fingerprint ion_device:chr_file r_file_perms;
diff --git a/public/hal_gatekeeper.te b/public/hal_gatekeeper.te
index 0ff8f08442832d2b913539150f545fc4b08c68ff..b918f88a2114ba7d27cc51ade00a65dab8ecba2c 100644
--- a/public/hal_gatekeeper.te
+++ b/public/hal_gatekeeper.te
@@ -1,7 +1,6 @@
 binder_call(hal_gatekeeper_client, hal_gatekeeper_server)
 
-add_hwservice(hal_gatekeeper_server, hal_gatekeeper_hwservice)
-hal_attribute_hwservice_client(hal_gatekeeper, hal_gatekeeper_hwservice)
+hal_attribute_hwservice(hal_gatekeeper, hal_gatekeeper_hwservice)
 
 # TEE access.
 allow hal_gatekeeper tee_device:chr_file rw_file_perms;
diff --git a/public/hal_gnss.te b/public/hal_gnss.te
index 7e206a8ffa2a4988ec05fc7c1679a9251c216f8a..9bfc4ec368acbf98671597050b0a3f1b52b6c955 100644
--- a/public/hal_gnss.te
+++ b/public/hal_gnss.te
@@ -2,5 +2,4 @@
 binder_call(hal_gnss_client, hal_gnss_server)
 binder_call(hal_gnss_server, hal_gnss_client)
 
-add_hwservice(hal_gnss_server, hal_gnss_hwservice)
-hal_attribute_hwservice_client(hal_gnss, hal_gnss_hwservice)
+hal_attribute_hwservice(hal_gnss, hal_gnss_hwservice)
diff --git a/public/hal_graphics_allocator.te b/public/hal_graphics_allocator.te
index 753b816d7e9a2595149aabe95041dc9ed0801e98..41a324962694d7eee18e4bc3278d9398e28fec17 100644
--- a/public/hal_graphics_allocator.te
+++ b/public/hal_graphics_allocator.te
@@ -1,8 +1,7 @@
 # HwBinder IPC from client to server
 binder_call(hal_graphics_allocator_client, hal_graphics_allocator_server)
 
-add_hwservice(hal_graphics_allocator_server, hal_graphics_allocator_hwservice)
-hal_attribute_hwservice_client(hal_graphics_allocator, hal_graphics_allocator_hwservice)
+hal_attribute_hwservice(hal_graphics_allocator, hal_graphics_allocator_hwservice)
 allow hal_graphics_allocator_client hal_graphics_mapper_hwservice:hwservice_manager find;
 
 # GPU device access
diff --git a/public/hal_graphics_composer.te b/public/hal_graphics_composer.te
index e6854f6f3f2681c8063ee5289756b46d7072886c..e10daf9abc12aeb3a6881ed1bdd45cf6126eb0fd 100644
--- a/public/hal_graphics_composer.te
+++ b/public/hal_graphics_composer.te
@@ -2,8 +2,7 @@
 binder_call(hal_graphics_composer_client, hal_graphics_composer_server)
 binder_call(hal_graphics_composer_server, hal_graphics_composer_client)
 
-add_hwservice(hal_graphics_composer_server, hal_graphics_composer_hwservice)
-hal_attribute_hwservice_client(hal_graphics_composer, hal_graphics_composer_hwservice)
+hal_attribute_hwservice(hal_graphics_composer, hal_graphics_composer_hwservice)
 
 # Coordinate with hal_graphics_mapper
 allow hal_graphics_composer_server hal_graphics_mapper_hwservice:hwservice_manager find;
diff --git a/public/hal_health.te b/public/hal_health.te
index f6d5d3b8e5e1bde1b44634bd7c4e4edb8fc84e09..32afcadef08f77ff24e618b294fcb9b35876abd9 100644
--- a/public/hal_health.te
+++ b/public/hal_health.te
@@ -2,8 +2,7 @@
 binder_call(hal_health_client, hal_health_server)
 binder_call(hal_health_server, hal_health_client)
 
-add_hwservice(hal_health_server, hal_health_hwservice)
-hal_attribute_hwservice_client(hal_health, hal_health_hwservice)
+hal_attribute_hwservice(hal_health, hal_health_hwservice)
 
 # Read access to system files for HALs in
 # /{system,vendor,odm}/lib[64]/hw/ in order
diff --git a/public/hal_ir.te b/public/hal_ir.te
index 022d5eeb625ba4e6bac5d7e0bbf0a2640d49a4c0..29555f74cc9621da9533980c2a4dab62fbb7d521 100644
--- a/public/hal_ir.te
+++ b/public/hal_ir.te
@@ -2,5 +2,4 @@
 binder_call(hal_ir_client, hal_ir_server)
 binder_call(hal_ir_server, hal_ir_client)
 
-add_hwservice(hal_ir_server, hal_ir_hwservice)
-hal_attribute_hwservice_client(hal_ir, hal_ir_hwservice)
+hal_attribute_hwservice(hal_ir, hal_ir_hwservice)
diff --git a/public/hal_keymaster.te b/public/hal_keymaster.te
index 664f2774bf9d793f39c46db2a61d4c4fcc43ffe4..3e164ade9401564b97eb45bd63caa193edb8f5b9 100644
--- a/public/hal_keymaster.te
+++ b/public/hal_keymaster.te
@@ -1,8 +1,7 @@
 # HwBinder IPC from client to server
 binder_call(hal_keymaster_client, hal_keymaster_server)
 
-add_hwservice(hal_keymaster_server, hal_keymaster_hwservice)
-hal_attribute_hwservice_client(hal_keymaster, hal_keymaster_hwservice)
+hal_attribute_hwservice(hal_keymaster, hal_keymaster_hwservice)
 
 allow hal_keymaster tee_device:chr_file rw_file_perms;
 allow hal_keymaster ion_device:chr_file r_file_perms;
diff --git a/public/hal_light.te b/public/hal_light.te
index 841b17ab0a193f651b21eb0f0b1366dbe69f8ace..333fcac600ba6aa15bf796caf61636a9305f7c04 100644
--- a/public/hal_light.te
+++ b/public/hal_light.te
@@ -2,8 +2,7 @@
 binder_call(hal_light_client, hal_light_server)
 binder_call(hal_light_server, hal_light_client)
 
-add_hwservice(hal_light_server, hal_light_hwservice)
-hal_attribute_hwservice_client(hal_light, hal_light_hwservice)
+hal_attribute_hwservice(hal_light, hal_light_hwservice)
 
 allow hal_light sysfs_leds:lnk_file read;
 allow hal_light sysfs_leds:file rw_file_perms;
diff --git a/public/hal_lowpan.te b/public/hal_lowpan.te
index 5bb36f96fd11f402a68bc09c0f01000132031453..6fb95e9430cd6daddea4ba77dc359f3da500d4a7 100644
--- a/public/hal_lowpan.te
+++ b/public/hal_lowpan.te
@@ -2,10 +2,9 @@
 binder_call(hal_lowpan_client, hal_lowpan_server)
 binder_call(hal_lowpan_server, hal_lowpan_client)
 
-add_hwservice(hal_lowpan_server, hal_lowpan_hwservice)
 
 # Allow hal_lowpan_client to be able to find the hal_lowpan_server
-hal_attribute_hwservice_client(hal_lowpan, hal_lowpan_hwservice)
+hal_attribute_hwservice(hal_lowpan, hal_lowpan_hwservice)
 
 # hal_lowpan domain can write/read to/from lowpan_prop
 set_prop(hal_lowpan_server, lowpan_prop)
diff --git a/public/hal_memtrack.te b/public/hal_memtrack.te
index 8185fd144d07c6525e681383eb5d5d2abbd873d0..ed93a29a48e6392bdd4ade75ad6d73f0fd3d2b42 100644
--- a/public/hal_memtrack.te
+++ b/public/hal_memtrack.te
@@ -1,5 +1,4 @@
 # HwBinder IPC from client to server
 binder_call(hal_memtrack_client, hal_memtrack_server)
 
-add_hwservice(hal_memtrack_server, hal_memtrack_hwservice)
-hal_attribute_hwservice_client(hal_memtrack, hal_memtrack_hwservice)
+hal_attribute_hwservice(hal_memtrack, hal_memtrack_hwservice)
diff --git a/public/hal_neuralnetworks.te b/public/hal_neuralnetworks.te
index 149f76811fa89f11b2216f2005394cd92dd095de..348fdb8922418b4b0aa457d6a01c3359737b805f 100644
--- a/public/hal_neuralnetworks.te
+++ b/public/hal_neuralnetworks.te
@@ -2,7 +2,6 @@
 binder_call(hal_neuralnetworks_client, hal_neuralnetworks_server)
 binder_call(hal_neuralnetworks_server, hal_neuralnetworks_client)
 
-add_hwservice(hal_neuralnetworks_server, hal_neuralnetworks_hwservice)
-hal_attribute_hwservice_client(hal_neuralnetworks, hal_neuralnetworks_hwservice)
+hal_attribute_hwservice(hal_neuralnetworks, hal_neuralnetworks_hwservice)
 allow hal_neuralnetworks hidl_memory_hwservice:hwservice_manager find;
 allow hal_neuralnetworks hal_allocator:fd use;
diff --git a/public/hal_nfc.te b/public/hal_nfc.te
index caa4c823b3103f05ff190e6e655a4f2d9095db8b..7cef4a17dc3c8ca9c23037df8a548664c11780ba 100644
--- a/public/hal_nfc.te
+++ b/public/hal_nfc.te
@@ -2,8 +2,7 @@
 binder_call(hal_nfc_client, hal_nfc_server)
 binder_call(hal_nfc_server, hal_nfc_client)
 
-add_hwservice(hal_nfc_server, hal_nfc_hwservice)
-hal_attribute_hwservice_client(hal_nfc, hal_nfc_hwservice)
+hal_attribute_hwservice(hal_nfc, hal_nfc_hwservice)
 
 # Set NFC properties (used by bcm2079x HAL).
 set_prop(hal_nfc, nfc_prop)
diff --git a/public/hal_oemlock.te b/public/hal_oemlock.te
index d118f43cd7505162c248b857f50fa1d9de7211a9..26b2b4265b94bf5aa695bb3559479ca681eca9e7 100644
--- a/public/hal_oemlock.te
+++ b/public/hal_oemlock.te
@@ -1,5 +1,4 @@
 # HwBinder IPC from client to server
 binder_call(hal_oemlock_client, hal_oemlock_server)
 
-add_hwservice(hal_oemlock_server, hal_oemlock_hwservice)
-hal_attribute_hwservice_client(hal_oemlock, hal_oemlock_hwservice)
+hal_attribute_hwservice(hal_oemlock, hal_oemlock_hwservice)
diff --git a/public/hal_omx.te b/public/hal_omx.te
index 375f386c3550a3ec945ebdd1d8362568ca7f96a0..a477875b2131e3b9326363a3d92efcc5bfbdbc9d 100644
--- a/public/hal_omx.te
+++ b/public/hal_omx.te
@@ -1,8 +1,6 @@
 # applies all permissions to hal_omx NOT hal_omx_server
 # since OMX must always be in its own process.
 
-add_hwservice(hal_omx_server, hal_codec2_hwservice)
-add_hwservice(hal_omx_server, hal_omx_hwservice)
 
 # can route /dev/binder traffic to /dev/vndbinder
 vndbinder_use(hal_omx_server)
@@ -27,8 +25,8 @@ crash_dump_fallback(hal_omx_server)
 # via PDX. Thus, there is no need to use pdx_client macro.
 allow hal_omx_server bufferhubd:fd use;
 
-hal_attribute_hwservice_client(hal_omx, hal_omx_hwservice)
-hal_attribute_hwservice_client(hal_omx, hal_codec2_hwservice)
+hal_attribute_hwservice(hal_omx, hal_omx_hwservice)
+hal_attribute_hwservice(hal_omx, hal_codec2_hwservice)
 
 allow hal_omx_client hidl_token_hwservice:hwservice_manager find;
 
diff --git a/public/hal_power.te b/public/hal_power.te
index 26fbd4c3078200b129c652d2e03308b1eac5cab9..028011ab38dc08f33b43cbfec575d2baf36dc052 100644
--- a/public/hal_power.te
+++ b/public/hal_power.te
@@ -2,5 +2,4 @@
 binder_call(hal_power_client, hal_power_server)
 binder_call(hal_power_server, hal_power_client)
 
-add_hwservice(hal_power_server, hal_power_hwservice)
-hal_attribute_hwservice_client(hal_power, hal_power_hwservice)
+hal_attribute_hwservice(hal_power, hal_power_hwservice)
diff --git a/public/hal_secure_element.te b/public/hal_secure_element.te
index 8410c772d1d80d8987ef5370988ae281972cd134..3724d35b0062562b32cffbfce03d38d9df59cbe8 100644
--- a/public/hal_secure_element.te
+++ b/public/hal_secure_element.te
@@ -2,5 +2,4 @@
 binder_call(hal_secure_element_client, hal_secure_element_server)
 binder_call(hal_secure_element_server, hal_secure_element_client)
 
-add_hwservice(hal_secure_element_server, hal_secure_element_hwservice)
-hal_attribute_hwservice_client(hal_secure_element, hal_secure_element_hwservice)
+hal_attribute_hwservice(hal_secure_element, hal_secure_element_hwservice)
diff --git a/public/hal_sensors.te b/public/hal_sensors.te
index 603eead92ef872b35aa7865a872c1941cbe8530c..06e76f1e17e171b969f97e94461944d6c1d09892 100644
--- a/public/hal_sensors.te
+++ b/public/hal_sensors.te
@@ -1,8 +1,7 @@
 # HwBinder IPC from client to server
 binder_call(hal_sensors_client, hal_sensors_server)
 
-add_hwservice(hal_sensors_server, hal_sensors_hwservice)
-hal_attribute_hwservice_client(hal_sensors, hal_sensors_hwservice)
+hal_attribute_hwservice(hal_sensors, hal_sensors_hwservice)
 
 # Allow sensor hals to access ashmem memory allocated by apps
 allow hal_sensors { appdomain -isolated_app }:fd use;
diff --git a/public/hal_telephony.te b/public/hal_telephony.te
index a20350b41265e6c2a425fdcfc7518138c70e02cb..a7c687dd1268889df24189cd316574f1c385eb93 100644
--- a/public/hal_telephony.te
+++ b/public/hal_telephony.te
@@ -2,8 +2,7 @@
 binder_call(hal_telephony_client, hal_telephony_server)
 binder_call(hal_telephony_server, hal_telephony_client)
 
-add_hwservice(hal_telephony_server, hal_telephony_hwservice)
-hal_attribute_hwservice_client(hal_telephony, hal_telephony_hwservice)
+hal_attribute_hwservice(hal_telephony, hal_telephony_hwservice)
 
 allowxperm hal_telephony_server self:udp_socket ioctl priv_sock_ioctls;
 
diff --git a/public/hal_tetheroffload.te b/public/hal_tetheroffload.te
index d44573a3e9c8e66d3dd6a2580456cc1dc26b10a8..cf517236643321633dc8b1b2daa45afc88490c18 100644
--- a/public/hal_tetheroffload.te
+++ b/public/hal_tetheroffload.te
@@ -2,7 +2,7 @@
 binder_call(hal_tetheroffload_client, hal_tetheroffload_server)
 binder_call(hal_tetheroffload_server, hal_tetheroffload_client)
 
-hal_attribute_hwservice_client(hal_tetheroffload, hal_tetheroffload_hwservice)
+hal_attribute_hwservice(hal_tetheroffload, hal_tetheroffload_hwservice)
 
 # allow the client to pass the server already open netlink sockets
 allow hal_tetheroffload_server hal_tetheroffload_client:netlink_netfilter_socket { getattr read setopt write };
diff --git a/public/hal_thermal.te b/public/hal_thermal.te
index 105e882a4997eeb72cc71f48dbc0e743078b2af7..2115da1b955927297b97f3297185efadf50ca63a 100644
--- a/public/hal_thermal.te
+++ b/public/hal_thermal.te
@@ -2,5 +2,4 @@
 binder_call(hal_thermal_client, hal_thermal_server)
 binder_call(hal_thermal_server, hal_thermal_client)
 
-add_hwservice(hal_thermal_server, hal_thermal_hwservice)
-hal_attribute_hwservice_client(hal_thermal, hal_thermal_hwservice)
+hal_attribute_hwservice(hal_thermal, hal_thermal_hwservice)
diff --git a/public/hal_tv_cec.te b/public/hal_tv_cec.te
index 9ee2e3eedf27d9bfbc0f34b39a0fb342e0e2000a..658490474a7903b440bccfb8d88bb873adb08b7a 100644
--- a/public/hal_tv_cec.te
+++ b/public/hal_tv_cec.te
@@ -2,5 +2,4 @@
 binder_call(hal_tv_cec_client, hal_tv_cec_server)
 binder_call(hal_tv_cec_server, hal_tv_cec_client)
 
-add_hwservice(hal_tv_cec_server, hal_tv_cec_hwservice)
-hal_attribute_hwservice_client(hal_tv_cec, hal_tv_cec_hwservice)
+hal_attribute_hwservice(hal_tv_cec, hal_tv_cec_hwservice)
diff --git a/public/hal_tv_input.te b/public/hal_tv_input.te
index cee55bde33436b46e18a9eb19c62d99e8d4f3583..5a5bdda167d0d58fc4b07a73aac5d3cfb04d98f0 100644
--- a/public/hal_tv_input.te
+++ b/public/hal_tv_input.te
@@ -2,5 +2,4 @@
 binder_call(hal_tv_input_client, hal_tv_input_server)
 binder_call(hal_tv_input_server, hal_tv_input_client)
 
-add_hwservice(hal_tv_input_server, hal_tv_input_hwservice)
-hal_attribute_hwservice_client(hal_tv_input, hal_tv_input_hwservice)
+hal_attribute_hwservice(hal_tv_input, hal_tv_input_hwservice)
diff --git a/public/hal_usb.te b/public/hal_usb.te
index 52fdce224d01c8a6b870b368ccbe23b5269b3f1c..b8034b88eacd88a543d75fb751c5edc8206dee41 100644
--- a/public/hal_usb.te
+++ b/public/hal_usb.te
@@ -2,8 +2,7 @@
 binder_call(hal_usb_client, hal_usb_server)
 binder_call(hal_usb_server, hal_usb_client)
 
-add_hwservice(hal_usb_server, hal_usb_hwservice)
-hal_attribute_hwservice_client(hal_usb, hal_usb_hwservice)
+hal_attribute_hwservice(hal_usb, hal_usb_hwservice)
 
 allow hal_usb self:netlink_kobject_uevent_socket create;
 allow hal_usb self:netlink_kobject_uevent_socket setopt;
diff --git a/public/hal_usb_gadget.te b/public/hal_usb_gadget.te
index 41683b0cd1c31988b97cfa88cecf8bdd91401318..a474652f7a6a5f824885d3f21c2b9904503e483b 100644
--- a/public/hal_usb_gadget.te
+++ b/public/hal_usb_gadget.te
@@ -2,8 +2,7 @@
 binder_call(hal_usb_gadget_client, hal_usb_gadget_server)
 binder_call(hal_usb_gadget_server, hal_usb_gadget_client)
 
-add_hwservice(hal_usb_gadget_server, hal_usb_gadget_hwservice)
-hal_attribute_hwservice_client(hal_usb_gadget, hal_usb_gadget_hwservice)
+hal_attribute_hwservice(hal_usb_gadget, hal_usb_gadget_hwservice)
 
 # Configuring usb gadget functions
 allow hal_usb_gadget_server configfs:lnk_file { read create unlink};
diff --git a/public/hal_vehicle.te b/public/hal_vehicle.te
index d021da3440b3c5de7889f86583859e1ba6e76fc2..6855d1469c3346168cdedc0aefde1f082dc53031 100644
--- a/public/hal_vehicle.te
+++ b/public/hal_vehicle.te
@@ -2,6 +2,5 @@
 binder_call(hal_vehicle_client, hal_vehicle_server)
 binder_call(hal_vehicle_server, hal_vehicle_client)
 
-add_hwservice(hal_vehicle_server, hal_vehicle_hwservice)
 
-hal_attribute_hwservice_client(hal_vehicle, hal_vehicle_hwservice)
+hal_attribute_hwservice(hal_vehicle, hal_vehicle_hwservice)
diff --git a/public/hal_vibrator.te b/public/hal_vibrator.te
index ba6830d7002cc4d923c7310715efb5ba3c0aa007..ab6138d3f638ad865af55c4188baee6aeafcbb5d 100644
--- a/public/hal_vibrator.te
+++ b/public/hal_vibrator.te
@@ -1,8 +1,7 @@
 # HwBinder IPC from client to server
 binder_call(hal_vibrator_client, hal_vibrator_server)
 
-add_hwservice(hal_vibrator_server, hal_vibrator_hwservice)
-hal_attribute_hwservice_client(hal_vibrator, hal_vibrator_hwservice)
+hal_attribute_hwservice(hal_vibrator, hal_vibrator_hwservice)
 
 # vibrator sysfs rw access
 allow hal_vibrator sysfs_vibrator:file rw_file_perms;
diff --git a/public/hal_vr.te b/public/hal_vr.te
index 4afe3cdeb1a92deab927b9f1813bdad9dac554aa..e52c77fbaa3cb6d0edf418e3500be88dc80e3f9a 100644
--- a/public/hal_vr.te
+++ b/public/hal_vr.te
@@ -2,5 +2,4 @@
 binder_call(hal_vr_client, hal_vr_server)
 binder_call(hal_vr_server, hal_vr_client)
 
-add_hwservice(hal_vr_server, hal_vr_hwservice)
-hal_attribute_hwservice_client(hal_vr, hal_vr_hwservice)
+hal_attribute_hwservice(hal_vr, hal_vr_hwservice)
diff --git a/public/hal_weaver.te b/public/hal_weaver.te
index 405321def16bfa9f5cbea3d6afa5704642a80599..36d1306e2b75069c2970fd5cc2fc0a20ad7b06bd 100644
--- a/public/hal_weaver.te
+++ b/public/hal_weaver.te
@@ -1,5 +1,4 @@
 # HwBinder IPC from client to server
 binder_call(hal_weaver_client, hal_weaver_server)
 
-add_hwservice(hal_weaver_server, hal_weaver_hwservice)
-hal_attribute_hwservice_client(hal_weaver, hal_weaver_hwservice)
+hal_attribute_hwservice(hal_weaver, hal_weaver_hwservice)
diff --git a/public/hal_wifi.te b/public/hal_wifi.te
index 45738e20925cb32a583297de8075b521ee666062..f735be51bd4699fef8af8c71d4e63553d6342fc9 100644
--- a/public/hal_wifi.te
+++ b/public/hal_wifi.te
@@ -2,8 +2,7 @@
 binder_call(hal_wifi_client, hal_wifi_server)
 binder_call(hal_wifi_server, hal_wifi_client)
 
-add_hwservice(hal_wifi_server, hal_wifi_hwservice)
-hal_attribute_hwservice_client(hal_wifi, hal_wifi_hwservice)
+hal_attribute_hwservice(hal_wifi, hal_wifi_hwservice)
 
 r_dir_file(hal_wifi, proc_net_type)
 r_dir_file(hal_wifi, sysfs_type)
diff --git a/public/hal_wifi_hostapd.te b/public/hal_wifi_hostapd.te
index ea84a36e2a42102093032194724a5e4ea9bdb4d4..12d72b649f75ac75480396b87f1a61f084d0a3d1 100644
--- a/public/hal_wifi_hostapd.te
+++ b/public/hal_wifi_hostapd.te
@@ -2,8 +2,7 @@
 binder_call(hal_wifi_hostapd_client, hal_wifi_hostapd_server)
 binder_call(hal_wifi_hostapd_server, hal_wifi_hostapd_client)
 
-add_hwservice(hal_wifi_hostapd_server, hal_wifi_hostapd_hwservice)
-hal_attribute_hwservice_client(hal_wifi_hostapd, hal_wifi_hostapd_hwservice)
+hal_attribute_hwservice(hal_wifi_hostapd, hal_wifi_hostapd_hwservice)
 
 allow hal_wifi_hostapd_server self:global_capability_class_set { net_admin net_raw };
 
diff --git a/public/hal_wifi_offload.te b/public/hal_wifi_offload.te
index 1b75711d7308fa95baf70c54cf35640e7ec19b54..765e72a820300cd961718c0bb7f60dedcd24f051 100644
--- a/public/hal_wifi_offload.te
+++ b/public/hal_wifi_offload.te
@@ -2,8 +2,7 @@
 binder_call(hal_wifi_offload_client, hal_wifi_offload_server)
 binder_call(hal_wifi_offload_server, hal_wifi_offload_client)
 
-add_hwservice(hal_wifi_offload_server, hal_wifi_offload_hwservice)
-hal_attribute_hwservice_client(hal_wifi_offload, hal_wifi_offload_hwservice)
+hal_attribute_hwservice(hal_wifi_offload, hal_wifi_offload_hwservice)
 
 r_dir_file(hal_wifi_offload, proc_net_type)
 r_dir_file(hal_wifi_offload, sysfs_type)
diff --git a/public/hal_wifi_supplicant.te b/public/hal_wifi_supplicant.te
index 87a061f4db582459ee2a7f0e4ce8386b218bb7ae..6004c3327d266ed85cd66615ddad3db50690a0f1 100644
--- a/public/hal_wifi_supplicant.te
+++ b/public/hal_wifi_supplicant.te
@@ -2,8 +2,7 @@
 binder_call(hal_wifi_supplicant_client, hal_wifi_supplicant_server)
 binder_call(hal_wifi_supplicant_server, hal_wifi_supplicant_client)
 
-add_hwservice(hal_wifi_supplicant_server, hal_wifi_supplicant_hwservice)
-hal_attribute_hwservice_client(hal_wifi_supplicant, hal_wifi_supplicant_hwservice)
+hal_attribute_hwservice(hal_wifi_supplicant, hal_wifi_supplicant_hwservice)
 
 # in addition to ioctls whitelisted for all domains, grant hal_wifi_supplicant priv_sock_ioctls.
 allowxperm hal_wifi_supplicant self:udp_socket ioctl priv_sock_ioctls;
diff --git a/public/te_macros b/public/te_macros
index ffb84281f915cd7f89257aad5d93fafab2ed7722..949cad96a188805beaa76ce54cfa5a9133333056 100644
--- a/public/te_macros
+++ b/public/te_macros
@@ -605,13 +605,15 @@ define(`add_hwservice', `
 ')
 
 ###########################################
-# hal_attribute_hwservice_client(attribute, service)
+# hal_attribute_hwservice(attribute, service)
 # Ability for domain to get a service to hwservice_manager
 # and find it. It also creates a neverallow preventing
 # others from adding it.
 #
 # Used to pair hal_foo_client with hal_foo_hwservice
-define(`hal_attribute_hwservice_client', `
+define(`hal_attribute_hwservice', `
   allow $1_client $2:hwservice_manager find;
   neverallow { domain -$1_client -$1_server } $2:hwservice_manager find;
+
+  add_hwservice($1_server, $2)
 ')