diff --git a/Core/Export/NodeProgenity.h b/Core/Export/NodeProgeny.h
similarity index 91%
rename from Core/Export/NodeProgenity.h
rename to Core/Export/NodeProgeny.h
index a142431027a68c25e5a84421ea47bb9f2fb2b68f..61f8ba4221081a8d03c81f18d98fe7df5791b8e7 100644
--- a/Core/Export/NodeProgenity.h
+++ b/Core/Export/NodeProgeny.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Core/Export/NodeProgenity.h
-//! @brief     Defines namespace node_progenity.
+//! @file      Core/Export/NodeProgeny.h
+//! @brief     Defines namespace node_progeny.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -17,7 +17,7 @@
 
 #include "Param/Node/INode.h"
 
-namespace node_progenity {
+namespace node_progeny {
 
 template <typename T> std::vector<const T*> ChildNodesOfType(const INode& node) {
     std::vector<const T*> result;
@@ -46,6 +46,6 @@ template <typename T> std::vector<const T*> AllDescendantsOfType(const INode& no
     return result;
 }
 
-} // namespace node_progenity
+} // namespace node_progeny
 
 #endif // BORNAGAIN_CORE_EXPORT_NODEPROGENITY_H
diff --git a/Core/Export/SampleToPython.cpp b/Core/Export/SampleToPython.cpp
index 3a3b544cdf005206be7fb396940b6f1431e41e36..ccf6e99074eecde15b371dc83ddfafb03e610905 100644
--- a/Core/Export/SampleToPython.cpp
+++ b/Core/Export/SampleToPython.cpp
@@ -17,7 +17,7 @@
 #include "Base/Vector/Transform3D.h"
 #include "Core/Export/ComponentKeyHandler.h"
 #include "Core/Export/MaterialKeyHandler.h"
-#include "Core/Export/NodeProgenity.h"
+#include "Core/Export/NodeProgeny.h"
 #include "Core/Export/PyFmt.h"
 #include "Core/Export/PyFmt2.h"
 #include "Sample/Aggregate/InterferenceFunctions.h"
@@ -108,31 +108,31 @@ void SampleToPython::initLabels(const MultiLayer& multilayer) {
         m_materials->insertMaterial(x);
 
     m_objs->insertModel("sample", &multilayer);
-    for (const auto* x : node_progenity::AllDescendantsOfType<Layer>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<Layer>(multilayer))
         m_objs->insertModel("layer", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<LayerRoughness>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<LayerRoughness>(multilayer))
         m_objs->insertModel("roughness", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<ParticleLayout>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<ParticleLayout>(multilayer))
         m_objs->insertModel("layout", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<IFormFactor>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<IFormFactor>(multilayer))
         m_objs->insertModel("ff", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<IInterferenceFunction>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<IInterferenceFunction>(multilayer))
         m_objs->insertModel("iff", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<Particle>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<Particle>(multilayer))
         m_objs->insertModel("particle", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<ParticleComposition>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<ParticleComposition>(multilayer))
         m_objs->insertModel("particle", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<ParticleCoreShell>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<ParticleCoreShell>(multilayer))
         m_objs->insertModel("particle", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<MesoCrystal>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<MesoCrystal>(multilayer))
         m_objs->insertModel("particle", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<ParticleDistribution>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<ParticleDistribution>(multilayer))
         m_objs->insertModel("particle_distrib", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<Lattice2D>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<Lattice2D>(multilayer))
         m_objs->insertModel("lattice", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<Lattice3D>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<Lattice3D>(multilayer))
         m_objs->insertModel("lattice", x);
-    for (const auto* x : node_progenity::AllDescendantsOfType<Crystal>(multilayer))
+    for (const auto* x : node_progeny::AllDescendantsOfType<Crystal>(multilayer))
         m_objs->insertModel("crystal", x);
 }
 
@@ -258,7 +258,7 @@ std::string SampleToPython::defineInterferenceFunctions() const {
                    << pyfmt::printNm(iff->getLength()) << ", " << pyfmt::printDegrees(iff->getXi())
                    << ")\n";
 
-            const auto* pdf = node_progenity::OnlyChildOfType<IFTDecayFunction1D>(*iff);
+            const auto* pdf = node_progeny::OnlyChildOfType<IFTDecayFunction1D>(*iff);
 
             if (pdf->decayLength() != 0.0)
                 result << indent() << key << "_pdf  = ba." << pdf->getName() << "("
@@ -279,7 +279,7 @@ std::string SampleToPython::defineInterferenceFunctions() const {
                 result << indent() << key << ".setDomainSize("
                        << pyfmt::printDouble(iff->domainSize()) << ")\n";
 
-            const auto* pdf = node_progenity::OnlyChildOfType<IFTDistribution1D>(*iff);
+            const auto* pdf = node_progeny::OnlyChildOfType<IFTDistribution1D>(*iff);
 
             if (pdf->omega() != 0.0)
                 result << indent() << key << "_pdf  = ba." << pdf->getName() << "("
@@ -287,12 +287,12 @@ std::string SampleToPython::defineInterferenceFunctions() const {
                        << indent() << key << ".setProbabilityDistribution(" << key << "_pdf)\n";
 
         } else if (const auto* iff = dynamic_cast<const InterferenceFunction2DLattice*>(s)) {
-            const auto* lattice = node_progenity::OnlyChildOfType<Lattice2D>(*iff);
+            const auto* lattice = node_progeny::OnlyChildOfType<Lattice2D>(*iff);
 
             result << indent() << key << " = ba.InterferenceFunction2DLattice("
                    << m_objs->obj2key(lattice) << ")\n";
 
-            const auto* pdf = node_progenity::OnlyChildOfType<IFTDecayFunction2D>(*iff);
+            const auto* pdf = node_progeny::OnlyChildOfType<IFTDecayFunction2D>(*iff);
 
             result << indent() << key << "_pdf  = ba." << pdf->getName() << "("
                    << pyfmt2::argumentList(pdf) << ")\n"
@@ -302,7 +302,7 @@ std::string SampleToPython::defineInterferenceFunctions() const {
                 result << indent() << key << ".setIntegrationOverXi(True)\n";
 
         } else if (const auto* iff = dynamic_cast<const InterferenceFunctionFinite2DLattice*>(s)) {
-            const auto* lattice = node_progenity::OnlyChildOfType<Lattice2D>(*iff);
+            const auto* lattice = node_progeny::OnlyChildOfType<Lattice2D>(*iff);
 
             result << indent() << key << " = ba.InterferenceFunctionFinite2DLattice("
                    << m_objs->obj2key(lattice) << ", " << iff->numberUnitCells1() << ", "
@@ -312,7 +312,7 @@ std::string SampleToPython::defineInterferenceFunctions() const {
                 result << indent() << key << ".setIntegrationOverXi(True)\n";
 
         } else if (const auto* iff = dynamic_cast<const InterferenceFunction2DParaCrystal*>(s)) {
-            const auto* lattice = node_progenity::OnlyChildOfType<Lattice2D>(*iff);
+            const auto* lattice = node_progeny::OnlyChildOfType<Lattice2D>(*iff);
             std::vector<double> domainSize = iff->domainSizes();
 
             result << indent() << key << " = ba.InterferenceFunction2DParaCrystal("
@@ -323,7 +323,7 @@ std::string SampleToPython::defineInterferenceFunctions() const {
             if (iff->integrationOverXi() == true)
                 result << indent() << key << ".setIntegrationOverXi(True)\n";
 
-            const auto pdf_vector = node_progenity::ChildNodesOfType<IFTDistribution2D>(*iff);
+            const auto pdf_vector = node_progeny::ChildNodesOfType<IFTDistribution2D>(*iff);
             if (pdf_vector.size() != 2)
                 continue;
             const IFTDistribution2D* pdf = pdf_vector[0];
@@ -367,13 +367,13 @@ std::string SampleToPython::defineParticleLayouts() const {
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
         result << indent() << key << " = ba.ParticleLayout()\n";
-        const auto particles = node_progenity::ChildNodesOfType<IAbstractParticle>(*s);
+        const auto particles = node_progeny::ChildNodesOfType<IAbstractParticle>(*s);
         for (const auto* particle : particles) {
             double abundance = particle->abundance();
             result << indent() << key << ".addParticle(" << m_objs->obj2key(particle) << ", "
                    << pyfmt::printDouble(abundance) << ")\n";
         }
-        if (const auto* iff = node_progenity::OnlyChildOfType<IInterferenceFunction>(*s))
+        if (const auto* iff = node_progeny::OnlyChildOfType<IInterferenceFunction>(*s))
             result << indent() << key << ".setInterferenceFunction(" << m_objs->obj2key(iff)
                    << ")\n";
         result << indent() << key << ".setWeight(" << s->weight() << ")\n";
@@ -392,7 +392,7 @@ std::string SampleToPython::defineParticles() const {
     result << "\n" << indent() << "# Define particles\n";
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
-        const auto* ff = node_progenity::OnlyChildOfType<IFormFactor>(*s);
+        const auto* ff = node_progeny::OnlyChildOfType<IFormFactor>(*s);
         ASSERT(ff);
         result << indent() << key << " = ba.Particle(" << m_materials->mat2key(s->material())
                << ", " << m_objs->obj2key(ff) << ")\n";
@@ -452,7 +452,7 @@ std::string SampleToPython::defineParticleDistributions() const {
             result << "\n";
         }
 
-        auto particle = node_progenity::OnlyChildOfType<IParticle>(*s);
+        auto particle = node_progeny::OnlyChildOfType<IParticle>(*s);
         if (!particle)
             continue;
         result << indent() << key << " = ba.ParticleDistribution(" << m_objs->obj2key(particle)
@@ -472,7 +472,7 @@ std::string SampleToPython::defineParticleCompositions() const {
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
         result << indent() << key << " = ba.ParticleComposition()\n";
-        const auto particle_list = node_progenity::ChildNodesOfType<IParticle>(*s);
+        const auto particle_list = node_progeny::ChildNodesOfType<IParticle>(*s);
         for (const auto* particle : particle_list) {
             result << indent() << key << ".addParticle(" << m_objs->obj2key(particle) << ")\n";
         }
@@ -491,8 +491,8 @@ std::string SampleToPython::defineMesoCrystals() const {
     result << "\n" << indent() << "# Define mesocrystals\n";
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
-        auto crystal = node_progenity::OnlyChildOfType<Crystal>(*s);
-        auto outer_shape = node_progenity::OnlyChildOfType<IFormFactor>(*s);
+        auto crystal = node_progeny::OnlyChildOfType<Crystal>(*s);
+        auto outer_shape = node_progeny::OnlyChildOfType<IFormFactor>(*s);
         if (!crystal || !outer_shape)
             continue;
         result << indent() << key << " = ba.MesoCrystal(";
@@ -553,8 +553,8 @@ std::string SampleToPython::defineCrystals() const {
     result << "\n" << indent() << "# Define crystals\n";
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
-        const auto* lattice = node_progenity::OnlyChildOfType<Lattice3D>(*s);
-        const auto* basis = node_progenity::OnlyChildOfType<IParticle>(*s);
+        const auto* lattice = node_progeny::OnlyChildOfType<Lattice3D>(*s);
+        const auto* basis = node_progeny::OnlyChildOfType<IParticle>(*s);
         if (!lattice || !basis)
             continue;
         result << indent() << key << " = ba.Crystal(";
diff --git a/Core/Export/SimulationToPython.cpp b/Core/Export/SimulationToPython.cpp
index 22a99920d77bcf51a32a39107268ee51f5c13a94..d8956fc7b5b64e46fee6585314e13274f7b21f9c 100644
--- a/Core/Export/SimulationToPython.cpp
+++ b/Core/Export/SimulationToPython.cpp
@@ -16,7 +16,7 @@
 #include "Base/Utils/Algorithms.h"
 #include "Core/Computation/ConstantBackground.h"
 #include "Core/Computation/PoissonNoiseBackground.h"
-#include "Core/Export/NodeProgenity.h"
+#include "Core/Export/NodeProgeny.h"
 #include "Core/Export/PyFmt.h"
 #include "Core/Export/PyFmt2.h"
 #include "Core/Export/PyFmtLimits.h"
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index 9bb9592b16b8e46c8a3ba16cc85733c779366afe..e31fe5ab63e844014f537184f63535b753e9ecaa 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -16,7 +16,7 @@
 #include "Base/Const/Units.h"
 #include "Core/Computation/ConstantBackground.h"
 #include "Core/Computation/PoissonNoiseBackground.h"
-#include "Core/Export/NodeProgenity.h"
+#include "Core/Export/NodeProgeny.h"
 #include "Core/Scan/AngularSpecScan.h"
 #include "Core/Simulation/GISASSimulation.h"
 #include "Core/Simulation/OffSpecSimulation.h"
@@ -63,7 +63,7 @@
 #include "Sample/Slice/LayerInterface.h"
 #include "Sample/Slice/LayerRoughness.h"
 
-using namespace node_progenity;
+using namespace node_progeny;
 using SessionItemUtils::SetVectorItem;
 
 namespace {
diff --git a/Tests/UnitTests/Core/Sample/ParticleLayoutTest.cpp b/Tests/UnitTests/Core/Sample/ParticleLayoutTest.cpp
index 0477413334843ac26f2b1d2c72f9b30550ded570..df3cd5e6b358c677e56a6385066e81068616a5ca 100644
--- a/Tests/UnitTests/Core/Sample/ParticleLayoutTest.cpp
+++ b/Tests/UnitTests/Core/Sample/ParticleLayoutTest.cpp
@@ -1,6 +1,6 @@
 #include "Sample/Aggregate/ParticleLayout.h"
 #include "Base/Const/Units.h"
-#include "Core/Export/NodeProgenity.h"
+#include "Core/Export/NodeProgeny.h"
 #include "Sample/Aggregate/InterferenceFunction1DLattice.h"
 #include "Sample/Aggregate/InterferenceFunctionNone.h"
 #include "Sample/Material/MaterialFactoryFuncs.h"
@@ -17,8 +17,8 @@ ParticleLayoutTest::~ParticleLayoutTest() = default;
 
 TEST_F(ParticleLayoutTest, ParticleLayoutInitial) {
     ParticleLayout particleDecoration;
-    auto p_iff = node_progenity::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
-    auto particles = node_progenity::ChildNodesOfType<IAbstractParticle>(particleDecoration);
+    auto p_iff = node_progeny::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
+    auto particles = node_progeny::ChildNodesOfType<IAbstractParticle>(particleDecoration);
     EXPECT_EQ(size_t(0), particles.size());
     EXPECT_EQ(nullptr, p_iff);
 }
@@ -27,8 +27,8 @@ TEST_F(ParticleLayoutTest, ParticleLayoutInitByValue) {
     Particle particle(HomogeneousMaterial());
 
     ParticleLayout particleDecoration(particle, 2.0);
-    auto p_iff = node_progenity::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
-    auto particles = node_progenity::ChildNodesOfType<IAbstractParticle>(particleDecoration);
+    auto p_iff = node_progeny::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
+    auto particles = node_progeny::ChildNodesOfType<IAbstractParticle>(particleDecoration);
     EXPECT_EQ(size_t(1), particles.size());
     EXPECT_EQ(nullptr, p_iff);
 
@@ -52,7 +52,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutAddParticle) {
     particleDecoration.addParticle(particle2, 2.2);
     particleDecoration.addParticle(particle3, 1.0, kvector_t(0, 0, 0), transform3);
     particleDecoration.addParticle(particle4, 4.2, kvector_t(0, 0, 0), transform4);
-    auto particles = node_progenity::ChildNodesOfType<IAbstractParticle>(particleDecoration);
+    auto particles = node_progeny::ChildNodesOfType<IAbstractParticle>(particleDecoration);
 
     EXPECT_EQ(size_t(4), particles.size());
 
@@ -117,7 +117,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutClone) {
     particleDecoration.setInterferenceFunction(iff_none);
 
     ParticleLayout* clone = particleDecoration.clone();
-    auto particles = node_progenity::ChildNodesOfType<IAbstractParticle>(*clone);
+    auto particles = node_progeny::ChildNodesOfType<IAbstractParticle>(*clone);
 
     const IAbstractParticle* p_particle1 = particles[0];
     EXPECT_TRUE(nullptr != p_particle1);
@@ -139,7 +139,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutClone) {
     EXPECT_TRUE(nullptr != p_particle5);
     EXPECT_EQ(0.0, p_particle5->abundance());
 
-    auto p_iff = node_progenity::OnlyChildOfType<IInterferenceFunction>(*clone);
+    auto p_iff = node_progeny::OnlyChildOfType<IInterferenceFunction>(*clone);
 
     EXPECT_TRUE(nullptr != p_iff);
 }
@@ -149,7 +149,7 @@ TEST_F(ParticleLayoutTest, ParticleLayoutInterferenceFunction) {
 
     InterferenceFunctionNone iff_none;
     particleDecoration.setInterferenceFunction(iff_none);
-    auto p_iff = node_progenity::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
+    auto p_iff = node_progeny::OnlyChildOfType<IInterferenceFunction>(particleDecoration);
 
     EXPECT_TRUE(nullptr != p_iff);
 }