diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 5cceb8a..7c7337f 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -84,14 +84,14 @@
     };
     virtual ~NfcClientCallback() = default;
     Return<void> sendEvent(
-            ::android::hardware::nfc::V1_0::nfc_event_t event,
-            ::android::hardware::nfc::V1_0::nfc_status_t event_status) override {
+            ::android::hardware::nfc::V1_0::NfcEvent event,
+            ::android::hardware::nfc::V1_0::NfcStatus event_status) override {
       mEventCallback ((UINT8)event, (tHAL_NFC_STATUS) event_status);
       return Void();
     };
-    Return<void> sendData(const ::android::hardware::nfc::V1_0::nfc_data_t &data ) override {
-      ::android::hardware::nfc::V1_0::nfc_data_t copy = data;
-      mDataCallback(copy.data.size(), &copy.data[0]);
+    Return<void> sendData(const ::android::hardware::nfc::V1_0::NfcData &data ) override {
+      ::android::hardware::nfc::V1_0::NfcData copy = data;
+      mDataCallback(copy.size(), &copy[0]);
       return Void();
     };
   private:
@@ -492,8 +492,8 @@
 {
     const char* func = "NfcAdaptation::HalWrite";
     ALOGD ("%s", func);
-    ::android::hardware::nfc::V1_0::nfc_data_t data;
-    data.data.setToExternal(p_data, data_len);
+    ::android::hardware::nfc::V1_0::NfcData data;
+    data.setToExternal(p_data, data_len);
     mHal->write(data);
 }
 
@@ -513,7 +513,7 @@
     hidl_vec<uint8_t> data;
     data.setToExternal(p_core_init_rsp_params, data_len);
 
-    mHal->core_initialized(data);
+    mHal->coreInitialized(data);
 }
 
 /*******************************************************************************
@@ -534,7 +534,7 @@
     const char* func = "NfcAdaptation::HalPrediscover";
     ALOGD ("%s", func);
     BOOLEAN retval = FALSE;
-    mHal->pre_discover();
+    mHal->prediscover();
     return retval;
 }
 
@@ -555,7 +555,7 @@
 {
     const char* func = "NfcAdaptation::HalControlGranted";
     ALOGD ("%s", func);
-    mHal->control_granted();
+    mHal->controlGranted();
 }
 
 /*******************************************************************************
@@ -571,7 +571,7 @@
 {
     const char* func = "NfcAdaptation::HalPowerCycle";
     ALOGD ("%s", func);
-    mHal->power_cycle();
+    mHal->powerCycle();
 }
 
 /*******************************************************************************
