diff --git a/Core/Aggregate/ParticleLayout.cpp b/Core/Aggregate/ParticleLayout.cpp
index 7e9eec123f9d238e7d45e2801b8e0f53e68325f0..c33dd1759cb5d3ea46cd03c3ceea0efec2d5d166 100644
--- a/Core/Aggregate/ParticleLayout.cpp
+++ b/Core/Aggregate/ParticleLayout.cpp
@@ -28,7 +28,7 @@ namespace {
 
 //! Returns true if interference function is able to calculate particle density automatically,
 //! which is the case for 2D functions.
-bool provideParticleDensity(const IInterferenceFunction& iff)
+bool particleDensityIsProvidedByInterference(const IInterferenceFunction& iff)
 {
     if(iff.getName() == BornAgain::InterferenceFunction2DLatticeType ||
        iff.getName() == BornAgain::InterferenceFunction2DParaCrystalType)
@@ -221,16 +221,19 @@ void ParticleLayout::setAndRegisterInterferenceFunction(IInterferenceFunction* c
 {
     mP_interference_function.reset(child);
     registerChild(child);
-    if(provideParticleDensity(*mP_interference_function))
-        removeParameter(BornAgain::TotalParticleDensity);
+
+    if(particleDensityIsProvidedByInterference(*mP_interference_function))
+        registerParticleDensity(false);
     else
-        registerParticleDensity();
+        registerParticleDensity(true);
 }
 
-void ParticleLayout::registerParticleDensity()
+void ParticleLayout::registerParticleDensity(bool make_registered)
 {
-    if(getParameter(BornAgain::TotalParticleDensity))
-        return;
-
-    registerParameter(BornAgain::TotalParticleDensity, &m_total_particle_density);
+    if(make_registered) {
+        if(!getParameter(BornAgain::TotalParticleDensity))
+            registerParameter(BornAgain::TotalParticleDensity, &m_total_particle_density);
+    } else {
+        removeParameter(BornAgain::TotalParticleDensity);
+    }
 }
diff --git a/Core/Aggregate/ParticleLayout.h b/Core/Aggregate/ParticleLayout.h
index d69bb662db6a7ee0e688322a7a9b3a7fe57c8019..74bfc28e60198d3634e8d51ef926fd37c7667260 100644
--- a/Core/Aggregate/ParticleLayout.h
+++ b/Core/Aggregate/ParticleLayout.h
@@ -70,7 +70,7 @@ private:
     void addAndRegisterAbstractParticle(IAbstractParticle* child);
     void setAndRegisterInterferenceFunction(IInterferenceFunction* child);
 
-    void registerParticleDensity();
+    void registerParticleDensity(bool make_registered = true);
 
     SafePointerVector<IAbstractParticle> m_particles; //!< Vector of particle types
     std::unique_ptr<IInterferenceFunction> mP_interference_function;