diff --git a/GPipe.cabal b/GPipe.cabal
--- a/GPipe.cabal
+++ b/GPipe.cabal
@@ -1,5 +1,5 @@
 name: GPipe
-version: 1.0.3
+version: 1.0.4
 cabal-version: >= 1.2.3
 build-type: Simple
 license: BSD3
diff --git a/src/Shader.hs b/src/Shader.hs
--- a/src/Shader.hs
+++ b/src/Shader.hs
@@ -125,10 +125,10 @@
 uniformDecls p uns = makeU "float f" floatUniforms ++ 
                      makeU "int i" intUniforms ++ 
                      makeU "bool b" boolUniforms ++
-                     makeU "sampler3D s3" sampler3DUniforms ++
-                     makeU "sampler2D s2" sampler2DUniforms ++
-                     makeU "sampler1D s1" sampler1DUniforms ++
-                     makeU "samplerCube sc" samplerCubeUniforms       
+                     makeU ("sampler3D s" ++ show (fromEnum Sampler3D)) sampler3DUniforms ++
+                     makeU ("sampler2D s" ++ show (fromEnum Sampler2D)) sampler2DUniforms ++
+                     makeU ("sampler1D s" ++ show (fromEnum Sampler1D)) sampler1DUniforms ++
+                     makeU ("samplerCube sc" ++ show (fromEnum SamplerCube)) samplerCubeUniforms       
     where makeU tn f = if Map.null (f uns)
                           then ""
                           else "uniform " ++ tn ++ p ++ "[" ++ show (Map.size (f uns)) ++ "];\n"
@@ -155,14 +155,14 @@
 vSampleFunc f t s tex c xs = toColor $ fromVVec 4 (vListFunc f $ [addVertexSamplerUniform t s tex, vVec c] ++ xs)
 fSampleFunc f t s tex c xs = toColor $ fromFVec 4 (fListFunc f $ [addFragmentSamplerUniform t s tex, fVec c] ++ xs)
 
-addVertexSamplerUniform Sampler3D s t = Vertex $ addUniform "s3vu" sampler3DUniforms setSampler3DUniforms (s,t)
-addVertexSamplerUniform Sampler2D s t = Vertex $ addUniform "s2vu" sampler2DUniforms setSampler2DUniforms (s,t)
-addVertexSamplerUniform Sampler1D s t = Vertex $ addUniform "s1vu" sampler1DUniforms setSampler1DUniforms (s,t)
-addVertexSamplerUniform SamplerCube s t = Vertex $ addUniform "scvu" samplerCubeUniforms setSamplerCubeUniforms (s,t)
-addFragmentSamplerUniform Sampler3D s t = Fragment $ addUniform "s3fu" sampler3DUniforms setSampler3DUniforms (s,t)
-addFragmentSamplerUniform Sampler2D s t = Fragment $ addUniform "s2fu" sampler2DUniforms setSampler2DUniforms (s,t)
-addFragmentSamplerUniform Sampler1D s t = Fragment $ addUniform "s1fu" sampler1DUniforms setSampler1DUniforms (s,t)
-addFragmentSamplerUniform SamplerCube s t = Fragment $ addUniform "scfu" samplerCubeUniforms setSamplerCubeUniforms (s,t)
+addVertexSamplerUniform Sampler3D s t = Vertex $ addUniform ("s" ++ show (fromEnum Sampler3D) ++ "vu") sampler3DUniforms setSampler3DUniforms (s,t)
+addVertexSamplerUniform Sampler2D s t = Vertex $ addUniform ("s" ++ show (fromEnum Sampler2D) ++ "vu") sampler2DUniforms setSampler2DUniforms (s,t)
+addVertexSamplerUniform Sampler1D s t = Vertex $ addUniform ("s" ++ show (fromEnum Sampler1D) ++ "vu") sampler1DUniforms setSampler1DUniforms (s,t)
+addVertexSamplerUniform SamplerCube s t = Vertex $ addUniform ("s" ++ show (fromEnum SamplerCube) ++ "vu") samplerCubeUniforms setSamplerCubeUniforms (s,t)
+addFragmentSamplerUniform Sampler3D s t = Fragment $ addUniform ("s" ++ show (fromEnum Sampler3D) ++ "fu") sampler3DUniforms setSampler3DUniforms (s,t)
+addFragmentSamplerUniform Sampler2D s t = Fragment $ addUniform ("s" ++ show (fromEnum Sampler2D) ++ "fu") sampler2DUniforms setSampler2DUniforms (s,t)
+addFragmentSamplerUniform Sampler1D s t = Fragment $ addUniform ("s" ++ show (fromEnum Sampler1D) ++ "fu") sampler1DUniforms setSampler1DUniforms (s,t)
+addFragmentSamplerUniform SamplerCube s t = Fragment $ addUniform ("s" ++ show (fromEnum SamplerCube) ++ "fu") samplerCubeUniforms setSamplerCubeUniforms (s,t)
 
 -- | An opaque type constructor for atomic values in a vertex on the GPU, e.g. 'Vertex' 'Float'.
 newtype Vertex a = Vertex { fromVertex :: Shader String }
