struct wl3501_join_req sig = {
                .sig_id           = WL3501_SIG_JOIN_REQ,
                .timeout          = 10,
-               .ds_pset = {
+               .req.ds_pset = {
                        .el = {
                                .id  = IW_MGMT_INFO_ELEMENT_DS_PARAMETER_SET,
                                .len = 1,
                },
        };
 
-       memcpy(&sig.beacon_period, &this->bss_set[stas].beacon_period, 72);
+       memcpy(&sig.req, &this->bss_set[stas].req, sizeof(sig.req));
        return wl3501_esbq_exec(this, &sig, sizeof(sig));
 }
 
        if (sig.status == WL3501_STATUS_SUCCESS) {
                pr_debug("success");
                if ((this->net_type == IW_MODE_INFRA &&
-                    (sig.cap_info & WL3501_MGMT_CAPABILITY_ESS)) ||
+                    (sig.req.cap_info & WL3501_MGMT_CAPABILITY_ESS)) ||
                    (this->net_type == IW_MODE_ADHOC &&
-                    (sig.cap_info & WL3501_MGMT_CAPABILITY_IBSS)) ||
+                    (sig.req.cap_info & WL3501_MGMT_CAPABILITY_IBSS)) ||
                    this->net_type == IW_MODE_AUTO) {
                        if (!this->essid.el.len)
                                matchflag = 1;
                        else if (this->essid.el.len == 3 &&
                                 !memcmp(this->essid.essid, "ANY", 3))
                                matchflag = 1;
-                       else if (this->essid.el.len != sig.ssid.el.len)
+                       else if (this->essid.el.len != sig.req.ssid.el.len)
                                matchflag = 0;
-                       else if (memcmp(this->essid.essid, sig.ssid.essid,
+                       else if (memcmp(this->essid.essid, sig.req.ssid.essid,
                                        this->essid.el.len))
                                matchflag = 0;
                        else
                                matchflag = 1;
                        if (matchflag) {
                                for (i = 0; i < this->bss_cnt; i++) {
-                                       if (ether_addr_equal_unaligned(this->bss_set[i].bssid, sig.bssid)) {
+                                       if (ether_addr_equal_unaligned(this->bss_set[i].req.bssid,
+                                                                      sig.req.bssid)) {
                                                matchflag = 0;
                                                break;
                                        }
                                }
                        }
                        if (matchflag && (i < 20)) {
-                               memcpy(&this->bss_set[i].beacon_period,
-                                      &sig.beacon_period, 73);
+                               memcpy(&this->bss_set[i].req,
+                                      &sig.req, sizeof(sig.req));
                                this->bss_cnt++;
                                this->rssi = sig.rssi;
+                               this->bss_set[i].rssi = sig.rssi;
                        }
                }
        } else if (sig.status == WL3501_STATUS_TIMEOUT) {
                        if (this->join_sta_bss < this->bss_cnt) {
                                const int i = this->join_sta_bss;
                                memcpy(this->bssid,
-                                      this->bss_set[i].bssid, ETH_ALEN);
-                               this->chan = this->bss_set[i].ds_pset.chan;
+                                      this->bss_set[i].req.bssid, ETH_ALEN);
+                               this->chan = this->bss_set[i].req.ds_pset.chan;
                                iw_copy_mgmt_info_element(&this->keep_essid.el,
-                                                    &this->bss_set[i].ssid.el);
+                                                    &this->bss_set[i].req.ssid.el);
                                wl3501_mgmt_auth(this);
                        }
                } else {
                        const int i = this->join_sta_bss;
 
-                       memcpy(&this->bssid, &this->bss_set[i].bssid, ETH_ALEN);
-                       this->chan = this->bss_set[i].ds_pset.chan;
+                       memcpy(&this->bssid, &this->bss_set[i].req.bssid, ETH_ALEN);
+                       this->chan = this->bss_set[i].req.ds_pset.chan;
                        iw_copy_mgmt_info_element(&this->keep_essid.el,
-                                                 &this->bss_set[i].ssid.el);
+                                                 &this->bss_set[i].req.ssid.el);
                        wl3501_online(dev);
                }
        } else {
        for (i = 0; i < this->bss_cnt; ++i) {
                iwe.cmd                 = SIOCGIWAP;
                iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-               memcpy(iwe.u.ap_addr.sa_data, this->bss_set[i].bssid, ETH_ALEN);
+               memcpy(iwe.u.ap_addr.sa_data, this->bss_set[i].req.bssid, ETH_ALEN);
                current_ev = iwe_stream_add_event(info, current_ev,
                                                  extra + IW_SCAN_MAX_DATA,
                                                  &iwe, IW_EV_ADDR_LEN);
                iwe.cmd           = SIOCGIWESSID;
                iwe.u.data.flags  = 1;
-               iwe.u.data.length = this->bss_set[i].ssid.el.len;
+               iwe.u.data.length = this->bss_set[i].req.ssid.el.len;
                current_ev = iwe_stream_add_point(info, current_ev,
                                                  extra + IW_SCAN_MAX_DATA,
                                                  &iwe,
-                                                 this->bss_set[i].ssid.essid);
+                                                 this->bss_set[i].req.ssid.essid);
                iwe.cmd    = SIOCGIWMODE;
-               iwe.u.mode = this->bss_set[i].bss_type;
+               iwe.u.mode = this->bss_set[i].req.bss_type;
                current_ev = iwe_stream_add_event(info, current_ev,
                                                  extra + IW_SCAN_MAX_DATA,
                                                  &iwe, IW_EV_UINT_LEN);
                iwe.cmd = SIOCGIWFREQ;
-               iwe.u.freq.m = this->bss_set[i].ds_pset.chan;
+               iwe.u.freq.m = this->bss_set[i].req.ds_pset.chan;
                iwe.u.freq.e = 0;
                current_ev = iwe_stream_add_event(info, current_ev,
                                                  extra + IW_SCAN_MAX_DATA,
                                                  &iwe, IW_EV_FREQ_LEN);
                iwe.cmd = SIOCGIWENCODE;
-               if (this->bss_set[i].cap_info & WL3501_MGMT_CAPABILITY_PRIVACY)
+               if (this->bss_set[i].req.cap_info & WL3501_MGMT_CAPABILITY_PRIVACY)
                        iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
                else
                        iwe.u.data.flags = IW_ENCODE_DISABLED;