Index: /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp
===================================================================
--- /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp	(revision 218)
+++ /trunk/modules/vci_cc_vcache_wrapper_v4/caba/source/src/vci_cc_vcache_wrapper_v4.cpp	(revision 219)
@@ -3633,4 +3633,5 @@
                         set,
                         &nline );
+
 	assert(hit && "selected way/set line should be in dcache");
 
@@ -3657,9 +3658,10 @@
             r_itlb.reset();
             r_dtlb.reset();
-            r_dcache_fsm             = DCACHE_MISS_WAIT;
+	    r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
+            r_dcache_fsm = DCACHE_MISS_WAIT;
         }
         else
         {
-            r_dcache_fsm             = DCACHE_MISS_WAIT;
+            r_dcache_fsm = DCACHE_MISS_WAIT;
         }
         break;
@@ -4008,4 +4010,5 @@
                     r_itlb.reset();
                     r_dtlb.reset();
+	            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
                     r_dcache_fsm = DCACHE_IDLE;
                 }
@@ -4123,9 +4126,9 @@
         if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) 			// selective inval
         {
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
             r_dcache_tlb_inval_line  = nline;
             r_dcache_tlb_inval_count = 0;
             r_dcache_fsm_scan_save   = r_dcache_fsm.read();
             r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
-            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
         }
         else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) 	// flush
@@ -4167,20 +4170,20 @@
         if ( r_dcache_in_tlb[way*m_dcache_sets+set] ) 		// selective inval
         {
+            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
             r_dcache_tlb_inval_line  = nline;
             r_dcache_tlb_inval_count = 0;
             r_dcache_fsm_scan_save   = r_dcache_fsm.read();
             r_dcache_fsm             = DCACHE_INVAL_TLB_SCAN;
-            r_dcache_in_tlb[way*m_dcache_sets+set] = false;
-        }
-        else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) 	// flush
+        }
+        else if ( r_dcache_contains_ptd[way*m_dcache_sets+set] ) // flush
         {
             r_itlb.reset();
             r_dtlb.reset();
+            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
             r_tgt_dcache_rsp = true;
             r_tgt_dcache_req = false;
             r_dcache_fsm     = r_dcache_fsm_cc_save.read();
-            r_dcache_contains_ptd[way*m_dcache_sets+set] = false;
-        }
-        else							// no inval
+        }
+        else							// no inval / no flush
         {
             r_dcache.write( way,
