Index: src/ch/TSubTaskScanDirectory.cpp
===================================================================
diff -u -N -r6dc950d4d76107421ff6eb62069b70f20bcc450e -r9a171c5d46f2bc029d99a698d88eeff60497cd3b
--- src/ch/TSubTaskScanDirectory.cpp	(.../TSubTaskScanDirectory.cpp)	(revision 6dc950d4d76107421ff6eb62069b70f20bcc450e)
+++ src/ch/TSubTaskScanDirectory.cpp	(.../TSubTaskScanDirectory.cpp)	(revision 9a171c5d46f2bc029d99a698d88eeff60497cd3b)
@@ -61,8 +61,7 @@
 	GetTaskPropValue<eTO_Filters>(rTaskDefinition.GetConfiguration(), afFilters);
 
 	// enter some data to rFilesCache
-	int iDestDrvNumber = 0;
-	TLocalFilesystem::GetDriveData(rTaskDefinition.GetDestinationPath(), &iDestDrvNumber, NULL);
+	wchar_t wchDestinationDriveLetter = rTaskDefinition.GetDestinationPath().GetDriveLetter();
 
 	bool bIgnoreDirs = GetTaskPropValue<eTO_IgnoreDirectories>(rTaskDefinition.GetConfiguration());
 	bool bForceDirectories = GetTaskPropValue<eTO_CreateDirectoriesRelativeToRoot>(rTaskDefinition.GetConfiguration());
@@ -141,6 +140,8 @@
 				rarrSourcePathsInfo.GetAt(stIndex)->SetDestinationPath(spFileInfo->GetFullFilePath().GetFileName());
 		}
 
+		wchar_t wchSourceDriveLetter = spFileInfo->GetFullFilePath().GetDriveLetter();
+
 		// add if needed
 		if(spFileInfo->IsDirectory())
 		{
@@ -157,7 +158,7 @@
 			}
 
 			// don't add folder contents when moving inside one disk boundary
-			if(bIgnoreDirs || !bMove || iDestDrvNumber == -1 || iDestDrvNumber != GetDriveNumber(spFileInfo) ||
+			if(bIgnoreDirs || !bMove || wchDestinationDriveLetter == L'\0' || wchDestinationDriveLetter != wchSourceDriveLetter ||
 				TLocalFilesystem::PathExist(CalculateDestinationPath(spFileInfo, rTaskDefinition.GetDestinationPath(), ((int)bForceDirectories) << 1)) )
 			{
 				// log
@@ -182,7 +183,7 @@
 		}
 		else
 		{
-			if(bMove && iDestDrvNumber != -1 && iDestDrvNumber == GetDriveNumber(spFileInfo) &&
+			if(bMove && wchDestinationDriveLetter != L'\0' && wchDestinationDriveLetter == wchSourceDriveLetter &&
 				!TLocalFilesystem::PathExist(CalculateDestinationPath(spFileInfo, rTaskDefinition.GetDestinationPath(), ((int)bForceDirectories) << 1)) )
 			{
 				// if moving within one partition boundary set the file size to 0 so the overall size will