diff --git a/src/TNL/Containers/Expressions/ExpressionTemplates.h b/src/TNL/Containers/Expressions/ExpressionTemplates.h
index e36c21a738a82c36c1e2fa831e2e18d74c94c855..8b82f5422076385f117e9b9f00136614861552dd 100644
--- a/src/TNL/Containers/Expressions/ExpressionTemplates.h
+++ b/src/TNL/Containers/Expressions/ExpressionTemplates.h
@@ -323,6 +323,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Addition >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Addition >
+operator + ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Addition >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Addition >
+operator + ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Addition >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -429,6 +459,36 @@ operator - ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Subtraction >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Subtraction >
+operator - ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Subtraction >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Subtraction >
+operator - ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Subtraction >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -535,6 +595,36 @@ operator * ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Multiplication >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Multiplication >
+operator * ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Multiplication >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Multiplication >
+operator * ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Multiplication >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -641,6 +731,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Division >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Division >
+operator / ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Division >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Division >
+operator / ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Division >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -739,8 +859,8 @@ const Containers::Expressions::BinaryExpressionTemplate<
    typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType,
    Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >,
    Containers::Expressions::Min >
-operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a,
-             const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b )
+min( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a,
+     const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b )
 {
    return Containers::Expressions::BinaryExpressionTemplate<
       typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType,
@@ -748,6 +868,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Min >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Min >
+min( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+     const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Min >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Min >
+min( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+     const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Min >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -854,6 +1004,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T
       Containers::Expressions::Max >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Max >
+max( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a,
+     const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Max >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::BinaryExpressionTemplate<
+   typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Max >
+max( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a,
+     const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::BinaryExpressionTemplate<
+      typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::UnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Max >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
diff --git a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
index 70478ca6d6420d74fbd3820551d99c4120ffcf5c..6ecb1fef118e022a70c2e4739f50b673e31f26b9 100644
--- a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
+++ b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h
@@ -363,6 +363,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Addition >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Addition >
+operator + ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Addition >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Addition >
+operator + ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Addition >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -469,6 +499,36 @@ operator - ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Subtraction >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Subtraction >
+operator - ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Subtraction >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Subtraction >
+operator - ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Subtraction >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -575,6 +635,36 @@ operator * ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Multiplication >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Multiplication >
+operator * ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Multiplication >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Multiplication >
+operator * ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Multiplication >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -681,6 +771,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Division >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Division >
+operator / ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+             const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Division >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Division >
+operator / ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+             const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Division >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -779,8 +899,8 @@ const Containers::Expressions::StaticBinaryExpressionTemplate<
    typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType,
    Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >,
    Containers::Expressions::Min >
-operator + ( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a,
-             const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b )
+min( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a,
+     const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b )
 {
    return Containers::Expressions::StaticBinaryExpressionTemplate<
       typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType,
@@ -788,6 +908,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Min >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Min >
+min( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+     const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Min >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Min >
+min( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+     const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Min >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
@@ -894,6 +1044,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl
       Containers::Expressions::Max >( a, b );
 }
 
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::Max >
+max( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a,
+     const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::Max >( a, b );
+}
+
+template< typename T1,
+          template< typename > class Operation >
+const Containers::Expressions::StaticBinaryExpressionTemplate<
+   typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+   Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+   Containers::Expressions::Max >
+max( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a,
+     const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b )
+{
+   return Containers::Expressions::StaticBinaryExpressionTemplate<
+      typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType,
+      Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >,
+      Containers::Expressions::Max >( a, b );
+}
+
 template< typename L1,
           template< typename > class LOperation,
           typename R1,
diff --git a/src/TNL/Containers/StaticVectorExpressions.h b/src/TNL/Containers/StaticVectorExpressions.h
index e5c5a4900c9c39ee9e2ff18920ff3ceb28b727de..99568552402d3989deb6b6267780b82835783de7 100644
--- a/src/TNL/Containers/StaticVectorExpressions.h
+++ b/src/TNL/Containers/StaticVectorExpressions.h
@@ -630,6 +630,32 @@ auto operator,( const Containers::StaticVector< Size, Real1 >& a, const Containe
    return TNL::sum( a * b );
 }
 
+////
+// Dot product - the same as scalar product, just for convenience
+template< int Size, typename Real, typename ET >
+__cuda_callable__
+auto dot( const Containers::StaticVector< Size, Real >& a, const ET& b )
+->decltype( TNL::sum( a * b ) )
+{
+   return TNL::sum( a * b );
+}
+
+template< typename ET, int Size, typename Real >
+__cuda_callable__
+auto dot( const ET& a, const Containers::StaticVector< Size, Real >& b )
+->decltype( TNL::sum( a * b ) )
+{
+   return TNL::sum( a * b );
+}
+
+template< typename Real1, int Size, typename Real2 >
+__cuda_callable__
+auto dot( const Containers::StaticVector< Size, Real1 >& a, const Containers::StaticVector< Size, Real2 >& b )
+->decltype( TNL::sum( a * b ) )
+{
+   return TNL::sum( a * b );
+}
+
 ////
 // TODO: Replace this with multiplication when its safe
 template< int Size, typename Real, typename ET >
diff --git a/src/TNL/Containers/VectorViewExpressions.h b/src/TNL/Containers/VectorViewExpressions.h
index e1aaeaac6091f13e71f98b799362533bae1cb7a1..ac32f81cf553427fedcc2cd3d3ee04c3bda77cd0 100644
--- a/src/TNL/Containers/VectorViewExpressions.h
+++ b/src/TNL/Containers/VectorViewExpressions.h
@@ -582,6 +582,27 @@ auto operator,( const Containers::VectorView< Real1, Device, Index >& a, const C
    return TNL::sum( a * b );
 }
 
+////
+// Dot product - the same as scalar product, just for convenience
+template< typename Real, typename Device, typename Index, typename ET >
+Real dot( const Containers::VectorView< Real, Device, Index >& a, const ET& b )
+{
+   return TNL::sum( a * b );
+}
+
+template< typename ET, typename Real, typename Device, typename Index >
+Real dot( const ET& a, const Containers::VectorView< Real, Device, Index >& b )
+{
+   return TNL::sum( a * b );
+}
+
+template< typename Real1, typename Real2, typename Device, typename Index >
+auto dot( const Containers::VectorView< Real1, Device, Index >& a, const Containers::VectorView< Real2, Device, Index >& b )
+->decltype( TNL::sum( a * b ) )
+{
+   return TNL::sum( a * b );
+}
+
 ////
 // TODO: Replace this with multiplication when its safe
 template< typename Real, typename Device, typename Index, typename ET >