diff --git a/smi/src/smi.c b/smi/src/smi.c
index 93155efd718ec94806fd3627659ad7fc661b65ec..fd53aaa4b6a5dad94f62e15c5ae94ad967f9be8c 100644
--- a/smi/src/smi.c
+++ b/smi/src/smi.c
@@ -498,6 +498,8 @@ printf("transition\n");
     shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].flags&=~(TASK_EXIT);    
 //    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].exclusive=        
 //      taskData[atomicStateVariables[i].taskID].exclusive;  
+    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot=        
+      taskData[atomicStateVariables[i].taskID].oneShot;  
     shm->taskState[atomicStateVariables[i].taskStateVar].duration=
      taskData[atomicStateVariables[i].taskID].duration;      
 //    shm->taskStateSysVar[atomicStateVariables[i].taskStateVar].oneShot=
diff --git a/smi/src/smi_def.h b/smi/src/smi_def.h
index fb0b0a524527924200b6de3e3066e77b017a7aba..da9d5478236f051c652fdeb7214d7eb396a776c7 100644
--- a/smi/src/smi_def.h
+++ b/smi/src/smi_def.h
@@ -68,7 +68,7 @@ typedef volatile struct {
   taskIDType taskID;
   processType process;
   signed char nrt;
-//  signed char oneShot; // no longer required for NRT as dispatcher waits for SMI
+  signed char oneShot; 
   unsigned char numberOfDataPorts;
   dataPathIDType dataPort[MAX_NUMBER_OF_DATA_PORTS_PER_STATE];
 } taskStateSysVarStruct;
diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c
index 64e41992264d52ffbee73ef20116dcf4b0d07f0f..c2f26db069af45cabd109d39108aa4865ad4d375 100644
--- a/smi/src/taskdisp_nrt.c
+++ b/smi/src/taskdisp_nrt.c
@@ -193,10 +193,10 @@ usleep(10000);
 	  n=shm->taskStateSysVar[i].process;
 	  if (n==nrtProcessID) {
 	   if ((shm->taskStateSysVar[i].flags&TASK_EXEC)!=0
-/*	    && ((shm->taskStateSysVar[i].oneShot==0
-	      || (shm->taskStateSysVar[i].flags&TASK_ACTIVE)==0
+	    && ((shm->taskStateSysVar[i].oneShot==0
+	      || (shm->taskStateSysVar[i].flags&TASK_EXIT)==0
 	     )
-	    ) */
+	    ) 
 	   ) {
 	    shm->taskStateSysVar[i].flags|=TASK_ACTIVE;
 	    shm->taskStateSysVar[i].flags&=~(TASK_BUSY);