diff --git a/src/Reactor/Nucleus.cpp b/src/Reactor/Nucleus.cpp
index ab9a151..b1c1ac6 100644
--- a/src/Reactor/Nucleus.cpp
+++ b/src/Reactor/Nucleus.cpp
@@ -75,9 +75,8 @@
 
 	Optimization optimization[10] = {InstructionCombining, Disabled};
 
-	class Type : public llvm::Type
-	{
-	};
+	class Type : public llvm::Type {};
+	class BasicBlock : public llvm::BasicBlock {};
 
 	inline Type *T(llvm::Type *t)
 	{
@@ -89,6 +88,11 @@
 		return reinterpret_cast<std::vector<llvm::Type*>&>(t);
 	}
 
+	inline BasicBlock *B(llvm::BasicBlock *t)
+	{
+		return reinterpret_cast<BasicBlock*>(t);
+	}
+
 	Nucleus::Nucleus()
 	{
 		codegenMutex.lock();   // Reactor and LLVM are currently not thread safe
@@ -240,7 +244,7 @@
 	Value *Nucleus::allocateStackVariable(Type *type, int arraySize)
 	{
 		// Need to allocate it in the entry block for mem2reg to work
-		BasicBlock &entryBlock = ::function->getEntryBlock();
+		llvm::BasicBlock &entryBlock = ::function->getEntryBlock();
 
 		Instruction *declaration;
 
@@ -260,12 +264,12 @@
 
 	BasicBlock *Nucleus::createBasicBlock()
 	{
-		return BasicBlock::Create(*::context, "", ::function);
+		return B(BasicBlock::Create(*::context, "", ::function));
 	}
 
 	BasicBlock *Nucleus::getInsertBlock()
 	{
-		return ::builder->GetInsertBlock();
+		return B(::builder->GetInsertBlock());
 	}
 
 	void Nucleus::setInsertBlock(BasicBlock *basicBlock)
@@ -276,7 +280,7 @@
 
 	BasicBlock *Nucleus::getPredecessor(BasicBlock *basicBlock)
 	{
-		return *pred_begin(basicBlock);
+		return B(*pred_begin(basicBlock));
 	}
 
 	void Nucleus::createFunction(Type *ReturnType, std::vector<Type*> &Params)
@@ -680,12 +684,12 @@
 		return ::builder->CreateSelect(C, ifTrue, ifFalse);
 	}
 
-	Value *Nucleus::createSwitch(llvm::Value *V, llvm::BasicBlock *Dest, unsigned NumCases)
+	Value *Nucleus::createSwitch(llvm::Value *V, BasicBlock *Dest, unsigned NumCases)
 	{
 		return ::builder->CreateSwitch(V, Dest, NumCases);
 	}
 
-	void Nucleus::addSwitchCase(llvm::Value *Switch, int Case, llvm::BasicBlock *Branch)
+	void Nucleus::addSwitchCase(llvm::Value *Switch, int Case, BasicBlock *Branch)
 	{
 		static_cast<SwitchInst*>(Switch)->addCase(llvm::ConstantInt::get(Type::getInt32Ty(*::context), Case, true), Branch);
 	}
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index 2a6edf0..1a12b46 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -32,12 +32,12 @@
 {
 	class Value;
 	class Constant;
-	class BasicBlock;
 }
 
 namespace sw
 {
 	class Type;
+	class BasicBlock;
 
 	enum Optimization
 	{
@@ -71,10 +71,10 @@
 		Routine *acquireRoutine(const wchar_t *name, bool runOptimizations = true);
 
 		static llvm::Value *allocateStackVariable(Type *type, int arraySize = 0);
-		static llvm::BasicBlock *createBasicBlock();
-		static llvm::BasicBlock *getInsertBlock();
-		static void setInsertBlock(llvm::BasicBlock *basicBlock);
-		static llvm::BasicBlock *getPredecessor(llvm::BasicBlock *basicBlock);
+		static BasicBlock *createBasicBlock();
+		static BasicBlock *getInsertBlock();
+		static void setInsertBlock(BasicBlock *basicBlock);
+		static BasicBlock *getPredecessor(BasicBlock *basicBlock);
 
 		static void createFunction(Type *ReturnType, std::vector<Type*> &Params);
 		static llvm::Value *getArgument(unsigned int index);
@@ -82,8 +82,8 @@
 		// Terminators
 		static llvm::Value *createRetVoid();
 		static llvm::Value *createRet(llvm::Value *V);
-		static llvm::Value *createBr(llvm::BasicBlock *dest);
-		static llvm::Value *createCondBr(llvm::Value *cond, llvm::BasicBlock *ifTrue, llvm::BasicBlock *ifFalse);
+		static llvm::Value *createBr(BasicBlock *dest);
+		static llvm::Value *createCondBr(llvm::Value *cond, BasicBlock *ifTrue, BasicBlock *ifFalse);
 
 		// Binary operators
 		static llvm::Value *createAdd(llvm::Value *lhs, llvm::Value *rhs);
@@ -171,8 +171,8 @@
 
 		// Other instructions
 		static llvm::Value *createSelect(llvm::Value *C, llvm::Value *ifTrue, llvm::Value *ifFalse);
-		static llvm::Value *createSwitch(llvm::Value *V, llvm::BasicBlock *Dest, unsigned NumCases);
-		static void addSwitchCase(llvm::Value *Switch, int Case, llvm::BasicBlock *Branch);
+		static llvm::Value *createSwitch(llvm::Value *V, BasicBlock *Dest, unsigned NumCases);
+		static void addSwitchCase(llvm::Value *Switch, int Case, BasicBlock *Branch);
 		static llvm::Value *createUnreachable();
 
 		// Derived instructions
@@ -2451,9 +2451,9 @@
 //	RValue<Array<T>> operator--(const Array<T> &val, int);   // Post-decrement
 //	const Array<T> &operator--(const Array<T> &val);   // Pre-decrement
 
-	llvm::BasicBlock *beginLoop();
-	bool branch(RValue<Bool> cmp, llvm::BasicBlock *bodyBB, llvm::BasicBlock *endBB);
-	bool elseBlock(llvm::BasicBlock *falseBB);
+	BasicBlock *beginLoop();
+	bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB);
+	bool elseBlock(BasicBlock *falseBB);
 
 	void Return();
 	void Return(bool ret);
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 261d7ec..04d844f 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -19,7 +19,7 @@
 {
 	#define For(init, cond, inc)                     \
 	init;                                            \
-	for(llvm::BasicBlock *loopBB__ = beginLoop(),    \
+	for(BasicBlock *loopBB__ = beginLoop(),    \
 		*bodyBB__ = Nucleus::createBasicBlock(),        \
 		*endBB__ = Nucleus::createBasicBlock(),         \
 		*onceBB__ = endBB__;                         \
@@ -30,18 +30,18 @@
 
 	#define Do \
 	{ \
-		llvm::BasicBlock *body = Nucleus::createBasicBlock(); \
+		BasicBlock *body = Nucleus::createBasicBlock(); \
 		Nucleus::createBr(body); \
 		Nucleus::setInsertBlock(body);
 
 	#define Until(cond) \
-		llvm::BasicBlock *end = Nucleus::createBasicBlock(); \
+		BasicBlock *end = Nucleus::createBasicBlock(); \
 		Nucleus::createCondBr((cond).value, end, body); \
 		Nucleus::setInsertBlock(end); \
 	}
 
 	#define If(cond)                                                              \
-	for(llvm::BasicBlock *trueBB__ = Nucleus::createBasicBlock(), \
+	for(BasicBlock *trueBB__ = Nucleus::createBasicBlock(), \
 		*falseBB__ = Nucleus::createBasicBlock(),                 \
 		*endBB__ = Nucleus::createBasicBlock(),                   \
 		*onceBB__ = endBB__;                                   \
@@ -49,7 +49,7 @@
 		onceBB__ = 0, Nucleus::createBr(endBB__), Nucleus::setInsertBlock(falseBB__), Nucleus::createBr(endBB__), Nucleus::setInsertBlock(endBB__))
 
 	#define Else                                            \
-	for(llvm::BasicBlock *endBB__ = Nucleus::getInsertBlock(), \
+	for(BasicBlock *endBB__ = Nucleus::getInsertBlock(), \
 		*falseBB__ = Nucleus::getPredecessor(endBB__),         \
 		*onceBB__ = endBB__;                                \
 		onceBB__ && elseBlock(falseBB__);                   \
diff --git a/src/Shader/PixelProgram.cpp b/src/Shader/PixelProgram.cpp
index a68e657..e8fd1ed 100644
--- a/src/Shader/PixelProgram.cpp
+++ b/src/Shader/PixelProgram.cpp
@@ -1238,8 +1238,8 @@
 
 	void PixelProgram::BREAK()
 	{
-		llvm::BasicBlock *deadBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
+		BasicBlock *deadBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
 
 		if(breakDepth == 0)
 		{
@@ -1294,8 +1294,8 @@
 	{
 		condition &= enableStack[enableIndex];
 
-		llvm::BasicBlock *continueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
+		BasicBlock *continueBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
 
 		enableBreak = enableBreak & ~condition;
 		Bool allBreak = SignMask(enableBreak) == 0x0;
@@ -1414,8 +1414,8 @@
 	{
 		ifDepth--;
 
-		llvm::BasicBlock *falseBlock = ifFalseBlock[ifDepth];
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = ifFalseBlock[ifDepth];
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		if(isConditionalIf[ifDepth])
 		{
@@ -1441,7 +1441,7 @@
 	{
 		ifDepth--;
 
-		llvm::BasicBlock *endBlock = ifFalseBlock[ifDepth];
+		BasicBlock *endBlock = ifFalseBlock[ifDepth];
 
 		Nucleus::createBr(endBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1459,8 +1459,8 @@
 
 		aL[loopDepth] = aL[loopDepth] + increment[loopDepth];   // FIXME: +=
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1473,8 +1473,8 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1487,8 +1487,8 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1502,7 +1502,7 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(loopRepEndBlock[loopRepDepth]);
 		Nucleus::setInsertBlock(endBlock);
@@ -1539,8 +1539,8 @@
 			condition = !condition;
 		}
 
-		llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock();
+		BasicBlock *trueBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = Nucleus::createBasicBlock();
 
 		branch(condition, trueBlock, falseBlock);
 
@@ -1588,8 +1588,8 @@
 		enableIndex++;
 		enableStack[enableIndex] = condition;
 
-		llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock();
+		BasicBlock *trueBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = Nucleus::createBasicBlock();
 
 		Bool notAllFalse = SignMask(condition) != 0;
 
@@ -1626,9 +1626,9 @@
 		//		increment[loopDepth] = 1;
 		//	}
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1653,9 +1653,9 @@
 		iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData, ps.i[integerRegister.index][0]));
 		aL[loopDepth] = aL[loopDepth - 1];
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1677,9 +1677,9 @@
 	{
 		enableIndex++;
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1715,7 +1715,7 @@
 		enableIndex++;
 		enableStack[enableIndex] = Int4(0xFFFFFFFF);
 
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = nullptr;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1733,7 +1733,7 @@
 		}
 		else
 		{
-			llvm::BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
+			BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
 
 			if(callRetBlock[currentLabel].size() > 1)   // Pop the return destination from the call stack
 			{
diff --git a/src/Shader/PixelProgram.hpp b/src/Shader/PixelProgram.hpp
index 965be33..b15177a 100644
--- a/src/Shader/PixelProgram.hpp
+++ b/src/Shader/PixelProgram.hpp
@@ -156,13 +156,12 @@
 		int currentLabel;
 		bool whileTest;
 
-		// FIXME: Get rid of llvm::
-		llvm::BasicBlock *ifFalseBlock[24 + 24];
-		llvm::BasicBlock *loopRepTestBlock[4];
-		llvm::BasicBlock *loopRepEndBlock[4];
-		llvm::BasicBlock *labelBlock[2048];
-		std::vector<llvm::BasicBlock*> callRetBlock[2048];
-		llvm::BasicBlock *returnBlock;
+		BasicBlock *ifFalseBlock[24 + 24];
+		BasicBlock *loopRepTestBlock[4];
+		BasicBlock *loopRepEndBlock[4];
+		BasicBlock *labelBlock[2048];
+		std::vector<BasicBlock*> callRetBlock[2048];
+		BasicBlock *returnBlock;
 		bool isConditionalIf[24 + 24];
 	};
 }
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index 8e1d662..ba2c79e 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -999,8 +999,8 @@
 
 	void VertexProgram::BREAK()
 	{
-		llvm::BasicBlock *deadBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
+		BasicBlock *deadBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
 
 		if(breakDepth == 0)
 		{
@@ -1055,8 +1055,8 @@
 	{
 		condition &= enableStack[enableIndex];
 
-		llvm::BasicBlock *continueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
+		BasicBlock *continueBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth - 1];
 
 		enableBreak = enableBreak & ~condition;
 		Bool allBreak = SignMask(enableBreak) == 0x0;
@@ -1175,8 +1175,8 @@
 	{
 		ifDepth--;
 
-		llvm::BasicBlock *falseBlock = ifFalseBlock[ifDepth];
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = ifFalseBlock[ifDepth];
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		if(isConditionalIf[ifDepth])
 		{
@@ -1202,7 +1202,7 @@
 	{
 		ifDepth--;
 
-		llvm::BasicBlock *endBlock = ifFalseBlock[ifDepth];
+		BasicBlock *endBlock = ifFalseBlock[ifDepth];
 
 		Nucleus::createBr(endBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1220,8 +1220,8 @@
 
 		aL[loopDepth] = aL[loopDepth] + increment[loopDepth];   // FIXME: +=
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1234,8 +1234,8 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1248,8 +1248,8 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *testBlock = loopRepTestBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(testBlock);
 		Nucleus::setInsertBlock(endBlock);
@@ -1263,7 +1263,7 @@
 	{
 		loopRepDepth--;
 
-		llvm::BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
+		BasicBlock *endBlock = loopRepEndBlock[loopRepDepth];
 
 		Nucleus::createBr(loopRepEndBlock[loopRepDepth]);
 		Nucleus::setInsertBlock(endBlock);
@@ -1300,8 +1300,8 @@
 			condition = !condition;
 		}
 
-		llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock();
+		BasicBlock *trueBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = Nucleus::createBasicBlock();
 
 		branch(condition, trueBlock, falseBlock);
 
@@ -1349,8 +1349,8 @@
 		enableIndex++;
 		enableStack[enableIndex] = condition;
 
-		llvm::BasicBlock *trueBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *falseBlock = Nucleus::createBasicBlock();
+		BasicBlock *trueBlock = Nucleus::createBasicBlock();
+		BasicBlock *falseBlock = Nucleus::createBasicBlock();
 
 		Bool notAllFalse = SignMask(condition) != 0;
 
@@ -1388,9 +1388,9 @@
 			increment[loopDepth] = 1;
 		}
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1415,9 +1415,9 @@
 		iteration[loopDepth] = *Pointer<Int>(data + OFFSET(DrawData,vs.i[integerRegister.index][0]));
 		aL[loopDepth] = aL[loopDepth - 1];
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1439,9 +1439,9 @@
 	{
 		enableIndex++;
 
-		llvm::BasicBlock *loopBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *testBlock = Nucleus::createBasicBlock();
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *loopBlock = Nucleus::createBasicBlock();
+		BasicBlock *testBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = testBlock;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1477,7 +1477,7 @@
 		enableIndex++;
 		enableStack[enableIndex] = Int4(0xFFFFFFFF);
 
-		llvm::BasicBlock *endBlock = Nucleus::createBasicBlock();
+		BasicBlock *endBlock = Nucleus::createBasicBlock();
 
 		loopRepTestBlock[loopRepDepth] = nullptr;
 		loopRepEndBlock[loopRepDepth] = endBlock;
@@ -1495,7 +1495,7 @@
 		}
 		else
 		{
-			llvm::BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
+			BasicBlock *unreachableBlock = Nucleus::createBasicBlock();
 
 			if(callRetBlock[currentLabel].size() > 1)   // Pop the return destination from the call stack
 			{
diff --git a/src/Shader/VertexProgram.hpp b/src/Shader/VertexProgram.hpp
index 4d73fa9..bcf4a20 100644
--- a/src/Shader/VertexProgram.hpp
+++ b/src/Shader/VertexProgram.hpp
@@ -126,13 +126,12 @@
 		int currentLabel;
 		bool whileTest;
 
-		// FIXME: Get rid of llvm::
-		llvm::BasicBlock *ifFalseBlock[24 + 24];
-		llvm::BasicBlock *loopRepTestBlock[4];
-		llvm::BasicBlock *loopRepEndBlock[4];
-		llvm::BasicBlock *labelBlock[2048];
-		std::vector<llvm::BasicBlock*> callRetBlock[2048];
-		llvm::BasicBlock *returnBlock;
+		BasicBlock *ifFalseBlock[24 + 24];
+		BasicBlock *loopRepTestBlock[4];
+		BasicBlock *loopRepEndBlock[4];
+		BasicBlock *labelBlock[2048];
+		std::vector<BasicBlock*> callRetBlock[2048];
+		BasicBlock *returnBlock;
 		bool isConditionalIf[24 + 24];
 	};
 }
