diff --git a/src/Shader/PixelPipeline.cpp b/src/Shader/PixelPipeline.cpp
index f983b8f..5d4df97 100644
--- a/src/Shader/PixelPipeline.cpp
+++ b/src/Shader/PixelPipeline.cpp
@@ -88,7 +88,7 @@
 			const Src &src1 = instruction->src[1];
 			const Src &src2 = instruction->src[2];
 
-			unsigned short version = shader->getVersion();
+			unsigned short shaderModel = shader->getShaderModel();
 			bool pairing = i + 1 < shader->getLength() && shader->getInstruction(i + 1)->coissue;   // First instruction of pair
 			bool coissue = instruction->coissue;                                                              // Second instruction of pair
 
@@ -101,10 +101,10 @@
 			if(src1.type != Shader::PARAMETER_VOID) s1 = fetchRegister(src1);
 			if(src2.type != Shader::PARAMETER_VOID) s2 = fetchRegister(src2);
 
-			Float4 x = version < 0x0104 ? v[2 + dst.index].x : v[2 + src0.index].x;
-			Float4 y = version < 0x0104 ? v[2 + dst.index].y : v[2 + src0.index].y;
-			Float4 z = version < 0x0104 ? v[2 + dst.index].z : v[2 + src0.index].z;
-			Float4 w = version < 0x0104 ? v[2 + dst.index].w : v[2 + src0.index].w;
+			Float4 x = shaderModel < 0x0104 ? v[2 + dst.index].x : v[2 + src0.index].x;
+			Float4 y = shaderModel < 0x0104 ? v[2 + dst.index].y : v[2 + src0.index].y;
+			Float4 z = shaderModel < 0x0104 ? v[2 + dst.index].z : v[2 + src0.index].z;
+			Float4 w = shaderModel < 0x0104 ? v[2 + dst.index].w : v[2 + src0.index].w;
 
 			switch(opcode)
 			{
@@ -126,7 +126,7 @@
 			case Shader::OPCODE_DP4: DP4(d, s0, s1);     break;
 			case Shader::OPCODE_LRP: LRP(d, s0, s1, s2); break;
 			case Shader::OPCODE_TEXCOORD:
-				if(version < 0x0104)
+				if(shaderModel < 0x0104)
 				{
 					TEXCOORD(d, x, y, z, dst.index);
 			}
@@ -143,11 +143,11 @@
 				}
 				break;
 			case Shader::OPCODE_TEXKILL:
-				if(version < 0x0104)
+				if(shaderModel < 0x0104)
 				{
 					TEXKILL(cMask, x, y, z);
 				}
-				else if(version == 0x0104)
+				else if(shaderModel == 0x0104)
 				{
 					if(dst.type == Shader::PARAMETER_TEXTURE)
 					{
@@ -161,11 +161,11 @@
 				else ASSERT(false);
 				break;
 			case Shader::OPCODE_TEX:
-				if(version < 0x0104)
+				if(shaderModel < 0x0104)
 				{
 					TEX(d, x, y, z, dst.index, false);
 				}
-				else if(version == 0x0104)
+				else if(shaderModel == 0x0104)
 				{
 					if(src0.type == Shader::PARAMETER_TEXTURE)
 					{
diff --git a/src/Shader/PixelProgram.cpp b/src/Shader/PixelProgram.cpp
index 4c5c5643..b55bf34 100644
--- a/src/Shader/PixelProgram.cpp
+++ b/src/Shader/PixelProgram.cpp
@@ -27,7 +27,7 @@
 
 	void PixelProgram::setBuiltins(Int &x, Int &y, Float4(&z)[4], Float4 &w)
 	{
-		if(shader->getVersion() >= 0x0300)
+		if(shader->getShaderModel() >= 0x0300)
 		{
 			if(shader->isVPosDeclared())
 			{
diff --git a/src/Shader/PixelRoutine.cpp b/src/Shader/PixelRoutine.cpp
index 7694bd2..c6341e0 100644
--- a/src/Shader/PixelRoutine.cpp
+++ b/src/Shader/PixelRoutine.cpp
@@ -31,7 +31,7 @@
 
 	PixelRoutine::PixelRoutine(const PixelProcessor::State &state, const PixelShader *shader) : QuadRasterizer(state, shader), v(shader && shader->dynamicallyIndexedInput)
 	{
-		if(!shader || shader->getVersion() < 0x0200 || forceClearRegisters)
+		if(!shader || shader->getShaderModel() < 0x0200 || forceClearRegisters)
 		{
 			for(int i = 0; i < MAX_FRAGMENT_INPUTS; i++)
 			{
diff --git a/src/Shader/PixelShader.cpp b/src/Shader/PixelShader.cpp
index 26908bc..954fff3 100644
--- a/src/Shader/PixelShader.cpp
+++ b/src/Shader/PixelShader.cpp
@@ -22,7 +22,7 @@
 {
 	PixelShader::PixelShader(const PixelShader *ps) : Shader()
 	{
-		version = 0x0300;
+		shaderModel = 0x0300;
 		vPosDeclared = false;
 		vFaceDeclared = false;
 		centroid = false;
@@ -198,7 +198,7 @@
 
 	void PixelShader::analyzeInterpolants()
 	{
-		if(version < 0x0300)
+		if(shaderModel < 0x0300)
 		{
 			// Set default mapping; disable unused interpolants below
 			input[0][0] = Semantic(Shader::USAGE_COLOR, 0);
@@ -288,7 +288,7 @@
 					case Shader::OPCODE_DCL:
 						break;   // Ignore
 					default:   // Arithmetic instruction
-						if(version >= 0x0104)
+						if(shaderModel >= 0x0104)
 						{
 							ASSERT(false);
 						}
@@ -329,7 +329,7 @@
 								switch(samplerType[sampler])
 								{
 								case Shader::SAMPLER_UNKNOWN:
-									if(version == 0x0104)
+									if(shaderModel == 0x0104)
 									{
 										if((inst->src[0].swizzle & 0x30) == 0x20)   // .xyz
 										{
@@ -380,7 +380,7 @@
 									interpolant[index][3] = true;
 								}
 
-								if(version == 0x0104 && inst->opcode == Shader::OPCODE_TEX)
+								if(shaderModel == 0x0104 && inst->opcode == Shader::OPCODE_TEX)
 								{
 									if(inst->src[0].modifier == Shader::MODIFIER_DZ)
 									{
@@ -717,7 +717,7 @@
 			}
 		}
 
-		if(version >= 0x0200)
+		if(shaderModel >= 0x0200)
 		{
 			for(const auto &inst : instruction)
 			{
diff --git a/src/Shader/Shader.cpp b/src/Shader/Shader.cpp
index 34a10f0..f7ce731 100644
--- a/src/Shader/Shader.cpp
+++ b/src/Shader/Shader.cpp
@@ -1183,12 +1183,12 @@
 
 	int Shader::size(unsigned long opcode) const
 	{
-		return size(opcode, version);
+		return size(opcode, shaderModel);
 	}
 
-	int Shader::size(unsigned long opcode, unsigned short version)
+	int Shader::size(unsigned long opcode, unsigned short shaderModel)
 	{
-		if(version > 0x0300)
+		if(shaderModel > 0x0300)
 		{
 			ASSERT(false);
 		}
@@ -1335,7 +1335,7 @@
 		   opcode != OPCODE_PHASE &&
 		   opcode != OPCODE_END)
 		{
-			if(version >= 0x0200)
+			if(shaderModel >= 0x0200)
 			{
 				length = (opcode & 0x0F000000) >> 24;
 			}
@@ -1350,7 +1350,7 @@
 			ASSERT(false);
 		}
 
-		if(version == 0x0104)
+		if(shaderModel == 0x0104)
 		{
 			switch(opcode & 0x0000FFFF)
 			{
@@ -1438,9 +1438,9 @@
 		return shaderType;
 	}
 
-	unsigned short Shader::getVersion() const
+	unsigned short Shader::getShaderModel() const
 	{
-		return version;
+		return shaderModel;
 	}
 
 	void Shader::print(const char *fileName, ...) const
@@ -1456,7 +1456,7 @@
 
 		for(const auto &inst : instruction)
 		{
-			file << inst->string(shaderType, version) << std::endl;
+			file << inst->string(shaderType, shaderModel) << std::endl;
 		}
 	}
 
@@ -1464,7 +1464,7 @@
 	{
 		std::ofstream file(fileName, std::ofstream::out | std::ofstream::app);
 
-		file << instruction[index]->string(shaderType, version) << std::endl;
+		file << instruction[index]->string(shaderType, shaderModel) << std::endl;
 	}
 
 	void Shader::append(Instruction *instruction)
diff --git a/src/Shader/Shader.hpp b/src/Shader/Shader.hpp
index 695f72e..6755cd4 100644
--- a/src/Shader/Shader.hpp
+++ b/src/Shader/Shader.hpp
@@ -560,14 +560,14 @@
 		int getSerialID() const;
 		size_t getLength() const;
 		ShaderType getShaderType() const;
-		unsigned short getVersion() const;
+		unsigned short getShaderModel() const;
 
 		void append(Instruction *instruction);
 		void declareSampler(int i);
 
 		const Instruction *getInstruction(size_t i) const;
 		int size(unsigned long opcode) const;
-		static int size(unsigned long opcode, unsigned short version);
+		static int size(unsigned long opcode, unsigned short shaderModel);
 
 		void print(const char *fileName, ...) const;
 		void printInstruction(int index, const char *fileName) const;
@@ -634,7 +634,7 @@
 
 		union
 		{
-			unsigned short version;
+			unsigned short shaderModel;
 
 			struct
 			{
diff --git a/src/Shader/ShaderCore.cpp b/src/Shader/ShaderCore.cpp
index 5b2c1ae..58e535c 100644
--- a/src/Shader/ShaderCore.cpp
+++ b/src/Shader/ShaderCore.cpp
@@ -1605,9 +1605,9 @@
 		dst.w = arctanh(src.w, pp);
 	}
 
-	void ShaderCore::expp(Vector4f &dst, const Vector4f &src, unsigned short version)
+	void ShaderCore::expp(Vector4f &dst, const Vector4f &src, unsigned short shaderModel)
 	{
-		if(version < 0x0200)
+		if(shaderModel < 0x0200)
 		{
 			Float4 frc = Frac(src.x);
 			Float4 floor = src.x - frc;
@@ -1623,9 +1623,9 @@
 		}
 	}
 
-	void ShaderCore::logp(Vector4f &dst, const Vector4f &src, unsigned short version)
+	void ShaderCore::logp(Vector4f &dst, const Vector4f &src, unsigned short shaderModel)
 	{
-		if(version < 0x0200)
+		if(shaderModel < 0x0200)
 		{
 			Float4 tmp0;
 			Float4 tmp1;
diff --git a/src/Shader/ShaderCore.hpp b/src/Shader/ShaderCore.hpp
index b0ad3a0..249e058 100644
--- a/src/Shader/ShaderCore.hpp
+++ b/src/Shader/ShaderCore.hpp
@@ -334,8 +334,8 @@
 		void acosh(Vector4f &dst, const Vector4f &src, bool pp = false);
 		void asinh(Vector4f &dst, const Vector4f &src, bool pp = false);
 		void atanh(Vector4f &dst, const Vector4f &src, bool pp = false);
-		void expp(Vector4f &dst, const Vector4f &src, unsigned short version);
-		void logp(Vector4f &dst, const Vector4f &src, unsigned short version);
+		void expp(Vector4f &dst, const Vector4f &src, unsigned short shaderModel);
+		void logp(Vector4f &dst, const Vector4f &src, unsigned short shaderModel);
 		void cmp0(Vector4f &dst, const Vector4f &src0, const Vector4f &src1, const Vector4f &src2);
 		void cmp(Vector4f &dst, const Vector4f &src0, const Vector4f &src1, Control control);
 		void icmp(Vector4f &dst, const Vector4f &src0, const Vector4f &src1, Control control);
diff --git a/src/Shader/VertexProgram.cpp b/src/Shader/VertexProgram.cpp
index d95025c..53f3692 100644
--- a/src/Shader/VertexProgram.cpp
+++ b/src/Shader/VertexProgram.cpp
@@ -76,7 +76,7 @@
 	{
 	//	shader->print("VertexShader-%0.8X.txt", state.shaderID);
 
-		unsigned short version = shader->getVersion();
+		unsigned short shaderModel = shader->getShaderModel();
 
 		enableIndex = 0;
 		stackIndex = 0;
@@ -192,7 +192,7 @@
 			case Shader::OPCODE_ATT:        att(d, s0, s1);                 break;
 			case Shader::OPCODE_EXP2X:      exp2x(d, s0, pp);               break;
 			case Shader::OPCODE_EXP2:       exp2(d, s0, pp);                break;
-			case Shader::OPCODE_EXPP:       expp(d, s0, version);           break;
+			case Shader::OPCODE_EXPP:       expp(d, s0, shaderModel);       break;
 			case Shader::OPCODE_EXP:        exp(d, s0, pp);                 break;
 			case Shader::OPCODE_FRC:        frc(d, s0);                     break;
 			case Shader::OPCODE_TRUNC:      trunc(d, s0);                   break;
@@ -203,7 +203,7 @@
 			case Shader::OPCODE_LIT:        lit(d, s0);                     break;
 			case Shader::OPCODE_LOG2X:      log2x(d, s0, pp);               break;
 			case Shader::OPCODE_LOG2:       log2(d, s0, pp);                break;
-			case Shader::OPCODE_LOGP:       logp(d, s0, version);           break;
+			case Shader::OPCODE_LOGP:       logp(d, s0, shaderModel);       break;
 			case Shader::OPCODE_LOG:        log(d, s0, pp);                 break;
 			case Shader::OPCODE_LRP:        lrp(d, s0, s1, s2);             break;
 			case Shader::OPCODE_STEP:       step(d, s0, s1);                break;
@@ -411,7 +411,7 @@
 						break;
 					case Shader::PARAMETER_TEXCRDOUT:
 				//	case Shader::PARAMETER_OUTPUT:
-						if(version < 0x0300)
+						if(shaderModel < 0x0300)
 						{
 							if(dst.x) pDst.x = o[T0 + dst.index].x;
 							if(dst.y) pDst.y = o[T0 + dst.index].y;
@@ -542,7 +542,7 @@
 					break;
 				case Shader::PARAMETER_TEXCRDOUT:
 			//	case Shader::PARAMETER_OUTPUT:
-					if(version < 0x0300)
+					if(shaderModel < 0x0300)
 					{
 						if(dst.x) o[T0 + dst.index].x = d.x;
 						if(dst.y) o[T0 + dst.index].y = d.y;
diff --git a/src/Shader/VertexShader.cpp b/src/Shader/VertexShader.cpp
index ebdfc97..33c2241 100644
--- a/src/Shader/VertexShader.cpp
+++ b/src/Shader/VertexShader.cpp
@@ -23,7 +23,7 @@
 {
 	VertexShader::VertexShader(const VertexShader *vs) : Shader()
 	{
-		version = 0x0300;
+		shaderModel = 0x0300;
 		positionRegister = Pos;
 		pointSizeRegister = Unused;
 		instanceIdDeclared = false;
@@ -226,7 +226,7 @@
 
 	void VertexShader::analyzeOutput()
 	{
-		if(version < 0x0300)
+		if(shaderModel < 0x0300)
 		{
 			output[Pos][0] = Semantic(Shader::USAGE_POSITION, 0);
 			output[Pos][1] = Semantic(Shader::USAGE_POSITION, 0);
