diff --git a/Core/StandardSamples/ParticleCompositionBuilder.cpp b/Core/StandardSamples/ParticleCompositionBuilder.cpp
index 8c26c2417580d1ea4f19e0fe63f747d4825e349a..049ca8eb3a792551664cc09b85afa1849496d09b 100644
--- a/Core/StandardSamples/ParticleCompositionBuilder.cpp
+++ b/Core/StandardSamples/ParticleCompositionBuilder.cpp
@@ -14,11 +14,13 @@
 // ************************************************************************** //
 
 #include "ParticleCompositionBuilder.h"
-#include "FormFactorPyramid.h"
-#include "InterferenceFunctionNone.h"
+#include "FormFactorFullSphere.h"
+#include "InterferenceFunction2DLattice.h"
+#include "ParticleComposition.h"
 #include "Materials.h"
 #include "MultiLayer.h"
 #include "ParticleLayout.h"
+#include "FTDistributions.h"
 #include "Units.h"
 
 
@@ -41,15 +43,29 @@ ISample *ParticleCompositionBuilder::buildSample() const
     Layer air_layer(air_material);
     Layer substrate_layer(substrate_material);
 
-    FormFactorPyramid ff_pyramid(1.0, 1.0, 0.12);
+    double radius(10.0*Units::nanometer);
+    FormFactorFullSphere sphere_ff(radius);
+    Particle sphere(particle_material, sphere_ff);
+    ParticleLayout particle_layout;
 
-    Particle particle(particle_material, ff_pyramid);
-    ParticleLayout particle_layout(particle);
+    kvector_t pos0(0.0, 0.0, 0.0);
+    kvector_t pos1(radius, radius, std::sqrt(3.0)*radius);
+    std::vector<kvector_t> positions;
+    positions.push_back(pos0);
+    positions.push_back(pos1);
 
-    particle_layout.addInterferenceFunction(new InterferenceFunctionNone());
+    ParticleComposition basis;
 
-    air_layer.addLayout(particle_layout);
+    basis.addParticles(sphere, positions);
+    particle_layout.addParticle(basis);
+
+    InterferenceFunction2DLattice *interference = InterferenceFunction2DLattice::createHexagonal(radius*2.0);
+    FTDistribution2DCauchy pdf(10*Units::nanometer, 10*Units::nanometer);
+    interference->setProbabilityDistribution(pdf);
 
+    particle_layout.addInterferenceFunction(interference);
+
+    air_layer.addLayout(particle_layout);
     multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
diff --git a/Tests/FunctionalTests/TestGUI/CMakeLists.txt b/Tests/FunctionalTests/TestGUI/CMakeLists.txt
index 1c9a18567544ef9e34895756c9eb455186e81206..e5e5950d2cd45101d3a824b4c5f3987652b8a77a 100644
--- a/Tests/FunctionalTests/TestGUI/CMakeLists.txt
+++ b/Tests/FunctionalTests/TestGUI/CMakeLists.txt
@@ -21,6 +21,7 @@ set(list_of_tests
     "TestGUIBeamDivergence"
     "TestGUIDetectorResolution"
     "TestGUIParticleDistribution"
+    "TestGUIParticleComposition"
 )
 
 # for some reason these flags doesn't propagated here by SetUpWindows.cmake
diff --git a/Tests/FunctionalTests/TestGUI/TestGUIParticleComposition/TestGUIParticleComposition.cpp b/Tests/FunctionalTests/TestGUI/TestGUIParticleComposition/TestGUIParticleComposition.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..520cf177bd4bd08d77c543b0714bfb517e8856b7
--- /dev/null
+++ b/Tests/FunctionalTests/TestGUI/TestGUIParticleComposition/TestGUIParticleComposition.cpp
@@ -0,0 +1,6 @@
+#include "GUIFunctionalTest.h"
+
+int main()
+{
+    return GUI_FUNCTIONAL_TEST("gui_ParticleComposition");
+}
diff --git a/Tests/FunctionalTests/TestPyCore/CMakeLists.txt b/Tests/FunctionalTests/TestPyCore/CMakeLists.txt
index 04ca0223549f08af0994a74c2c46efec88aa2e82..e78d2427f6c82c2199174abdc15177d6bb22ee4f 100644
--- a/Tests/FunctionalTests/TestPyCore/CMakeLists.txt
+++ b/Tests/FunctionalTests/TestPyCore/CMakeLists.txt
@@ -42,6 +42,7 @@ set(list_of_cpp_python_tests
     "PyScript_isgisaxs11"
     "PyScript_multiplelayoutbuilder"
     "PyScript_ParticleDistribution"
+    "PyScript_ParticleComposition"
 )
 
 foreach(_test ${list_of_tests})
diff --git a/Tests/FunctionalTests/TestPyCore/PyScript_ParticleComposition/PyScript_ParticleComposition.cpp b/Tests/FunctionalTests/TestPyCore/PyScript_ParticleComposition/PyScript_ParticleComposition.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f312f33d06ad1258bdc572caeb07ffcb2fae1211
--- /dev/null
+++ b/Tests/FunctionalTests/TestPyCore/PyScript_ParticleComposition/PyScript_ParticleComposition.cpp
@@ -0,0 +1,14 @@
+#include "PyGenTools.h"
+#include "SimulationRegistry.h"
+
+int main()
+{
+    SimulationRegistry simulationRegistry;
+    Simulation *simulation =
+            simulationRegistry.createSimulation("gui_ParticleComposition");
+    bool test = PyGenTools::testPyScript(simulation);
+    std::cout << "Python Script Generation Test for ParticleDistribution"
+              << (test? "[OK]" : "[FAILED]") << std::endl;
+    return (test ? 0 : 1);
+}
+