delete m_imageListState;
 
     delete m_renameTimer;
+    
+    WX_CLEAR_LIST(wxColumnList, m_colsInfo);
 }
 
 /*static*/
 
 wxMacListCtrlItem::~wxMacListCtrlItem()
 {
+    WX_CLEAR_HASH_MAP( wxListItemList, m_rowItems );
 }
 
 void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
 
 void wxMacDataBrowserListCtrlControl::ItemNotification(DataBrowserItemID itemID,
     DataBrowserItemNotification message,
-    DataBrowserItemDataRef WXUNUSED(itemData) )
+    DataBrowserItemDataRef itemData )
 {
+    wxMacListCtrlItem *item = NULL;
+    if ( !m_isVirtual )
+    {
+        item = (wxMacListCtrlItem *) itemID;
+    }
+    
     // we want to depend on as little as possible to make sure tear-down of controls is safe
-    if ( message == kDataBrowserItemRemoved)
+    if ( message == kDataBrowserItemRemoved )
     {
-        // make sure MacDelete does the proper teardown.
+        if ( item )
+            item->Notification(this, message, itemData);
         return;
     }
     else if ( message == kDataBrowserItemAdded )
     {
         // we don't issue events on adding, the item is not really stored in the list yet, so we
         // avoid asserts by getting out now
+        if ( item )
+            item->Notification(this, message, itemData);
         return  ;
     }