rx_status.noise = priv->noise;
        /* XX correct? */
        rx_status.qual = (100 * hdr->rssi) / 127;
+       if (hdr->rate & 0x10)
+               rx_status.flag |= RX_FLAG_SHORTPRE;
        rx_status.rate_idx = (dev->conf.channel->band == IEEE80211_BAND_2GHZ ?
                        hdr->rate : (hdr->rate - 4)) & 0xf;
        rx_status.freq = freq;
        unsigned long flags;
        u32 freed = 0, last_addr = priv->rx_start;
 
-       if (!skb || !dev)
+       if (unlikely(!skb || !dev || !skb_queue_len(&priv->tx_queue)))
                return;
 
        spin_lock_irqsave(&priv->tx_queue.lock, flags);
        txhdr->key_type = 0;
        txhdr->key_len = 0;
        txhdr->hw_queue = queue;
-       txhdr->backlog = 32;
+       if (current_queue)
+               txhdr->backlog = current_queue->len;
+       else
+               txhdr->backlog = 0;
        memset(txhdr->durations, 0, sizeof(txhdr->durations));
        txhdr->tx_antenna = (info->antenna_sel_tx == 0) ?
                2 : info->antenna_sel_tx - 1;
        while ((skb = skb_dequeue(&priv->tx_queue)))
                kfree_skb(skb);
 
-       kfree(priv->cached_beacon);
        priv->cached_beacon = NULL;
        priv->stop(dev);
        priv->tsf_high32 = priv->tsf_low32 = 0;
 
        P54_DECRYPT_NOCKIPMIC,
        P54_DECRYPT_FAIL_WEP,
        P54_DECRYPT_FAIL_TKIP,
-       P54_DECRYPT_FAIL_MICAHEL,
+       P54_DECRYPT_FAIL_MICHAEL,
        P54_DECRYPT_FAIL_CKIPKP,
        P54_DECRYPT_FAIL_CKIPMIC,
        P54_DECRYPT_FAIL_AESCCMP