diff --git a/Core/Material/MaterialBySLDImpl.cpp b/Core/Material/MaterialBySLDImpl.cpp
index 1e2ba3c376a080958b9d19c724a062f6d87b8a7e..76fef2b64e22b6a0f7a2bb4063c0a63a39a7e5ff 100644
--- a/Core/Material/MaterialBySLDImpl.cpp
+++ b/Core/Material/MaterialBySLDImpl.cpp
@@ -30,7 +30,9 @@ MaterialBySLDImpl::MaterialBySLDImpl(const std::string& name, double sld_real, d
                                      kvector_t magnetization)
     : MagneticMaterialImpl(name, magnetization)
     , m_sld_real(sld_real)
-    , m_sld_imag(sld_imag)
+    , m_sld_imag(sld_imag < 0. ?
+                 throw std::runtime_error("The imaginary part of the SLD must be greater or equal zero") :
+                 sld_imag)
 {}
 
 MaterialBySLDImpl* MaterialBySLDImpl::clone() const
diff --git a/Core/Material/RefractiveMaterialImpl.cpp b/Core/Material/RefractiveMaterialImpl.cpp
index 958dbca50fe736add4efa37b9c3723523187e3b5..d8ebbd75ed78b33710b7a54c95e4517c29bdeb9e 100644
--- a/Core/Material/RefractiveMaterialImpl.cpp
+++ b/Core/Material/RefractiveMaterialImpl.cpp
@@ -19,7 +19,9 @@ RefractiveMaterialImpl::RefractiveMaterialImpl(const std::string& name, double d
                                                  kvector_t magnetization)
     : MagneticMaterialImpl(name, magnetization)
     , m_delta(delta)
-    , m_beta(beta)
+    , m_beta(beta < 0. ?
+             throw std::runtime_error("The imaginary part of the refractive index must be greater or equal zero") :
+             beta)
 {}
 
 RefractiveMaterialImpl* RefractiveMaterialImpl::clone() const