diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
index 4a49197..eed29e2 100644
--- a/src/wps/wps_registrar.c
+++ b/src/wps/wps_registrar.c
@@ -310,13 +310,16 @@ static void wps_registrar_add_pbc_session(struct wps_registrar *reg,


  static void wps_registrar_remove_pbc_session(struct wps_registrar *reg,
-					     const u8 *uuid_e)
+					     const u8 *uuid_e,
+					     const u8 *p2p_dev_addr)
  {
  	struct wps_pbc_session *pbc, *prev = NULL, *tmp;

  	pbc = reg->pbc_sessions;
  	while (pbc) {
-		if (os_memcmp(pbc->uuid_e, uuid_e, WPS_UUID_LEN) == 0) {
+		if (os_memcmp(pbc->uuid_e, uuid_e, WPS_UUID_LEN) == 0 ||
+		    (!is_zero_ether_addr(reg->p2p_dev_addr)&&
+		     !os_memcmp(reg->p2p_dev_addr, p2p_dev_addr, ETH_ALEN))) {
  			if (prev)
  				prev->next = pbc->next;
  			else
@@ -3035,7 +3038,8 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps,

  	if (wps->pbc) {
  		wps_registrar_remove_pbc_session(wps->wps->registrar,
-						 wps->uuid_e);
+						 wps->uuid_e,
+						 wps->p2p_dev_addr);
  		wps_registrar_pbc_completed(wps->wps->registrar);
  	} else {
  		wps_registrar_pin_completed(wps->wps->registrar);
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index f3108c4..8c6978d 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -682,7 +682,7 @@ static void p2p_go_configured(void *ctx, void *data)
  	}
  	if (params->wps_method == WPS_PBC)
  		wpa_supplicant_ap_wps_pbc(wpa_s, params->peer_interface_addr,
-					  NULL);
+					  params->peer_device_addr);
  	else if (wpa_s->p2p_pin[0])
  		wpa_supplicant_ap_wps_pin(wpa_s, params->peer_interface_addr,
  					  wpa_s->p2p_pin, NULL, 0);
