Index: trunk/modules/vci_block_device_tsar_v4/caba/source/src/vci_block_device_tsar_v4.cpp
===================================================================
--- trunk/modules/vci_block_device_tsar_v4/caba/source/src/vci_block_device_tsar_v4.cpp	(revision 271)
+++ trunk/modules/vci_block_device_tsar_v4/caba/source/src/vci_block_device_tsar_v4.cpp	(revision 272)
@@ -338,8 +338,8 @@
             if ( p_vci_initiator.reop.read() )  // last flit of the burst
             {
-	            r_flit_count  = 0;
-                r_buf_address = r_buf_address.read() + r_burst_nflits.read()<<2; 
-
-		        if( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
+	        r_flit_count  = 0;
+                r_buf_address = r_buf_address.read() + (r_burst_nflits.read()<<2); 
+
+	        if( (p_vci_initiator.rerror.read()&0x1) != 0 ) 
                 {
                     r_initiator_fsm = M_WRITE_ERROR;
@@ -348,6 +348,4 @@
                           (aligned and (r_burst_count.read() == (m_bursts_per_block-1))) ) // last burst
                 {
-                    r_burst_count    = 0;
-                    r_block_count    = r_block_count.read() + 1;
                     r_initiator_fsm  = M_WRITE_BLOCK;
                 }
@@ -376,5 +374,5 @@
                 r_initiator_fsm = M_WRITE_ERROR; 
             }
-            else if ( r_block_count.read() == r_nblocks.read() ) 
+            else if ( r_block_count.read() == r_nblocks.read() - 1 ) 
             {
                 r_initiator_fsm = M_WRITE_SUCCESS; 
@@ -382,4 +380,7 @@
             else
             {
+                r_burst_count    = 0;
+		r_index          = 0;
+                r_block_count    = r_block_count.read() + 1;
                 r_initiator_fsm = M_WRITE_BURST;
             }
