diff --git a/VistaCoreLibs/VistaBase/VistaMathBasics.h b/VistaCoreLibs/VistaBase/VistaMathBasics.h
index e41a9100b5c4ce9fe45019d4fcf88c468f1ffa72..24f02faa7cd34d497cb258020707595754812122 100644
--- a/VistaCoreLibs/VistaBase/VistaMathBasics.h
+++ b/VistaCoreLibs/VistaBase/VistaMathBasics.h
@@ -29,6 +29,7 @@
 /* INCLUDES                                                                   */
 /*============================================================================*/
 
+#include <cassert>
 #include <cmath>
 #include <limits>
 
@@ -68,9 +69,14 @@ namespace Vista
 	template< typename TFloat >
 	bool IsValidNumber( const TFloat fValue );
 
+	// clamps val to the range [minVal, maxVal]
 	template< typename TFloat > 
 	TFloat Clamp( const TFloat val, const TFloat minVal, const TFloat maxVal );
 
+	// mixes valA and valB using a param in [0, 1]
+	template< typename TFloat, typename TParam >
+	TFloat Mix( const TParam param, const TFloat valA, const TFloat valB );
+	
 	// true iff val >= minVal && val <= maxVal
 	template< typename TFloat >
 	bool GetIsInRangeInclusive(const TFloat val, const TFloat minVal, const TFloat maxVal);
@@ -82,7 +88,7 @@ namespace Vista
 
 	template< typename TFloat >
 	TFloat Sign( const TFloat val );
-}
+} // namespace Vista
 
 /**
  * Convert angles given in radians to degrees and vice versa.
@@ -122,6 +128,13 @@ TFloat Vista::Clamp( const TFloat val, const TFloat minVal, const TFloat maxVal
 	return val < minVal ? minVal : ( val > maxVal ? maxVal : val );
 }
 
+template< typename TFloat, typename TParam >
+TFloat Vista::Mix( const TParam param, const TFloat valA, const TFloat valB )
+{
+	assert( param >= TParam( 0.0 ) && param <= TParam( 1.0 ) && "Invalid mix param." );
+	return ( TParam( 1.0 ) - param ) * valA + param * valB;
+}
+
 template< typename TFloat >
 bool Vista::GetIsInRangeInclusive(const TFloat val, const TFloat minVal, const TFloat maxVal)
 {