diff --git a/Core/Material/MaterialFactoryFuncs.cpp b/Core/Material/MaterialFactoryFuncs.cpp
index eff5cf790e738dc9b4b831c7bc4f74ce411616f6..9f10cc4eea467a0e019c4b3cb6111f1ed4892003 100644
--- a/Core/Material/MaterialFactoryFuncs.cpp
+++ b/Core/Material/MaterialFactoryFuncs.cpp
@@ -20,6 +20,13 @@ Material HomogeneousMaterial(const std::string& name, double delta, double beta,
     return Material(std::move(mat_impl));
 }
 
+Material HomogeneousMaterial()
+{
+    std::unique_ptr<RefractiveCoefMaterial> mat_impl(
+        new RefractiveCoefMaterial("vacuum", 0.0, 0.0, kvector_t{}));
+    return Material(std::move(mat_impl));
+}
+
 Material MaterialBySLD(const std::string& name, double sld, double abs_term,
                        kvector_t magnetization)
 {
@@ -36,3 +43,10 @@ Material MaterialByAbsCX(const std::string& name, double sld, double abs_cx,
         new WavelengthIndependentMaterial(name, sld, abs_cx / basic_wavelength, magnetization));
     return Material(std::move(mat_impl));
 }
+
+Material MaterialBySLD()
+{
+    std::unique_ptr<WavelengthIndependentMaterial> mat_impl(
+        new WavelengthIndependentMaterial("vacuum", 0.0, 0.0, kvector_t{}));
+    return Material(std::move(mat_impl));
+}
diff --git a/Core/Material/MaterialFactoryFuncs.h b/Core/Material/MaterialFactoryFuncs.h
index 88912df502e796f50b84ea06b7b464160eb0644f..70507d2db0cfffddd0b576017361b24ecc7a93ec 100644
--- a/Core/Material/MaterialFactoryFuncs.h
+++ b/Core/Material/MaterialFactoryFuncs.h
@@ -35,6 +35,14 @@ BA_CORE_API_ Material HomogeneousMaterial(const std::string& name, double delta,
 
 //! @ingroup materials
 
+//! Constructs vacuum material based on refractive coefficients.
+//! Though in practice there is no difference between vacuum materials
+//! produced with MaterialBySLD() and HomogeneousMaterial(), they are not equal because of
+//! the difference in the type of underlying data
+BA_CORE_API_ Material HomogeneousMaterial();
+
+//! @ingroup materials
+
 //! Constructs a wavelength-independent material with given sld and absorptive term
 //! Absorptive term is wavelength-independent (normalized to a wavelength)
 //! and can be considered as inverse of imaginary part of complex scattering length density:
@@ -60,4 +68,12 @@ BA_CORE_API_ Material MaterialBySLD(const std::string& name, double sld, double
 BA_CORE_API_ Material MaterialByAbsCX(const std::string& name, double sld, double abs_cx,
                                       kvector_t magnetization = kvector_t());
 
+//! @ingroup materials
+
+//! Constructs wavelength-independent vacuum material.
+//! Though in practice there is no difference between vacuum materials
+//! produced with MaterialBySLD() and HomogeneousMaterial(), they are not equal because of
+//! the difference in the type of underlying data
+BA_CORE_API_ Material MaterialBySLD();
+
 #endif /* MATERIALFACTORYFUNCS_H_ */
diff --git a/Core/Material/RefractiveCoefMaterial.h b/Core/Material/RefractiveCoefMaterial.h
index dcbb7f276a78db79b9d44f1130d01ba775f59f02..1cda87d0298f94202b3a3aedbcd45b797a8baca0 100644
--- a/Core/Material/RefractiveCoefMaterial.h
+++ b/Core/Material/RefractiveCoefMaterial.h
@@ -30,6 +30,8 @@ public:
     friend BA_CORE_API_ Material HomogeneousMaterial(const std::string&, double, double,
                                                          kvector_t);
 
+    friend BA_CORE_API_ Material HomogeneousMaterial();
+
     virtual ~RefractiveCoefMaterial();
 
     //! Returns pointer to a copy of material
diff --git a/Core/Material/WavelengthIndependentMaterial.h b/Core/Material/WavelengthIndependentMaterial.h
index bd3f0f59ddc1b806dbbb5b29e52a489176136c3e..dff7c2259cd706c5714b7286ef1b25dafae74297 100644
--- a/Core/Material/WavelengthIndependentMaterial.h
+++ b/Core/Material/WavelengthIndependentMaterial.h
@@ -29,6 +29,8 @@ public:
 
     friend BA_CORE_API_ Material MaterialByAbsCX(const std::string&, double, double, kvector_t);
 
+    friend BA_CORE_API_ Material MaterialBySLD();
+
     virtual ~WavelengthIndependentMaterial();
 
     //! Returns pointer to a copy of material
diff --git a/Tests/UnitTests/Core/Other/MaterialTest.h b/Tests/UnitTests/Core/Other/MaterialTest.h
index bb0636417b2b3a59eacef2e4695b4c2ef56332ab..0c5e95270501b25703e8f6f1806d632aa96f9c83 100644
--- a/Tests/UnitTests/Core/Other/MaterialTest.h
+++ b/Tests/UnitTests/Core/Other/MaterialTest.h
@@ -131,6 +131,11 @@ TEST_F(MaterialTest, EqualityTest)
     EXPECT_DOUBLE_EQ(material.materialData().real(), material3.materialData().real());
     EXPECT_DOUBLE_EQ(material.materialData().imag(), material3.materialData().imag());
     EXPECT_TRUE(material.dataType() == material3.dataType());
+
+    EXPECT_EQ(HomogeneousMaterial().getName(), MaterialBySLD().getName());
+    EXPECT_EQ(HomogeneousMaterial().materialData(), MaterialBySLD().materialData());
+    EXPECT_EQ(HomogeneousMaterial().magnetization(), MaterialBySLD().magnetization());
+    EXPECT_FALSE(HomogeneousMaterial() == MaterialBySLD());
 }
 
 TEST_F(MaterialTest, MaterialCopy)