 			_changed.execute(this);
 
 			return this;
+		}
+		
+		public function lerp(target : Vector4, ratio : Number) : Vector4
+		{
+			if (ratio == 1.)
+				return copyFrom(target);
+			
+			if (ratio != 0.)
+			{
+				var x : Number = _vector.x;
+				var y : Number = _vector.y;
+				var z : Number = _vector.z;
+				var w : Number = _vector.w;
+				
+				set(
+					x + (target._vector.x - x) * ratio,
+					y + (target._vector.y - y) * ratio,
+					z + (target._vector.z - z) * ratio,
+					w + (target._vector.w - w) * ratio
+				);
+			}
+			
+			return this;
+		}
+		
+		public function equals(v : Vector4, allFour : Boolean = false, tolerance : Number = 0.) : Boolean
+		{
+			return tolerance
+				? _vector.nearEquals(v._vector, tolerance, allFour);
+				: _vector.equals(v._vector, allFour)
 		}
 
 		public function project() : Vector4

		{
			if (x != _vector.x || y != _vector.y || z != _vector.z || w != _vector.w)
			{
				_vector.x = x;
				_vector.y = y;
				_vector.z = z;
				_vector.w = w;

				_update = UPDATE_ALL;


		public function toString() : String
		{
			return '(' + _vector.x + ', ' + _vector.y + ', ' + _vector.z + ', ' + _vector.w + ')';
		}

		public static function scale(v : Vector4, s : Number, out : Vector4 = null) : Vector4
