Index: net80211/ieee80211_input.c
===================================================================
--- net80211/ieee80211_input.c	(revision 1454)
+++ net80211/ieee80211_input.c	(working copy)
@@ -2496,10 +2496,35 @@
 				ni = ieee80211_add_neighbor(vap, wh, &scan);
 			} else {
 				/*
-				 * Record tsf for potential resync.
+				 * Copy data from beacon to neighbor table.
+				 * Some of this information might change after
+				 * ieee80211_add_neighbor(), so we just copy
+				 * everything over to be safe.
 				 */
+				ni->ni_esslen = scan.ssid[1];
+				memcpy(ni->ni_essid, scan.ssid + 2, scan.ssid[1]);
+				IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
 				memcpy(ni->ni_tstamp.data, scan.tstamp,
 					sizeof(ni->ni_tstamp));
+				ni->ni_intval = scan.bintval;
+				ni->ni_capinfo = scan.capinfo;
+				ni->ni_chan = ic->ic_curchan;
+				ni->ni_fhdwell = scan.fhdwell;
+				ni->ni_fhindex = scan.fhindex;
+				ni->ni_erp = scan.erp;
+				ni->ni_timoff = scan.timoff;
+				if (scan.wme != NULL)
+					ieee80211_saveie(&ni->ni_wme_ie, scan.wme);
+				if (scan.wpa != NULL)
+					ieee80211_saveie(&ni->ni_wpa_ie, scan.wpa);
+				if (scan.rsn != NULL)
+					ieee80211_saveie(&ni->ni_rsn_ie, scan.rsn);
+				if (scan.ath != NULL)
+					ieee80211_saveath(ni, scan.ath);
+
+				/* NB: must be after ni_chan is setup */
+				ieee80211_setup_rates(ni, scan.rates,
+					scan.xrates, IEEE80211_F_DOSORT);
 			}
 			if (ni != NULL) {
 				ni->ni_rssi = rssi;
