diff --ignore-all-space -rU5 BusMaster_v45h3_src/chglog.txt BusMaster_v45h4_src/chglog.txt
--- BusMaster_v45h3_src/chglog.txt	2015-09-16 08:32:38.740158400 +0800
+++ BusMaster_v45h4_src/chglog.txt	2015-09-16 08:32:18.178053200 +0800
@@ -890,5 +890,12 @@
 --
 2015.04.06 - v0.45h3
 
 !) added AtapiWaitForDrq() in ATAPI interrupt handler.
 Looks like it may be raised with delay (e.g. in QEmu)
+
+--
+2015.04.06 - v0.45h4
+
+!) fixed bug with missing REQ_FLAG_DMA_OPERATION on succefull 
+reinit in AtapiDmaSetup(). This prevented fallback to UDMA2 when higher 
+modes doesn't work fine.
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/2K/uata_2k.inf BusMaster_v45h4_src/driver/Dist/2K/uata_2k.inf
--- BusMaster_v45h3_src/driver/Dist/2K/uata_2k.inf	2015-09-16 08:32:38.740158400 +0800
+++ BusMaster_v45h4_src/driver/Dist/2K/uata_2k.inf	2015-09-16 08:32:18.193677900 +0800
@@ -4,11 +4,11 @@
 Signature="$Windows NT$"
 Provider=%ALTERWARE%
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
 Class=SCSIAdapter
 CatalogFile=uniata.cat
-DriverVer=04/06/2015,0.45.8.3
+DriverVer=04/06/2015,0.45.8.4
 
 ;
 ; Source file information
 ;
 
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/2K/uata_2kh.inf BusMaster_v45h4_src/driver/Dist/2K/uata_2kh.inf
--- BusMaster_v45h3_src/driver/Dist/2K/uata_2kh.inf	2015-09-16 08:32:38.740158400 +0800
+++ BusMaster_v45h4_src/driver/Dist/2K/uata_2kh.inf	2015-09-16 08:32:18.193677900 +0800
@@ -4,11 +4,11 @@
 Signature="$Windows NT$"
 Provider=%ALTERWARE%
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
 Class=hdc
 CatalogFile=uniata.cat
-DriverVer=04/06/2015,0.45.8.3
+DriverVer=04/06/2015,0.45.8.4
 
 ;
 ; Source file information
 ;
 
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/2K/uniata_w2k.reg BusMaster_v45h4_src/driver/Dist/2K/uniata_w2k.reg
--- BusMaster_v45h3_src/driver/Dist/2K/uniata_w2k.reg	2015-09-16 08:32:38.755783100 +0800
+++ BusMaster_v45h4_src/driver/Dist/2K/uniata_w2k.reg	2015-09-16 08:32:18.193677900 +0800
@@ -4,11 +4,11 @@
 "ErrorControl"=dword:00000001
 "Group"="SCSI miniport"
 "Start"=dword:00000000
 "Tag"=dword:00000019
 "Type"=dword:00000001
-"DisplayName"="Universal BusMaster SATA/ATA/ATAPI Driver v0.45.8.3"
+"DisplayName"="Universal BusMaster SATA/ATA/ATAPI Driver v0.45.8.4"
 "ImagePath"=hex(2):53,79,73,74,65,6d,33,32,5c,44,52,49,56,45,52,53,5c,75,6e,69,\
   61,74,61,2e,73,79,73,00
 
 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UniATA\Parameters]
 "SkipRaids"=dword:00000001
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/NT4/uata_nt4.inf BusMaster_v45h4_src/driver/Dist/NT4/uata_nt4.inf
--- BusMaster_v45h3_src/driver/Dist/NT4/uata_nt4.inf	2015-09-16 08:32:38.755783100 +0800
+++ BusMaster_v45h4_src/driver/Dist/NT4/uata_nt4.inf	2015-09-16 08:32:18.209302600 +0800
@@ -4,11 +4,11 @@
 Signature="$Windows NT$"
 Provider=%ALTERWARE%
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
 Class=SCSIAdapter
 CatalogFile=uniata.cat
-DriverVer=04/06/2015,0.45.8.3
+DriverVer=04/06/2015,0.45.8.4
 
 ;
 ; Source file information
 ;
 
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/XP/uata_xp.inf BusMaster_v45h4_src/driver/Dist/XP/uata_xp.inf
--- BusMaster_v45h3_src/driver/Dist/XP/uata_xp.inf	2015-09-16 08:32:38.755783100 +0800
+++ BusMaster_v45h4_src/driver/Dist/XP/uata_xp.inf	2015-09-16 08:32:18.209302600 +0800
@@ -4,11 +4,11 @@
 Signature="$Windows NT$"
 Provider=%ALTERWARE%
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
 Class=SCSIAdapter
 CatalogFile=uniata.cat
-DriverVer=04/06/2015,0.45.8.3
+DriverVer=04/06/2015,0.45.8.4
 
 ;
 ; Source file information
 ;
 
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/Dist/XP/uata_xph.inf BusMaster_v45h4_src/driver/Dist/XP/uata_xph.inf
--- BusMaster_v45h3_src/driver/Dist/XP/uata_xph.inf	2015-09-16 08:32:38.755783100 +0800
+++ BusMaster_v45h4_src/driver/Dist/XP/uata_xph.inf	2015-09-16 08:32:18.209302600 +0800
@@ -4,11 +4,11 @@
 Signature="$Windows NT$"
 Provider=%ALTERWARE%
 ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
 Class=hdc
 CatalogFile=uniata.cat
-DriverVer=04/06/2015,0.45.8.3
+DriverVer=04/06/2015,0.45.8.4
 
 ;
 ; Source file information
 ;
 
Binary files BusMaster_v45h3_src/driver/Dist/tools/build_inf.exe and BusMaster_v45h4_src/driver/Dist/tools/build_inf.exe differ
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/id_dma.cpp BusMaster_v45h4_src/driver/id_dma.cpp
--- BusMaster_v45h3_src/driver/id_dma.cpp	2015-02-24 02:24:20.000000000 +0800
+++ BusMaster_v45h4_src/driver/id_dma.cpp	2015-09-16 08:32:18.224927300 +0800
@@ -252,15 +252,16 @@
     PATA_REQ AtaReq = (PATA_REQ)(Srb->SrbExtension);
     BOOLEAN use_DB_IO = FALSE;
     BOOLEAN use_AHCI = (deviceExtension->HwFlags & UNIATA_AHCI) ? TRUE : FALSE;
     ULONG orig_count = count;
     ULONG max_entries = use_AHCI ? ATA_AHCI_DMA_ENTRIES : ATA_DMA_ENTRIES;
-    //ULONG max_frag = use_AHCI ? (0x3fffff+1) : (4096); // DEBUG, replace 4096 for procer chipset-specific value
+    //ULONG max_frag = use_AHCI ? (0x3fffff+1) : (4096); // DEBUG, replace 4096 for proper chipset-specific value
     ULONG max_frag = deviceExtension->DmaSegmentLength;
     ULONG seg_align = deviceExtension->DmaSegmentAlignmentMask;
 
     if(AtaReq->dma_entries) {
+        AtaReq->Flags |= REQ_FLAG_DMA_OPERATION;
         KdPrint2((PRINT_PREFIX "AtapiDmaSetup: already setup, %d entries\n", AtaReq->dma_entries));
         return TRUE;
     }
     AtaReq->ata.dma_base = 0;
     AtaReq->Flags &= ~REQ_FLAG_DMA_OPERATION;
diff --ignore-all-space -rU5 BusMaster_v45h3_src/driver/uniata_ver.h BusMaster_v45h4_src/driver/uniata_ver.h
--- BusMaster_v45h3_src/driver/uniata_ver.h	2015-09-16 08:32:38.787032500 +0800
+++ BusMaster_v45h4_src/driver/uniata_ver.h	2015-09-16 08:32:18.240552000 +0800
@@ -1,10 +1,10 @@
-#define UNIATA_VER_STR         "45h3"
-#define UNIATA_VER_DOT         0.45.8.3
+#define UNIATA_VER_STR         "45h4"
+#define UNIATA_VER_DOT         0.45.8.4
 #define UNIATA_VER_MJ          0
 #define UNIATA_VER_MN          45
 #define UNIATA_VER_SUB_MJ      8
-#define UNIATA_VER_SUB_MN      3
-#define UNIATA_VER_DOT_COMMA   0,45,8,3
-#define UNIATA_VER_DOT_STR     "0.45.8.3"
+#define UNIATA_VER_SUB_MN      4
+#define UNIATA_VER_DOT_COMMA   0,45,8,4
+#define UNIATA_VER_DOT_STR     "0.45.8.4"
 #define UNIATA_VER_YEAR        2015
 #define UNIATA_VER_YEAR_STR    "2015"
