diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp
index 5fa69f1..5a8bcdf 100644
--- a/src/OpenGL/compiler/OutputASM.cpp
+++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -1859,8 +1859,6 @@
 		if(loop.isDeterministic())
 		{
 			 deterministicVariables.insert(loop.index->getId());
-
-			 emit(sw::Shader::OPCODE_TEST);
 		}
 
 		if(node->getType() == ELoopDoWhile)
@@ -1926,10 +1924,7 @@
 					body->traverse(this);
 				}
 
-				if(loop.isDeterministic())
-				{
-					emit(sw::Shader::OPCODE_TEST);
-				}
+				emit(sw::Shader::OPCODE_TEST);
 
 				if(expression)
 				{
diff --git a/src/Shader/PixelProgram.cpp b/src/Shader/PixelProgram.cpp
index f81596b..ec0bba0 100644
--- a/src/Shader/PixelProgram.cpp
+++ b/src/Shader/PixelProgram.cpp
@@ -832,11 +832,6 @@
 
 	Int4 PixelProgram::enableMask(const Shader::Instruction *instruction)
 	{
-		if(whileTest)
-		{
-			return Int4(0xFFFFFFFF);
-		}
-
 		Int4 enable = instruction->analysisBranch ? Int4(enableStack[enableIndex]) : Int4(0xFFFFFFFF);
 
 		if(shader->containsBreakInstruction() && instruction->analysisBreak)
@@ -1397,7 +1392,8 @@
 
 	void PixelProgram::TEST()
 	{
-		whileTest = true;
+		enableContinue = restoreContinue.back();
+		restoreContinue.pop_back();
 	}
 
 	void PixelProgram::CALL(int labelIndex, int callSiteIndex)
@@ -1576,7 +1572,6 @@
 		Nucleus::setInsertBlock(endBlock);
 
 		enableIndex--;
-		whileTest = false;
 	}
 
 	void PixelProgram::ENDSWITCH()
@@ -1760,12 +1755,11 @@
 		loopRepEndBlock[loopRepDepth] = endBlock;
 
 		Int4 restoreBreak = enableBreak;
-		Int4 restoreContinue = enableContinue;
+		restoreContinue.push_back(enableContinue);
 
 		// TODO: jump(testBlock)
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(testBlock);
-		enableContinue = restoreContinue;
 
 		const Vector4f &src = fetchRegister(temporaryRegister);
 		Int4 condition = As<Int4>(src.x);
@@ -1783,7 +1777,6 @@
 		Nucleus::setInsertBlock(loopBlock);
 
 		loopRepDepth++;
-		whileTest = false;
 	}
 
 	void PixelProgram::SWITCH()
diff --git a/src/Shader/PixelProgram.hpp b/src/Shader/PixelProgram.hpp
index 240938d..0f628bc 100644
--- a/src/Shader/PixelProgram.hpp
+++ b/src/Shader/PixelProgram.hpp
@@ -25,7 +25,7 @@
 	public:
 		PixelProgram(const PixelProcessor::State &state, const PixelShader *shader) :
 			PixelRoutine(state, shader), r(shader->indirectAddressableTemporaries),
-			loopDepth(-1), ifDepth(0), loopRepDepth(0), currentLabel(-1), whileTest(false)
+			loopDepth(-1), ifDepth(0), loopRepDepth(0), currentLabel(-1)
 		{
 			for(int i = 0; i < 2048; ++i)
 			{
@@ -155,7 +155,6 @@
 		int ifDepth;
 		int loopRepDepth;
 		int currentLabel;
-		bool whileTest;
 
 		BasicBlock *ifFalseBlock[24 + 24];
 		BasicBlock *loopRepTestBlock[4];
@@ -164,6 +163,7 @@
 		std::vector<BasicBlock*> callRetBlock[2048];
 		BasicBlock *returnBlock;
 		bool isConditionalIf[24 + 24];
+		std::vector<Int4> restoreContinue;
 	};
 }
 
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index 0eb8441..d492c65 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -29,7 +29,6 @@
 		ifDepth = 0;
 		loopRepDepth = 0;
 		currentLabel = -1;
-		whileTest = false;
 
 		for(int i = 0; i < 2048; i++)
 		{
@@ -978,11 +977,6 @@
 
 	Int4 VertexProgram::enableMask(const Shader::Instruction *instruction)
 	{
-		if(whileTest)
-		{
-			return Int4(0xFFFFFFFF);
-		}
-
 		Int4 enable = instruction->analysisBranch ? Int4(enableStack[enableIndex]) : Int4(0xFFFFFFFF);
 
 		if(shader->containsBreakInstruction() && instruction->analysisBreak)
@@ -1110,7 +1104,8 @@
 
 	void VertexProgram::TEST()
 	{
-		whileTest = true;
+		enableContinue = restoreContinue.back();
+		restoreContinue.pop_back();
 	}
 
 	void VertexProgram::CALL(int labelIndex, int callSiteIndex)
@@ -1289,7 +1284,6 @@
 		Nucleus::setInsertBlock(endBlock);
 
 		enableIndex--;
-		whileTest = false;
 	}
 
 	void VertexProgram::ENDSWITCH()
@@ -1474,12 +1468,11 @@
 		loopRepEndBlock[loopRepDepth] = endBlock;
 
 		Int4 restoreBreak = enableBreak;
-		Int4 restoreContinue = enableContinue;
+		restoreContinue.push_back(enableContinue);
 
 		// TODO: jump(testBlock)
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(testBlock);
-		enableContinue = restoreContinue;
 
 		const Vector4f &src = fetchRegister(temporaryRegister);
 		Int4 condition = As<Int4>(src.x);
@@ -1497,7 +1490,6 @@
 		Nucleus::setInsertBlock(loopBlock);
 
 		loopRepDepth++;
-		whileTest = false;
 	}
 
 	void VertexProgram::SWITCH()
diff --git a/src/Shader/VertexProgram.hpp b/src/Shader/VertexProgram.hpp
index 3c4199c..437c881 100644
--- a/src/Shader/VertexProgram.hpp
+++ b/src/Shader/VertexProgram.hpp
@@ -124,7 +124,6 @@
 		int ifDepth;
 		int loopRepDepth;
 		int currentLabel;
-		bool whileTest;
 
 		BasicBlock *ifFalseBlock[24 + 24];
 		BasicBlock *loopRepTestBlock[4];
@@ -133,6 +132,7 @@
 		std::vector<BasicBlock*> callRetBlock[2048];
 		BasicBlock *returnBlock;
 		bool isConditionalIf[24 + 24];
+		std::vector<Int4> restoreContinue;
 	};
 }
 
