diff --git a/Effects/terrain-default.eff b/Effects/terrain-default.eff
index fa48f7a..f33f133 100644
--- a/Effects/terrain-default.eff
+++ b/Effects/terrain-default.eff
@@ -137,6 +137,11 @@
         <type>int</type>
         <value>2</value> <!-- AMBIENT_AND_DIFFUSE -->
       </uniform>
+      <uniform>
+        <name>overlay</name>
+        <type>sampler-2d</type>
+        <value type="int">3</value>
+      </uniform>
       <depth>
         <function>lequal</function>
         <write-mask type="bool">false</write-mask>
diff --git a/Shaders/default.frag b/Shaders/default.frag
index 52afbaf..161cd50 100644
--- a/Shaders/default.frag
+++ b/Shaders/default.frag
@@ -6,6 +6,7 @@ varying vec3 normal;
 varying float fogCoord;
 
 uniform sampler2D texture;
+uniform sampler2D overlay;
 
 float luminance(vec3 color)
 {
@@ -43,6 +44,9 @@ void main()
     // is closer to what the OpenGL fixed function pipeline does.
     color = clamp(color, 0.0, 1.0);
     texel = texture2D(texture, gl_TexCoord[0].st);
+    vec4 texel2 = texture2D(overlay, gl_TexCoord[3].st);
+    texel = mix(texel, texel2, texel2.a);
+
     fragColor = color * texel + specular;
     fogFactor = exp(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord);
     gl_FragColor = mix(gl_Fog.color, fragColor, fogFactor);
diff --git a/Shaders/default.vert b/Shaders/default.vert
index 74089f0..8babb99 100644
--- a/Shaders/default.vert
+++ b/Shaders/default.vert
@@ -26,6 +26,7 @@ void main()
     vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
     gl_Position = ftransform();
     gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
+    gl_TexCoord[3] = gl_TextureMatrix[3] * gl_MultiTexCoord3;
     normal = gl_NormalMatrix * gl_Normal;
     vec4 ambient_color, diffuse_color;
     if (colorMode == MODE_DIFFUSE) {
