diff --git a/Core/StandardSamples/ParticleCompositionBuilder.cpp b/Core/StandardSamples/ParticleCompositionBuilder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8c26c2417580d1ea4f19e0fe63f747d4825e349a
--- /dev/null
+++ b/Core/StandardSamples/ParticleCompositionBuilder.cpp
@@ -0,0 +1,57 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      StandardSamples/ParticleCompositionBuilder.cpp
+//! @brief     Implements class ParticleCompositionBuilder.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#include "ParticleCompositionBuilder.h"
+#include "FormFactorPyramid.h"
+#include "InterferenceFunctionNone.h"
+#include "Materials.h"
+#include "MultiLayer.h"
+#include "ParticleLayout.h"
+#include "Units.h"
+
+
+// ----------------------------------------------------------------------------
+// Pyramids on top of substrate
+// ----------------------------------------------------------------------------
+ParticleCompositionBuilder::ParticleCompositionBuilder()
+{
+}
+
+
+ISample *ParticleCompositionBuilder::buildSample() const
+{
+    MultiLayer *multi_layer = new MultiLayer();
+
+    HomogeneousMaterial air_material("Air", 0.0, 0.0);
+    HomogeneousMaterial substrate_material("Substrate", 6e-6, 2e-8);
+    HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
+
+    Layer air_layer(air_material);
+    Layer substrate_layer(substrate_material);
+
+    FormFactorPyramid ff_pyramid(1.0, 1.0, 0.12);
+
+    Particle particle(particle_material, ff_pyramid);
+    ParticleLayout particle_layout(particle);
+
+    particle_layout.addInterferenceFunction(new InterferenceFunctionNone());
+
+    air_layer.addLayout(particle_layout);
+
+    multi_layer->addLayer(air_layer);
+    multi_layer->addLayer(substrate_layer);
+
+    return multi_layer;
+}
diff --git a/Core/StandardSamples/ParticleCompositionBuilder.h b/Core/StandardSamples/ParticleCompositionBuilder.h
new file mode 100644
index 0000000000000000000000000000000000000000..ea2a37989108c13269c634060573895998bfdc7a
--- /dev/null
+++ b/Core/StandardSamples/ParticleCompositionBuilder.h
@@ -0,0 +1,33 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      StandardSamples/ParticleCompositionBuilder.h
+//! @brief     Defines class ParticleCompositionBuilder.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef PARTICLECOMPOSITIONBUILDER_H
+#define PARTICLECOMPOSITIONBUILDER_H
+
+#include "ISampleBuilder.h"
+
+//! @class ParticleCompositionBuilder
+//! @ingroup standard_samples
+//! @brief Builds sample: two layers of spheres at hex lattice
+
+class BA_CORE_API_ ParticleCompositionBuilder : public ISampleBuilder
+{
+public:
+    ParticleCompositionBuilder();
+    ISample *buildSample() const;
+
+};
+
+#endif // PARTICLECOMPOSITIONBUILDER_H
diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp
index f72bc2c21bcbb52df97777bcbe8c13bf7474a752..0a9d317ff6b6c98af6803f079e574bacbfe299f4 100644
--- a/Core/StandardSamples/SampleBuilderFactory.cpp
+++ b/Core/StandardSamples/SampleBuilderFactory.cpp
@@ -29,6 +29,7 @@
 #include "MultipleLayoutBuilder.h"
 #include "PolarizedDWBAMagCylindersBuilder.h"
 #include "LayerRoughnessBuilder.h"
+#include "ParticleCompositionBuilder.h"
 #include "Ripple2Builder.h"
 #include "Ripple1Builder.h"
 
@@ -157,6 +158,11 @@ SampleBuilderFactory::SampleBuilderFactory()
         IFactoryCreateFunction<Ripple1Builder, ISampleBuilder>,
         "cosine ripple within the 1D-paracrystal model");
 
+    registerItem(
+        "ParticleComposition",
+        IFactoryCreateFunction<ParticleCompositionBuilder, ISampleBuilder>,
+        "Composition of particles to represent two layers of spheres in hex lattice");
+
 }
 
 
diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp
index 8f13334bfdde2e469374856c969363f36d95fad5..69d805d828d0aac255ce1da4e382625f43697bbc 100644
--- a/Core/StandardSamples/SimulationRegistry.cpp
+++ b/Core/StandardSamples/SimulationRegistry.cpp
@@ -154,6 +154,11 @@ SimulationRegistry::SimulationRegistry()
     registerItem(
         "part_distribution", StandardSimulations::ParticleDistribution,
         "Cylinders with size distribution");
+
+    registerItem(
+        "gui_ParticleComposition", StandardSimulations::gui_ParticleComposition,
+        "GUI: Composition of particles to represent two layers of spheres in hex lattice");
+
 }
 
 
diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp
index 66dd0fdf49c8307d8a439610eeabdbb0b8d2d42b..3baad3e3653f58f92cec17eb4ac7110131abc6e9 100644
--- a/Core/StandardSamples/StandardSimulations.cpp
+++ b/Core/StandardSamples/StandardSimulations.cpp
@@ -658,7 +658,6 @@ Simulation *StandardSimulations::DetectorResolution()
     return result;
 }
 
-
 Simulation *StandardSimulations::ParticleDistribution()
 {
     SampleBuilderFactory factory;
@@ -676,3 +675,22 @@ Simulation *StandardSimulations::ParticleDistribution()
 
     return result;
 }
+
+Simulation *StandardSimulations::gui_ParticleComposition()
+{
+    SampleBuilderFactory factory;
+    SampleBuilder_t builder = factory.createBuilder("ParticleComposition");
+
+    Simulation *result = new Simulation();
+
+    result->setDetectorParameters(100, -1.0*Units::degree, 1.0*Units::degree,
+                100, 0.0*Units::degree, 1.0*Units::degree);
+    result->setBeamParameters(1.0*Units::angstrom, 0.2*Units::degree,
+                0.0*Units::degree);
+
+
+    result->setSampleBuilder( builder );
+
+    return result;
+}
+
diff --git a/Core/StandardSamples/StandardSimulations.h b/Core/StandardSamples/StandardSimulations.h
index 2be7ed5a7395daa6c3e982ff4565a8df6d7b6ef7..d0fe4219ddee1b0fede48e12a7e9b8b2afdd8dad 100644
--- a/Core/StandardSamples/StandardSimulations.h
+++ b/Core/StandardSamples/StandardSimulations.h
@@ -59,6 +59,7 @@ Simulation *gui_MultipleLayouts();
 Simulation *BeamDivergence();
 Simulation *DetectorResolution();
 Simulation *ParticleDistribution();
+Simulation *gui_ParticleComposition();
 }
 
 
diff --git a/GUI/coregui/Models/GUIExamplesFactory.cpp b/GUI/coregui/Models/GUIExamplesFactory.cpp
index f43068d0907d69c9d323157d0635107e704cf6c9..cf6e91773a0455743413484cff3dec7c5139fd0c 100644
--- a/GUI/coregui/Models/GUIExamplesFactory.cpp
+++ b/GUI/coregui/Models/GUIExamplesFactory.cpp
@@ -36,6 +36,7 @@ QMap<QString, QString > init_NameToRegistry()
     result["example06"] = "gui_Interference2DSquareLattice";
     result["example07"] = "gui_RotatedPyramids";
     result["example08"] = "part_distribution";
+    result["example09"] = "gui_ParticleComposition";
     // temporary for testing
 //    result["example08"] = "beam_divergence";
 //    result["example08"] = "detector_resolution";
diff --git a/GUI/coregui/Views/widgetbox/widgetbox.xml b/GUI/coregui/Views/widgetbox/widgetbox.xml
index 8406e7e5c7cc5f1c43c17d419cbf3f2cc8c95dd9..fe50416416fac5d97863b3a66e28765fd464ca17 100644
--- a/GUI/coregui/Views/widgetbox/widgetbox.xml
+++ b/GUI/coregui/Views/widgetbox/widgetbox.xml
@@ -324,6 +324,14 @@
             </widget>
         </categoryentry>
 
+        <categoryentry name="Hexagonal latice with basis" icon="images/sample_layers2.png">
+            <widget class="example09">
+                <property name="objectName">
+                    <string notr="true">somestring</string>
+                </property>
+            </widget>
+        </categoryentry>
+
 
     </category>
 
diff --git a/GUI/coregui/mainwindow/tooltips.xml b/GUI/coregui/mainwindow/tooltips.xml
index af1a236bf8a678aff274c7bbeffc39ceee4708de..b8f6c2365f557dc59e3da593169ac4d7d85c0075 100644
--- a/GUI/coregui/mainwindow/tooltips.xml
+++ b/GUI/coregui/mainwindow/tooltips.xml
@@ -571,6 +571,14 @@
             </property>
         </category>
 
+        <category name="example09">
+            <property name="Title">
+                <tooltip>Hexagonal lattice with basis to represent two layers of spheres</tooltip>
+            </property>
+            <property name="Description">
+                <tooltip>Some lengthy description here if necessary</tooltip>
+            </property>
+        </category>
 
     </context>