Index: src/ch/CustomCopyDlg.cpp
===================================================================
diff -u -re912e0a6b456c2eed24bec7303a908d3ff0aa59a -r09d557ffefb1dd57e7606695e16c3151e42285f2
--- src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision e912e0a6b456c2eed24bec7303a908d3ff0aa59a)
+++ src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision 09d557ffefb1dd57e7606695e16c3151e42285f2)
@@ -242,7 +242,7 @@
 	lvc.cx=static_cast<int>(0.1*rc.Width());
 	m_ctlFilters.InsertColumn(6, &lvc);
 	
-	m_bFilters=!!m_ccData.m_afFilters.GetSize();
+	m_bFilters = !m_ccData.m_afFilters.IsEmpty();
 
 	// other custom flags
 	m_bAdvanced=(m_ccData.m_bIgnoreFolders | m_ccData.m_bCreateStructure);
@@ -341,8 +341,12 @@
 
 	// refresh the entries in filters' list
 	m_ctlFilters.DeleteAllItems();
-	for (int i=0;i<m_ccData.m_afFilters.GetSize();i++)
-		AddFilter(m_ccData.m_afFilters.GetAt(i), i);
+	for (size_t i=0;i<m_ccData.m_afFilters.GetSize();i++)
+	{
+		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(i);
+		if(pFilter)
+			AddFilter(*pFilter, i);
+	}
 }
 
 void CCustomCopyDlg::OnAddDirectoryButton() 
@@ -526,12 +530,17 @@
 {
 	CFilterDlg dlg;
 	CString strData;
-	for (int i=0;i<m_ccData.m_afFilters.GetSize();i++)
+	for (size_t i=0;i<m_ccData.m_afFilters.GetSize();i++)
 	{
-		if (m_ccData.m_afFilters.GetAt(i).m_bUseMask)
-			dlg.m_astrAddMask.Add(m_ccData.m_afFilters.GetAt(i).GetCombinedMask(strData));
-		if (m_ccData.m_afFilters.GetAt(i).m_bUseExcludeMask)
-			dlg.m_astrAddExcludeMask.Add(m_ccData.m_afFilters.GetAt(i).GetCombinedExcludeMask(strData));
+		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(i);
+		BOOST_ASSERT(pFilter);
+		if(pFilter)
+		{
+			if(pFilter->m_bUseMask)
+				dlg.m_astrAddMask.Add(pFilter->GetCombinedMask(strData));
+			if(pFilter->m_bUseExcludeMask)
+				dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask(strData));
+		}
 	}
 	
 	if (dlg.DoModal() == IDOK)
@@ -749,28 +758,36 @@
 	{
 		int iItem=m_ctlFilters.GetNextSelectedItem(pos);
 		CFilterDlg dlg;
-		dlg.m_ffFilter=m_ccData.m_afFilters.GetAt(iItem);
+		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(iItem);
+		BOOST_ASSERT(pFilter);
+		if(pFilter)
+		dlg.m_ffFilter = *pFilter;
 		
 		CString strData;
-		for (int i=0;i<m_ccData.m_afFilters.GetSize();i++)
+		for (size_t i=0;i<m_ccData.m_afFilters.GetSize();i++)
 		{
-			if (m_ccData.m_afFilters.GetAt(i).m_bUseMask && i != iItem)
-				dlg.m_astrAddMask.Add(m_ccData.m_afFilters.GetAt(i).GetCombinedMask(strData));
-			if (m_ccData.m_afFilters.GetAt(i).m_bUseExcludeMask && i != iItem)
-				dlg.m_astrAddExcludeMask.Add(m_ccData.m_afFilters.GetAt(i).GetCombinedExcludeMask(strData));
+			pFilter = m_ccData.m_afFilters.GetAt(i);
+			BOOST_ASSERT(pFilter);
+			if(pFilter)
+			{
+				if (pFilter->m_bUseMask && i != iItem)
+					dlg.m_astrAddMask.Add(pFilter->GetCombinedMask(strData));
+				if (pFilter->m_bUseExcludeMask && i != iItem)
+					dlg.m_astrAddExcludeMask.Add(pFilter->GetCombinedExcludeMask(strData));
+			}
 		}
 
 		if (dlg.DoModal() == IDOK)
 		{
 			// delete old element
 			m_ctlFilters.DeleteItem(iItem);
-			m_ccData.m_afFilters.RemoveAt(iItem);
+			//m_ccData.m_afFilters.RemoveAt(iItem);
 
 			// insert new if needed
 			if (dlg.m_ffFilter.m_bUseMask || dlg.m_ffFilter.m_bUseExcludeMask || dlg.m_ffFilter.m_bUseSize 
 				|| dlg.m_ffFilter.m_bUseDate || dlg.m_ffFilter.m_bUseAttributes)
 			{
-				m_ccData.m_afFilters.InsertAt(iItem, dlg.m_ffFilter);
+				m_ccData.m_afFilters.SetAt(iItem, dlg.m_ffFilter);
 				AddFilter(dlg.m_ffFilter, iItem);
 			}
 		}