diff --git a/app/qml/ApplicationSettings.qml b/app/qml/ApplicationSettings.qml
index 1cf7629..430a5d8 100644
--- a/app/qml/ApplicationSettings.qml
+++ b/app/qml/ApplicationSettings.qml
@@ -78,7 +78,7 @@ Item{
 
     ListModel{
         id: framelist
-        ListElement{text: "No frame"; source: "./frames/NoFrame.qml"; reflections: false}
+        ListElement{text: "No frame"; source: ""; reflections: false}
         ListElement{text: "Simple white frame"; source: "./frames/WhiteSimpleFrame.qml"; reflections: true}
         ListElement{text: "Rough black frame"; source: "./frames/BlackRoughFrame.qml"; reflections: true}
     }
@@ -154,7 +154,7 @@ Item{
 
     // FRAMES /////////////////////////////////////////////////////////////////
 
-    property bool _frameReflections: true
+    property bool _frameReflections: false
     property bool reflectionsAllowed: framelist.get(frames_index).reflections
     property bool frameReflections: _frameReflections && reflectionsAllowed
 
diff --git a/app/qml/PreprocessedTerminal.qml b/app/qml/PreprocessedTerminal.qml
index 94a6fce..5cbc95b 100644
--- a/app/qml/PreprocessedTerminal.qml
+++ b/app/qml/PreprocessedTerminal.qml
@@ -35,10 +35,10 @@ Item{
     property alias title: ksession.title
     property alias kterminal: kterminal
 
-    anchors.leftMargin: frame.item.displacementLeft * appSettings.window_scaling
-    anchors.rightMargin: frame.item.displacementRight * appSettings.window_scaling
-    anchors.topMargin: frame.item.displacementTop * appSettings.window_scaling
-    anchors.bottomMargin: frame.item.displacementBottom * appSettings.window_scaling
+    anchors.leftMargin: frame.displacementLeft * appSettings.window_scaling
+    anchors.rightMargin: frame.displacementRight * appSettings.window_scaling
+    anchors.topMargin: frame.displacementTop * appSettings.window_scaling
+    anchors.bottomMargin: frame.displacementBottom * appSettings.window_scaling
 
     //The blur effect has to take into account the framerate
     property real mBlur: appSettings.motion_blur
diff --git a/app/qml/ShaderTerminal.qml b/app/qml/ShaderTerminal.qml
index 4501a13..22e81ec 100644
--- a/app/qml/ShaderTerminal.qml
+++ b/app/qml/ShaderTerminal.qml
@@ -49,10 +49,10 @@ ShaderEffect {
 
     property bool frameReflections: appSettings.frameReflections
 
-    property real disp_top: (frame.item.displacementTop * appSettings.window_scaling) / height
-    property real disp_bottom: (frame.item.displacementBottom * appSettings.window_scaling) / height
-    property real disp_left: (frame.item.displacementLeft * appSettings.window_scaling) / width
-    property real disp_right: (frame.item.displacementRight * appSettings.window_scaling) / width
+    property real disp_top: (frame.displacementTop * appSettings.window_scaling) / height
+    property real disp_bottom: (frame.displacementBottom * appSettings.window_scaling) / height
+    property real disp_left: (frame.displacementLeft * appSettings.window_scaling) / width
+    property real disp_right: (frame.displacementRight * appSettings.window_scaling) / width
 
     property real screen_brightness: appSettings.brightness * 1.5 + 0.5
 
diff --git a/app/qml/TerminalContainer.qml b/app/qml/TerminalContainer.qml
index 784a338..fb2ab2e 100644
--- a/app/qml/TerminalContainer.qml
+++ b/app/qml/TerminalContainer.qml
@@ -19,6 +19,15 @@ ShaderTerminal{
     Loader{
         id: frame
         anchors.fill: parent
+
+        property real displacementLeft: item ? item.displacementLeft : 0
+        property real displacementTop: item ? item.displacementTop : 0
+        property real displacementRight: item ? item.displacementRight : 0
+        property real displacementBottom: item ? item.displacementBottom : 0
+
+        asynchronous: true
+        visible: status === Loader.Ready
+
         z: 2.1
         source: appSettings.frame_source
     }
diff --git a/app/qml/frames/BlackRoughFrame.qml b/app/qml/frames/BlackRoughFrame.qml
index 8661cd7..ebe0708 100644
--- a/app/qml/frames/BlackRoughFrame.qml
+++ b/app/qml/frames/BlackRoughFrame.qml
@@ -21,5 +21,6 @@ TerminalFrame{
     displacementRight: 80.0
     displacementBottom: 65.0
 
-    shaderString: "FrameShader.qml"
+    staticDiffuseComponent: 1.0
+    dinamycDiffuseComponent: 0.6
 }
diff --git a/app/qml/frames/WhiteSimpleFrame.qml b/app/qml/frames/WhiteSimpleFrame.qml
index 0231c40..77a42fe 100644
--- a/app/qml/frames/WhiteSimpleFrame.qml
+++ b/app/qml/frames/WhiteSimpleFrame.qml
@@ -21,5 +21,6 @@ TerminalFrame{
     displacementRight: 55
     displacementBottom: 50
 
-    shaderString: "FrameShader.qml"
+    staticDiffuseComponent: 1.0
+    dinamycDiffuseComponent: 0.6
 }
diff --git a/app/qml/frames/images/black-frame-normals.png b/app/qml/frames/images/black-frame-normals.png
index 70bb73f..e315663 100644
Binary files a/app/qml/frames/images/black-frame-normals.png and b/app/qml/frames/images/black-frame-normals.png differ
diff --git a/app/qml/frames/images/screen-frame-normals.png b/app/qml/frames/images/screen-frame-normals.png
index 2d7e955..2cb719e 100644
Binary files a/app/qml/frames/images/screen-frame-normals.png and b/app/qml/frames/images/screen-frame-normals.png differ
diff --git a/app/qml/frames/utils/FrameShader.qml b/app/qml/frames/utils/FrameShader.qml
deleted file mode 100644
index b7b1f4e..0000000
--- a/app/qml/frames/utils/FrameShader.qml
+++ /dev/null
@@ -1,103 +0,0 @@
-import QtQuick 2.2
-import QtGraphicalEffects 1.0
-
-ShaderEffect{
-    property variant source: framesource
-    property variant normals: framesourcenormals
-    property real screen_distorsion: appSettings.screen_distortion * framecontainer.distortionCoefficient
-    property real ambient_light: appSettings.ambient_light
-    property color font_color: appSettings.font_color
-    property color background_color: appSettings.background_color
-    property real brightness: appSettings.brightness * 1.5 + 0.5
-
-    property bool frameReflections: appSettings.frameReflections
-    property variant lightSource: reflectionEffectSourceLoader.item
-
-    property real chroma_color: appSettings.chroma_color
-
-    Loader{
-        id: reflectionEffectLoader
-        width: parent.width * 0.33
-        height: parent.height * 0.33
-        active: frameReflections
-
-        sourceComponent: FastBlur{
-            id: frameReflectionEffect
-            radius: 128
-            source: terminal.kterminal
-            smooth: false
-        }
-    }
-
-    Loader{
-        id: reflectionEffectSourceLoader
-        active: frameReflections
-        sourceComponent: ShaderEffectSource{
-            id: frameReflectionSource
-            sourceItem: reflectionEffectLoader.item
-            hideSource: true
-            smooth: true
-            visible: false
-        }
-    }
-
-    blending: true
-
-    fragmentShader: "
-                            uniform sampler2D source;
-                            uniform sampler2D normals;
-                            uniform highp float screen_distorsion;
-                            uniform highp float ambient_light;
-                            uniform highp float qt_Opacity;
-                            uniform lowp float chroma_color;" +
-
-                            (frameReflections ?
-                                "uniform sampler2D lightSource;" : "") + "
-
-                            uniform vec4 font_color;
-                            uniform vec4 background_color;
-                            varying lowp float brightness;
-
-                            varying highp vec2 qt_TexCoord0;
-
-                            vec2 distortCoordinates(vec2 coords){
-                                vec2 cc = coords - vec2(0.5);
-                                float dist = dot(cc, cc) * screen_distorsion;
-                                return (coords + cc * (1.0 + dist) * dist);
-                            }
-
-                            float rgb2grey(vec3 v){
-                                return dot(v, vec3(0.21, 0.72, 0.04));
-                            }
-
-                            void main(){
-                                vec2 coords = distortCoordinates(qt_TexCoord0);
-                                vec4 txt_color = texture2D(source, coords);
-                                vec4 txt_normal = texture2D(normals, coords);
-                                vec3 normal = normalize(txt_normal.rgb * 2.0 - 1.0);
-                                vec3 light_direction = normalize(vec3(0.5, 0.5, 0.0) - vec3(qt_TexCoord0, 0.0));
-
-                                float dotProd = dot(normal, light_direction);" +
-
-                                (frameReflections ? "
-                                    vec3 realLightColor = texture2D(lightSource, coords).rgb;
-                                    float screenLight = rgb2grey(realLightColor);
-                                    float clampedDotProd = clamp(dotProd, 0.05, 1.0);
-                                    float diffuseReflection = clamp(screenLight * 1.5 * clampedDotProd, 0.0, 0.35);
-                                    float reflectionAlpha = mix(1.0, 0.90, dotProd);
-                                    vec3 lightColor = mix(font_color.rgb * screenLight, font_color.rgb * realLightColor, chroma_color);"
-                                : "
-                                    float diffuseReflection = 0.0;
-                                    float reflectionAlpha = 1.0;
-                                    vec3 lightColor = font_color.rgb;") + "
-
-
-                                vec3 back_color = background_color.rgb * (0.2 + 0.5 * dotProd);
-                                vec3 front_color = lightColor * (0.05 + diffuseReflection);
-
-                                vec4 dark_color = vec4((back_color + front_color) * txt_normal.a, txt_normal.a * reflectionAlpha);
-                                gl_FragColor = mix(dark_color, txt_color, ambient_light);
-                            }"
-
-    onStatusChanged: if (log) console.log(log) //Print warning messages
-}
diff --git a/app/qml/frames/utils/TerminalFrame.qml b/app/qml/frames/utils/TerminalFrame.qml
index 11f0d4e..2b9869f 100644
--- a/app/qml/frames/utils/TerminalFrame.qml
+++ b/app/qml/frames/utils/TerminalFrame.qml
@@ -1,4 +1,7 @@
 import QtQuick 2.2
+import QtGraphicalEffects 1.0
+
+import "../../utils.js" as Utils
 
 Item{
     id: framecontainer
@@ -21,6 +24,10 @@ Item{
     property real displacementRight
     property real displacementBottom
 
+    // Material coefficients
+    property real staticDiffuseComponent: 0.7
+    property real dinamycDiffuseComponent: 1.0
+
     property real distortionCoefficient
 
     BorderImage{
@@ -65,10 +72,138 @@ Item{
         textureSize: Qt.size(parent.width, parent.height)
         visible: false
     }
+
+    // REFLECTIONS ////////////////////////////////////////////////////////////
     Loader{
+        id: reflectionEffectLoader
+        width: parent.width * 0.33
+        height: parent.height * 0.33
+        active: appSettings.frameReflections
+
+        sourceComponent: FastBlur{
+            id: frameReflectionEffect
+            radius: 128
+            source: terminal.kterminal
+            smooth: false
+        }
+    }
+
+    Loader{
+        id: reflectionEffectSourceLoader
+        active: appSettings.frameReflections
+        sourceComponent: ShaderEffectSource{
+            id: frameReflectionSource
+            sourceItem: reflectionEffectLoader.item
+            hideSource: true
+            smooth: true
+            visible: false
+        }
+    }
+
+    // This texture represent the static light component.
+    ShaderEffect {
+        id: staticLight
+        property alias source: framesource
+        property alias normals: framesourcenormals
+        property real screen_distorsion: appSettings.screen_distortion * framecontainer.distortionCoefficient
+        property real ambient_light: appSettings.ambient_light
+        property color font_color: appSettings.font_color
+        property color background_color: appSettings.background_color
+        property color reflectionColor: Utils.mix(font_color, background_color, 0.2)
+        property real diffuseComponent: staticDiffuseComponent
+
         anchors.centerIn: parent
         width: parent.width + (addedWidth / textureWidth) * parent.width
         height: parent.height + (addedHeight / textureHeight) * parent.height
-        source: shaderString
+
+        blending: true
+
+        fragmentShader: "
+            uniform highp sampler2D normals;
+            uniform highp sampler2D source;
+            uniform lowp float screen_distorsion;
+            uniform lowp float ambient_light;
+            uniform highp float qt_Opacity;
+            uniform lowp vec4 reflectionColor;
+            uniform lowp float diffuseComponent;
+
+            varying highp vec2 qt_TexCoord0;
+
+            vec2 distortCoordinates(vec2 coords){
+                vec2 cc = coords - vec2(0.5);
+                float dist = dot(cc, cc) * screen_distorsion;
+                return (coords + cc * (1.0 + dist) * dist);
+            }
+
+            float rgb2grey(vec3 v){
+                return dot(v, vec3(0.21, 0.72, 0.04));
+            }
+
+            void main(){
+                vec2 coords = distortCoordinates(qt_TexCoord0);
+                vec4 txtColor = texture2D(source, coords);
+                vec4 txtNormal = texture2D(normals, coords);
+
+                vec3 normal = normalize(txtNormal.rgb * 2.0 - 1.0);
+                vec2 lightDirection = normalize(vec2(0.5, 0.5) - coords);
+                float dotProd = dot(normal, vec3(lightDirection, 0.0)) * diffuseComponent;
+
+                vec3 darkColor = dotProd * reflectionColor.rgb;
+                gl_FragColor = vec4(mix(darkColor, txtColor.rgb, ambient_light), dotProd);
+            }
+        "
+
+        onStatusChanged: if (log) console.log(log) //Print warning messages
+    }
+
+    ShaderEffectSource {
+        id: staticLightSource
+        sourceItem: staticLight
+        hideSource: true
+        anchors.fill: staticLight
+        live: true
+    }
+
+    Loader{
+        id: dynamicLightLoader
+        anchors.fill: staticLight
+        active: appSettings.frameReflections
+        sourceComponent: ShaderEffect {
+            property ShaderEffectSource lightMask: staticLightSource
+            property ShaderEffectSource reflectionSource: reflectionEffectSourceLoader.item
+            property real diffuseComponent: dinamycDiffuseComponent
+            property real chroma_color: appSettings.chroma_color
+            property color font_color: appSettings.font_color
+
+            visible: true
+            blending: true
+
+            fragmentShader: "
+                uniform sampler2D lightMask;
+                uniform sampler2D reflectionSource;
+                uniform lowp float diffuseComponent;
+                uniform lowp float chroma_color;
+                uniform highp vec4 font_color;
+                uniform highp float qt_Opacity;
+
+                varying highp vec2 qt_TexCoord0;
+
+                float rgb2grey(vec3 v){
+                    return dot(v, vec3(0.21, 0.72, 0.04));
+                }
+
+                void main() {
+                    float alpha = texture2D(lightMask, qt_TexCoord0).a * diffuseComponent;
+                    vec3 reflectionColor = texture2D(reflectionSource, qt_TexCoord0).rgb;
+                    vec3 color = font_color.rgb * rgb2grey(reflectionColor);" +
+                    (chroma_color !== 0 ?
+                        "color = mix(color, font_color.rgb * reflectionColor, chroma_color);"
+                    : "") +
+                    "gl_FragColor = vec4(color, 1.0) * alpha;
+                }
+            "
+
+            onStatusChanged: if (log) console.log(log) //Print warning messages
+        }
     }
 }
diff --git a/app/qml/resources.qrc b/app/qml/resources.qrc
index 86d48fb..1ed86d2 100644
--- a/app/qml/resources.qrc
+++ b/app/qml/resources.qrc
@@ -9,7 +9,6 @@
         <file>frames/images/black-frame-original.png</file>
         <file>frames/images/screen-frame-original.png</file>
         <file>frames/WhiteSimpleFrame.qml</file>
-        <file>frames/utils/FrameShader.qml</file>
         <file>frames/utils/TerminalFrame.qml</file>
         <file>SizeOverlay.qml</file>
         <file>ShaderTerminal.qml</file>