diff --git a/wpa_supplicant/binder/network.cpp b/wpa_supplicant/binder/network.cpp
index 5f7d06c..24bed4c 100644
--- a/wpa_supplicant/binder/network.cpp
+++ b/wpa_supplicant/binder/network.cpp
@@ -62,6 +62,32 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (ssid.empty() || ssid.size() > SSID_MAX_LEN) {
+		const std::string error_msg = "Invalid SSID value length: " +
+					      std::to_string(ssid.size()) + ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	// Free any existing ssid string.
+	if (wpa_ssid->ssid) {
+		os_free(wpa_ssid);
+	}
+	// This array needs to be a null terminated!.
+	wpa_ssid->ssid = (uint8_t *)os_malloc(ssid.size() + 1);
+	if (!wpa_ssid->ssid) {
+		return android::binder::Status::fromExceptionCode(
+		    ERROR_GENERIC, "Memory allocation failed.");
+	}
+	os_memcpy(wpa_ssid->ssid, ssid.data(), ssid.size());
+	wpa_ssid->ssid[ssid.size()] = '\0';
+	wpa_ssid->ssid_len = ssid.size();
+	if (wpa_ssid->passphrase) {
+		wpa_config_update_psk(wpa_ssid);
+	}
+	wpa_hexdump_ascii(
+	    MSG_MSGDUMP, "SSID", wpa_ssid->ssid, wpa_ssid->ssid_len);
 	return android::binder::Status::ok();
 }
 
@@ -69,6 +95,24 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (!bssid.empty() && bssid.size() != BSSID_LEN) {
+		const std::string error_msg = "Invalid BSSID value length: " +
+					      std::to_string(bssid.size()) +
+					      ".";
+		return android::binder::Status::fromExceptionCode(
+		    android::binder::Status::EX_ILLEGAL_ARGUMENT,
+		    error_msg.c_str());
+	}
+	// Empty array is used to clear out the BSSID value.
+	if (bssid.empty()) {
+		wpa_ssid->bssid_set = 0;
+		wpa_printf(MSG_MSGDUMP, "BSSID any");
+	} else {
+		os_memcpy(wpa_ssid->bssid, bssid.data(), ETH_ALEN);
+		wpa_ssid->bssid_set = 1;
+		wpa_hexdump(MSG_MSGDUMP, "BSSID", wpa_ssid->bssid, ETH_ALEN);
+	}
 	return android::binder::Status::ok();
 }
 
@@ -76,6 +120,8 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	wpa_ssid->scan_ssid = enable ? 1 : 0;
 	return android::binder::Status::ok();
 }
 
@@ -147,6 +193,8 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	ssid->assign(wpa_ssid->ssid, wpa_ssid->ssid + wpa_ssid->ssid_len);
 	return android::binder::Status::ok();
 }
 
@@ -154,6 +202,12 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	if (wpa_ssid->bssid_set) {
+		bssid->assign(wpa_ssid->bssid, wpa_ssid->bssid + ETH_ALEN);
+	} else {
+		bssid->clear();
+	}
 	return android::binder::Status::ok();
 }
 
@@ -161,6 +215,8 @@
 {
 	struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
 	RETURN_IF_NETWORK_INVALID(wpa_ssid);
+
+	*enable = (wpa_ssid->scan_ssid == 1);
 	return android::binder::Status::ok();
 }
 
@@ -237,13 +293,17 @@
 	if (wpa_ssid->disabled == 2) {
 		return android::binder::Status::fromServiceSpecificError(
 		    ERROR_GENERIC,
-		    "Cannot use Select with persistent P2P group");
+		    "Cannot use Enable with persistent P2P group");
 	}
 
 	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
-	wpa_s->scan_min_time.sec = 0;
-	wpa_s->scan_min_time.usec = 0;
-	wpa_supplicant_select_network(wpa_s, wpa_ssid);
+	if (no_connect) {
+		wpa_ssid->disabled = 0;
+	} else {
+		wpa_s->scan_min_time.sec = 0;
+		wpa_s->scan_min_time.usec = 0;
+		wpa_supplicant_enable_network(wpa_s, wpa_ssid);
+	}
 	return android::binder::Status::ok();
 }
 
@@ -271,17 +331,13 @@
 	if (wpa_ssid->disabled == 2) {
 		return android::binder::Status::fromServiceSpecificError(
 		    ERROR_GENERIC,
-		    "Cannot use Enable with persistent P2P group");
+		    "Cannot use Select with persistent P2P group");
 	}
 
 	struct wpa_supplicant *wpa_s = retrieveIfacePtr();
-	if (no_connect) {
-		wpa_ssid->disabled = 0;
-	} else {
-		wpa_s->scan_min_time.sec = 0;
-		wpa_s->scan_min_time.usec = 0;
-		wpa_supplicant_enable_network(wpa_s, wpa_ssid);
-	}
+	wpa_s->scan_min_time.sec = 0;
+	wpa_s->scan_min_time.usec = 0;
+	wpa_supplicant_select_network(wpa_s, wpa_ssid);
 	return android::binder::Status::ok();
 }
 
