diff --git a/Core/Algorithms/inc/Beam.h b/Core/Algorithms/inc/Beam.h
index 245123354fbb3e308bed0506ff33dbd63a1f7f12..cc05c17b94a4ff781602f2f2eac7f106d122e220 100644
--- a/Core/Algorithms/inc/Beam.h
+++ b/Core/Algorithms/inc/Beam.h
@@ -20,8 +20,9 @@
 #include "IParameterized.h"
 #include "EigenCore.h"
 
-
-//! Ideal collimated Beam defined by wavelength, direction and intensity.
+//! @class Beam
+//! @ingroup simulation
+//! @brief Ideal collimated Beam defined by wavelength, direction and intensity.
 
 class BA_CORE_API_ Beam : public IParameterized
 {
diff --git a/Core/Algorithms/inc/ChiSquaredFrequency.h b/Core/Algorithms/inc/ChiSquaredFrequency.h
index a9b1655855dc7421348ce96432fdc857579f7406..c44b487bf4434fe79812f262a741090900b1fcdc 100644
--- a/Core/Algorithms/inc/ChiSquaredFrequency.h
+++ b/Core/Algorithms/inc/ChiSquaredFrequency.h
@@ -18,6 +18,9 @@
 
 #include "IChiSquaredModule.h"
 
+//! @class ChiSquaredFrequency
+//! @ingroup algorithms_internal
+//! @brief Calculation of chi2 in fourier transformed space
 
 class ChiSquaredFrequency : public IChiSquaredModule
 {
diff --git a/Core/Algorithms/inc/ChiSquaredModule.h b/Core/Algorithms/inc/ChiSquaredModule.h
index d5559e4719265c16559203ca4d730baa06261dc2..65fa517fdbe3994ee35b6fcdffb3f9a4c4a0e9a6 100644
--- a/Core/Algorithms/inc/ChiSquaredModule.h
+++ b/Core/Algorithms/inc/ChiSquaredModule.h
@@ -18,6 +18,10 @@
 
 #include "IChiSquaredModule.h"
 
+//! @class ChiSquaredModule
+//! @ingroup algorithms
+//! @brief Calculation of chi2 between two data sets
+
 class BA_CORE_API_ ChiSquaredModule : public IChiSquaredModule
 {
 public:
diff --git a/Core/Algorithms/inc/ConvolutionDetectorResolution.h b/Core/Algorithms/inc/ConvolutionDetectorResolution.h
index 47537d83de2309387230e5f5b67428ada78a365c..68da64a620a608b38f5b2a08498cd441f1bfecdb 100644
--- a/Core/Algorithms/inc/ConvolutionDetectorResolution.h
+++ b/Core/Algorithms/inc/ConvolutionDetectorResolution.h
@@ -19,8 +19,10 @@
 #include "IDetectorResolution.h"
 #include "IResolutionFunction2D.h"
 
-//! Convolutes the intensity in 1 or 2 dimensions with a resolution function.
-
+//! @class ConvolutionDetectorResolution
+//! @ingroup algorithms
+//! @brief Convolutes the intensity in 1 or 2 dimensions with a resolution function.
+//!
 //! Limitation: this class assumes that the data points are evenly
 //! distributed on each axis
 
diff --git a/Core/Algorithms/inc/DWBADiffuseReflection.h b/Core/Algorithms/inc/DWBADiffuseReflection.h
index 2385a8850402ad39e284d4277116e690956f93a1..bfcfe147df6cafa04cbff90194787ef4d9934bb5 100644
--- a/Core/Algorithms/inc/DWBADiffuseReflection.h
+++ b/Core/Algorithms/inc/DWBADiffuseReflection.h
@@ -21,7 +21,9 @@
 #include "MultiLayer.h"
 #include "SpecularMatrix.h"
 
-//! Calculation of diffuse (aka off-specular) reflection from multilayers.
+//! @class DWBADiffuseReflection
+//! @ingroup algorithms_internal
+//! @brief Calculation of diffuse (aka off-specular) reflection from multilayers.
 
 class BA_CORE_API_ DWBADiffuseReflection : public ISimulation
 {
diff --git a/Core/Algorithms/inc/DWBASimulation.h b/Core/Algorithms/inc/DWBASimulation.h
index cf7ba118510890a1a8f7a29302875b543037aef1..a16a339fba7a8876159c5dd82b6bb8d4717ddf54 100644
--- a/Core/Algorithms/inc/DWBASimulation.h
+++ b/Core/Algorithms/inc/DWBASimulation.h
@@ -23,7 +23,10 @@
 #include "Types.h"
 #include "EigenCore.h"
 
-//! Base class for different simulations, using DWBA.
+
+//! @class DWBASimulation
+//! @ingroup algorithms_internal
+//! @brief Base class for different simulations, using DWBA.
 
 class DWBASimulation : public ISimulation
 {
diff --git a/Core/Algorithms/inc/DecoratedLayerDWBASimulation.h b/Core/Algorithms/inc/DecoratedLayerDWBASimulation.h
index 85f67b53d949312f3427c0c0ec8ea9f37edd2fd8..e698b359818483736ac01828c300449a5095c6f0 100644
--- a/Core/Algorithms/inc/DecoratedLayerDWBASimulation.h
+++ b/Core/Algorithms/inc/DecoratedLayerDWBASimulation.h
@@ -22,7 +22,9 @@
 
 class Layer;
 
-//! Calculates scattering cross sections in DWBA for a layer with particles in/on it
+//! @class DecoratedLayerDWBASimulation
+//! @ingroup algorithms_internal
+//! @brief Calculates scattering cross sections in DWBA for a layer with particles in/on it
 
 class DecoratedLayerDWBASimulation : public LayerDWBASimulation
 {
diff --git a/Core/Algorithms/inc/DecouplingApproximationStrategy.h b/Core/Algorithms/inc/DecouplingApproximationStrategy.h
index f36c624b9dfe78ade53a8c6cd7f0e266308bbd66..ee84ffa1ec7b969b90902c83735af36846000d4b 100644
--- a/Core/Algorithms/inc/DecouplingApproximationStrategy.h
+++ b/Core/Algorithms/inc/DecouplingApproximationStrategy.h
@@ -19,6 +19,10 @@
 #include "Types.h"
 #include "IInterferenceFunctionStrategy.h"
 
+//! @class DecouplingApproximationStrategy
+//! @ingroup algorithms_internal
+//! @brief Strategy for implementing decoupling approximation
+
 class DecouplingApproximationStrategy : public IInterferenceFunctionStrategy
 {
 public:
diff --git a/Core/Algorithms/inc/Detector.h b/Core/Algorithms/inc/Detector.h
index 2a4ebbf4c544cc2d23f968a991abd667cb85a3a6..acf2197b282209c550d9c4e633eede3aa5b71102 100644
--- a/Core/Algorithms/inc/Detector.h
+++ b/Core/Algorithms/inc/Detector.h
@@ -22,7 +22,6 @@
 #include "EigenCore.h"
 
 
-
 //! @class Detector
 //! @ingroup simulation
 //! @brief The detector with axes and resolution function.
diff --git a/Core/Algorithms/inc/DetectorParameters.h b/Core/Algorithms/inc/DetectorParameters.h
index 7102f7a559cc9185018c186e112185dca72137ef..df25f343b1472eea4c8d2b365caa391fec426ceb 100644
--- a/Core/Algorithms/inc/DetectorParameters.h
+++ b/Core/Algorithms/inc/DetectorParameters.h
@@ -18,7 +18,9 @@
 
 #include "TRange.h"
 
-//! Store parameters for specifying one axis
+//! @class AxisParameters
+//! @ingroup simulation_internal
+//! @brief Store parameters for specifying one axis
 
 struct AxisParameters
 {
@@ -38,7 +40,9 @@ inline AxisParameters::AxisParameters()
 {
 }
 
-//! Store parameters for specifying a 2D detector.
+//! @class DetectorParameters
+//! @ingroup simulation_internal
+//! @brief Store parameters for specifying a 2D detector.
 
 struct DetectorParameters
 {
diff --git a/Core/Algorithms/inc/DiffuseDWBASimulation.h b/Core/Algorithms/inc/DiffuseDWBASimulation.h
index 4ab5e332826e5086c152b4d9dd863f826f583648..c0b130d6810fcb26cc245b9eb83323e2cc114a4c 100644
--- a/Core/Algorithms/inc/DiffuseDWBASimulation.h
+++ b/Core/Algorithms/inc/DiffuseDWBASimulation.h
@@ -19,6 +19,10 @@
 #include "LayerDWBASimulation.h"
 #include "DiffuseParticleInfo.h"
 
+//! @class DiffuseDWBASimulation
+//! @ingroup algorithms_internal
+//! @brief Calculation of diffuse scattering in DWBA
+
 class DiffuseDWBASimulation: public LayerDWBASimulation
 {
 public:
diff --git a/Core/Algorithms/inc/FTDistributions.h b/Core/Algorithms/inc/FTDistributions.h
index 5f49cfc4e80470110e7c8c19a8966aef2da3e7cc..ae968ed6d07f757729b4127ec6de4749e97561b7 100644
--- a/Core/Algorithms/inc/FTDistributions.h
+++ b/Core/Algorithms/inc/FTDistributions.h
@@ -22,6 +22,11 @@
 
 #include "Numeric.h"
 
+
+//! @class IFTDistribution1D
+//! @ingroup algorithms_internal
+//! @brief Interface for 1 dimensional distributions in Fourier space
+
 class IFTDistribution1D
 {
 public:
@@ -33,7 +38,10 @@ protected:
     double m_omega;
 };
 
-//! Interface for 2 dimensional distributions in Fourier space
+
+//! @class IFTDistribution2D
+//! @ingroup algorithms_internal
+//! @brief Interface for 2 dimensional distributions in Fourier space
 class BA_CORE_API_ IFTDistribution2D : public IParameterized
 {
 public:
@@ -78,8 +86,12 @@ protected:
     double m_delta;
 };
 
-//! 2 dimensional Cauchy distribution in Fourier space
+
+//! @class FTDistribution2DCauchy
+//! @ingroup algorithms
+//! @brief 2 dimensional Cauchy distribution in Fourier space
 //! corresponds to exp(-r) in real space
+
 class BA_CORE_API_ FTDistribution2DCauchy : public IFTDistribution2D
 {
 public:
@@ -91,8 +103,12 @@ public:
     virtual double evaluate(double qx, double qy) const;
 };
 
-//! 2 dimensional Gauss distribution in Fourier space
+
+//! @class FTDistribution2DGauss
+//! @ingroup algorithms
+//! @brief 2 dimensional Gauss distribution in Fourier space
 //! corresponds to exp(-r^2) in real space
+
 class BA_CORE_API_ FTDistribution2DGauss : public IFTDistribution2D
 {
 public:
@@ -104,8 +120,12 @@ public:
     virtual double evaluate(double qx, double qy) const;
 };
 
-//! 2 dimensional Voigt distribution in Fourier space
+
+//! @class FTDistribution2DVoigt
+//! @ingroup algorithms
+//! @brief 2 dimensional Voigt distribution in Fourier space
 //! Corresponds to eta*Gauss + (1-eta)*Cauchy
+
 class BA_CORE_API_ FTDistribution2DVoigt : public IFTDistribution2D
 {
 public:
diff --git a/Core/Algorithms/inc/IChiSquaredModule.h b/Core/Algorithms/inc/IChiSquaredModule.h
index 34a7ba2fc942b4321f1c95821fd2f246efdd5f2d..f66d0d27fb6dc4918f80a7f0e03f6ed9b498247f 100644
--- a/Core/Algorithms/inc/IChiSquaredModule.h
+++ b/Core/Algorithms/inc/IChiSquaredModule.h
@@ -21,7 +21,10 @@
 #include "IOutputDataNormalizer.h"
 #include "IIntensityFunction.h"
 
-//! Interface for ChiSquaredModule, ChiSquaredFrequency.
+
+//! @class IChiSquaredModule
+//! @ingroup algorithms_internal
+//! @brief Interface for ChiSquaredModule, ChiSquaredFrequency for chi2 calculations.
 
 class BA_CORE_API_ IChiSquaredModule : public ICloneable
 {
diff --git a/Core/Algorithms/inc/IDetectorResolution.h b/Core/Algorithms/inc/IDetectorResolution.h
index c840e01ebdce8fa358830946844a8eb2dbb5bf7c..4ee46b041c81bafa1023c9557cd9def8262a85c1 100644
--- a/Core/Algorithms/inc/IDetectorResolution.h
+++ b/Core/Algorithms/inc/IDetectorResolution.h
@@ -21,6 +21,11 @@
 #include "ICloneable.h"
 #include "EigenCore.h"
 
+
+//! @class IDetectorResolution
+//! @ingroup algorithms_internal
+//! @brief Interface for detector resolution algorithms
+
 class BA_CORE_API_ IDetectorResolution : public ICloneable, public IParameterized
 {
 public:
diff --git a/Core/Algorithms/inc/IFittingDataSelector.h b/Core/Algorithms/inc/IFittingDataSelector.h
index 4da703c0d5a16f12585eb71d76799e71fb7c4b17..442efa61858cacd26f67b5347922d822022609ca 100644
--- a/Core/Algorithms/inc/IFittingDataSelector.h
+++ b/Core/Algorithms/inc/IFittingDataSelector.h
@@ -18,6 +18,11 @@
 
 #include "OutputData.h"
 
+
+//! @class IFittingDataSelector
+//! @ingroup algorithms_internal
+//! @brief Interface for selecting data points and its weights
+
 class IFittingDataSelector
 {
 public:
@@ -29,6 +34,11 @@ public:
         const OutputData<double>& simulated_data) const=0;
 };
 
+
+//! @class DefaultAllDataSelector
+//! @ingroup algorithms_internal
+//! @brief Default algorithm for selecting all data points and giving them equal weight of 1.
+
 class DefaultAllDataSelector : public IFittingDataSelector
 {
 public:
diff --git a/Core/Algorithms/inc/IIntensityFunction.h b/Core/Algorithms/inc/IIntensityFunction.h
index 0efaa6707accd1e663e8986507cfa698227a892a..104845bae96d6d20a648777c87ec0527fc9bf59a 100644
--- a/Core/Algorithms/inc/IIntensityFunction.h
+++ b/Core/Algorithms/inc/IIntensityFunction.h
@@ -19,6 +19,11 @@
 
 #include <cmath>
 
+
+//! @class IIntensityFunction
+//! @ingroup algorithms_internal
+//! @brief Interface for applying arbitrary function to the measured intensity
+
 class IIntensityFunction
 {
 public:
@@ -28,6 +33,11 @@ public:
     virtual double evaluate(double value) const=0;
 };
 
+
+//! @class IntensityFunctionLog
+//! @ingroup algorithms_internal
+//! @brief Algorithm for applying log function to the measured intensity
+
 class IntensityFunctionLog : public IIntensityFunction
 {
 public:
@@ -38,6 +48,11 @@ public:
         return (value > 0 ? std::log(value) : 0); }
 };
 
+
+//! @class IntensityFunctionSqrt
+//! @ingroup algorithms_internal
+//! @brief Algorithm for applying sqrt function to the measured intensity
+
 class IntensityFunctionSqrt : public IIntensityFunction
 {
 public:
diff --git a/Core/Algorithms/inc/IInterferenceFunctionStrategy.h b/Core/Algorithms/inc/IInterferenceFunctionStrategy.h
index bd983f211138885b68ce08440b9c7daf7beea812..8d8f7d142b45e80172fb5cbc5e36d57789bb2f30 100644
--- a/Core/Algorithms/inc/IInterferenceFunctionStrategy.h
+++ b/Core/Algorithms/inc/IInterferenceFunctionStrategy.h
@@ -25,6 +25,11 @@
 
 #include <vector>
 
+
+//! @class IInterferenceFunctionStrategy
+//! @ingroup algorithms_internal
+//! @brief Algorithm to apply one of interference function strategies (LMA, SCCA etc)
+
 class IInterferenceFunctionStrategy
 {
 public:
diff --git a/Core/Algorithms/inc/ILayerRTCoefficients.h b/Core/Algorithms/inc/ILayerRTCoefficients.h
index 49399832253d9c158bc9c7c59debf445619a6c85..dd35706b6e6654a410e20151a00b0f814fa491f4 100644
--- a/Core/Algorithms/inc/ILayerRTCoefficients.h
+++ b/Core/Algorithms/inc/ILayerRTCoefficients.h
@@ -19,6 +19,11 @@
 #include "Types.h"
 #include "EigenCore.h"
 
+
+//! @class ILayerRTCoefficients
+//! @ingroup algorithms_internal
+//! @brief Interface to access reflection/transmition coefficients
+
 class ILayerRTCoefficients
 {
 public:
diff --git a/Core/Algorithms/inc/IOutputDataNormalizer.h b/Core/Algorithms/inc/IOutputDataNormalizer.h
index 35ceae9dfd6d733c812f5b9b0ce81bd22c9f97f4..6986d7e5ca140e8f14ff0e85be146287dfdfa3e3 100644
--- a/Core/Algorithms/inc/IOutputDataNormalizer.h
+++ b/Core/Algorithms/inc/IOutputDataNormalizer.h
@@ -20,7 +20,10 @@
 #include "IParameterized.h"
 #include "OutputData.h"
 
-//! Interface to OutputData normalizers.
+
+//! @class IOutputDataNormalizer
+//! @ingroup algorithms_internal
+//! @brief Interface to OutputData normalizers.
 
 class BA_CORE_API_ IOutputDataNormalizer : public IParameterized
 {
@@ -35,7 +38,10 @@ public:
     virtual void setMaximumIntensity(double ) = 0;
 };
 
-//! Standard OutputData normalizer, with configurable max_intensity.
+
+//! @class OutputDataNormalizer
+//! @ingroup algorithms_internal
+//! @brief Standard OutputData normalizer, with configurable max_intensity.
 
 class BA_CORE_API_ OutputDataNormalizer : public IOutputDataNormalizer
 {
@@ -65,7 +71,10 @@ protected:
     double m_max_intensity;
 };
 
-//! Simplified OutputData normalizer, with max_intensity=1.
+
+//! @class OutputDataSimpleNormalizer
+//! @ingroup algorithms_internal
+//! @brief Simplified OutputData normalizer, with max_intensity=1.
 
 class OutputDataSimpleNormalizer : public OutputDataNormalizer
 {
diff --git a/Core/Algorithms/inc/IResolutionFunction2D.h b/Core/Algorithms/inc/IResolutionFunction2D.h
index 28b5288d1989e4b3bb45c8abd0674ccff63572b9..28eebb5356bc1215ce3035aa29df510d083afc3b 100644
--- a/Core/Algorithms/inc/IResolutionFunction2D.h
+++ b/Core/Algorithms/inc/IResolutionFunction2D.h
@@ -18,7 +18,10 @@
 
 #include "IParameterized.h"
 
-//! Interface providing two-dimensional resolution function.
+
+//! @class IResolutionFunction2D
+//! @ingroup algorithms_internal
+//! @brief Interface providing two-dimensional resolution function.
 
 class BA_CORE_API_ IResolutionFunction2D : public IParameterized
 {
diff --git a/Core/Algorithms/inc/ISampleBuilder.h b/Core/Algorithms/inc/ISampleBuilder.h
index 5bd4f2d349608d1cce16a2decaa4981883dc5dc5..1522c6b7995a42f2fc751709cf8cfe9ef085519d 100644
--- a/Core/Algorithms/inc/ISampleBuilder.h
+++ b/Core/Algorithms/inc/ISampleBuilder.h
@@ -20,6 +20,11 @@
 #include <boost/shared_ptr.hpp>
 
 
+//! @class ISampleBuilder
+//! @ingroup simulation_internal
+//! @brief Interface to the class capable to build samples to simulate
+
+
 class BA_CORE_API_ ISampleBuilder : public IParameterized
 {
 public:
diff --git a/Core/Algorithms/inc/ISimulation.h b/Core/Algorithms/inc/ISimulation.h
index 27aeafcae9e9f080982b49b65e69139410219e3f..c573977918c6a4c0361c5ea92d4eed0326ec54e3 100644
--- a/Core/Algorithms/inc/ISimulation.h
+++ b/Core/Algorithms/inc/ISimulation.h
@@ -18,7 +18,9 @@
 
 #include "ICloneable.h"
 
-//! Interface class, encapsulating different simulations.
+//! @class ISimulation
+//! @ingroup algorithms_internal
+//! @brief Interface class, encapsulating different simulations.
 
 class BA_CORE_API_  ISimulation : public ICloneable
 {
diff --git a/Core/Algorithms/inc/ISpecularInfoMap.h b/Core/Algorithms/inc/ISpecularInfoMap.h
index 30a5080c46bbd4d379a607290c16260263238740..bd1cc004e86094687dd784e5cf340116d069819f 100644
--- a/Core/Algorithms/inc/ISpecularInfoMap.h
+++ b/Core/Algorithms/inc/ISpecularInfoMap.h
@@ -18,6 +18,11 @@
 
 #include "ILayerRTCoefficients.h"
 
+
+//! @class ISpecularInfoMap
+//! @ingroup algorithms_internal
+//! @brief Interface class providing access to the reflection and transmittion coefficients
+
 class ISpecularInfoMap
 {
 public:
diff --git a/Core/Algorithms/inc/ISquaredFunction.h b/Core/Algorithms/inc/ISquaredFunction.h
index edae04003ebcad8cdd336d6764be2df59347721c..86d521c8b7f322652e171d5db7d9870a1a4058b0 100644
--- a/Core/Algorithms/inc/ISquaredFunction.h
+++ b/Core/Algorithms/inc/ISquaredFunction.h
@@ -21,7 +21,12 @@
 
 #include <iostream>
 
-//! Interface providing measures for deviation between two values.
+
+//! @class ISquaredFunction
+//! @ingroup algorithms_internal
+//! @brief Interface providing measures for deviation between two values.
+//!
+//! Used By ChiSquaredModule for chi2 calculations
 
 class ISquaredFunction
 {
@@ -42,6 +47,10 @@ public:
 };
 
 
+//! @class SquaredFunctionDefault
+//! @ingroup algorithms_internal
+//! @brief Squared difference betwee two values
+
 class SquaredFunctionDefault : public ISquaredFunction
 {
 public:
@@ -67,6 +76,10 @@ public:
 };
 
 
+//! @class SquaredFunctionWhichOnlyWorks
+//! @ingroup algorithms_internal
+//! @brief Squared difference betwee two values
+
 class SquaredFunctionWhichOnlyWorks : public ISquaredFunction
 {
 public:
@@ -89,6 +102,10 @@ public:
 };
 
 
+//! @class SquaredFunctionWithSystematicError
+//! @ingroup algorithms_internal
+//! @brief Squared difference between two values with systematic error
+
 class SquaredFunctionWithSystematicError : public ISquaredFunction
 {
 public:
@@ -112,6 +129,10 @@ private:
 };
 
 
+//! @class SquaredFunctionWithGaussianError
+//! @ingroup algorithms_internal
+//! @brief Squared difference between two values with gaussian error
+
 class SquaredFunctionWithGaussianError : public ISquaredFunction
 {
 public:
diff --git a/Core/Algorithms/inc/Instrument.h b/Core/Algorithms/inc/Instrument.h
index c4b3dd54230d5d78ed9c9d0a84aefc7bfc5a49d5..5cc3a2f25fe78609ed7f7d7dd3ac834bbb3b1305 100644
--- a/Core/Algorithms/inc/Instrument.h
+++ b/Core/Algorithms/inc/Instrument.h
@@ -20,7 +20,9 @@
 #include "Detector.h"
 #include "IResolutionFunction2D.h"
 
-//! Assembles beam, detector and their relative positions wrt the sample.
+//! @class Instrument
+//! @ingroup simulation_internal
+//! @brief Assembles beam, detector and their relative positions wrt the sample.
 
 class BA_CORE_API_ Instrument : public IParameterized
 {
diff --git a/Core/Algorithms/inc/IsGISAXSMorphologyFileStrategy.h b/Core/Algorithms/inc/IsGISAXSMorphologyFileStrategy.h
index 326eca2bf8b24d1d113d44644b43d1e221d8944f..aa064bf84dfcbe66a8b9d423ccfdb3ae1aaf7889 100644
--- a/Core/Algorithms/inc/IsGISAXSMorphologyFileStrategy.h
+++ b/Core/Algorithms/inc/IsGISAXSMorphologyFileStrategy.h
@@ -19,7 +19,10 @@
 #include "Types.h"
 #include "IInterferenceFunctionStrategy.h"
 
-//! Definition of interference function strategy that emulates the behaviour of
+
+//! @class ISampleBuilder
+//! @ingroup algorithms_internal
+//! @brief Definition of interference function strategy that emulates the behaviour of
 //! IsGISAXS for morphology files
 
 class IsGISAXSMorphologyFileStrategy : public IInterferenceFunctionStrategy
diff --git a/Core/Algorithms/inc/LayerDWBASimulation.h b/Core/Algorithms/inc/LayerDWBASimulation.h
index 468307c77518ef0a61059292bd1734bc4a651afa..027de5120bfa4b26f223203cc1908c75edcc1fe3 100644
--- a/Core/Algorithms/inc/LayerDWBASimulation.h
+++ b/Core/Algorithms/inc/LayerDWBASimulation.h
@@ -19,7 +19,9 @@
 #include "DWBASimulation.h"
 #include "LayerSpecularInfo.h"
 
-//! Base class for LayerDecoratorDWBASimulation, DiffuseDWBASimulation.
+//! @class LayerDWBASimulation
+//! @ingroup algorithms_internal
+//! @brief Base class for LayerDecoratorDWBASimulation, DiffuseDWBASimulation.
 
 class LayerDWBASimulation : public DWBASimulation
 {
diff --git a/Core/Algorithms/inc/LayerSpecularInfo.h b/Core/Algorithms/inc/LayerSpecularInfo.h
index 7d96aae7514e9d31aca4bcdd03e702da48755779..384c01e948669f2ced5bd449e3b25c0e46a679d1 100644
--- a/Core/Algorithms/inc/LayerSpecularInfo.h
+++ b/Core/Algorithms/inc/LayerSpecularInfo.h
@@ -23,7 +23,10 @@
 
 #include <boost/shared_ptr.hpp>
 
-//! LayerSpecularInfo holds the amplitude information of the neutron
+
+//! @class LayerSpecularInfo
+//! @ingroup algorithms_internal
+//! @brief Holds the amplitude information of the neutron
 //! wavefunction in a specific layer for different incoming (outgoing) angles of
 //! the neutron beam in the top layer (these amplitudes correspond to the
 //! specular part of the neutron wavefunction)
diff --git a/Core/Algorithms/inc/LayerStrategyBuilder.h b/Core/Algorithms/inc/LayerStrategyBuilder.h
index 717abd05ff54c2979004737d2e254a265587cdf1..060c2a0b792cd329837d4c8bd66e4348c6730e0e 100644
--- a/Core/Algorithms/inc/LayerStrategyBuilder.h
+++ b/Core/Algorithms/inc/LayerStrategyBuilder.h
@@ -31,7 +31,11 @@ class ParticleInfo;
 class IFormFactor;
 class LayerSpecularInfo;
 
-//! Methods to generate a simulation strategy for decorated Layer SimulationParameters
+
+
+//! @class LayerStrategyBuilder
+//! @ingroup algorithms_internal
+//! @brief Methods to generate a simulation strategy for decorated Layer SimulationParameters
 
 class LayerStrategyBuilder
 {
@@ -76,6 +80,10 @@ private:
 };
 
 
+//! @class FormFactorInfo
+//! @ingroup formfactors_internal
+//! @brief The %FormFactorInfo holds information about particle position and abundance
+
 class FormFactorInfo : public ICloneable
 {
 public:
diff --git a/Core/Algorithms/inc/LocalMonodisperseApproximationStrategy.h b/Core/Algorithms/inc/LocalMonodisperseApproximationStrategy.h
index b203627b3f904642b565ad2a7cb8e786c676a721..5ba0b45b61fec65c223f52f1a7be7f3ea54a2d74 100644
--- a/Core/Algorithms/inc/LocalMonodisperseApproximationStrategy.h
+++ b/Core/Algorithms/inc/LocalMonodisperseApproximationStrategy.h
@@ -19,6 +19,10 @@
 #include "IInterferenceFunctionStrategy.h"
 
 
+//! @class LocalMonodisperseApproximationStrategy
+//! @ingroup algorithms_internal
+//! @brief Strategy which implements local monodisperse approximation.
+
 class LocalMonodisperseApproximationStrategy :
                                       public IInterferenceFunctionStrategy
 {
diff --git a/Core/Algorithms/inc/Mask.h b/Core/Algorithms/inc/Mask.h
index ae31f434d9a9391e37401490706330c62aaf5c42..16cf686902a92ac032e3015c5318dc19e9ac78b0 100644
--- a/Core/Algorithms/inc/Mask.h
+++ b/Core/Algorithms/inc/Mask.h
@@ -18,7 +18,10 @@
 
 #include "MaskCoordinateFunction.h"
 
-//! Base class for masking OutputData elements.
+
+//! @class Mask
+//! @ingroup simulation_internal
+//! @brief Base class for masking OutputData elements.
 
 class BA_CORE_API_ Mask : public ICloneable
 {
@@ -46,7 +49,10 @@ private:
     size_t nextSubIndex(size_t total_index);
 };
 
-//! Mask based on the index modulo a given number.
+
+//! @class MaskIndexModulus
+//! @ingroup simulation_internal
+//! @brief Mask based on the index modulo a given number.
 
 class BA_CORE_API_ MaskIndexModulus : public Mask
 {
@@ -64,7 +70,10 @@ private:
     size_t m_remainder;
 };
 
-//! Mask based on the coordinates.
+
+//! @class MaskCoordinates
+//! @ingroup simulation_internal
+//! @brief Mask based on the coordinates.
 
 class BA_CORE_API_ MaskCoordinates : public Mask
 {
diff --git a/Core/Algorithms/inc/MaskCoordinateFunction.h b/Core/Algorithms/inc/MaskCoordinateFunction.h
index 2d925abc9194c7bf0536d2882ccdd3d86c340dd6..7c9c065329fb09e7497517db88cec8212dd4951c 100644
--- a/Core/Algorithms/inc/MaskCoordinateFunction.h
+++ b/Core/Algorithms/inc/MaskCoordinateFunction.h
@@ -20,7 +20,10 @@
 #include <cstddef>
 #include "ICloneable.h"
 
-//! base class for all kind of OutputData's masks
+
+//! @class MaskCoordinateFunction
+//! @ingroup simulation_internal
+//! @brief Base class for all kind of OutputData's masks
 
 class BA_CORE_API_ MaskCoordinateFunction : public ICloneable
 {
@@ -37,7 +40,10 @@ protected:
     bool m_invert;  //!< if true, the complement is masked instead
 };
 
-//! rectangular mask for OutputData
+
+//! @class MaskCoordinateRectangleFunction
+//! @ingroup simulation_internal
+//! @brief Rectangular mask for OutputData
 
 class BA_CORE_API_ MaskCoordinateRectangleFunction : public MaskCoordinateFunction
 {
@@ -54,7 +60,9 @@ private:
     int *m_maxima;
 };
 
-//! ellipse shaped mask for OutputData
+//! @class MaskCoordinateEllipseFunction
+//! @ingroup simulation_internal
+//! @brief Ellipse shaped mask for OutputData
 
 class BA_CORE_API_ MaskCoordinateEllipseFunction : public MaskCoordinateFunction
 {
diff --git a/Core/Algorithms/inc/MatrixRTCoefficients.h b/Core/Algorithms/inc/MatrixRTCoefficients.h
index 4e7a2f4cbcddea97d6d247549cd1c1a2b178facc..010ce64f81b51fba34800def1e86d0a29796c2b4 100644
--- a/Core/Algorithms/inc/MatrixRTCoefficients.h
+++ b/Core/Algorithms/inc/MatrixRTCoefficients.h
@@ -19,8 +19,12 @@
 #include "ILayerRTCoefficients.h"
 #include "Types.h"
 
-//! Specular reflection and transmission coefficients in a layer in case
+
+//! @class MatrixRTCoefficients
+//! @ingroup algorithms_internal
+//! @brief Specular reflection and transmission coefficients in a layer in case
 //! of 2x2 matrix interactions between the layers and the scattered particle
+
 class MatrixRTCoefficients : public ILayerRTCoefficients
 {
 public:
diff --git a/Core/Algorithms/inc/MatrixSpecularInfoMap.h b/Core/Algorithms/inc/MatrixSpecularInfoMap.h
index 50b5078e322a19ee5685b1f736c18f4d992ac4f7..d88b263e7d75e45462b8b1c69820bd8b2acfa6f0 100644
--- a/Core/Algorithms/inc/MatrixSpecularInfoMap.h
+++ b/Core/Algorithms/inc/MatrixSpecularInfoMap.h
@@ -20,7 +20,9 @@
 #include "Utils.h"
 
 
-//! Implementation of ISpecularInfoMap for matrix valued reflection/
+//! @class MatrixSpecularInfoMap
+//! @ingroup algorithms_internal
+//! @brief Implementation of ISpecularInfoMap for matrix valued reflection/
 //! transmission coefficients (the map contains values for both alpha_f and
 //! phi_f, because of broken rotation symmetry in the xy-plane
 
diff --git a/Core/Algorithms/inc/MultiLayerDWBASimulation.h b/Core/Algorithms/inc/MultiLayerDWBASimulation.h
index 7a1c778ab2cf8ae828fb031eee58495341ab1676..67e8e916f7ff7668d23ab4557c7c720e7d571534 100644
--- a/Core/Algorithms/inc/MultiLayerDWBASimulation.h
+++ b/Core/Algorithms/inc/MultiLayerDWBASimulation.h
@@ -24,7 +24,10 @@
 class MultiLayer;
 class MultiLayerRoughnessDWBASimulation;
 
-//! This is the class that will perform a DWBA calculation with the given
+
+//! @class MultiLayerDWBASimulation
+//! @ingroup algorithms_internal
+//! @brief This is the class that will perform a DWBA calculation with the given
 //! sample and simulation parameters
 
 class MultiLayerDWBASimulation : public DWBASimulation
diff --git a/Core/Algorithms/inc/MultiLayerRoughnessDWBASimulation.h b/Core/Algorithms/inc/MultiLayerRoughnessDWBASimulation.h
index 289b291a2e927407b6ea1ba75e61e02c64ce9c74..db74e8440ad069eed8bb86c7be851d1616a1abdb 100644
--- a/Core/Algorithms/inc/MultiLayerRoughnessDWBASimulation.h
+++ b/Core/Algorithms/inc/MultiLayerRoughnessDWBASimulation.h
@@ -23,7 +23,10 @@
 
 class MultiLayer;
 
-//! Calculation of diffuse reflection from multilayer with rough interfaces
+
+//! @class MultiLayerRoughnessDWBASimulation
+//! @ingroup algorithms_internal
+//! @brief Calculation of diffuse reflection from multilayer with rough interfaces
 
 class MultiLayerRoughnessDWBASimulation : public DWBASimulation
 {
diff --git a/Core/Algorithms/inc/ResolutionFunction2DSimple.h b/Core/Algorithms/inc/ResolutionFunction2DSimple.h
index 0394d610b48b710bd3564b83fd762712f22e98e2..495c7157beff03278fb9eeecdb7c33cd93e40ae5 100644
--- a/Core/Algorithms/inc/ResolutionFunction2DSimple.h
+++ b/Core/Algorithms/inc/ResolutionFunction2DSimple.h
@@ -18,6 +18,9 @@
 
 #include "IResolutionFunction2D.h"
 
+//! @class ResolutionFunction2DSimple
+//! @ingroup algorithms_internal
+//! @brief Simple gaussian two-dimensional resolution function.
 
 class BA_CORE_API_ ResolutionFunction2DSimple : public IResolutionFunction2D
 {
@@ -32,7 +35,6 @@ public:
 protected:
     virtual void init_parameters();
 private:
-    //! hiding copy constructor and disabling assignment operator
     ResolutionFunction2DSimple(const ResolutionFunction2DSimple& other);
     ResolutionFunction2DSimple& operator=(const ResolutionFunction2DSimple& );
 
diff --git a/Core/Algorithms/inc/ScalarRTCoefficients.h b/Core/Algorithms/inc/ScalarRTCoefficients.h
index 9ffb998879412a9d61d24ece05c41d4285c33356..9e0ff60854aff28a3f97fcc43600cf399be6766d 100644
--- a/Core/Algorithms/inc/ScalarRTCoefficients.h
+++ b/Core/Algorithms/inc/ScalarRTCoefficients.h
@@ -19,8 +19,12 @@
 #include "ILayerRTCoefficients.h"
 #include "Types.h"
 
-//! Specular reflection and transmission coefficients in a layer in case
+
+//! @class ScalarRTCoefficients
+//! @ingroup algorithms_internal
+//! @brief Specular reflection and transmission coefficients in a layer in case
 //! of scalar interactions between the layers and the scattered particle
+
 class ScalarRTCoefficients : public ILayerRTCoefficients
 {
 public:
diff --git a/Core/Algorithms/inc/ScalarSpecularInfoMap.h b/Core/Algorithms/inc/ScalarSpecularInfoMap.h
index 685ff7939b1ff5c5fcd0b4dd0aa8863771833cf5..ff1ec299afd6c746f3ca0ba357bd937c6c982ebd 100644
--- a/Core/Algorithms/inc/ScalarSpecularInfoMap.h
+++ b/Core/Algorithms/inc/ScalarSpecularInfoMap.h
@@ -20,7 +20,10 @@
 #include "ScalarRTCoefficients.h"
 #include "Utils.h"
 
-//! Implementation of ISpecularInfoMap for scalar valued reflection/
+
+//! @class ScalarSpecularInfoMap
+//! @ingroup algorithms_internal
+//! @brief Implementation of ISpecularInfoMap for scalar valued reflection/
 //! transmission coefficients (the map contains values only for alpha_f,
 //! because of rotation symmetry in the xy-plane
 
diff --git a/Core/Algorithms/inc/Simulation.h b/Core/Algorithms/inc/Simulation.h
index c7c103c14b08396bfdceed1a87f51bfa875b89ba..3101b2009cd5a25865d28660048fb9efb8af80dc 100644
--- a/Core/Algorithms/inc/Simulation.h
+++ b/Core/Algorithms/inc/Simulation.h
@@ -24,7 +24,9 @@
 
 class ProgramOptions;
 
-//! Run one simulation.
+//! @class Simulation
+//! @ingroup simulation
+//! @brief Main class to run the simulation.
 
 class BA_CORE_API_ Simulation : public ICloneable, public IParameterized
 {
diff --git a/Core/Algorithms/inc/SimulationParameters.h b/Core/Algorithms/inc/SimulationParameters.h
index 07623b4ff91e882fb4b7bb571942e7b0de831db4..7699b0b943610445bf0b957ff3517cab6ace1e76 100644
--- a/Core/Algorithms/inc/SimulationParameters.h
+++ b/Core/Algorithms/inc/SimulationParameters.h
@@ -16,7 +16,10 @@
 #ifndef SIMULATIONPARAMETERS_H_
 #define SIMULATIONPARAMETERS_H_
 
-//! Collect the different options for simulation
+
+//! @class Simulation
+//! @ingroup simulation
+//! @brief Collect the different options for simulation
 
 class SimulationParameters
 {
diff --git a/Core/Algorithms/inc/SizeSpacingCorrelationApproximationStrategy.h b/Core/Algorithms/inc/SizeSpacingCorrelationApproximationStrategy.h
index ce676cb936c87a1a54336befd8809bed28e04e7c..1b1405047c5022237186e71e86067e63a92e70a0 100644
--- a/Core/Algorithms/inc/SizeSpacingCorrelationApproximationStrategy.h
+++ b/Core/Algorithms/inc/SizeSpacingCorrelationApproximationStrategy.h
@@ -20,6 +20,10 @@
 #include "IInterferenceFunctionStrategy.h"
 
 
+//! @class SizeSpacingCorrelationApproximationStrategy
+//! @ingroup algorithms_internal
+//! @brief Strategy which implements size spacing correlation approximation.
+
 class SizeSpacingCorrelationApproximationStrategy
         : public IInterferenceFunctionStrategy
 {
diff --git a/Core/Algorithms/inc/SpecularMagnetic.h b/Core/Algorithms/inc/SpecularMagnetic.h
index 66238799a9facc61053ce9afd30eda1ea6fa2cb6..fee9a3ba0da4ea7837a9452cca701ca804ab63c8 100644
--- a/Core/Algorithms/inc/SpecularMagnetic.h
+++ b/Core/Algorithms/inc/SpecularMagnetic.h
@@ -23,7 +23,9 @@
 #include "EigenCore.h"
 
 
-//! Implements the matrix formalism for the calculation of wave amplitudes of
+//! @class SpecularMagnetic
+//! @ingroup algorithms_internal
+//! @brief Implements the matrix formalism for the calculation of wave amplitudes of
 //! the coherent wave solution in a multilayer with magnetization
 
 class BA_CORE_API_ SpecularMagnetic : public ISimulation
diff --git a/Core/Algorithms/inc/SpecularMatrix.h b/Core/Algorithms/inc/SpecularMatrix.h
index 54c6bfbdabdf6f00319c47127cf30ab555c08630..f62510c92bfee3b323807dd80af9664b47448814 100644
--- a/Core/Algorithms/inc/SpecularMatrix.h
+++ b/Core/Algorithms/inc/SpecularMatrix.h
@@ -23,7 +23,9 @@
 #include "EigenCore.h"
 
 
-//! Implements the matrix formalism for the calculation of wave amplitudes of
+//! @class SpecularMatrix
+//! @ingroup algorithms_internal
+//! @brief Implements the matrix formalism for the calculation of wave amplitudes of
 //! the coherent wave solution in a multilayer
 
 class BA_CORE_API_ SpecularMatrix : public ISimulation
diff --git a/Core/Algorithms/inc/ThreadInfo.h b/Core/Algorithms/inc/ThreadInfo.h
index ffc4ae569b6506ecb1a59954ea2aadc0c1f4f86b..c9ab5c50b4a1ccfa7727eabca793b696179327c3 100644
--- a/Core/Algorithms/inc/ThreadInfo.h
+++ b/Core/Algorithms/inc/ThreadInfo.h
@@ -18,7 +18,10 @@
 
 #include "Exceptions.h"
 
-//! Information for threads
+
+//! @class SpecularMatrix
+//! @ingroup simulation
+//! @brief Information to run simulation with dedicated number of threads
 
 struct ThreadInfo
 {
diff --git a/Core/Samples/inc/Crystal.h b/Core/Samples/inc/Crystal.h
index f842e5160443fabe67b203da8faa0054514af771..428c7a4e27bce73f8ef4557e6b1b1c1a61b98550 100644
--- a/Core/Samples/inc/Crystal.h
+++ b/Core/Samples/inc/Crystal.h
@@ -21,7 +21,10 @@
 #include "Lattice.h"
 #include "LatticeBasis.h"
 
-//! A crystal structure with a form factor as a basis.
+
+//! @class Crystal
+//! @ingroup samples
+//! @brief A crystal structure with a form factor as a basis.
 
 class BA_CORE_API_ Crystal : public IClusteredParticles
 {
diff --git a/Core/Samples/inc/DiffuseParticleInfo.h b/Core/Samples/inc/DiffuseParticleInfo.h
index e3aaca19c65f4911fd1ebd59c84e09dc0ffbafaa..0606184d16036acb820aa5ebe7e6dbe700de9ec3 100644
--- a/Core/Samples/inc/DiffuseParticleInfo.h
+++ b/Core/Samples/inc/DiffuseParticleInfo.h
@@ -18,7 +18,9 @@
 
 #include "ParticleInfo.h"
 
-//! Holds additional information about diffuse particle
+//! @class DiffuseParticleInfo
+//! @ingroup samples_internal
+//! @brief Holds additional information about diffuse particle.
 
 class BA_CORE_API_ DiffuseParticleInfo : public ParticleInfo
 {
diff --git a/Core/Samples/inc/HomogeneousMagneticMaterial.h b/Core/Samples/inc/HomogeneousMagneticMaterial.h
index 2ca5959d1e718f09e7bb41831079cd3d2d900368..505e3aefb90b018741f12d2784751b7eb67f9f7d 100644
--- a/Core/Samples/inc/HomogeneousMagneticMaterial.h
+++ b/Core/Samples/inc/HomogeneousMagneticMaterial.h
@@ -19,7 +19,9 @@
 #include "HomogeneousMaterial.h"
 #include "EigenCore.h"
 
-//! An homogeneous material with magnetization
+//! @class HomogeneousMagneticMaterial
+//! @ingroup materials
+//! @brief An homogeneous material with magnetization.
 
 class BA_CORE_API_ HomogeneousMagneticMaterial : public HomogeneousMaterial
 {
diff --git a/Core/Samples/inc/HomogeneousMaterial.h b/Core/Samples/inc/HomogeneousMaterial.h
index 971218dab76eddfbc587dde41488c21a2f77b2c2..f9596b620d472cc4c8cdfe8e492f18b34dbe80a3 100644
--- a/Core/Samples/inc/HomogeneousMaterial.h
+++ b/Core/Samples/inc/HomogeneousMaterial.h
@@ -19,7 +19,9 @@
 #include "IMaterial.h"
 #include "Types.h"
 
-//! A homogeneous material with a refractive index.
+//! @class HomogeneousMaterial
+//! @ingroup materials
+//! @brief An homogeneous material with a refractive index.
 
 class BA_CORE_API_ HomogeneousMaterial : public IMaterial
 {
diff --git a/Core/Samples/inc/IClusteredParticles.h b/Core/Samples/inc/IClusteredParticles.h
index af2bb55f135fa702c19dacfb7193b3f653ceb3cb..91216e7d8c9e0465da351a6971c2565ccd103ccb 100644
--- a/Core/Samples/inc/IClusteredParticles.h
+++ b/Core/Samples/inc/IClusteredParticles.h
@@ -22,7 +22,9 @@
 #include "Exceptions.h"
 #include "DiffuseParticleInfo.h"
 
-//! An ordered assembly of particles
+//! @class IClusteredParticles
+//! @ingroup samples_internal
+//! @brief An ordered assembly of particles
 
 class BA_CORE_API_ IClusteredParticles : public ICompositeSample
 {
diff --git a/Core/Samples/inc/ICompositeIterator.h b/Core/Samples/inc/ICompositeIterator.h
index 90ef6869f36d8849a7f7b6bda4dda86b8c80406c..3954de7833bd24873931985f059493527f73fd75 100644
--- a/Core/Samples/inc/ICompositeIterator.h
+++ b/Core/Samples/inc/ICompositeIterator.h
@@ -23,7 +23,9 @@
 #include <stack>
 #include <list>
 
-//! Holds state of ICompositeSample iterator
+//! @class MementoState
+//! @ingroup samples_internal
+//! @brief Holds state of iterator (Memento pattern) for ICompositeIterator
 
 class MementoState
 {
@@ -59,6 +61,9 @@ private:
     MementoState();
 };
 
+//! @class MementoIterator
+//! @ingroup samples_internal
+//! @brief The iterator from Memento pattern, part of ICompositeSample iterator
 
 class MementoIterator
 {
@@ -80,8 +85,10 @@ protected:
 };
 
 
-//! Iterator through ISample tree of objects inside ICompositeSample object.
-
+//! @class ICompositeIterator
+//! @ingroup samples_internal
+//! @brief Iterator through ISample tree of objects inside ICompositeSample object.
+//!
 //! Usage example:
 //!    ICompositeIterator it = sample->createIterator();
 //!    it.first();
diff --git a/Core/Samples/inc/ICompositeSample.h b/Core/Samples/inc/ICompositeSample.h
index 289bea220f33240b7d6e105828abf4a19ea41f7a..808a470f9b076b8398c1b3634f1c28f9e2d56e30 100644
--- a/Core/Samples/inc/ICompositeSample.h
+++ b/Core/Samples/inc/ICompositeSample.h
@@ -19,7 +19,9 @@
 #include "ISample.h"
 #include <list>
 
-//! Interface to equip ISample with a tree structure.
+//! @class ICompositeSample
+//! @ingroup samples_internal
+//! @brief Interface to describe the tree-like composition of samples
 
 class BA_CORE_API_ ICompositeSample : public ISample
 {
diff --git a/Core/Samples/inc/IDecoration.h b/Core/Samples/inc/IDecoration.h
index 0fcfdd1163062a9cb618072387a263af2712ef7e..0d31fca40e62ce6d5afb5c663ea52d911bcbff3d 100644
--- a/Core/Samples/inc/IDecoration.h
+++ b/Core/Samples/inc/IDecoration.h
@@ -24,7 +24,9 @@
 class IInterferenceFunctionStrategy;
 class IInterferenceFunction;
 
-//! Interface to equip a sample component with various properties.
+//! @class IDecoration
+//! @ingroup samples_internal
+//! @brief Interface to equip a sample component with various properties.
 
 class BA_CORE_API_ IDecoration : public ICompositeSample
 {
diff --git a/Core/Samples/inc/IDispersalState.h b/Core/Samples/inc/IDispersalState.h
deleted file mode 100644
index 1f3a002d77e27857988e5e0fbd5c86e5c7b56482..0000000000000000000000000000000000000000
--- a/Core/Samples/inc/IDispersalState.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Samples/inc/IDispersalState.h
-//! @brief     Defines interface class IDispersalState (destructor only)
-//!
-//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2013
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#ifndef IDISPERSALSTATE_H_
-#define IDISPERSALSTATE_H_
-
-
-class IDispersalState
-{
-public:
-    virtual ~IDispersalState() {}
-};
-
-#endif /* IDISPERSALSTATE_H_ */
-
-
diff --git a/Core/Samples/inc/IInterferenceFunction.h b/Core/Samples/inc/IInterferenceFunction.h
index 34c8a87f31a5ddaadf527bd2c52e39c52dc2566a..d573da89820a4a45a8d2327677a3d56d5e5faac4 100644
--- a/Core/Samples/inc/IInterferenceFunction.h
+++ b/Core/Samples/inc/IInterferenceFunction.h
@@ -19,7 +19,9 @@
 #include "Types.h"
 #include "ISample.h"
 
-//! Interface to interference functions.
+//! @class IInterferenceFunction
+//! @ingroup interference_internal
+//! @brief Interface to interference functions.
 
 class BA_CORE_API_ IInterferenceFunction : public ISample
 {
diff --git a/Core/Samples/inc/IMaterial.h b/Core/Samples/inc/IMaterial.h
index 6dbf31d7474edaa7025c0391ac64c506c60c1599..f4f4bcafae7dfd8f353df7610f377833b0e59a32 100644
--- a/Core/Samples/inc/IMaterial.h
+++ b/Core/Samples/inc/IMaterial.h
@@ -23,8 +23,9 @@
 #include <string>
 #include <iostream>
 
-
-//! Interface to a named material.
+//! @class IMaterial
+//! @ingroup materials_internal
+//! @brief Interface to a named material.
 
 class BA_CORE_API_ IMaterial : public INamed
 {
diff --git a/Core/Samples/inc/IRoughness.h b/Core/Samples/inc/IRoughness.h
index 16f437744bc1b5852f48c0a7cd102c3f84755443..9c7d5bf2dd411200b470ee5206cda45295538f72 100644
--- a/Core/Samples/inc/IRoughness.h
+++ b/Core/Samples/inc/IRoughness.h
@@ -18,7 +18,9 @@
 
 #include "ISample.h"
 
-//! Interface to equip a sample with a roughness.
+//! @class IRoughness
+//! @ingroup samples_internal
+//! @brief Interface to equip an interface with a roughness.
 
 class BA_CORE_API_ IRoughness : public ISample
 {
diff --git a/Core/Samples/inc/ISample.h b/Core/Samples/inc/ISample.h
index f86d7b8138de186da741fd0dfc2829e9677587f3..37e498527bb46c3b37cdcc05c5fbb67c5a0fa651 100644
--- a/Core/Samples/inc/ISample.h
+++ b/Core/Samples/inc/ISample.h
@@ -23,7 +23,9 @@
 class ICompositeSample;
 class DWBASimulation;
 
-//! Interface for objects related to scattering
+//! @class ISample
+//! @ingroup samples_internal
+//! @brief Interface for objects related to scattering.
 
 class BA_CORE_API_ ISample : public ICloneable, public IParameterized
 {
diff --git a/Core/Samples/inc/ISampleVisitor.h b/Core/Samples/inc/ISampleVisitor.h
index 1b86950a6ed9683a8ce17c1452d5c091001f7d69..3a2045f7e1a52c0e4de3614070948f55d3c493bf 100644
--- a/Core/Samples/inc/ISampleVisitor.h
+++ b/Core/Samples/inc/ISampleVisitor.h
@@ -92,6 +92,11 @@ class InterferenceFunctionNone;
 class IRoughness;
 class LayerRoughness;
 
+//! @class ISampleVisitor
+//! @ingroup samples_internal
+//! @brief Visitor interface to visit ISample objects
+//!
+//! From visitor pattern to achieve double dispatch
 
 class BA_CORE_API_ ISampleVisitor
 {
diff --git a/Core/Samples/inc/ISelectionRule.h b/Core/Samples/inc/ISelectionRule.h
index 683262726df6d1573cfb37a4187e8c1d9efbf07f..50b12d6c642ba01957a42c6ff6d85ec616141efa 100644
--- a/Core/Samples/inc/ISelectionRule.h
+++ b/Core/Samples/inc/ISelectionRule.h
@@ -20,7 +20,9 @@
 
 typedef Geometry::BasicVector3D<int> IndexVector3D;
 
-//! Pure virtual base class for selection rules.
+//! @class ISelectionRule
+//! @ingroup samples_internal
+//! @brief Pure virtual base class for selection rules.
 
 class ISelectionRule
 {
@@ -32,7 +34,9 @@ public:
     virtual bool coordinateSelected(const IndexVector3D& coordinate) const=0;
 };
 
-//! Selection rule (v*q)%modulus!=0, defined by vector v(a,b,c) and modulus.
+//! @class SimpleSelectionRule
+//! @ingroup samples_internal
+//! @brief Selection rule (v*q)%modulus!=0, defined by vector v(a,b,c) and modulus.
 
 class SimpleSelectionRule : public ISelectionRule
 {
diff --git a/Core/Samples/inc/InterferenceFunction1DParaCrystal.h b/Core/Samples/inc/InterferenceFunction1DParaCrystal.h
index b3457e0f4d7843665b187524177e59e5385f5416..a0bde55d128e4f823133e8d960ca60e18247ea68 100644
--- a/Core/Samples/inc/InterferenceFunction1DParaCrystal.h
+++ b/Core/Samples/inc/InterferenceFunction1DParaCrystal.h
@@ -18,13 +18,15 @@
 
 #include "IInterferenceFunction.h"
 
-//! Interference function of 1D paracrystal.
+//! @class InterferenceFunction1DParaCrystal
+//! @ingroup interference
+//! @brief Interference function of 1D paracrystal.
 
 class BA_CORE_API_ InterferenceFunction1DParaCrystal : public IInterferenceFunction
 {
 public:
 
-    //! @brief constructor
+    //! @brief constructor of 1D paracrystal interference function
     //! @param peak_distance  The distance to the first neighbor peak.
     //! @param width Width parameter in the pair correlation function.
     //! @param m_corr_length Correlation length of paracrystal.
diff --git a/Core/Samples/inc/InterferenceFunction2DLattice.h b/Core/Samples/inc/InterferenceFunction2DLattice.h
index 08e31aaf51912278178756e27ea2ab4d527f769f..49b7245f17a915e42be1c5f025e3075743558fae 100644
--- a/Core/Samples/inc/InterferenceFunction2DLattice.h
+++ b/Core/Samples/inc/InterferenceFunction2DLattice.h
@@ -20,7 +20,9 @@
 #include "Lattice2DIFParameters.h"
 #include "FTDistributions.h"
 
-//! Interference function of 2D lattice
+//! @class InterferenceFunction2DLattice
+//! @ingroup interference
+//! @brief Interference function of 2D lattice
 
 class BA_CORE_API_ InterferenceFunction2DLattice : public IInterferenceFunction
 {
diff --git a/Core/Samples/inc/InterferenceFunction2DParaCrystal.h b/Core/Samples/inc/InterferenceFunction2DParaCrystal.h
index 67c6695847c51ff9e4e104ad39cf7f847051833e..262620fba9314276c83f9ba6b60cc94a6020e9d3 100644
--- a/Core/Samples/inc/InterferenceFunction2DParaCrystal.h
+++ b/Core/Samples/inc/InterferenceFunction2DParaCrystal.h
@@ -20,13 +20,15 @@
 #include "FTDistributions.h"
 #include <iostream>
 
-//! Interference function of 2D paracrystal.
+//! @class InterferenceFunction2DParaCrystal
+//! @ingroup interference
+//! @brief Interference function of 2D paracrystal.
 
 class BA_CORE_API_ InterferenceFunction2DParaCrystal : public IInterferenceFunction
 {
 public:
 
-    //! @brief constructor
+    //! @brief constructor of 2D paracrystal interference function
     //! @param length_1 Lattice length 1.
     //! @param length_2 Lattice length 2.
     //! @param alpha_lattice Angle between lattice basis vectors.
diff --git a/Core/Samples/inc/InterferenceFunctionNone.h b/Core/Samples/inc/InterferenceFunctionNone.h
index 184dbe7c42100f112d3a8f3bb96f5bc367ffaf49..9bf45a870ddcd3ec3cf83512a7057e8521accc84 100644
--- a/Core/Samples/inc/InterferenceFunctionNone.h
+++ b/Core/Samples/inc/InterferenceFunctionNone.h
@@ -18,6 +18,9 @@
 
 #include "IInterferenceFunction.h"
 
+//! @class InterferenceFunctionNone
+//! @ingroup interference
+//! @brief Default interference function (i.e. absence of any interference)
 
 class InterferenceFunctionNone : public IInterferenceFunction
 {
@@ -25,7 +28,11 @@ public:
     InterferenceFunctionNone() { setName("InterferenceFunctionNone"); }
     virtual ~InterferenceFunctionNone() {}
     virtual InterferenceFunctionNone *clone() const
-    { return new InterferenceFunctionNone(); }
+    {
+        InterferenceFunctionNone *result = new InterferenceFunctionNone();
+        result->setName(getName());
+        return result;
+    }
     virtual void accept(ISampleVisitor *visitor) const { visitor->visit(this); }
 
     virtual double evaluate(const cvector_t& q) const { (void)q; return 1.0; }
diff --git a/Core/Samples/inc/Lattice.h b/Core/Samples/inc/Lattice.h
index 6f54a1e55e828e4e8d9b887d69c298d9120caea6..b7d0fd92ef1e9ab1f3db461dd78e3473e9dffb1b 100644
--- a/Core/Samples/inc/Lattice.h
+++ b/Core/Samples/inc/Lattice.h
@@ -24,7 +24,9 @@
 
 #include <vector>
 
-//! A Lattice with three basis vectors.
+//! @class Lattice
+//! @ingroup samples
+//! @brief A lattice with three basis vectors.
 
 class BA_CORE_API_ Lattice
 {
diff --git a/Core/Samples/inc/Lattice2DIFParameters.h b/Core/Samples/inc/Lattice2DIFParameters.h
index 808394bdee73d89c5367dfbb3bb1fb3bc0889875..8d6e86c4d285c0663ccd72fc6e9f3c211472a11b 100644
--- a/Core/Samples/inc/Lattice2DIFParameters.h
+++ b/Core/Samples/inc/Lattice2DIFParameters.h
@@ -18,6 +18,10 @@
 
 #include "IParameterized.h"
 
+//! @class Lattice2DIFParameters
+//! @ingroup samples
+//! @brief Additional parameters for 2D lattice
+
 class Lattice2DIFParameters
 {
 public:
diff --git a/Core/Samples/inc/LatticeBasis.h b/Core/Samples/inc/LatticeBasis.h
index 04670cbe9b3eee0250280db6b8cbc1fc0ddb91bf..b574174b843bdb5b834786c5655d33d6d9a8b571 100644
--- a/Core/Samples/inc/LatticeBasis.h
+++ b/Core/Samples/inc/LatticeBasis.h
@@ -20,6 +20,10 @@
 #include "Types.h"
 #include <vector>
 
+//! @class LatticeBasis
+//! @ingroup samples
+//! @brief Basis of the lattice represented by the composition of particles
+
 class BA_CORE_API_ LatticeBasis : public Particle
 {
 public:
diff --git a/Core/Samples/inc/Layer.h b/Core/Samples/inc/Layer.h
index 38d7f9cb655d6b6ffbb65841530e2bfab5dcff49..32bf63661eafd1470f16ec957e7cd4553668d449 100644
--- a/Core/Samples/inc/Layer.h
+++ b/Core/Samples/inc/Layer.h
@@ -23,7 +23,9 @@
 #include "LayerDWBASimulation.h"
 #include "ParticleDecoration.h"
 
-//! A Layer with thickness and pointer to the material
+//! @class Layer
+//! @ingroup samples
+//! @brief A layer with thickness and material
 
 class BA_CORE_API_ Layer : public ICompositeSample
 {
diff --git a/Core/Samples/inc/LayerInterface.h b/Core/Samples/inc/LayerInterface.h
index ba9a96d4ed87b0f5ec8a701288fc069aaef4140f..ff7f0370c3e0203e6a2c69b2a0477390159b3689 100644
--- a/Core/Samples/inc/LayerInterface.h
+++ b/Core/Samples/inc/LayerInterface.h
@@ -21,7 +21,9 @@
 
 class Layer;
 
-//! Interface between two layers, possibly with roughness.
+//! @class LayerInterface
+//! @ingroup samples_internal
+//! @brief Interface between two layers, possibly with roughness.
 
 class LayerInterface : public ICompositeSample
 {
diff --git a/Core/Samples/inc/LayerRoughness.h b/Core/Samples/inc/LayerRoughness.h
index 27705d0c3125347af9621009a6f5796c5ae8bcff..481b5114fb009634d07b90f5e6eb0b0eaf1bf467 100644
--- a/Core/Samples/inc/LayerRoughness.h
+++ b/Core/Samples/inc/LayerRoughness.h
@@ -20,12 +20,12 @@
 #include "IRoughness.h"
 
 //! @class LayerRoughness
-//! @brief Roughness of interface between two layers.
+//! @ingroup samples
+//! @brief A Roughness of interface between two layers.
 //!
 //! Based on the article
 //! D.K.G. de Boer, Physical review B, Volume 51, Number 8, 15 February 1995
 //! "X-ray reflection and transmission by rough surfaces"
-//! See Appendix A2
 
 class BA_CORE_API_ LayerRoughness : public IRoughness
 {
diff --git a/Core/Samples/inc/MaterialManager.h b/Core/Samples/inc/MaterialManager.h
index ff18d13baeeff8b83385f6ad524ae2bef56fdb26..c5a1ddb11dc224104ab3edf0ca3fd4db2de82b9f 100644
--- a/Core/Samples/inc/MaterialManager.h
+++ b/Core/Samples/inc/MaterialManager.h
@@ -23,11 +23,14 @@
 #include <string>
 #include <map>
 
-//! Manager of materials used in simulation.
-
-//! A singleton that maintains a database of materials, and
-//! provides a common and unique interface for material creation and access.
+//! @class MaterialManager
+//! @ingroup materials
+//! @brief Manager of materials used in simulation.
 //!
+//! Maintains a database of materials, and provides a common and unique
+//! interface for material creation and access.
+
+
 class BA_CORE_API_ MaterialManager: public ISingleton<MaterialManager>
 {
 public:
diff --git a/Core/Samples/inc/MesoCrystal.h b/Core/Samples/inc/MesoCrystal.h
index 4d83862a083ac716bbb3202d9f92c5459f745681..6480f2e9585d2b8c137f155a2b9771f3eb77e7a9 100644
--- a/Core/Samples/inc/MesoCrystal.h
+++ b/Core/Samples/inc/MesoCrystal.h
@@ -20,7 +20,9 @@
 #include "IFormFactor.h"
 #include "Particle.h"
 
-//! A particle with an internal structure of smaller particles
+//! @class MesoCrystal
+//! @ingroup samples
+//! @brief A particle with an internal structure of smaller particles
 
 class BA_CORE_API_ MesoCrystal : public Particle
 {
diff --git a/Core/Samples/inc/MultiLayer.h b/Core/Samples/inc/MultiLayer.h
index 357cffbbd1ebd1b215e2a1783c3a98f69a808451..4dffcabfe872f54ecd9a1b6fd026cd44a6baffa9 100644
--- a/Core/Samples/inc/MultiLayer.h
+++ b/Core/Samples/inc/MultiLayer.h
@@ -22,7 +22,9 @@
 #include "MultiLayerDWBASimulation.h"
 #include <vector>
 
+
 //! @class MultiLayer
+//! @ingroup samples
 //! @brief Stack of layers one below the other
 //!
 //! Example of system of 4 layers (3 interfaces):
@@ -35,6 +37,7 @@
 //!  ---------   interface #2
 //!  substrate   layer #3        z=getLayerBottomZ(3)=-60.0
 
+
 class BA_CORE_API_ MultiLayer : public ICompositeSample
 {
 public:
diff --git a/Core/Samples/inc/Particle.h b/Core/Samples/inc/Particle.h
index 1da3d32916b057623d9e7302b1bace32018037b9..f8c2795eb82a14a94b58fc0a1ad707255a19e08b 100644
--- a/Core/Samples/inc/Particle.h
+++ b/Core/Samples/inc/Particle.h
@@ -24,7 +24,9 @@
 class ParticleInfo;
 class DiffuseParticleInfo;
 
-//! A particle with a form factor and refractive index
+//! @class Particle
+//! @ingroup samples
+//! @brief A particle with a form factor and refractive index
 
 class BA_CORE_API_ Particle : public ICompositeSample
 {
diff --git a/Core/Samples/inc/ParticleBuilder.h b/Core/Samples/inc/ParticleBuilder.h
index 7a10fc8de41e452c368e2a076dc2fb5512383995..1f358891163e7400c3925f15daac73f02fa67504 100644
--- a/Core/Samples/inc/ParticleBuilder.h
+++ b/Core/Samples/inc/ParticleBuilder.h
@@ -21,10 +21,8 @@
 #include "ParticleDecoration.h"
 
 //! @class ParticleBuilder
+//! @ingroup samples_internal
 //! @brief To build set of particles with similar properties
-//!
-//! currently produces particles but probably can produce directly
-//! ParticleInfo, or even ISample
 
 class BA_CORE_API_ ParticleBuilder
 {
diff --git a/Core/Samples/inc/ParticleCoreShell.h b/Core/Samples/inc/ParticleCoreShell.h
index 85abdce851bc11c06700931fdf45428a709709d5..457548433f8c906f066090c548106b32f920e9aa 100644
--- a/Core/Samples/inc/ParticleCoreShell.h
+++ b/Core/Samples/inc/ParticleCoreShell.h
@@ -18,7 +18,9 @@
 
 #include "Particle.h"
 
-//! A particle with a core/shell geometry
+//! @class ParticleCoreShell
+//! @ingroup samples
+//! @brief A particle with a core/shell geometry
 
 class BA_CORE_API_ ParticleCoreShell : public Particle
 {
@@ -58,19 +60,15 @@ public:
     }
 
     //! Returns the core particle
-    const Particle *getCoreParticle() const {
-        return mp_core;
-    }
+    const Particle *getCoreParticle() const { return mp_core; }
 
     //! Returns the shell particle
-    const Particle *getShellParticle() const {
-        return mp_shell;
-    }
+    const Particle *getShellParticle() const { return mp_shell; }
 
+protected:
     void addAndRegisterCore(const Particle &core);
     void addAndRegisterShell(const Particle &shell);
 
-protected:
     ParticleCoreShell(kvector_t relative_core_position);
     Particle *mp_shell;
     Particle *mp_core;
diff --git a/Core/Samples/inc/ParticleDecoration.h b/Core/Samples/inc/ParticleDecoration.h
index 3d12e929883b40d1b15836b9b87ca94286e5cd20..6d53b48f6ce2b91d3f2db57727936317df027172 100644
--- a/Core/Samples/inc/ParticleDecoration.h
+++ b/Core/Samples/inc/ParticleDecoration.h
@@ -21,7 +21,9 @@
 #include "ParticleInfo.h"
 #include "IInterferenceFunction.h"
 
-//! Decorator class that adds particles to ISample objects
+//! @class ParticleDecoration
+//! @ingroup samples
+//! @brief Decorator class that adds particles to ISample objects
 
 class BA_CORE_API_ ParticleDecoration : public IDecoration
 {
diff --git a/Core/Samples/inc/ParticleInfo.h b/Core/Samples/inc/ParticleInfo.h
index ffdc49eceaee4d847c4e5f5068ccb54e644ddabb..7badbdbfd806d56d3345eefb4d678607739ddc2e 100644
--- a/Core/Samples/inc/ParticleInfo.h
+++ b/Core/Samples/inc/ParticleInfo.h
@@ -19,7 +19,11 @@
 #include "ICompositeSample.h"
 #include "Particle.h"
 
-//! Holds additional information about particle (used in ParticleDecoration).
+//! @class ParticleInfo
+//! @ingroup samples
+//! @brief Holds additional information about particle.
+//!
+//! Used in ParticleDecoration
 
 class BA_CORE_API_ ParticleInfo : public ICompositeSample
 {
diff --git a/Core/Samples/inc/PositionParticleInfo.h b/Core/Samples/inc/PositionParticleInfo.h
index b82d60cca8972d762c7d49abdafc7630aebe316f..1dd931b06d914a477d4c3fc519df71d4edba2c8a 100644
--- a/Core/Samples/inc/PositionParticleInfo.h
+++ b/Core/Samples/inc/PositionParticleInfo.h
@@ -18,11 +18,13 @@
 
 #include "ParticleInfo.h"
 
-//! Enhances ParticleInfo by position in x and y.
-
-//! Used in IsGISAXSMorphologyFileDecoration.
-//! Note that position in z ("depth") is inherited from ParticleInfo.
+//! @class PositionParticleInfo
+//! @ingroup samples
+//! @brief Enhances ParticleInfo by position in x and y.
 //!
+//! Note that position in z ("depth") is inherited from ParticleInfo.
+
+
 class BA_CORE_API_ PositionParticleInfo : public ParticleInfo
 {
 public:
diff --git a/Core/Samples/src/InterferenceFunction1DParaCrystal.cpp b/Core/Samples/src/InterferenceFunction1DParaCrystal.cpp
index ff067cb474383486bd211a33d0d7733d7720ff78..4536bc738a0cc09c752ea59ddd9fe78cd8a33d15 100644
--- a/Core/Samples/src/InterferenceFunction1DParaCrystal.cpp
+++ b/Core/Samples/src/InterferenceFunction1DParaCrystal.cpp
@@ -38,11 +38,12 @@ void InterferenceFunction1DParaCrystal::init_parameters()
 
 
 InterferenceFunction1DParaCrystal *InterferenceFunction1DParaCrystal::clone() const {
-    InterferenceFunction1DParaCrystal *p_clone =
+    InterferenceFunction1DParaCrystal *result =
         new InterferenceFunction1DParaCrystal(
             m_peak_distance, m_width, m_corr_length);
-    p_clone->setKappa(m_kappa);
-    return p_clone;
+    result->setName(getName());
+    result->setKappa(m_kappa);
+    return result;
 }
 
 
diff --git a/Core/Samples/src/InterferenceFunction2DLattice.cpp b/Core/Samples/src/InterferenceFunction2DLattice.cpp
index 62bcac9ce6821bd7ad8488e40c954c2c11be89f9..1b533cc3e7bafe10bf1137b505784ed2686fcec9 100644
--- a/Core/Samples/src/InterferenceFunction2DLattice.cpp
+++ b/Core/Samples/src/InterferenceFunction2DLattice.cpp
@@ -35,9 +35,10 @@ InterferenceFunction2DLattice::~InterferenceFunction2DLattice()
 }
 
 InterferenceFunction2DLattice *InterferenceFunction2DLattice::clone() const {
-    InterferenceFunction2DLattice *p_clone = new InterferenceFunction2DLattice(m_lattice_params);
-    p_clone->setProbabilityDistribution(*mp_pdf);
-    return p_clone;
+    InterferenceFunction2DLattice *result = new InterferenceFunction2DLattice(m_lattice_params);
+    result->setProbabilityDistribution(*mp_pdf);
+    result->setName(getName());
+    return result;
 }
 
 
diff --git a/Core/Samples/src/InterferenceFunction2DParaCrystal.cpp b/Core/Samples/src/InterferenceFunction2DParaCrystal.cpp
index ed2daef950e9b5ab74b56e798506a1d126421f50..79f7d400becbe31b474079fd1a912e2274743491 100644
--- a/Core/Samples/src/InterferenceFunction2DParaCrystal.cpp
+++ b/Core/Samples/src/InterferenceFunction2DParaCrystal.cpp
@@ -49,14 +49,15 @@ InterferenceFunction2DParaCrystal::~InterferenceFunction2DParaCrystal()
 
 InterferenceFunction2DParaCrystal
 *InterferenceFunction2DParaCrystal::clone() const {
-    InterferenceFunction2DParaCrystal *p_new =
+    InterferenceFunction2DParaCrystal *result =
             new InterferenceFunction2DParaCrystal(m_lattice_lengths[0],
                     m_lattice_lengths[1], m_alpha_lattice, m_xi, m_corr_length);
-    p_new->setDomainSizes(m_domain_sizes[0], m_domain_sizes[1]);
+    result->setDomainSizes(m_domain_sizes[0], m_domain_sizes[1]);
     if(m_pdfs[0] && m_pdfs[1])
-        p_new->setProbabilityDistributions(*m_pdfs[0], *m_pdfs[1]);
-    p_new->setIntegrationOverXi(m_integrate_xi);
-    return p_new;
+        result->setProbabilityDistributions(*m_pdfs[0], *m_pdfs[1]);
+    result->setIntegrationOverXi(m_integrate_xi);
+    result->setName(getName());
+    return result;
 }
 
 
diff --git a/Core/StandardSamples/FunctionalTestRegistry.h b/Core/StandardSamples/FunctionalTestRegistry.h
index 7f8a9191fad1aeb9b8edd41e06686b6ab455ebde..41e9cec4b9ecd83c7eb5623fc45e60fd882a9b04 100644
--- a/Core/StandardSamples/FunctionalTestRegistry.h
+++ b/Core/StandardSamples/FunctionalTestRegistry.h
@@ -21,6 +21,13 @@
 #include <map>
 #include "IFunctionalTest.h"
 
+
+//! @class FunctionalTestRegistry
+//! @ingroup samples
+//! @brief Enhances ParticleInfo by position in x and y.
+//!
+//! Note that position in z ("depth") is inherited from ParticleInfo.
+
 class FunctionalTestRegistry
 {
 public:
diff --git a/Core/Tools/inc/ICloneable.h b/Core/Tools/inc/ICloneable.h
index cc6e264a7d341d966850f3eb81d4f735aea80f98..bb38e93b2ba745f4d080ddbcf44d03655e148925 100644
--- a/Core/Tools/inc/ICloneable.h
+++ b/Core/Tools/inc/ICloneable.h
@@ -18,8 +18,11 @@
 
 #include "Exceptions.h"
 
-//! Standard mix-in for objects that must not be copied, except by cloning.
 
+//! @class ICloneable
+//! @ingroup tools
+//! @brief Standard mix-in for objects that must not be copied, except by cloning.
+//!
 //! This virtual base class disables the copy constructor and the operator=
 //! in all its child classes.
 //! Child classes should provide clone().
diff --git a/Core/Tools/inc/INamed.h b/Core/Tools/inc/INamed.h
index 676d1bbacf9eac19f4588b32d9b1332b33f8dc54..47fc748ca8d1a3f55fa173bdd595c93563a151c8 100644
--- a/Core/Tools/inc/INamed.h
+++ b/Core/Tools/inc/INamed.h
@@ -19,7 +19,9 @@
 #include "WinDllMacros.h"
 #include <string>
 
-//! Standard mix-in for all objects that have a name.
+//! @class INamed
+//! @ingroup tools
+//! @brief Interface for named objects.
 
 class BA_CORE_API_ INamed
 {
diff --git a/Core/Tools/inc/IParameterized.h b/Core/Tools/inc/IParameterized.h
index 9bf964375324d8951ec13f22c4b83fcb401836cd..ba8f37756db2f81e858289f28140ec20def0fd19 100644
--- a/Core/Tools/inc/IParameterized.h
+++ b/Core/Tools/inc/IParameterized.h
@@ -20,7 +20,9 @@
 #include "IChangeable.h"
 #include "ParameterPool.h"
 
-//! Manage a "local" parameter pool, and a tree of children's pools.
+//! @class IParameterized
+//! @ingroup tools
+//! @brief Manage a "local" parameter pool, and a tree of children's pools.
 
 class BA_CORE_API_ IParameterized : public INamed
 {
diff --git a/Doc/Doxygen/defgroups.doc b/Doc/Doxygen/defgroups.doc
index 40d2238cfc39e6429b6b9b432dada63ecfb8a23e..8b1bb263efee599eb4092774211d7c37e11dc3c1 100644
--- a/Doc/Doxygen/defgroups.doc
+++ b/Doc/Doxygen/defgroups.doc
@@ -1,17 +1,41 @@
 /*! 
 
+\defgroup simulation Simulation description
+\defgroup simulation_internal Simulation internals
+
+\defgroup algorithms Algorithms
+\defgroup algorithms_internal Algorithm internals
+
+
 \defgroup formfactors     Available formfactors
-\defgroup ff_decorations  Formfactor decorations.
-\defgroup ff_internals    Formfactor internals.
+\defgroup formfactors_internal    Formfactor internals
+\defgroup formfactors_decorations  Formfactor decorations
+
+
+\defgroup samples Samples
+Collection of objects to describe experimental sample.
+
+\defgroup samples_internal Sample internals
+
+\defgroup materials Materials
+\defgroup materials_internal Material internals
+
+\defgroup interference Interference functions
+
+\defgroup interference_internal Interference function internals
+
+\defgroup standard_samples
+
+
+
+
+
+
+
 
-\defgroup simulation      Simulation API
-\defgroup simulation_internals
 
-\defgroup sample           Samples
-\defgroup sample_internals Sample internals
 
-\defgroup interference
-\defgroup layers
 
+\defgroup tools
 
 */