diff --git a/Source/portable/GCC/ColdFire_V2/port.c b/Source/portable/GCC/ColdFire_V2/port.c
index d55e256301..986e85c4f5 100644
--- a/Source/portable/GCC/ColdFire_V2/port.c
+++ b/Source/portable/GCC/ColdFire_V2/port.c
@@ -143,7 +143,20 @@ void vPortEndScheduler( void )
 
 void vPortEnterCritical( void )
 {
-	portDISABLE_INTERRUPTS();
+	if( ulCriticalNesting == 0UL )
+	{
+		do
+		{
+			portDISABLE_INTERRUPTS();
+			if( MCF_INTC0_INTFRCH == 0UL )
+			{
+				break;
+			}
+
+			portENABLE_INTERRUPTS();
+
+		} while( 1 );
+	}
 	ulCriticalNesting++;
 }
 /*-----------------------------------------------------------*/
@@ -162,10 +175,10 @@ void vPortYieldHandler( void )
 {
 unsigned portLONG ulSavedInterruptMask;
 
-	/* -32 as we are using the high word of the 64bit mask. */
-	MCF_INTC0_INTFRCH &= ~( 1UL << ( configYIELD_INTERRUPT_VECTOR - 32UL ) );
-
 	ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
+		/* -32 as we are using the high word of the 64bit mask. */
+		/* Note this will clear all forced interrupts - this is done for speed. */
+		MCF_INTC0_INTFRCH = 0;
 		vTaskSwitchContext();
 	portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );
 }