 			return new SValue(sum);
 		}
 		
-		protected final function subtract(value1 : Object, value2 : Object) : SValue
-		{
-			return new SValue(new Substract(getNode(value1), getNode(value2)));
+		protected final function subtract(value1 : Object, value2 : Object, ...values) : SValue
+		{
+			var sub			: Substract	= new Substract(getNode(value1), getNode(value2));
+			var numValues	: int		= values.length;
+			
+			for (var i : int = 0; i < numValues; ++i)
+				sub = new Substract(sub, getNode(values[i]));
+			
+			return new SValue(sub);
 		}
 		
 		protected final function dotProduct3(u : Object, v : Object) : SValue

	import aerys.minko.render.shader.node.leaf.StyleParameter;
	import aerys.minko.render.shader.node.leaf.TransformParameter;
	import aerys.minko.render.shader.node.leaf.WorldParameter;
	import aerys.minko.render.shader.node.operation.builtin.Add;
	import aerys.minko.render.shader.node.operation.builtin.Cosine;
	import aerys.minko.render.shader.node.operation.builtin.CrossProduct;
	import aerys.minko.render.shader.node.operation.builtin.Divide;

		
		private function getNode(value : Object) : INode
		{
			if (value === null)
				return null;
			
			if (value is INode)
