Index: src/TortoiseProc/RepositoryBrowser.cpp
===================================================================
--- src/TortoiseProc/RepositoryBrowser.cpp	(revision 15030)
+++ src/TortoiseProc/RepositoryBrowser.cpp	(working copy)
@@ -995,8 +995,13 @@
 		tvinsert.itemex.iImage = m_nIconFolder;
 		tvinsert.itemex.iSelectedImage = m_nOpenIconFolder;
 
+		TVSORTCB tvs;
+		tvs.hParent = hNewItem;
+		tvs.lpfnCompare = TreeSort;
+
 		hNewItem = m_RepoTree.InsertItem(&tvinsert);
 		sTemp.ReleaseBuffer();
+		m_RepoTree.SortChildrenCB(&tvs);
 		sUrl = sUrl.Mid(slash+1);
 		ATLTRACE(_T("created tree entry %s, url %s\n"), sTemp, pTreeItem->url);
 	}
@@ -1019,9 +1024,13 @@
 		tvinsert.itemex.iImage = m_nIconFolder;
 		tvinsert.itemex.iSelectedImage = m_nOpenIconFolder;
 
+		TVSORTCB tvs;
+		tvs.hParent = hNewItem;
+		tvs.lpfnCompare = TreeSort;
+
 		hNewItem = m_RepoTree.InsertItem(&tvinsert);
 		sTemp.ReleaseBuffer();
-		m_RepoTree.SortChildren(hNewItem);
+		m_RepoTree.SortChildrenCB(&tvs);
 		return hNewItem;
 	}
 	return NULL;
@@ -1417,6 +1426,13 @@
 	return nRet;
 }
 
+int CRepositoryBrowser::TreeSort(LPARAM lParam1, LPARAM lParam2, LPARAM)
+{
+	CTreeItem * Item1 = (CTreeItem*)lParam1;
+	CTreeItem * Item2 = (CTreeItem*)lParam2;
+	return CStringUtils::CompareNumerical(Item1->unescapedname, Item2->unescapedname);
+}
+
 void CRepositoryBrowser::SetSortArrow()
 {
 	CHeaderCtrl * pHeader = m_RepoList.GetHeaderCtrl();
Index: src/TortoiseProc/RepositoryBrowser.h
===================================================================
--- src/TortoiseProc/RepositoryBrowser.h	(revision 15030)
+++ src/TortoiseProc/RepositoryBrowser.h	(working copy)
@@ -251,6 +251,7 @@
 	static UINT InitThreadEntry(LPVOID pVoid);
 	UINT InitThread();
 
+	static int CALLBACK TreeSort(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3);
 	static int CALLBACK ListSort(LPARAM lParam1, LPARAM lParam2, LPARAM lParam3);
 
 protected:
