u32 reg;
 
        if (queue->qid == QID_BEACON) {
-               rt2x00pci_register_write(rt2x00dev, CSR14, 0);
+               rt2x00pci_register_read(rt2x00dev, CSR14, ®);
+               rt2x00_set_field32(®, CSR14_TSF_COUNT, 0);
+               rt2x00_set_field32(®, CSR14_TBCN, 0);
+               rt2x00_set_field32(®, CSR14_BEACON_GEN, 0);
+               rt2x00pci_register_write(rt2x00dev, CSR14, reg);
        } else {
                rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
                rt2x00_set_field32(®, TXCSR0_ABORT, 1);
 
        u32 reg;
 
        if (queue->qid == QID_BEACON) {
-               rt2x00pci_register_write(rt2x00dev, CSR14, 0);
+               rt2x00pci_register_read(rt2x00dev, CSR14, ®);
+               rt2x00_set_field32(®, CSR14_TSF_COUNT, 0);
+               rt2x00_set_field32(®, CSR14_TBCN, 0);
+               rt2x00_set_field32(®, CSR14_BEACON_GEN, 0);
+               rt2x00pci_register_write(rt2x00dev, CSR14, reg);
        } else {
                rt2x00pci_register_read(rt2x00dev, TXCSR0, ®);
                rt2x00_set_field32(®, TXCSR0_ABORT, 1);
 
 
 static void rt2500usb_kill_tx_queue(struct data_queue *queue)
 {
-       if (queue->qid == QID_BEACON)
-               rt2500usb_register_write(queue->rt2x00dev, TXRX_CSR19, 0);
+       struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
+       u16 reg;
+
+       if (queue->qid == QID_BEACON) {
+               rt2500usb_register_read(rt2x00dev, TXRX_CSR19, ®);
+               rt2x00_set_field16(®, TXRX_CSR19_TSF_COUNT, 0);
+               rt2x00_set_field16(®, TXRX_CSR19_TBCN, 0);
+               rt2x00_set_field16(®, TXRX_CSR19_BEACON_GEN, 0);
+               rt2500usb_register_write(rt2x00dev, TXRX_CSR19, reg);
+       }
 
        rt2x00usb_kill_tx_queue(queue);
 }
 
        u32 reg;
 
        if (queue->qid == QID_BEACON) {
-               rt2800_register_write(rt2x00dev, BCN_TIME_CFG, 0);
+               rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
+               rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 0);
+               rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 0);
+               rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
+               rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
                return;
        }
 
 
 
 static void rt2800usb_kill_tx_queue(struct data_queue *queue)
 {
-       if (queue->qid == QID_BEACON)
-               rt2x00usb_register_write(queue->rt2x00dev, BCN_TIME_CFG, 0);
+       struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
+       u32 reg;
+
+       if (queue->qid == QID_BEACON) {
+               rt2800_register_read(rt2x00dev, BCN_TIME_CFG, ®);
+               rt2x00_set_field32(®, BCN_TIME_CFG_TSF_TICKING, 0);
+               rt2x00_set_field32(®, BCN_TIME_CFG_TBTT_ENABLE, 0);
+               rt2x00_set_field32(®, BCN_TIME_CFG_BEACON_GEN, 0);
+               rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
+       }
 
        rt2x00usb_kill_tx_queue(queue);
 }
 
        u32 reg;
 
        if (queue->qid == QID_BEACON) {
-               rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, 0);
+               rt2x00pci_register_read(rt2x00dev, TXRX_CSR9, ®);
+               rt2x00_set_field32(®, TXRX_CSR9_TSF_TICKING, 0);
+               rt2x00_set_field32(®, TXRX_CSR9_TBTT_ENABLE, 0);
+               rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0);
+               rt2x00pci_register_write(rt2x00dev, TXRX_CSR9, reg);
                return;
        }
 
 
 
 static void rt73usb_kill_tx_queue(struct data_queue *queue)
 {
-       if (queue->qid == QID_BEACON)
-               rt2x00usb_register_write(queue->rt2x00dev, TXRX_CSR9, 0);
+       struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
+       u32 reg;
+
+       if (queue->qid == QID_BEACON) {
+               rt2x00usb_register_read(rt2x00dev, TXRX_CSR9, ®);
+               rt2x00_set_field32(®, TXRX_CSR9_TSF_TICKING, 0);
+               rt2x00_set_field32(®, TXRX_CSR9_TBTT_ENABLE, 0);
+               rt2x00_set_field32(®, TXRX_CSR9_BEACON_GEN, 0);
+               rt2x00usb_register_write(rt2x00dev, TXRX_CSR9, reg);
+       }
 
        rt2x00usb_kill_tx_queue(queue);
 }