diff --git a/hostapd/Android.mk b/hostapd/Android.mk
index 17cc391..b3deedd 100644
--- a/hostapd/Android.mk
+++ b/hostapd/Android.mk
@@ -27,6 +27,9 @@
 # Disable unused parameter warnings
 L_CFLAGS += -Wno-unused-parameter
 
+# Disable macro redefined warnings
+L_CFLAGS += -Wno-macro-redefined
+
 # Set Android extended P2P functionality
 L_CFLAGS += -DANDROID_P2P
 
@@ -152,7 +155,6 @@
 
 OBJS += src/eapol_auth/eapol_auth_sm.c
 
-
 ifndef CONFIG_NO_DUMP_STATE
 # define HOSTAPD_DUMP_STATE to include support for dumping internal state
 # through control interface commands (undefine it, if you want to save in
diff --git a/wpa_supplicant/Android.mk b/wpa_supplicant/Android.mk
index 91f42dc..f15121f 100644
--- a/wpa_supplicant/Android.mk
+++ b/wpa_supplicant/Android.mk
@@ -25,6 +25,9 @@
 # Disable unused parameter warnings
 L_CFLAGS += -Wno-unused-parameter
 
+# Disable redefined macro warnings
+L_CFLAGS += -Wno-macro-redefined
+
 # Set Android extended P2P functionality
 L_CFLAGS += -DANDROID_P2P
 
diff --git a/wpa_supplicant/hidl/hidl_manager.cpp b/wpa_supplicant/hidl/hidl_manager.cpp
index bd63f36..703bf25 100644
--- a/wpa_supplicant/hidl/hidl_manager.cpp
+++ b/wpa_supplicant/hidl/hidl_manager.cpp
@@ -414,16 +414,28 @@
 		if (addHidlObjectToMap<P2pIface>(
 			wpa_s->ifname,
 			new P2pIface(wpa_s->global, wpa_s->ifname),
-			p2p_iface_object_map_))
+			p2p_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register P2P interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		p2p_iface_callbacks_map_[wpa_s->ifname] =
 		    std::vector<android::sp<ISupplicantP2pIfaceCallback>>();
 	} else {
 		if (addHidlObjectToMap<StaIface>(
 			wpa_s->ifname,
 			new StaIface(wpa_s->global, wpa_s->ifname),
-			sta_iface_object_map_))
+			sta_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register STA interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		sta_iface_callbacks_map_[wpa_s->ifname] =
 		    std::vector<android::sp<ISupplicantStaIfaceCallback>>();
 	}
@@ -449,16 +461,28 @@
 
 	if (isP2pIface(wpa_s)) {
 		if (removeHidlObjectFromMap(
-			wpa_s->ifname, p2p_iface_object_map_))
+			wpa_s->ifname, p2p_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister P2P interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		if (removeAllIfaceCallbackHidlObjectsFromMap(
 			wpa_s->ifname, p2p_iface_callbacks_map_)) {
 			return 1;
 		}
 	} else {
 		if (removeHidlObjectFromMap(
-			wpa_s->ifname, sta_iface_object_map_))
+			wpa_s->ifname, sta_iface_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister STA interface with HIDL "
+			    "control: %s",
+			    wpa_s->ifname);
 			return 1;
+		}
 		if (removeAllIfaceCallbackHidlObjectsFromMap(
 			wpa_s->ifname, sta_iface_callbacks_map_)) {
 			return 1;
@@ -495,8 +519,14 @@
 		if (addHidlObjectToMap<P2pNetwork>(
 			network_key,
 			new P2pNetwork(wpa_s->global, wpa_s->ifname, ssid->id),
-			p2p_network_object_map_))
+			p2p_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register P2P network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		p2p_network_callbacks_map_[network_key] =
 		    std::vector<android::sp<ISupplicantP2pNetworkCallback>>();
 		// Invoke the |onNetworkAdded| method on all registered
@@ -510,8 +540,14 @@
 		if (addHidlObjectToMap<StaNetwork>(
 			network_key,
 			new StaNetwork(wpa_s->global, wpa_s->ifname, ssid->id),
-			sta_network_object_map_))
+			sta_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to register STA network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		sta_network_callbacks_map_[network_key] =
 		    std::vector<android::sp<ISupplicantStaNetworkCallback>>();
 		// Invoke the |onNetworkAdded| method on all registered
@@ -545,8 +581,15 @@
 	    getNetworkObjectMapKey(wpa_s->ifname, ssid->id);
 
 	if (isP2pIface(wpa_s)) {
-		if (removeHidlObjectFromMap(network_key, p2p_iface_object_map_))
+		if (removeHidlObjectFromMap(
+			network_key, p2p_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister P2P network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		if (removeAllNetworkCallbackHidlObjectsFromMap(
 			network_key, p2p_network_callbacks_map_))
 			return 1;
@@ -559,8 +602,15 @@
 			&ISupplicantP2pIfaceCallback::onNetworkRemoved,
 			std::placeholders::_1, ssid->id));
 	} else {
-		if (removeHidlObjectFromMap(network_key, sta_iface_object_map_))
+		if (removeHidlObjectFromMap(
+			network_key, sta_network_object_map_)) {
+			wpa_printf(
+			    MSG_ERROR,
+			    "Failed to unregister STA network with HIDL "
+			    "control: %d",
+			    ssid->id);
 			return 1;
+		}
 		if (removeAllNetworkCallbackHidlObjectsFromMap(
 			network_key, sta_network_callbacks_map_))
 			return 1;
diff --git a/wpa_supplicant/hidl/sta_iface.cpp b/wpa_supplicant/hidl/sta_iface.cpp
index 8ce80bb..ee38088 100644
--- a/wpa_supplicant/hidl/sta_iface.cpp
+++ b/wpa_supplicant/hidl/sta_iface.cpp
@@ -37,7 +37,7 @@
 constexpr char kSetBtCoexistenceScanStop[] = "BTCOEXSCAN-STOP";
 constexpr char kSetSupendModeEnabled[] = "SETSUSPENDMODE 1";
 constexpr char kSetSupendModeDisabled[] = "SETSUSPENDMODE 0";
-constexpr char kSetCountryCode[] = "COUNTRY ";
+constexpr char kSetCountryCode[] = "COUNTRY";
 constexpr uint32_t kExtRadioWorkDefaultTimeoutInSec = static_cast<uint32_t>(
     ISupplicantStaIface::ExtRadioWorkDefaults::TIMEOUT_IN_SECS);
 constexpr char kExtRadioWorkNamePrefix[] = "ext:";
diff --git a/wpa_supplicant/hidl/sta_network.cpp b/wpa_supplicant/hidl/sta_network.cpp
index b58d85b..e985994 100644
--- a/wpa_supplicant/hidl/sta_network.cpp
+++ b/wpa_supplicant/hidl/sta_network.cpp
@@ -1575,14 +1575,7 @@
     const std::vector<uint8_t> &identity)
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
-	// Convert the incoming parameters to a string to pass to
-	// wpa_supplicant.
-	uint32_t identity_hex_len = identity.size() * 2 + 1;
-	std::vector<char> identity_hex(identity_hex_len);
-	wpa_snprintf_hex(
-	    identity_hex.data(), identity_hex.size(), identity.data(),
-	    identity.size());
-	std::string ctrl_rsp_param = identity_hex.data();
+	std::string ctrl_rsp_param(identity.begin(), identity.end());
 	enum wpa_ctrl_req_type rtype = WPA_CTRL_REQ_EAP_IDENTITY;
 	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
 	if (wpa_supplicant_ctrl_rsp_handle(
