ath6kl_data_tx(skb1, ar->net_dev);
        }
 
-       if (!aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no,
-                                  is_amsdu, skb))
-               ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
+       datap = (struct ethhdr *) skb->data;
+
+       if (is_unicast_ether_addr(datap->h_dest) &&
+           aggr_process_recv_frm(ar->aggr_cntxt, tid, seq_no,
+                                 is_amsdu, skb))
+               /* aggregation code will handle the skb */
+               return;
+
+       ath6kl_deliver_frames_to_nw_stack(ar->net_dev, skb);
 }
 
 static void aggr_timeout(unsigned long arg)
                if (!rxtid->aggr || !rxtid->timer_mon || rxtid->progress)
                        continue;
 
-               /*
-                * FIXME: these timeouts happen quite fruently, something
-                * line once within 60 seconds. Investigate why.
-                */
                stats->num_timeouts++;
                ath6kl_dbg(ATH6KL_DBG_AGGR,
                           "aggr timeout (st %d end %d)\n",