||(a)==Enums::OT_PRIVATE_ATOMIC \
                     ||(a)==Enums::OT_SPILL_ATOMIC \
                     ||(a)==Enums::OT_READONLY_ATOMIC \
+                    ||(a)==Enums::OT_BOTH_MEMFENCE \
                     ||(a)==Enums::OT_FLAT_ATOMIC)
 
 #define IS_OT_ATOMIC_GM(a) ((a)==Enums::OT_GLOBAL_ATOMIC \
                     ||(a)==Enums::OT_BOTH_MEMFENCE)
 
 #define IS_OT_ATOMIC_LM(a) ((a)==Enums::OT_SHARED_ATOMIC \
-                    ||(a)==Enums::OT_SHARED_MEMFENCE \
-                    ||(a)==Enums::OT_BOTH_MEMFENCE)
+                    ||(a)==Enums::OT_SHARED_MEMFENCE)
 
 #define IS_OT_ATOMIC_PM(a) ((a)==Enums::OT_PRIVATE_ATOMIC)
 
 
 ComputeUnit::init()
 {
     // Initialize CU Bus models
-    glbMemToVrfBus.init(&shader->tick_cnt, 1);
-    locMemToVrfBus.init(&shader->tick_cnt, 1);
+    glbMemToVrfBus.init(&shader->tick_cnt, shader->ticks(1));
+    locMemToVrfBus.init(&shader->tick_cnt, shader->ticks(1));
     nextGlbMemBus = 0;
     nextLocMemBus = 0;
     fatal_if(numGlbMemUnits > 1,
     vrfToGlobalMemPipeBus.resize(numGlbMemUnits);
     for (int j = 0; j < numGlbMemUnits; ++j) {
         vrfToGlobalMemPipeBus[j] = WaitClass();
-        vrfToGlobalMemPipeBus[j].init(&shader->tick_cnt, 1);
+        vrfToGlobalMemPipeBus[j].init(&shader->tick_cnt, shader->ticks(1));
     }
 
     fatal_if(numLocMemUnits > 1,
     vrfToLocalMemPipeBus.resize(numLocMemUnits);
     for (int j = 0; j < numLocMemUnits; ++j) {
         vrfToLocalMemPipeBus[j] = WaitClass();
-        vrfToLocalMemPipeBus[j].init(&shader->tick_cnt, 1);
+        vrfToLocalMemPipeBus[j].init(&shader->tick_cnt, shader->ticks(1));
     }
     vectorRegsReserved.resize(numSIMDs, 0);
     aluPipe.resize(numSIMDs);
 
     for (int i = 0; i < numSIMDs + numLocMemUnits + numGlbMemUnits; ++i) {
         wfWait[i] = WaitClass();
-        wfWait[i].init(&shader->tick_cnt, 1);
+        wfWait[i].init(&shader->tick_cnt, shader->ticks(1));
     }
 
     for (int i = 0; i < numSIMDs; ++i) {
         aluPipe[i] = WaitClass();
-        aluPipe[i].init(&shader->tick_cnt, 1);
+        aluPipe[i].init(&shader->tick_cnt, shader->ticks(1));
     }
 
     // Setup space for call args
 
 
     if (IS_OT_READ_GM(ii->opType()) || IS_OT_WRITE_GM(ii->opType()) ||
         IS_OT_ATOMIC_GM(ii->opType())) {
-
         return true;
     }
 
     }
     bool locMemBusRdy = false;
     bool locMemIssueRdy = false;
-    if (type == I_SHARED) {
+    if (type == I_SHARED || type == I_FLAT) {
         for (int j=0; j < computeUnit->numLocMemUnits; ++j) {
             if (computeUnit->vrfToLocalMemPipeBus[j].prerdy())
                 locMemBusRdy = true;
 
     DPRINTF(GPUExec, "CU%d: WF[%d][%d]: Ready Inst : %s\n", computeUnit->cu_id,
             simdId, wfSlotId, ii->disassemble());
-
     return 1;
 }