diff -ruN v45b\chglog.txt v45b1\chglog.txt
--- v45b\chglog.txt	Wed Aug 13 21:58:28 2014
+++ v45b1\chglog.txt	Mon Sep 22 23:22:10 2014
@@ -678,5 +678,22 @@
 --
 2014.08.13 - v0.45a8
 
-e) do not touch unimplemented AHCI channels in AtapiResetController()
-*) added logging to UniataAhciChanImplemented()
\ No newline at end of file
+!) do not touch unimplemented AHCI channels in AtapiResetController()
+*) added logging to UniataAhciChanImplemented()
+
+--
+2014.09.06 - v0.45b
+
+!!) fixed bug with missed AtaReq->WordsTransfered adjustment in IDE PIO Write branch in IdeReadWrite()
+!!e) added handler for raised DRQ immediately after PIO read, seems we should try to read rest of data.
+see ReactOS BUG-8280
+
+--
+2014.09.16 - v0.45b1
+
+!!e) changed Promise UDMA2+ programming sequence according to Linux sources.
+Should fix problem with high transfer rates.
+see ReactOS BUG-8280
+
+
+
diff -ruN v45b\driver\id_dma.cpp v45b1\driver\id_dma.cpp
--- v45b\driver\id_dma.cpp	Sat Sep 06 12:00:40 2014
+++ v45b1\driver\id_dma.cpp	Tue Sep 09 10:11:24 2014
@@ -587,10 +587,8 @@
     case ATA_PROMISE_ID:
         if(ChipType == PRNEW) {
             ULONG Channel = deviceExtension->Channel + lChannel;
+
             if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) {
-                AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
-                      AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) |
-                          (Channel ? 0x08 : 0x02));
                 AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20),
                       ((Srb->SrbFlags & SRB_FLAGS_DATA_IN) ? 0x05000000 : 0x06000000) | (Srb->DataTransferLength >> 1)
                       );
@@ -659,10 +657,12 @@
     case ATA_PROMISE_ID:
         if(ChipType == PRNEW) {
             ULONG Channel = deviceExtension->Channel + lChannel;
+/*
+            AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
+                  AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
+                      ~(Channel ? 0x08 : 0x02));
+*/
             if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) {
-                AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
-                      AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
-                          ~(Channel ? 0x08 : 0x02));
                 AtapiWritePortEx4(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20),
                       0
                       );
@@ -1555,10 +1555,13 @@
 
         return;
         break; }
-    case ATA_PROMISE_ID:
+    case ATA_PROMISE_ID: {
         /***********/
         /* Promise */
         /***********/
+
+	UCHAR sel66 = Channel ? 0x08: 0x02;
+
         if(ChipType < PRTX) {
             if (isAtapi) {
                 udmamode =
@@ -1566,12 +1569,29 @@
             }
         }
         for(i=udmamode; i>=0; i--) {
+
+            if(ChipType == PRNEW) {
+              if(i>2) {
+                AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
+                      AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) |
+                          sel66);
+              } else {
+                AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
+                      AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
+                          ~sel66);
+              }
+            }
+
             if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_UDMA0 + i)) {
                 promise_timing(deviceExtension, dev, (UCHAR)(ATA_UDMA + i));       // ???
                 return;
             }
         }
-
+        if(ChipType == PRNEW) {
+          AtapiWritePortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11,
+              AtapiReadPortEx1(chan, (ULONGIO_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) &
+                  ~sel66);
+        }
         for(i=wdmamode; i>=0; i--) {
             if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_WDMA0 + i)) {
                 promise_timing(deviceExtension, dev, (UCHAR)(ATA_WDMA0+i));
@@ -1587,7 +1607,7 @@
         AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_PIO0 + apiomode);
         promise_timing(deviceExtension, dev, ATA_PIO0 + apiomode);
         return;
-        break;
+        break; }
     case ATA_ATI_ID:
 
         KdPrint2((PRINT_PREFIX "ATI\n"));
diff -ruN v45b\driver\uniata_ver.h v45b1\driver\uniata_ver.h
--- v45b\driver\uniata_ver.h	Sat Sep 06 14:43:26 2014
+++ v45b1\driver\uniata_ver.h	Mon Sep 22 23:23:20 2014
@@ -1,10 +1,10 @@
-#define UNIATA_VER_STR         "45b"
-#define UNIATA_VER_DOT         0.45.2.0
+#define UNIATA_VER_STR         "45b1"
+#define UNIATA_VER_DOT         0.45.2.1
 #define UNIATA_VER_MJ          0
 #define UNIATA_VER_MN          45
 #define UNIATA_VER_SUB_MJ      2
-#define UNIATA_VER_SUB_MN      0
-#define UNIATA_VER_DOT_COMMA   0,45,2,0
-#define UNIATA_VER_DOT_STR     "0.45.2.0"
+#define UNIATA_VER_SUB_MN      1
+#define UNIATA_VER_DOT_COMMA   0,45,2,1
+#define UNIATA_VER_DOT_STR     "0.45.2.1"
 #define UNIATA_VER_YEAR        2014
 #define UNIATA_VER_YEAR_STR    "2014"
