Index: SVN/SVNPrompt.cpp
===================================================================
--- SVN/SVNPrompt.cpp	(revision 17053)
+++ SVN/SVNPrompt.cpp	(working copy)
@@ -322,14 +322,7 @@
 	sFilter.LoadString(IDS_CERTIFICATESFILEFILTER);
 	TCHAR * pszFilters = new TCHAR[sFilter.GetLength()+4];
 	_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-	// Replace '|' delimiters with '\0's
-	TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-	while (ptr != pszFilters)
-	{
-		if (*ptr == '|')
-			*ptr = '\0';
-		ptr--;
-	}
+	CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 	ofn.lpstrFilter = pszFilters;
 	ofn.nFilterIndex = 1;
 	ofn.lpstrFileTitle = NULL;
Index: SVN/SVNStatusListCtrl.cpp
===================================================================
--- SVN/SVNStatusListCtrl.cpp	(revision 17053)
+++ SVN/SVNStatusListCtrl.cpp	(working copy)
@@ -50,6 +50,7 @@
 #include "CreateChangelistDlg.h"
 #include "SysInfo.h"
 #include "ProgressDlg.h"
+#include "StringUtils.h"
 
 const UINT CSVNStatusListCtrl::SVNSLNM_ITEMCOUNTCHANGED
 					= ::RegisterWindowMessage(_T("SVNSLNM_ITEMCOUNTCHANGED"));
@@ -3022,9 +3023,7 @@
 					int len = filelist.GetLength();
 					TCHAR * buf = new TCHAR[len+2];
 					_tcscpy_s(buf, len+2, filelist);
-					for (int i=0; i<len; ++i)
-						if (buf[i] == '|')
-							buf[i] = 0;
+					CStringUtils::PipesToNulls(buf, len);
 					SHFILEOPSTRUCT fileop;
 					fileop.hwnd = this->m_hWnd;
 					fileop.wFunc = FO_DELETE;
Index: TortoiseMerge/MainFrm.cpp
===================================================================
--- TortoiseMerge/MainFrm.cpp	(revision 17053)
+++ TortoiseMerge/MainFrm.cpp	(working copy)
@@ -32,6 +32,7 @@
 #include "DiffColors.h"
 #include ".\mainfrm.h"
 #include "auto_buffer.h"
+#include "StringUtils.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -1131,14 +1132,7 @@
 	sFilter.LoadString(IDS_COMMONFILEFILTER);
 	auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 	_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-	// Replace '|' delimiters with '\0's
-	TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-	while (ptr != pszFilters)
-	{
-		if (*ptr == '|')
-			*ptr = '\0';
-		ptr--;
-	}
+	CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 	ofn.lpstrFilter = pszFilters;
 	ofn.nFilterIndex = 1;
 
@@ -2009,14 +2003,7 @@
 		sFilter.LoadString(IDS_COMMONFILEFILTER);
 		auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 		_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-		// Replace '|' delimiters with '\0's
-		TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-		while (ptr != pszFilters)
-		{
-			if (*ptr == '|')
-				*ptr = '\0';
-			ptr--;
-		}
+		CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 		ofn.lpstrFilter = pszFilters;
 		ofn.nFilterIndex = 1;
 
Index: TortoiseMerge/OpenDlg.cpp
===================================================================
--- TortoiseMerge/OpenDlg.cpp	(revision 17053)
+++ TortoiseMerge/OpenDlg.cpp	(working copy)
@@ -21,6 +21,7 @@
 #include "BrowseFolder.h"
 #include ".\opendlg.h"
 #include "auto_buffer.h"
+#include "StringUtils.h"
 
 // COpenDlg dialog
 
@@ -157,14 +158,7 @@
 	sFilter.LoadString(nFileFilter);
 	auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 	_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-	// Replace '|' delimiters with '\0's
-	TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-	while (ptr != pszFilters)
-	{
-		if (*ptr == '|')
-			*ptr = '\0';
-		ptr--;
-	}
+	CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 	ofn.lpstrFilter = pszFilters;
 	ofn.nFilterIndex = 1;
 	ofn.lpstrFileTitle = NULL;
Index: TortoiseMerge/TortoiseMerge.cpp
===================================================================
--- TortoiseMerge/TortoiseMerge.cpp	(revision 17053)
+++ TortoiseMerge/TortoiseMerge.cpp	(working copy)
@@ -28,6 +28,7 @@
 #include "BrowseFolder.h"
 #include "DirFileEnum.h"
 #include "auto_buffer.h"
+#include "StringUtils.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -278,14 +279,7 @@
 		sFilter.LoadString(IDS_PATCHFILEFILTER);
 		auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 		_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-		// Replace '|' delimiters with '\0's
-		TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-		while (ptr != pszFilters)
-		{
-			if (*ptr == '|')
-				*ptr = '\0';
-			ptr--;
-		}
+		CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 		ofn.lpstrFilter = pszFilters;
 		ofn.nFilterIndex = 1;
 
@@ -401,14 +395,7 @@
 				sFilter.LoadString(IDS_COMMONFILEFILTER);
 				auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 				_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-				// Replace '|' delimiters with '\0's
-				TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-				while (ptr != pszFilters)
-				{
-					if (*ptr == '|')
-						*ptr = '\0';
-					ptr--;
-				}
+				CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 				ofn.lpstrFilter = pszFilters;
 				ofn.nFilterIndex = 1;
 
Index: TortoiseProc/AppUtils.cpp
===================================================================
--- TortoiseProc/AppUtils.cpp	(revision 17053)
+++ TortoiseProc/AppUtils.cpp	(working copy)
@@ -31,6 +31,7 @@
 #include "BrowseFolder.h"
 #include <intshcut.h>
 #include "auto_buffer.h"
+#include "StringUtils.h"
 
 CAppUtils::CAppUtils(void)
 {
@@ -450,14 +451,7 @@
 		const int filterLength = sFilter.GetLength()+4;
 		auto_buffer<TCHAR> pszFilters(filterLength);
 		_tcscpy_s (pszFilters, filterLength, sFilter);
-		// Replace '|' delimiters with '\0's
-		TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-		while (ptr != pszFilters)
-		{
-			if (*ptr == '|')
-				*ptr = '\0';
-			ptr--;
-		}
+		CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 		ofn.lpstrFilter = pszFilters;
 		ofn.nFilterIndex = 1;
 		ofn.lpstrFileTitle = NULL;
@@ -871,14 +865,7 @@
 		const int filtersLength = sFilter.GetLength()+4;
 		pszFilters.reset(filtersLength);
 		_tcscpy_s (pszFilters, filtersLength, sFilter);
-		// Replace '|' delimiters with '\0's
-		TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-		while (ptr != pszFilters)
-		{
-			if (*ptr == '|')
-				*ptr = '\0';
-			ptr--;
-		}
+		CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 		ofn.lpstrFilter = pszFilters;
 	}
 	ofn.nFilterIndex = 1;
Index: TortoiseProc/Commands/CreatePatchCommand.cpp
===================================================================
--- TortoiseProc/Commands/CreatePatchCommand.cpp	(revision 17053)
+++ TortoiseProc/Commands/CreatePatchCommand.cpp	(working copy)
@@ -97,14 +97,7 @@
 		sFilter.LoadString(IDS_PATCHFILEFILTER);
 		auto_buffer<TCHAR> pszFilters(sFilter.GetLength()+4);
 		_tcscpy_s (pszFilters, sFilter.GetLength()+4, sFilter);
-		// Replace '|' delimiters with '\0's
-		TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-		while (ptr != pszFilters)
-		{
-			if (*ptr == '|')
-				*ptr = '\0';
-			ptr--;
-		}
+		CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 		ofn.lpstrFilter = pszFilters;
 		ofn.nFilterIndex = 1;
 		// Display the Open dialog box. 
Index: TortoiseProc/Commands/DelUnversionedCommand.cpp
===================================================================
--- TortoiseProc/Commands/DelUnversionedCommand.cpp	(revision 17053)
+++ TortoiseProc/Commands/DelUnversionedCommand.cpp	(working copy)
@@ -42,9 +42,7 @@
 		int len = filelist.GetLength();
 		auto_buffer<TCHAR> buf(len+2);
 		_tcscpy_s(buf, len+2, filelist);
-		for (int i=0; i<len; ++i)
-			if (buf[i] == '|')
-				buf[i] = 0;
+		CStringUtils::PipesToNulls(buf, len);
 		SHFILEOPSTRUCT fileop;
 		fileop.hwnd = hwndExplorer;
 		fileop.wFunc = FO_DELETE;
Index: TortoiseProc/LogDlg.cpp
===================================================================
--- TortoiseProc/LogDlg.cpp	(revision 17053)
+++ TortoiseProc/LogDlg.cpp	(working copy)
@@ -2234,10 +2234,9 @@
 {
 	if (!SysInfo::Instance().IsVistaOrLater())
 	{
-		PLOGENTRYDATA pLogEntry = NULL;
 		if (item < m_arShownList.GetCount())
 		{
-			pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(item));
+			PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(item));
 			if (pLogEntry)
 			{
 				pLogEntry->SetChecked (!pLogEntry->GetChecked());
@@ -2276,12 +2275,13 @@
 			UpdateData(FALSE);
 			if (SysInfo::Instance().IsVistaOrLater())
 			{
-				PLOGENTRYDATA pLogEntry = NULL;
 				if (pNMLV->iItem < m_arShownList.GetCount())
-					pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(pNMLV->iItem));
-				if (pLogEntry)
 				{
-					pLogEntry->SetChecked ((pNMLV->uNewState & LVIS_SELECTED) != 0);
+					PLOGENTRYDATA pLogEntry = reinterpret_cast<PLOGENTRYDATA>(m_arShownList.GetAt(pNMLV->iItem));
+					if (pLogEntry)
+					{
+						pLogEntry->SetChecked ((pNMLV->uNewState & LVIS_SELECTED) != 0);
+					}
 				}
 			}
 		}
Index: TortoiseUDiff/MainWindow.cpp
===================================================================
--- TortoiseUDiff/MainWindow.cpp	(revision 17053)
+++ TortoiseUDiff/MainWindow.cpp	(working copy)
@@ -19,6 +19,7 @@
 #include "StdAfx.h"
 #include "MainWindow.h"
 #include "UnicodeUtils.h"
+#include "StringUtils.h"
 
 CMainWindow::CMainWindow(HINSTANCE hInst, const WNDCLASSEX* wcx /* = NULL*/) 
 	: CWindow(hInst, wcx)
@@ -200,14 +201,7 @@
 			TCHAR filter[1024];
 			LoadString(hResource, IDS_PATCHFILEFILTER, filter, sizeof(filter)/sizeof(TCHAR));
 			TCHAR * pszFilters = filter;
-			// Replace '|' delimiters with '\0's
-			TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-			while (ptr != pszFilters)
-			{
-				if (*ptr == '|')
-					*ptr = '\0';
-				ptr--;
-			}
+			CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 			ofn.lpstrFilter = pszFilters;
 			ofn.nFilterIndex = 1;
 			ofn.lpstrFileTitle = NULL;
@@ -236,14 +230,7 @@
 			TCHAR filter[1024];
 			LoadString(hResource, IDS_PATCHFILEFILTER, filter, sizeof(filter)/sizeof(TCHAR));
 			TCHAR * pszFilters = filter;
-			// Replace '|' delimiters with '\0's
-			TCHAR *ptr = pszFilters + _tcslen(pszFilters);  //set ptr at the NULL
-			while (ptr != pszFilters)
-			{
-				if (*ptr == '|')
-					*ptr = '\0';
-				ptr--;
-			}
+			CStringUtils::PipesToNulls(pszFilters, _tcslen(pszFilters));
 			ofn.lpstrFilter = pszFilters;
 			ofn.nFilterIndex = 1;
 			ofn.lpstrFileTitle = NULL;
Index: Utils/MiscUI/IconMenu.cpp
===================================================================
--- Utils/MiscUI/IconMenu.cpp	(revision 17053)
+++ Utils/MiscUI/IconMenu.cpp	(working copy)
@@ -99,18 +99,16 @@
 
 	MENUITEMINFO info = {0};
 	info.cbSize = sizeof(info);
-	info.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID;
+	info.fMask = MIIM_STRING | MIIM_FTYPE | MIIM_ID | MIIM_BITMAP;
 	info.fType = MFT_STRING;
 	info.wID = (UINT)nIDNewItem;
 	info.dwTypeData = menutextbuffer;
 	if (SysInfo::Instance().IsVistaOrLater())
 	{
-		info.fMask |= MIIM_BITMAP;
 		info.hbmpItem = IconToBitmapPARGB32(uIcon);
 	}
 	else
 	{
-		info.fMask |= MIIM_BITMAP;
 		info.hbmpItem = HBMMENU_CALLBACK;
 	}
 	icons[nIDNewItem] = uIcon;
Index: Utils/StringUtils.h
===================================================================
--- Utils/StringUtils.h	(revision 17053)
+++ Utils/StringUtils.h	(working copy)
@@ -95,5 +95,22 @@
 	 */
 	static bool WriteStringToTextFile(const std::wstring& path, const std::wstring& text, bool bUTF8 = true);
 
+	/**
+	 * Replace all pipe (|) character in the string with a NULL character. Used
+	 * for passing into Win32 functions that require such presentation - 
+	 * substrings are separated with a single NULL, the last one is followed
+	 * by two NULLs
+	*/
+	static void PipesToNulls(TCHAR* buffer, size_t length );
 };
 
+inline void CStringUtils::PipesToNulls(TCHAR* buffer, size_t length )
+{
+	TCHAR* ptr = buffer + length;
+	while (ptr != buffer)
+	{
+		if (*ptr == '|')
+			*ptr = '\0';
+		ptr--;
+	}
+}
