diff --git a/Base/Utils/Algorithms.h b/Base/Utils/Algorithms.h
index 91375f0d93c7ebdf2c344802b395daa182beb093..03e318cb19dce94c54f9ed0c44194fbc63c5344b 100644
--- a/Base/Utils/Algorithms.h
+++ b/Base/Utils/Algorithms.h
@@ -17,6 +17,7 @@
 
 #include "Base/Utils/Assert.h"
 #include <algorithm>
+#include <cmath>
 #include <functional>
 #include <vector>
 
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index 81b43ec257a555d9cba455075936c4188b719c93..8e58a1b284fbcc72e3cf8def9c3499e9dd98d914 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -509,7 +509,7 @@ class kvector_t(object):
     def conj(self):
         r"""
         conj(kvector_t self) -> kvector_t
-        BasicVector3D< double > BasicVector3D< double >::conj() const
+        BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::conj() const
 
         """
         return _libBornAgainBase.kvector_t_conj(self)
@@ -589,7 +589,7 @@ class kvector_t(object):
     def unit(self):
         r"""
         unit(kvector_t self) -> kvector_t
-        BasicVector3D< double > BasicVector3D< double >::unit() const
+        BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::unit() const
 
         """
         return _libBornAgainBase.kvector_t_unit(self)
@@ -605,7 +605,7 @@ class kvector_t(object):
     def real(self):
         r"""
         real(kvector_t self) -> kvector_t
-        BasicVector3D< double > BasicVector3D< double >::real() const
+        BasicVector3D< double > BasicVector3D< std::complex< double > >::real() const
 
         """
         return _libBornAgainBase.kvector_t_real(self)
@@ -914,7 +914,7 @@ class cvector_t(object):
     def conj(self):
         r"""
         conj(cvector_t self) -> cvector_t
-        BasicVector3D< double > BasicVector3D< double >::conj() const
+        BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::conj() const
 
         """
         return _libBornAgainBase.cvector_t_conj(self)
@@ -962,7 +962,7 @@ class cvector_t(object):
     def unit(self):
         r"""
         unit(cvector_t self) -> cvector_t
-        BasicVector3D< double > BasicVector3D< double >::unit() const
+        BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::unit() const
 
         """
         return _libBornAgainBase.cvector_t_unit(self)
@@ -970,7 +970,7 @@ class cvector_t(object):
     def real(self):
         r"""
         real(cvector_t self) -> kvector_t
-        BasicVector3D< double > BasicVector3D< double >::real() const
+        BasicVector3D< double > BasicVector3D< std::complex< double > >::real() const
 
         """
         return _libBornAgainBase.cvector_t_real(self)
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index 67ceb04e8d2d52810b9a920d2e7692031da8f85b..6dfb27d29f80483e27fb42fca0bc67aef69e705c 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -12520,7 +12520,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "kvector_t___isub__", _wrap_kvector_t___isub__, METH_VARARGS, "kvector_t___isub__(kvector_t self, kvector_t v) -> kvector_t"},
 	 { "kvector_t_conj", _wrap_kvector_t_conj, METH_O, "\n"
 		"kvector_t_conj(kvector_t self) -> kvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::conj() const\n"
+		"BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::conj() const\n"
 		"\n"
 		""},
 	 { "kvector_t_mag2", _wrap_kvector_t_mag2, METH_O, "\n"
@@ -12573,7 +12573,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "kvector_t_unit", _wrap_kvector_t_unit, METH_O, "\n"
 		"kvector_t_unit(kvector_t self) -> kvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::unit() const\n"
+		"BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::unit() const\n"
 		"\n"
 		""},
 	 { "kvector_t_complex", _wrap_kvector_t_complex, METH_O, "\n"
@@ -12583,7 +12583,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "kvector_t_real", _wrap_kvector_t_real, METH_O, "\n"
 		"kvector_t_real(kvector_t self) -> kvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::real() const\n"
+		"BasicVector3D< double > BasicVector3D< std::complex< double > >::real() const\n"
 		"\n"
 		""},
 	 { "kvector_t_angle", _wrap_kvector_t_angle, METH_VARARGS, "\n"
@@ -12717,7 +12717,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "cvector_t___isub__", _wrap_cvector_t___isub__, METH_VARARGS, "cvector_t___isub__(cvector_t self, cvector_t v) -> cvector_t"},
 	 { "cvector_t_conj", _wrap_cvector_t_conj, METH_O, "\n"
 		"cvector_t_conj(cvector_t self) -> cvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::conj() const\n"
+		"BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::conj() const\n"
 		"\n"
 		""},
 	 { "cvector_t_mag2", _wrap_cvector_t_mag2, METH_O, "\n"
@@ -12750,12 +12750,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "cvector_t_unit", _wrap_cvector_t_unit, METH_O, "\n"
 		"cvector_t_unit(cvector_t self) -> cvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::unit() const\n"
+		"BasicVector3D< std::complex< double > > BasicVector3D< std::complex< double > >::unit() const\n"
 		"\n"
 		""},
 	 { "cvector_t_real", _wrap_cvector_t_real, METH_O, "\n"
 		"cvector_t_real(cvector_t self) -> kvector_t\n"
-		"BasicVector3D< double > BasicVector3D< double >::real() const\n"
+		"BasicVector3D< double > BasicVector3D< std::complex< double > >::real() const\n"
 		"\n"
 		""},
 	 { "cvector_t_project", _wrap_cvector_t_project, METH_VARARGS, "\n"