diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 3075d5e8b1ac1d3259fa4e7500aef76c6c59bc89..2bd39d81c0c273290f48dbd09805943381ce8934 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -389,64 +389,31 @@ void TBuiltIns::initialize(int version, EProfile profile)
         s.append(TString("\n"));
 
         //
-        // Texture Functions.
+        // Original style texture Functions existing in both stages.
+        // (Per-stage functions below.)
         //
         if (profile != EEsProfile || version == 100) {
             s.append(TString("vec4 texture2D(sampler2D, vec2);"));
-            s.append(TString("vec4 texture2D(sampler2D, vec2, float);"));
 
             s.append(TString("vec4 texture2DProj(sampler2D, vec3);"));
             s.append(TString("vec4 texture2DProj(sampler2D, vec4);"));
-            s.append(TString("vec4 texture2DProj(sampler2D, vec3, float);"));
-            s.append(TString("vec4 texture2DProj(sampler2D, vec4, float);"));
-        
-            s.append(TString("vec4 texture2DLod(sampler2D, vec2, float);"));
-
-            s.append(TString("vec4 texture2DProjLod(sampler2D, vec3, float);"));
-            s.append(TString("vec4 texture2DProjLod(sampler2D, vec4, float);"));
 
             s.append(TString("vec4 textureCube(samplerCube, vec3);"));
-            s.append(TString("vec4 textureCube(samplerCube, vec3, float);"));
-
-            s.append(TString("vec4 textureCubeLod(samplerCube, vec3, float);"));
         }
 
         if (profile != EEsProfile && version > 100) {
             s.append(TString("vec4 texture1D(sampler1D, float);"));
-            s.append(TString("vec4 texture1D(sampler1D, float, float);"));
             
             s.append(TString("vec4 texture1DProj(sampler1D, vec2);"));
             s.append(TString("vec4 texture1DProj(sampler1D, vec4);"));
-            s.append(TString("vec4 texture1DProj(sampler1D, vec2, float);"));
-            s.append(TString("vec4 texture1DProj(sampler1D, vec4, float);"));
             
-            s.append(TString("vec4 texture1DProjLod(sampler1D, vec2, float);"));
-            s.append(TString("vec4 texture1DProjLod(sampler1D, vec4, float);"));
-
             s.append(TString("vec4 texture3D(sampler3D, vec3);"));
-            s.append(TString("vec4 texture3D(sampler3D, vec3, float);"));
-
             s.append(TString("vec4 texture3DProj(sampler3D, vec4);"));
-            s.append(TString("vec4 texture3DProj(sampler3D, vec4, float);"));
-        
-            s.append(TString("vec4 texture3DLod(sampler3D, vec3, float);"));
-
-            s.append(TString("vec4 texture3DProjLod(sampler3D, vec4, float);"));
 
             s.append(TString("vec4 shadow1D(sampler1DShadow, vec3);"));
-            s.append(TString("vec4 shadow1D(sampler1DShadow, vec3, float);"));
-
             s.append(TString("vec4 shadow2D(sampler2DShadow, vec3);"));
-            s.append(TString("vec4 shadow2D(sampler2DShadow, vec3, float);"));
-
             s.append(TString("vec4 shadow1DProj(sampler1DShadow, vec4);"));
-            s.append(TString("vec4 shadow1DProj(sampler1DShadow, vec4, float);"));
-
             s.append(TString("vec4 shadow2DProj(sampler2DShadow, vec4);"));
-            s.append(TString("vec4 shadow2DProj(sampler2DShadow, vec4, float);"));
-            
-            s.append(TString("vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"));
-            s.append(TString("vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"));
 
             // ARB_texture_rectangle
             s.append(TString("vec4 texture2DRect(sampler2DRect, vec2);"));
@@ -455,7 +422,6 @@ void TBuiltIns::initialize(int version, EProfile profile)
             s.append(TString("vec4 shadow2DRect(sampler2DRectShadow, vec3);"));
             s.append(TString("vec4 shadow2DRectProj(sampler2DRectShadow, vec4);"));
         }
-        
         s.append(TString("\n"));
 
         //
@@ -498,25 +464,25 @@ void TBuiltIns::initialize(int version, EProfile profile)
         s.append(TString("vec4 ftransform();"));
 
         //
-        // Texture Functions.
+        // Texture Functions with lod.
         //
-        s.append(TString("vec4 texture1DLod(sampler1D sampler, float coord, float lod);"));
-        s.append(TString("vec4 texture1DProjLod(sampler1D sampler, vec2 coord, float lod);"));
-        s.append(TString("vec4 texture1DProjLod(sampler1D sampler, vec4 coord, float lod);"));
-
-        s.append(TString("vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);"));
-        s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);"));
-        s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);"));
-
-        s.append(TString("vec4 texture3DLod(sampler3D sampler, vec3 coord, float lod);"));
-        s.append(TString("vec4 texture3DProjLod(sampler3D sampler, vec4 coord, float lod);"));
-        s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);"));
-
-        s.append(TString("vec4 shadow1DLod(sampler1DShadow sampler, vec3 coord, float lod);"));
-        s.append(TString("vec4 shadow2DLod(sampler2DShadow sampler, vec3 coord, float lod);"));
-        s.append(TString("vec4 shadow1DProjLod(sampler1DShadow sampler, vec4 coord, float lod);"));
-        s.append(TString("vec4 shadow2DProjLod(sampler2DShadow sampler, vec4 coord, float lod);"));
-
+        if (profile != EEsProfile || version == 100) {
+            s.append(TString("vec4 texture2DLod(sampler2D, vec2, float);"));
+            s.append(TString("vec4 texture2DProjLod(sampler2D, vec3, float);"));
+            s.append(TString("vec4 texture2DProjLod(sampler2D, vec4, float);"));
+            s.append(TString("vec4 textureCubeLod(samplerCube, vec3, float);"));
+        }
+        if (profile != EEsProfile && version > 100) {
+            s.append(TString("vec4 texture1DLod(sampler1D, float, float);"));
+            s.append(TString("vec4 texture1DProjLod(sampler1D, vec2, float);"));
+            s.append(TString("vec4 texture1DProjLod(sampler1D, vec4, float);"));
+            s.append(TString("vec4 texture3DLod(sampler3D, vec3, float);"));
+            s.append(TString("vec4 texture3DProjLod(sampler3D, vec4, float);"));
+            s.append(TString("vec4 shadow1DLod(sampler1DShadow, vec3, float);"));
+            s.append(TString("vec4 shadow2DLod(sampler2DShadow, vec3, float);"));
+            s.append(TString("vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"));
+            s.append(TString("vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"));
+        }
 		s.append(TString("\n"));
     }
     {
@@ -529,24 +495,25 @@ void TBuiltIns::initialize(int version, EProfile profile)
         TString& s = BuiltInFunctionsFragment;
 
         //
-        // Texture Functions.
+        // Texture Functions with bias.
         //
-		s.append(TString("vec4 texture1D(sampler1D sampler, float coord, float bias);"));
-        s.append(TString("vec4 texture1DProj(sampler1D sampler, vec2 coord, float bias);"));
-        s.append(TString("vec4 texture1DProj(sampler1D sampler, vec4 coord, float bias);"));
-
-        s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);"));
-        s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);"));
-        s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
-
-		s.append(TString("vec4 texture3D(sampler3D sampler, vec3 coord, float bias);"));
-        s.append(TString("vec4 texture3DProj(sampler3D sampler, vec4 coord, float bias);"));
-        s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
-
-		s.append(TString("vec4 shadow1D(sampler1DShadow sampler, vec3 coord, float bias);"));
-        s.append(TString("vec4 shadow2D(sampler2DShadow sampler, vec3 coord, float bias);"));
-        s.append(TString("vec4 shadow1DProj(sampler1DShadow sampler, vec4 coord, float bias);"));
-        s.append(TString("vec4 shadow2DProj(sampler2DShadow sampler, vec4 coord, float bias);"));
+        if (profile != EEsProfile || version == 100) {
+            s.append(TString("vec4 texture2D(sampler2D, vec2, float);"));
+            s.append(TString("vec4 texture2DProj(sampler2D, vec3, float);"));
+            s.append(TString("vec4 texture2DProj(sampler2D, vec4, float);"));
+            s.append(TString("vec4 textureCube(samplerCube, vec3, float);"));
+        }
+        if (profile != EEsProfile && version > 100) {
+            s.append(TString("vec4 texture1D(sampler1D, float, float);"));
+            s.append(TString("vec4 texture1DProj(sampler1D, vec2, float);"));
+            s.append(TString("vec4 texture1DProj(sampler1D, vec4, float);"));
+            s.append(TString("vec4 texture3D(sampler3D, vec3, float);"));
+            s.append(TString("vec4 texture3DProj(sampler3D, vec4, float);"));
+            s.append(TString("vec4 shadow1D(sampler1DShadow, vec3, float);"));
+            s.append(TString("vec4 shadow2D(sampler2DShadow, vec3, float);"));
+            s.append(TString("vec4 shadow1DProj(sampler1DShadow, vec4, float);"));
+            s.append(TString("vec4 shadow2DProj(sampler2DShadow, vec4, float);"));
+        }
 
 		s.append(TString("float dFdx(float p);"));
         s.append(TString("vec2  dFdx(vec2  p);"));
@@ -815,7 +782,6 @@ void TBuiltIns::initialize(int version, EProfile profile)
     builtInStrings[EShLangVertex].push_back(StandardUniforms);
 }
 
-
 void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, EShLanguage language)
 {
     //