Index: src/ColorTransformation.vala
===================================================================
--- src/ColorTransformation.vala	(revision 1984)
+++ src/ColorTransformation.vala	(working copy)
@@ -581,7 +581,7 @@
 }
 
 public class TintTransformation : RGBTransformation {
-    private const float INTENSITY_FACTOR = 0.25f;
+    private const float INTENSITY_FACTOR = 0.33f;
     public const float MIN_PARAMETER = -16.0f;
     public const float MAX_PARAMETER = 16.0f;
     
@@ -592,16 +592,32 @@
         
         parameter = client_param.clamp(MIN_PARAMETER, MAX_PARAMETER);
 
-         if (parameter != 0.0f) {
-             float adjusted_param = parameter / MAX_PARAMETER;
-             adjusted_param *= INTENSITY_FACTOR;
+        if (parameter != 0.0f) {
+            float adjusted_param = parameter / MAX_PARAMETER;
+            adjusted_param *= INTENSITY_FACTOR;
+ 
+            if (adjusted_param > 0.0f) {
+                matrix_entries[5] -= adjusted_param;
+                matrix_entries[7] += adjusted_param;
+                
+                adjusted_param /= 2.0f;
              
-             matrix_entries[11] -= (adjusted_param / 2);
-             matrix_entries[7] += adjusted_param;
-             matrix_entries[3] -= (adjusted_param / 2);
- 
-             identity = false;
-         }
+                matrix_entries[0] -= adjusted_param;
+                matrix_entries[10] -= adjusted_param;
+            } else {
+                matrix_entries[5] += adjusted_param;
+                
+                adjusted_param /= 2.0f;
+             
+                matrix_entries[0] += adjusted_param;
+                matrix_entries[3] -= adjusted_param;
+                
+                matrix_entries[10] += adjusted_param;
+                matrix_entries[11] -= adjusted_param;
+            }
+
+            identity = false;
+        }
     }
 
     public float get_parameter() {
@@ -621,16 +637,22 @@
         
         parameter = client_parameter.clamp(MIN_PARAMETER, MAX_PARAMETER);
         
-         if (parameter != 0.0f) {
-             float adjusted_param = parameter / MAX_PARAMETER;
-             adjusted_param *= INTENSITY_FACTOR;
+        if (parameter != 0.0f) {
+            float adjusted_param = parameter / MAX_PARAMETER;
+            adjusted_param *= INTENSITY_FACTOR;
              
-             matrix_entries[11] -= adjusted_param;
-             matrix_entries[7] += (adjusted_param / 2);
-             matrix_entries[3] += (adjusted_param / 2);
+            if (adjusted_param > 0.0f) {
+                matrix_entries[0] -= adjusted_param;
+                matrix_entries[3] += adjusted_param;     
+                matrix_entries[10] -= adjusted_param;
+            } else {
+                matrix_entries[0] += adjusted_param;
+                matrix_entries[10] += adjusted_param;
+                matrix_entries[11] -= adjusted_param;
+            }
 
-             identity = false;
-         }
+            identity = false;
+        }
     }
 
     public float get_parameter() {
