diff -ur ../rt2500-cvs-20050724/Module/rtmp_data.c ./Module/rtmp_data.c
--- ../rt2500-cvs-20050724/Module/rtmp_data.c	2005-07-15 17:40:02.000000000 +0200
+++ ./Module/rtmp_data.c	2005-07-26 19:04:28.000000000 +0200
@@ -2741,6 +2741,23 @@
         return (NDIS_STATUS_FAILURE);
     }
 
+    if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+    {
+	pAdapter->TxRing[pAdapter->CurEncryptIndex].FrameType = BTYPE_DATA;
+	pDest = (PUCHAR) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_data_addr;              
+	pTxD  = (PTXD_STRUC) pAdapter->TxRing[pAdapter->CurEncryptIndex].va_addr;
+	MlmeSetPsmBit(pAdapter, PWR_ACTIVE);
+	memcpy(pDest,skb->data,skb->len);
+	RTMPWriteTxDescriptor(pTxD, TRUE, CIPHER_NONE, FALSE, FALSE, FALSE, SHORT_RETRY, IFS_BACKOFF, pAdapter->PortCfg.TxRate, 4, skb->len, pAdapter->PortCfg.TxPreambleInUsed, AccessCategory);
+
+	pAdapter->CurEncryptIndex++;
+	if (pAdapter->CurEncryptIndex >= TX_RING_SIZE)
+		pAdapter->CurEncryptIndex = 0;
+	pAdapter->RalinkCounters.EncryptCount++;
+
+	goto skip_all_this_shit;
+    }
+
 	if (EnableTxBurst == 1)
 		FrameGap = IFS_SIFS;
 	else
@@ -2779,6 +2796,7 @@
 	
 	//
 	// Start making 802.11 frame header
+	// this whole code is just a pathetic mess
 	//
 	memset(&Header_802_11, 0, sizeof(HEADER_802_11)); // Initialize 802.11 header for each fragment
 	if (INFRA_ON(pAdapter))
@@ -3411,6 +3429,7 @@
 		
 	}	while (NumberRequired > 0);
 
+skip_all_this_shit:
 	
 	// Kick Encrypt Control Register at the end of all ring buffer preparation
 	RTMP_IO_WRITE32(pAdapter, SECCSR1, 0x1);
diff -ur ../rt2500-cvs-20050724/Module/rtmp_main.c ./Module/rtmp_main.c
--- ../rt2500-cvs-20050724/Module/rtmp_main.c	2005-07-15 17:40:02.000000000 +0200
+++ ./Module/rtmp_main.c	2005-07-26 19:03:46.000000000 +0200
@@ -354,6 +354,7 @@
 
     DBGPRINT(RT_DEBUG_INFO, "<==== RTMPSendPackets\n");
 
+/*
     if (pAdapter->PortCfg.BssType == BSS_MONITOR)
     {
        dev_kfree_skb_irq(skb); 
@@ -368,7 +369,7 @@
         // And Mibss for Ad-hoc mode setup
         dev_kfree_skb_irq(skb);
     }
-    else
+    else*/
     {
         // This function has to manage NdisSendComplete return call within its routine
         // NdisSendComplete will acknowledge upper layer in two steps.
