diff --git a/Core/StandardSamples/IFactory.h b/Core/StandardSamples/IFactory.h
index 138ca353304eb45cc2a39750cc143650f50c7a2e..5ef4e84e286af18349b92b248531540b5a9038d6 100644
--- a/Core/StandardSamples/IFactory.h
+++ b/Core/StandardSamples/IFactory.h
@@ -19,6 +19,7 @@
 #include "Exceptions.h"
 #include <functional>
 #include <map>
+#include <sstream>
 
 //! Base class for all factories.
 //! @ingroup tools_internal
@@ -43,19 +44,24 @@ public:
     //! Creates object by calling creation function corresponded to given identifier
     AbstractProduct* createItem(const Key& item_key) {
         auto it = m_callbacks.find(item_key);
-        if( it == m_callbacks.end() ) // unexpectedly not found
-            throw Exceptions::UnknownClassRegistrationException(
-                    "IFactory::createItem() -> Panic. Unknown item key");
-        // invoke the creation function
+        if( it == m_callbacks.end() ) {
+            std::ostringstream message;
+            message << "IFactory::createItem() -> Error. Unknown item key '"
+                    << item_key << "'";
+            throw Exceptions::RuntimeErrorException(message.str());
+        }
         return (it->second)();
     }
 
     //! Registers object's creation function and store object description
     bool registerItem(const Key& item_key, CreateItemCallback CreateFn,
                       const std::string& itemDescription="") {
-        if (m_callbacks.find(item_key) != m_callbacks.end())
-            throw Exceptions::ExistingClassRegistrationException(
-                    "IFactory::registerItem() -> Panic! Already registered item key");
+        if (m_callbacks.find(item_key) != m_callbacks.end()) {
+            std::ostringstream message;
+            message << "IFactory::createItem() -> Error. Already registered item key '"
+                    << item_key << "'";
+            throw Exceptions::RuntimeErrorException(message.str());
+        }
         if (itemDescription!="")
             m_descriptions.insert(make_pair(item_key, itemDescription));
         return m_callbacks.insert(make_pair(item_key, CreateFn)).second;
diff --git a/Core/StandardSamples/SimulationFactory.cpp b/Core/StandardSamples/SimulationFactory.cpp
index acf4bef5f1a57d51f8ecba32fe738bbd3b0c609a..8093fe7d17ca602db8756e4c0614ebbbe5c6954a 100644
--- a/Core/StandardSamples/SimulationFactory.cpp
+++ b/Core/StandardSamples/SimulationFactory.cpp
@@ -97,5 +97,4 @@ SimulationFactory::SimulationFactory()
                  StandardSimulations::MiniGISASMonteCarlo,
                  "GISAS simulation with small 25x25 detector and phi[-2,2], theta[0,2], "
                  "in Monte-Carlo mode");
-
 }
diff --git a/Core/StandardSamples/SimulationFactory.h b/Core/StandardSamples/SimulationFactory.h
index e631b92a5bfd03c022f43fe0c263bb06f37f3cac..be4315942c3316b9c76f74f9d6cae16631ac2a3d 100644
--- a/Core/StandardSamples/SimulationFactory.h
+++ b/Core/StandardSamples/SimulationFactory.h
@@ -17,13 +17,15 @@
 #define SIMULATIONFACTORY_H
 
 #include "IFactory.h"
+#include "GISASSimulation.h"
+#include <string>
 
 //! @class SimulationFactory
 //! @ingroup standard_samples
 //! @brief Registry to create standard pre-defined simulations.
 //! Used in functional tests, performance measurements, etc.
 
-class BA_CORE_API_ SimulationFactory : public IFactory<std::string, class GISASSimulation>
+class BA_CORE_API_ SimulationFactory : public IFactory<std::string, GISASSimulation>
 {
 public:
     SimulationFactory();
diff --git a/GUI/coregui/Views/CommonWidgets/ItemComboWidget.cpp b/GUI/coregui/Views/CommonWidgets/ItemComboWidget.cpp
index f6a15e3c6238488df3dc7a56bf9a5dfa319ae0ca..0dd60c028cc08dddacc099768a969bf818c8528d 100644
--- a/GUI/coregui/Views/CommonWidgets/ItemComboWidget.cpp
+++ b/GUI/coregui/Views/CommonWidgets/ItemComboWidget.cpp
@@ -17,6 +17,7 @@
 #include "ItemComboWidget.h"
 #include "ItemComboToolBar.h"
 #include "SessionItemWidget.h"
+#include "GUIHelpers.h"
 #include <QComboBox>
 #include <QDebug>
 #include <QEvent>
diff --git a/GUI/coregui/utils/GUIHelpers.h b/GUI/coregui/utils/GUIHelpers.h
index 442aeb50a96c514eb81d323b5ed855f4b75f461f..502cc94f64f782427167335413a53a9f5662edb2 100644
--- a/GUI/coregui/utils/GUIHelpers.h
+++ b/GUI/coregui/utils/GUIHelpers.h
@@ -21,6 +21,7 @@
 #include <QStringList>
 #include <QWidget>
 #include <memory>
+#include <sstream>
 
 class JobItem;
 class RealDataItem;
@@ -84,4 +85,12 @@ BA_CORE_API_ bool isTheSame(const QStringList &lhs, const QStringList &rhs);
 
 } // namespace GUIHelpers
 
+inline std::ostream&  operator <<(std::ostream &stream,const QString &str)
+{
+   stream << str.toStdString();
+   return stream;
+}
+
+
+
 #endif // GUIHELPERS_H
diff --git a/Tests/PerformanceTests/test_performance.py b/Tests/PerformanceTests/test_performance.py
index d93eac293414f9d81448b612855813c8caad1cbc..a254a57887d79aed8f79ef49b483eb51723331d8 100755
--- a/Tests/PerformanceTests/test_performance.py
+++ b/Tests/PerformanceTests/test_performance.py
@@ -87,14 +87,14 @@ class FactoryTest:
 
         if simulation_name != None and sample_builder != None:
             self.m_sample_factory = SampleBuilderFactory()
-            self.m_simulation_registry = SimulationRegistry()
-            self.m_simulation = self.m_simulation_registry.createSimulation(self.m_simulation_name)
-            self.m_sample_builder = self.m_sample_factory.createBuilder(self.m_sample_builder_name)
+            self.m_simulation_factory = SimulationFactory()
+            self.m_simulation = self.m_simulation_factory.createItem(self.m_simulation_name)
+            self.m_sample = self.m_sample_factory.createSample(self.m_sample_builder_name)
         else:
             self.m_sample_factory = None
-            self.m_simulation_registry = None
+            self.m_simulation_factory = None
             self.m_simulation = None
-            self.m_sample_builder = None
+            self.m_sample = None
 
     def prepare(self):
         pass
@@ -103,7 +103,7 @@ class FactoryTest:
     def run_loop(self):
         # actual work is done here
         for i in range(self.m_nrepetitions):
-            self.m_simulation.setSampleBuilder(self.m_sample_builder)
+            self.m_simulation.setSample(self.m_sample)
             self.m_simulation.runSimulation()
 
     def run(self):
@@ -197,16 +197,16 @@ class PerformanceTests:
         self.m_pyversion = ""
         self.m_filename = filename
 
-        self.add("MultiLayer",         "MaxiGISAS",    "MultiLayerWithRoughnessBuilder", 1);
-        self.add("CylindersInDWBA",    "MaxiGISAS",    "CylindersInDWBABuilder", 10);
-        self.add("RotatedPyramids",    "MaxiGISAS",    "RotatedPyramidsBuilder", 10);
-        self.add("CoreShell",          "MaxiGISAS",    "CoreShellParticleBuilder", 10);
-        self.add("SquareLattice",      "MaxiGISAS",    "SquareLatticeBuilder", 10);
-        self.add("RadialParaCrystal",  "MaxiGISAS",    "RadialParaCrystalBuilder", 10);
-        self.add("HexParaCrystal",     "BasicGISAS",   "HexParaCrystalBuilder", 1);
-        self.add("SSCA",               "MaxiGISAS",    "SizeDistributionSSCAModelBuilder", 10);
-        self.add("Mesocrystal",        "MaxiGISAS",    "MesoCrystalBuilder", 2);
-        self.add("PolMagCyl",          "MaxiGISAS00",  "MagneticCylindersBuilder", 10);
+        self.add("MultiLayer",         "MaxiGISAS",    "MultiLayerWithRoughnessBuilder", 1)
+        self.add("CylindersInDWBA",    "MaxiGISAS",    "CylindersInDWBABuilder", 10)
+        self.add("RotatedPyramids",    "MaxiGISAS",    "RotatedPyramidsBuilder", 10)
+        self.add("CoreShell",          "MaxiGISAS",    "CoreShellParticleBuilder", 10)
+        self.add("SquareLattice",      "MaxiGISAS",    "SquareLatticeBuilder", 10)
+        self.add("RadialParaCrystal",  "MaxiGISAS",    "RadialParaCrystalBuilder", 10)
+        self.add("HexParaCrystal",     "BasicGISAS",   "HexParaCrystalBuilder", 1)
+        self.add("SSCA",               "MaxiGISAS",    "SizeDistributionSSCAModelBuilder", 10)
+        self.add("Mesocrystal",        "MaxiGISAS",    "MesoCrystalBuilder", 2)
+        self.add("PolMagCyl",          "MaxiGISAS00",  "MagneticCylindersBuilder", 10)
 
         # custom form factor is a special case since it's not in the registry
         self.m_tests.append(CustomTest("Custom FF", 10))
diff --git a/Wrap/swig/libBornAgainCore.i b/Wrap/swig/libBornAgainCore.i
index fbd1d26d2b8eb3ed523fef7ec4afed71c3679b8e..b5744b20c1d8e28916a27178bdff130e9f7d10b6 100644
--- a/Wrap/swig/libBornAgainCore.i
+++ b/Wrap/swig/libBornAgainCore.i
@@ -419,9 +419,9 @@
 %include "ISelectionRule.h"
 %include "SpecularSimulation.h"
 %include "ThreadInfo.h"
-%template(SampleBuilderFactory) IFactory<std::string, IMultiLayerBuilder>;
-//%include "SampleBuilderFactory.h"
-%template(SimulationFactory) IFactory<std::string, GISASSimulation>;
-//%include "SimulationFactory.h"
+%template(SampleBuilderFactoryTemp) IFactory<std::string, IMultiLayerBuilder>;
+%include "SampleBuilderFactory.h"
+%template(SimulationFactoryTemp) IFactory<std::string, GISASSimulation>;
+%include "SimulationFactory.h"
 
 %include "extendCore.i"
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index af6c889fd2caa959b219e595402fe94d727d7093..0ac365f34f2a977144c1341681a66257513df21e 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -18624,6 +18624,28 @@ class IntensityDataFunctions(_object):
         applyDetectorResolution = staticmethod(applyDetectorResolution)
     __swig_getmethods__["applyDetectorResolution"] = lambda x: applyDetectorResolution
 
+    def coordinateToBinf(*args):
+        """
+        coordinateToBinf(double coordinate, IAxis axis) -> double
+        coordinateToBinf(double & x, double & y, IntensityData data)
+        """
+        return _libBornAgainCore.IntensityDataFunctions_coordinateToBinf(*args)
+
+    if _newclass:
+        coordinateToBinf = staticmethod(coordinateToBinf)
+    __swig_getmethods__["coordinateToBinf"] = lambda x: coordinateToBinf
+
+    def coordinateFromBinf(*args):
+        """
+        coordinateFromBinf(double value, IAxis axis) -> double
+        coordinateFromBinf(double & x, double & y, IntensityData data)
+        """
+        return _libBornAgainCore.IntensityDataFunctions_coordinateFromBinf(*args)
+
+    if _newclass:
+        coordinateFromBinf = staticmethod(coordinateFromBinf)
+    __swig_getmethods__["coordinateFromBinf"] = lambda x: coordinateFromBinf
+
     def __init__(self):
         """
         __init__(IntensityDataFunctions self) -> IntensityDataFunctions
@@ -18664,6 +18686,20 @@ def IntensityDataFunctions_applyDetectorResolution(origin, resolution_function):
     """IntensityDataFunctions_applyDetectorResolution(IntensityData origin, IResolutionFunction2D resolution_function) -> IntensityData"""
     return _libBornAgainCore.IntensityDataFunctions_applyDetectorResolution(origin, resolution_function)
 
+def IntensityDataFunctions_coordinateToBinf(*args):
+    """
+    coordinateToBinf(double coordinate, IAxis axis) -> double
+    IntensityDataFunctions_coordinateToBinf(double & x, double & y, IntensityData data)
+    """
+    return _libBornAgainCore.IntensityDataFunctions_coordinateToBinf(*args)
+
+def IntensityDataFunctions_coordinateFromBinf(*args):
+    """
+    coordinateFromBinf(double value, IAxis axis) -> double
+    IntensityDataFunctions_coordinateFromBinf(double & x, double & y, IntensityData data)
+    """
+    return _libBornAgainCore.IntensityDataFunctions_coordinateFromBinf(*args)
+
 class IntensityDataIOFactory(_object):
     """
 
@@ -24348,7 +24384,7 @@ class ThreadInfo(_object):
 ThreadInfo_swigregister = _libBornAgainCore.ThreadInfo_swigregister
 ThreadInfo_swigregister(ThreadInfo)
 
-class SampleBuilderFactory(_object):
+class SampleBuilderFactoryTemp(_object):
     """
 
 
@@ -24359,19 +24395,19 @@ class SampleBuilderFactory(_object):
     """
 
     __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, SampleBuilderFactory, name, value)
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SampleBuilderFactoryTemp, name, value)
     __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, SampleBuilderFactory, name)
+    __getattr__ = lambda self, name: _swig_getattr(self, SampleBuilderFactoryTemp, name)
     __repr__ = _swig_repr
 
     def __init__(self):
         """
-        __init__(IFactory<(std::string,IMultiLayerBuilder)> self) -> SampleBuilderFactory
+        __init__(IFactory<(std::string,IMultiLayerBuilder)> self) -> SampleBuilderFactoryTemp
 
         IFactory< Key, AbstractProduct >::IFactory()
 
         """
-        this = _libBornAgainCore.new_SampleBuilderFactory()
+        this = _libBornAgainCore.new_SampleBuilderFactoryTemp()
         try:
             self.this.append(this)
         except Exception:
@@ -24379,66 +24415,115 @@ class SampleBuilderFactory(_object):
 
     def createItem(self, item_key):
         """
-        createItem(SampleBuilderFactory self, std::string const & item_key) -> IMultiLayerBuilder
+        createItem(SampleBuilderFactoryTemp self, std::string const & item_key) -> IMultiLayerBuilder
 
         AbstractProduct* IFactory< Key, AbstractProduct >::createItem(const Key &item_key)
 
         Creates object by calling creation function corresponded to given identifier. 
 
         """
-        return _libBornAgainCore.SampleBuilderFactory_createItem(self, item_key)
+        return _libBornAgainCore.SampleBuilderFactoryTemp_createItem(self, item_key)
 
 
     def registerItem(self, *args):
         """
-        registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
-        registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn) -> bool
+        registerItem(SampleBuilderFactoryTemp self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
+        registerItem(SampleBuilderFactoryTemp self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn) -> bool
 
         bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription="")
 
         Registers object's creation function and store object description. 
 
         """
-        return _libBornAgainCore.SampleBuilderFactory_registerItem(self, *args)
+        return _libBornAgainCore.SampleBuilderFactoryTemp_registerItem(self, *args)
 
-    __swig_destroy__ = _libBornAgainCore.delete_SampleBuilderFactory
+    __swig_destroy__ = _libBornAgainCore.delete_SampleBuilderFactoryTemp
     __del__ = lambda self: None
 
     def getNumberOfRegistered(self):
         """
-        getNumberOfRegistered(SampleBuilderFactory self) -> size_t
+        getNumberOfRegistered(SampleBuilderFactoryTemp self) -> size_t
 
         size_t IFactory< Key, AbstractProduct >::getNumberOfRegistered() const
 
         Returns number of registered objects. 
 
         """
-        return _libBornAgainCore.SampleBuilderFactory_getNumberOfRegistered(self)
+        return _libBornAgainCore.SampleBuilderFactoryTemp_getNumberOfRegistered(self)
 
 
     def begin(self):
         """
-        begin(SampleBuilderFactory self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
+        begin(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
 
         const_iterator IFactory< Key, AbstractProduct >::begin() const 
 
         """
-        return _libBornAgainCore.SampleBuilderFactory_begin(self)
+        return _libBornAgainCore.SampleBuilderFactoryTemp_begin(self)
 
 
     def end(self):
         """
-        end(SampleBuilderFactory self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
+        end(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator
 
         const_iterator IFactory< Key, AbstractProduct >::end() const 
 
         """
-        return _libBornAgainCore.SampleBuilderFactory_end(self)
+        return _libBornAgainCore.SampleBuilderFactoryTemp_end(self)
+
+SampleBuilderFactoryTemp_swigregister = _libBornAgainCore.SampleBuilderFactoryTemp_swigregister
+SampleBuilderFactoryTemp_swigregister(SampleBuilderFactoryTemp)
+
+class SampleBuilderFactory(SampleBuilderFactoryTemp):
+    """
+
+
+    Factory to create standard pre-defined samples.
+
+    C++ includes: SampleBuilderFactory.h
+
+    """
+
+    __swig_setmethods__ = {}
+    for _s in [SampleBuilderFactoryTemp]:
+        __swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SampleBuilderFactory, name, value)
+    __swig_getmethods__ = {}
+    for _s in [SampleBuilderFactoryTemp]:
+        __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
+    __getattr__ = lambda self, name: _swig_getattr(self, SampleBuilderFactory, name)
+    __repr__ = _swig_repr
+
+    def __init__(self):
+        """
+        __init__(SampleBuilderFactory self) -> SampleBuilderFactory
 
+        SampleBuilderFactory::SampleBuilderFactory()
+
+        """
+        this = _libBornAgainCore.new_SampleBuilderFactory()
+        try:
+            self.this.append(this)
+        except Exception:
+            self.this = this
+
+    def createSample(self, name):
+        """
+        createSample(SampleBuilderFactory self, std::string const & name) -> MultiLayer
+
+        MultiLayer * SampleBuilderFactory::createSample(const std::string &name)
+
+        Retrieves a SampleBuilder from the registry, does the build, and returns the result. 
+
+        """
+        return _libBornAgainCore.SampleBuilderFactory_createSample(self, name)
+
+    __swig_destroy__ = _libBornAgainCore.delete_SampleBuilderFactory
+    __del__ = lambda self: None
 SampleBuilderFactory_swigregister = _libBornAgainCore.SampleBuilderFactory_swigregister
 SampleBuilderFactory_swigregister(SampleBuilderFactory)
 
-class SimulationFactory(_object):
+class SimulationFactoryTemp(_object):
     """
 
 
@@ -24449,19 +24534,19 @@ class SimulationFactory(_object):
     """
 
     __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, SimulationFactory, name, value)
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SimulationFactoryTemp, name, value)
     __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, SimulationFactory, name)
+    __getattr__ = lambda self, name: _swig_getattr(self, SimulationFactoryTemp, name)
     __repr__ = _swig_repr
 
     def __init__(self):
         """
-        __init__(IFactory<(std::string,GISASSimulation)> self) -> SimulationFactory
+        __init__(IFactory<(std::string,GISASSimulation)> self) -> SimulationFactoryTemp
 
         IFactory< Key, AbstractProduct >::IFactory()
 
         """
-        this = _libBornAgainCore.new_SimulationFactory()
+        this = _libBornAgainCore.new_SimulationFactoryTemp()
         try:
             self.this.append(this)
         except Exception:
@@ -24469,62 +24554,99 @@ class SimulationFactory(_object):
 
     def createItem(self, item_key):
         """
-        createItem(SimulationFactory self, std::string const & item_key) -> GISASSimulation
+        createItem(SimulationFactoryTemp self, std::string const & item_key) -> GISASSimulation
 
         AbstractProduct* IFactory< Key, AbstractProduct >::createItem(const Key &item_key)
 
         Creates object by calling creation function corresponded to given identifier. 
 
         """
-        return _libBornAgainCore.SimulationFactory_createItem(self, item_key)
+        return _libBornAgainCore.SimulationFactoryTemp_createItem(self, item_key)
 
 
     def registerItem(self, *args):
         """
-        registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
-        registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool
+        registerItem(SimulationFactoryTemp self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool
+        registerItem(SimulationFactoryTemp self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool
 
         bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription="")
 
         Registers object's creation function and store object description. 
 
         """
-        return _libBornAgainCore.SimulationFactory_registerItem(self, *args)
+        return _libBornAgainCore.SimulationFactoryTemp_registerItem(self, *args)
 
-    __swig_destroy__ = _libBornAgainCore.delete_SimulationFactory
+    __swig_destroy__ = _libBornAgainCore.delete_SimulationFactoryTemp
     __del__ = lambda self: None
 
     def getNumberOfRegistered(self):
         """
-        getNumberOfRegistered(SimulationFactory self) -> size_t
+        getNumberOfRegistered(SimulationFactoryTemp self) -> size_t
 
         size_t IFactory< Key, AbstractProduct >::getNumberOfRegistered() const
 
         Returns number of registered objects. 
 
         """
-        return _libBornAgainCore.SimulationFactory_getNumberOfRegistered(self)
+        return _libBornAgainCore.SimulationFactoryTemp_getNumberOfRegistered(self)
 
 
     def begin(self):
         """
-        begin(SimulationFactory self) -> IFactory< std::string,GISASSimulation >::const_iterator
+        begin(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator
 
         const_iterator IFactory< Key, AbstractProduct >::begin() const 
 
         """
-        return _libBornAgainCore.SimulationFactory_begin(self)
+        return _libBornAgainCore.SimulationFactoryTemp_begin(self)
 
 
     def end(self):
         """
-        end(SimulationFactory self) -> IFactory< std::string,GISASSimulation >::const_iterator
+        end(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator
 
         const_iterator IFactory< Key, AbstractProduct >::end() const 
 
         """
-        return _libBornAgainCore.SimulationFactory_end(self)
+        return _libBornAgainCore.SimulationFactoryTemp_end(self)
+
+SimulationFactoryTemp_swigregister = _libBornAgainCore.SimulationFactoryTemp_swigregister
+SimulationFactoryTemp_swigregister(SimulationFactoryTemp)
 
+class SimulationFactory(SimulationFactoryTemp):
+    """
+
+
+    Registry to create standard pre-defined simulations. Used in functional tests, performance measurements, etc.
+
+    C++ includes: SimulationFactory.h
+
+    """
+
+    __swig_setmethods__ = {}
+    for _s in [SimulationFactoryTemp]:
+        __swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
+    __setattr__ = lambda self, name, value: _swig_setattr(self, SimulationFactory, name, value)
+    __swig_getmethods__ = {}
+    for _s in [SimulationFactoryTemp]:
+        __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
+    __getattr__ = lambda self, name: _swig_getattr(self, SimulationFactory, name)
+    __repr__ = _swig_repr
+
+    def __init__(self):
+        """
+        __init__(SimulationFactory self) -> SimulationFactory
+
+        SimulationFactory::SimulationFactory()
+
+        """
+        this = _libBornAgainCore.new_SimulationFactory()
+        try:
+            self.this.append(this)
+        except Exception:
+            self.this = this
+    __swig_destroy__ = _libBornAgainCore.delete_SimulationFactory
+    __del__ = lambda self: None
 SimulationFactory_swigregister = _libBornAgainCore.SimulationFactory_swigregister
 SimulationFactory_swigregister(SimulationFactory)
 
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index e08f07709c13403a8372a720184c2b709c531fc0..cb4420e476a033bd0f6d4ac8184b2c007517dc81 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3665,90 +3665,92 @@ namespace Swig {
 #define SWIGTYPE_p_RotationY swig_types[208]
 #define SWIGTYPE_p_RotationZ swig_types[209]
 #define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[210]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[211]
-#define SWIGTYPE_p_Simulation swig_types[212]
-#define SWIGTYPE_p_SimulationOptions swig_types[213]
-#define SWIGTYPE_p_SpecularSimulation swig_types[214]
-#define SWIGTYPE_p_SphericalDetector swig_types[215]
-#define SWIGTYPE_p_SquaredFunctionDefault swig_types[216]
-#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[217]
-#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[218]
-#define SWIGTYPE_p_SquaredFunctionSimError swig_types[219]
-#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[220]
-#define SWIGTYPE_p_ThreadInfo swig_types[221]
-#define SWIGTYPE_p_Transform3D swig_types[222]
-#define SWIGTYPE_p_VariableBinAxis swig_types[223]
-#define SWIGTYPE_p_WavevectorInfo swig_types[224]
-#define SWIGTYPE_p__object swig_types[225]
-#define SWIGTYPE_p_allocator_type swig_types[226]
-#define SWIGTYPE_p_bool swig_types[227]
-#define SWIGTYPE_p_char swig_types[228]
-#define SWIGTYPE_p_const_iterator swig_types[229]
-#define SWIGTYPE_p_const_reference swig_types[230]
-#define SWIGTYPE_p_difference_type swig_types[231]
-#define SWIGTYPE_p_double swig_types[232]
-#define SWIGTYPE_p_int swig_types[233]
-#define SWIGTYPE_p_iterator swig_types[234]
-#define SWIGTYPE_p_long_long swig_types[235]
-#define SWIGTYPE_p_observer_t swig_types[236]
-#define SWIGTYPE_p_observerlist_t swig_types[237]
-#define SWIGTYPE_p_p__object swig_types[238]
-#define SWIGTYPE_p_reference swig_types[239]
-#define SWIGTYPE_p_short swig_types[240]
-#define SWIGTYPE_p_signed_char swig_types[241]
-#define SWIGTYPE_p_size_type swig_types[242]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[243]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[244]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[245]
-#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[246]
-#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[247]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[248]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[249]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[250]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[251]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[252]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[253]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[254]
-#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[255]
-#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[256]
-#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[257]
-#define SWIGTYPE_p_std__invalid_argument swig_types[258]
-#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[259]
-#define SWIGTYPE_p_std__ostream swig_types[260]
-#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[261]
-#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[262]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[263]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[264]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[265]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[266]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[267]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[268]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[269]
-#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[270]
-#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[271]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[272]
-#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[273]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[274]
-#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[275]
-#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[276]
-#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[277]
-#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[278]
-#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[279]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[280]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[281]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[282]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[283]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[284]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[285]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[286]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[287]
-#define SWIGTYPE_p_unsigned_char swig_types[288]
-#define SWIGTYPE_p_unsigned_int swig_types[289]
-#define SWIGTYPE_p_unsigned_long_long swig_types[290]
-#define SWIGTYPE_p_unsigned_short swig_types[291]
-#define SWIGTYPE_p_value_type swig_types[292]
-static swig_type_info *swig_types[294];
-static swig_module_info swig_module = {swig_types, 293, 0, 0, 0, 0};
+#define SWIGTYPE_p_SampleBuilderFactory swig_types[211]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[212]
+#define SWIGTYPE_p_Simulation swig_types[213]
+#define SWIGTYPE_p_SimulationFactory swig_types[214]
+#define SWIGTYPE_p_SimulationOptions swig_types[215]
+#define SWIGTYPE_p_SpecularSimulation swig_types[216]
+#define SWIGTYPE_p_SphericalDetector swig_types[217]
+#define SWIGTYPE_p_SquaredFunctionDefault swig_types[218]
+#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[219]
+#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[220]
+#define SWIGTYPE_p_SquaredFunctionSimError swig_types[221]
+#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[222]
+#define SWIGTYPE_p_ThreadInfo swig_types[223]
+#define SWIGTYPE_p_Transform3D swig_types[224]
+#define SWIGTYPE_p_VariableBinAxis swig_types[225]
+#define SWIGTYPE_p_WavevectorInfo swig_types[226]
+#define SWIGTYPE_p__object swig_types[227]
+#define SWIGTYPE_p_allocator_type swig_types[228]
+#define SWIGTYPE_p_bool swig_types[229]
+#define SWIGTYPE_p_char swig_types[230]
+#define SWIGTYPE_p_const_iterator swig_types[231]
+#define SWIGTYPE_p_const_reference swig_types[232]
+#define SWIGTYPE_p_difference_type swig_types[233]
+#define SWIGTYPE_p_double swig_types[234]
+#define SWIGTYPE_p_int swig_types[235]
+#define SWIGTYPE_p_iterator swig_types[236]
+#define SWIGTYPE_p_long_long swig_types[237]
+#define SWIGTYPE_p_observer_t swig_types[238]
+#define SWIGTYPE_p_observerlist_t swig_types[239]
+#define SWIGTYPE_p_p__object swig_types[240]
+#define SWIGTYPE_p_reference swig_types[241]
+#define SWIGTYPE_p_short swig_types[242]
+#define SWIGTYPE_p_signed_char swig_types[243]
+#define SWIGTYPE_p_size_type swig_types[244]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[245]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[246]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[247]
+#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[248]
+#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[249]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[250]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[251]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[252]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[253]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[254]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[255]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[256]
+#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[257]
+#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[258]
+#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[259]
+#define SWIGTYPE_p_std__invalid_argument swig_types[260]
+#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[261]
+#define SWIGTYPE_p_std__ostream swig_types[262]
+#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[263]
+#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[264]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[265]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[266]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[267]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[268]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[269]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[270]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[271]
+#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[272]
+#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[273]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[274]
+#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[275]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[276]
+#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[277]
+#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[278]
+#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[279]
+#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[280]
+#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[281]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[282]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[283]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[284]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[285]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[286]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[287]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[288]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[289]
+#define SWIGTYPE_p_unsigned_char swig_types[290]
+#define SWIGTYPE_p_unsigned_int swig_types[291]
+#define SWIGTYPE_p_unsigned_long_long swig_types[292]
+#define SWIGTYPE_p_unsigned_short swig_types[293]
+#define SWIGTYPE_p_value_type swig_types[294]
+static swig_type_info *swig_types[296];
+static swig_module_info swig_module = {swig_types, 295, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -5874,7 +5876,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
@@ -80423,6 +80425,270 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateToBinf__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  IAxis *arg2 = (IAxis *) 0 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IntensityDataFunctions_coordinateToBinf",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IAxis, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "2"" of type '" "IAxis const *""'"); 
+  }
+  arg2 = reinterpret_cast< IAxis * >(argp2);
+  result = (double)IntensityDataFunctions::coordinateToBinf(arg1,(IAxis const *)arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateFromBinf__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double arg1 ;
+  IAxis *arg2 = (IAxis *) 0 ;
+  double val1 ;
+  int ecode1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IntensityDataFunctions_coordinateFromBinf",&obj0,&obj1)) SWIG_fail;
+  ecode1 = SWIG_AsVal_double(obj0, &val1);
+  if (!SWIG_IsOK(ecode1)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "1"" of type '" "double""'");
+  } 
+  arg1 = static_cast< double >(val1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IAxis, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "2"" of type '" "IAxis const *""'"); 
+  }
+  arg2 = reinterpret_cast< IAxis * >(argp2);
+  result = (double)IntensityDataFunctions::coordinateFromBinf(arg1,(IAxis const *)arg2);
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateToBinf__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double *arg1 = 0 ;
+  double *arg2 = 0 ;
+  OutputData< double > *arg3 = (OutputData< double > *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:IntensityDataFunctions_coordinateToBinf",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "1"" of type '" "double &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "1"" of type '" "double &""'"); 
+  }
+  arg1 = reinterpret_cast< double * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_OutputDataT_double_t, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IntensityDataFunctions_coordinateToBinf" "', argument " "3"" of type '" "OutputData< double > const *""'"); 
+  }
+  arg3 = reinterpret_cast< OutputData< double > * >(argp3);
+  IntensityDataFunctions::coordinateToBinf(*arg1,*arg2,(OutputData< double > const *)arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateToBinf(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 3) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_IAxis, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_IntensityDataFunctions_coordinateToBinf__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_OutputDataT_double_t, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_IntensityDataFunctions_coordinateToBinf__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'IntensityDataFunctions_coordinateToBinf'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    IntensityDataFunctions::coordinateToBinf(double,IAxis const *)\n"
+    "    IntensityDataFunctions::coordinateToBinf(double &,double &,OutputData< double > const *)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateFromBinf__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  double *arg1 = 0 ;
+  double *arg2 = 0 ;
+  OutputData< double > *arg3 = (OutputData< double > *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:IntensityDataFunctions_coordinateFromBinf",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "1"" of type '" "double &""'"); 
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "1"" of type '" "double &""'"); 
+  }
+  arg1 = reinterpret_cast< double * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_double,  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "2"" of type '" "double &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "2"" of type '" "double &""'"); 
+  }
+  arg2 = reinterpret_cast< double * >(argp2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_OutputDataT_double_t, 0 |  0 );
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "IntensityDataFunctions_coordinateFromBinf" "', argument " "3"" of type '" "OutputData< double > const *""'"); 
+  }
+  arg3 = reinterpret_cast< OutputData< double > * >(argp3);
+  IntensityDataFunctions::coordinateFromBinf(*arg1,*arg2,(OutputData< double > const *)arg3);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IntensityDataFunctions_coordinateFromBinf(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 3) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    {
+      int res = SWIG_AsVal_double(argv[0], NULL);
+      _v = SWIG_CheckState(res);
+    }
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_IAxis, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_IntensityDataFunctions_coordinateFromBinf__SWIG_0(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_double, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_double, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(argv[2], &vptr, SWIGTYPE_p_OutputDataT_double_t, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_IntensityDataFunctions_coordinateFromBinf__SWIG_1(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'IntensityDataFunctions_coordinateFromBinf'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    IntensityDataFunctions::coordinateFromBinf(double,IAxis const *)\n"
+    "    IntensityDataFunctions::coordinateFromBinf(double &,double &,OutputData< double > const *)\n");
+  return 0;
+}
+
+
 SWIGINTERN PyObject *_wrap_new_IntensityDataFunctions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IntensityDataFunctions *result = 0 ;
@@ -99801,11 +100067,11 @@ SWIGINTERN PyObject *ThreadInfo_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_SampleBuilderFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SampleBuilderFactoryTemp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":new_SampleBuilderFactory")) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)":new_SampleBuilderFactoryTemp")) SWIG_fail;
   result = (IFactory< std::string,IMultiLayerBuilder > *)new IFactory< std::string,IMultiLayerBuilder >();
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, SWIG_POINTER_NEW |  0 );
   return resultobj;
@@ -99814,7 +100080,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_createItem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_createItem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   std::string *arg2 = 0 ;
@@ -99826,20 +100092,20 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_createItem(PyObject *SWIGUNUSEDP
   Swig::Director *director = 0;
   IMultiLayerBuilder *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:SampleBuilderFactory_createItem",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OO:SampleBuilderFactoryTemp_createItem",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_createItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_createItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactory_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactoryTemp_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -99862,7 +100128,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_registerItem__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   std::string *arg2 = 0 ;
@@ -99880,30 +100146,30 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem__SWIG_0(PyObject *S
   PyObject * obj3 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOOO:SampleBuilderFactory_registerItem",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SampleBuilderFactoryTemp_registerItem",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_registerItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
   {
     res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t,  0  | 0);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SampleBuilderFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'"); 
     }  
     if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'");
     } else {
       IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback * temp = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback * >(argp3);
       arg3 = *temp;
@@ -99914,10 +100180,10 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem__SWIG_0(PyObject *S
     std::string *ptr = (std::string *)0;
     res4 = SWIG_AsPtr_std_string(obj3, &ptr);
     if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SampleBuilderFactory_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     arg4 = ptr;
   }
@@ -99933,7 +100199,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_registerItem__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   std::string *arg2 = 0 ;
@@ -99948,30 +100214,30 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem__SWIG_1(PyObject *S
   PyObject * obj2 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:SampleBuilderFactory_registerItem",&obj0,&obj1,&obj2)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SampleBuilderFactoryTemp_registerItem",&obj0,&obj1,&obj2)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_registerItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
   {
     res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t,  0  | 0);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SampleBuilderFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'"); 
     }  
     if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback""'");
     } else {
       IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback * temp = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback * >(argp3);
       arg3 = *temp;
@@ -99988,7 +100254,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_registerItem(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
     0
@@ -100012,7 +100278,7 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem(PyObject *self, PyO
         int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t, 0);
         _v = SWIG_CheckState(res);
         if (_v) {
-          return _wrap_SampleBuilderFactory_registerItem__SWIG_1(self, args);
+          return _wrap_SampleBuilderFactoryTemp_registerItem__SWIG_1(self, args);
         }
       }
     }
@@ -100032,7 +100298,7 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem(PyObject *self, PyO
           int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0));
           _v = SWIG_CheckState(res);
           if (_v) {
-            return _wrap_SampleBuilderFactory_registerItem__SWIG_0(self, args);
+            return _wrap_SampleBuilderFactoryTemp_registerItem__SWIG_0(self, args);
           }
         }
       }
@@ -100040,7 +100306,7 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_registerItem(PyObject *self, PyO
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SampleBuilderFactory_registerItem'.\n"
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SampleBuilderFactoryTemp_registerItem'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    IFactory< std::string,IMultiLayerBuilder >::registerItem(std::string const &,IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback,std::string const &)\n"
     "    IFactory< std::string,IMultiLayerBuilder >::registerItem(std::string const &,IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback)\n");
@@ -100048,17 +100314,17 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SampleBuilderFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SampleBuilderFactoryTemp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_SampleBuilderFactory",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_SampleBuilderFactoryTemp",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SampleBuilderFactory" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SampleBuilderFactoryTemp" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   delete arg1;
@@ -100069,7 +100335,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_getNumberOfRegistered(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_getNumberOfRegistered(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   void *argp1 = 0 ;
@@ -100077,10 +100343,10 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_getNumberOfRegistered(PyObject *
   PyObject * obj0 = 0 ;
   size_t result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactory_getNumberOfRegistered",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactoryTemp_getNumberOfRegistered",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_getNumberOfRegistered" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_getNumberOfRegistered" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   result = ((IFactory< std::string,IMultiLayerBuilder > const *)arg1)->getNumberOfRegistered();
@@ -100091,7 +100357,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   void *argp1 = 0 ;
@@ -100099,10 +100365,10 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_begin(PyObject *SWIGUNUSEDPARM(s
   PyObject * obj0 = 0 ;
   SwigValueWrapper< std::map< std::string,std::string >::const_iterator > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactory_begin",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactoryTemp_begin",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_begin" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_begin" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   result = ((IFactory< std::string,IMultiLayerBuilder > const *)arg1)->begin();
@@ -100113,7 +100379,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SampleBuilderFactory_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SampleBuilderFactoryTemp_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,IMultiLayerBuilder > *arg1 = (IFactory< std::string,IMultiLayerBuilder > *) 0 ;
   void *argp1 = 0 ;
@@ -100121,10 +100387,10 @@ SWIGINTERN PyObject *_wrap_SampleBuilderFactory_end(PyObject *SWIGUNUSEDPARM(sel
   PyObject * obj0 = 0 ;
   SwigValueWrapper< std::map< std::string,std::string >::const_iterator > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactory_end",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SampleBuilderFactoryTemp_end",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_end" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactoryTemp_end" "', argument " "1"" of type '" "IFactory< std::string,IMultiLayerBuilder > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,IMultiLayerBuilder > * >(argp1);
   result = ((IFactory< std::string,IMultiLayerBuilder > const *)arg1)->end();
@@ -100135,18 +100401,97 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SampleBuilderFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SampleBuilderFactoryTemp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_new_SimulationFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_SampleBuilderFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SampleBuilderFactory *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_SampleBuilderFactory")) SWIG_fail;
+  result = (SampleBuilderFactory *)new SampleBuilderFactory();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SampleBuilderFactory, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SampleBuilderFactory_createSample(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SampleBuilderFactory *arg1 = (SampleBuilderFactory *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  MultiLayer *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:SampleBuilderFactory_createSample",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SampleBuilderFactory, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SampleBuilderFactory_createSample" "', argument " "1"" of type '" "SampleBuilderFactory *""'"); 
+  }
+  arg1 = reinterpret_cast< SampleBuilderFactory * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SampleBuilderFactory_createSample" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SampleBuilderFactory_createSample" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (MultiLayer *)(arg1)->createSample((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MultiLayer, 0 |  0 );
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SampleBuilderFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SampleBuilderFactory *arg1 = (SampleBuilderFactory *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_SampleBuilderFactory",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SampleBuilderFactory, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SampleBuilderFactory" "', argument " "1"" of type '" "SampleBuilderFactory *""'"); 
+  }
+  arg1 = reinterpret_cast< SampleBuilderFactory * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *SampleBuilderFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SampleBuilderFactory, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_SimulationFactoryTemp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":new_SimulationFactory")) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)":new_SimulationFactoryTemp")) SWIG_fail;
   result = (IFactory< std::string,GISASSimulation > *)new IFactory< std::string,GISASSimulation >();
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, SWIG_POINTER_NEW |  0 );
   return resultobj;
@@ -100155,7 +100500,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_createItem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_createItem(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   std::string *arg2 = 0 ;
@@ -100166,20 +100511,20 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_createItem(PyObject *SWIGUNUSEDPARM
   PyObject * obj1 = 0 ;
   GISASSimulation *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:SimulationFactory_createItem",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OO:SimulationFactoryTemp_createItem",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_createItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_createItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactory_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactoryTemp_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_createItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -100193,7 +100538,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_registerItem__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   std::string *arg2 = 0 ;
@@ -100211,30 +100556,30 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem__SWIG_0(PyObject *SWIG
   PyObject * obj3 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOOO:SimulationFactory_registerItem",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:SimulationFactoryTemp_registerItem",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_registerItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
   {
     res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t,  0  | 0);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SimulationFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'"); 
     }  
     if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'");
     } else {
       IFactory< std::string,GISASSimulation >::CreateItemCallback * temp = reinterpret_cast< IFactory< std::string,GISASSimulation >::CreateItemCallback * >(argp3);
       arg3 = *temp;
@@ -100245,10 +100590,10 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem__SWIG_0(PyObject *SWIG
     std::string *ptr = (std::string *)0;
     res4 = SWIG_AsPtr_std_string(obj3, &ptr);
     if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SimulationFactory_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_registerItem" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     arg4 = ptr;
   }
@@ -100264,7 +100609,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_registerItem__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   std::string *arg2 = 0 ;
@@ -100279,30 +100624,30 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem__SWIG_1(PyObject *SWIG
   PyObject * obj2 = 0 ;
   bool result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:SimulationFactory_registerItem",&obj0,&obj1,&obj2)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOO:SimulationFactoryTemp_registerItem",&obj0,&obj1,&obj2)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_registerItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_registerItem" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
   {
     res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t,  0  | 0);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SimulationFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "SimulationFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'"); 
     }  
     if (!argp3) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactory_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "SimulationFactoryTemp_registerItem" "', argument " "3"" of type '" "IFactory< std::string,GISASSimulation >::CreateItemCallback""'");
     } else {
       IFactory< std::string,GISASSimulation >::CreateItemCallback * temp = reinterpret_cast< IFactory< std::string,GISASSimulation >::CreateItemCallback * >(argp3);
       arg3 = *temp;
@@ -100319,7 +100664,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_registerItem(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
     0
@@ -100343,7 +100688,7 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem(PyObject *self, PyObje
         int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t, 0);
         _v = SWIG_CheckState(res);
         if (_v) {
-          return _wrap_SimulationFactory_registerItem__SWIG_1(self, args);
+          return _wrap_SimulationFactoryTemp_registerItem__SWIG_1(self, args);
         }
       }
     }
@@ -100363,7 +100708,7 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem(PyObject *self, PyObje
           int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0));
           _v = SWIG_CheckState(res);
           if (_v) {
-            return _wrap_SimulationFactory_registerItem__SWIG_0(self, args);
+            return _wrap_SimulationFactoryTemp_registerItem__SWIG_0(self, args);
           }
         }
       }
@@ -100371,7 +100716,7 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_registerItem(PyObject *self, PyObje
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SimulationFactory_registerItem'.\n"
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'SimulationFactoryTemp_registerItem'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    IFactory< std::string,GISASSimulation >::registerItem(std::string const &,IFactory< std::string,GISASSimulation >::CreateItemCallback,std::string const &)\n"
     "    IFactory< std::string,GISASSimulation >::registerItem(std::string const &,IFactory< std::string,GISASSimulation >::CreateItemCallback)\n");
@@ -100379,17 +100724,17 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_SimulationFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_SimulationFactoryTemp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_SimulationFactory",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_SimulationFactoryTemp",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SimulationFactory" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SimulationFactoryTemp" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   delete arg1;
@@ -100400,7 +100745,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_getNumberOfRegistered(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_getNumberOfRegistered(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   void *argp1 = 0 ;
@@ -100408,10 +100753,10 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_getNumberOfRegistered(PyObject *SWI
   PyObject * obj0 = 0 ;
   size_t result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactory_getNumberOfRegistered",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactoryTemp_getNumberOfRegistered",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_getNumberOfRegistered" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_getNumberOfRegistered" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   result = ((IFactory< std::string,GISASSimulation > const *)arg1)->getNumberOfRegistered();
@@ -100422,7 +100767,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_begin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   void *argp1 = 0 ;
@@ -100430,10 +100775,10 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_begin(PyObject *SWIGUNUSEDPARM(self
   PyObject * obj0 = 0 ;
   SwigValueWrapper< std::map< std::string,std::string >::const_iterator > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactory_begin",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactoryTemp_begin",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_begin" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_begin" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   result = ((IFactory< std::string,GISASSimulation > const *)arg1)->begin();
@@ -100444,7 +100789,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationFactory_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationFactoryTemp_end(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFactory< std::string,GISASSimulation > *arg1 = (IFactory< std::string,GISASSimulation > *) 0 ;
   void *argp1 = 0 ;
@@ -100452,10 +100797,10 @@ SWIGINTERN PyObject *_wrap_SimulationFactory_end(PyObject *SWIGUNUSEDPARM(self),
   PyObject * obj0 = 0 ;
   SwigValueWrapper< std::map< std::string,std::string >::const_iterator > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactory_end",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:SimulationFactoryTemp_end",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactory_end" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationFactoryTemp_end" "', argument " "1"" of type '" "IFactory< std::string,GISASSimulation > const *""'"); 
   }
   arg1 = reinterpret_cast< IFactory< std::string,GISASSimulation > * >(argp1);
   result = ((IFactory< std::string,GISASSimulation > const *)arg1)->end();
@@ -100466,13 +100811,54 @@ fail:
 }
 
 
-SWIGINTERN PyObject *SimulationFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *SimulationFactoryTemp_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IFactoryT_std__string_GISASSimulation_t, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *_wrap_new_SimulationFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SimulationFactory *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_SimulationFactory")) SWIG_fail;
+  result = (SimulationFactory *)new SimulationFactory();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimulationFactory, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_SimulationFactory(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  SimulationFactory *arg1 = (SimulationFactory *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_SimulationFactory",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_SimulationFactory, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_SimulationFactory" "', argument " "1"" of type '" "SimulationFactory *""'"); 
+  }
+  arg1 = reinterpret_cast< SimulationFactory * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *SimulationFactory_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_SimulationFactory, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
 static PyMethodDef SwigMethods[] = {
 	 { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL},
 	 { (char *)"delete_SwigPyIterator", _wrap_delete_SwigPyIterator, METH_VARARGS, (char *)"delete_SwigPyIterator(SwigPyIterator self)"},
@@ -109745,6 +110131,14 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"IntensityDataFunctions_createRelativeDifferenceData", _wrap_IntensityDataFunctions_createRelativeDifferenceData, METH_VARARGS, (char *)"IntensityDataFunctions_createRelativeDifferenceData(IntensityData data, IntensityData reference) -> IntensityData"},
 	 { (char *)"IntensityDataFunctions_createClippedDataSet", _wrap_IntensityDataFunctions_createClippedDataSet, METH_VARARGS, (char *)"IntensityDataFunctions_createClippedDataSet(IntensityData origin, double x1, double y1, double x2, double y2) -> IntensityData"},
 	 { (char *)"IntensityDataFunctions_applyDetectorResolution", _wrap_IntensityDataFunctions_applyDetectorResolution, METH_VARARGS, (char *)"IntensityDataFunctions_applyDetectorResolution(IntensityData origin, IResolutionFunction2D resolution_function) -> IntensityData"},
+	 { (char *)"IntensityDataFunctions_coordinateToBinf", _wrap_IntensityDataFunctions_coordinateToBinf, METH_VARARGS, (char *)"\n"
+		"coordinateToBinf(double coordinate, IAxis axis) -> double\n"
+		"IntensityDataFunctions_coordinateToBinf(double & x, double & y, IntensityData data)\n"
+		""},
+	 { (char *)"IntensityDataFunctions_coordinateFromBinf", _wrap_IntensityDataFunctions_coordinateFromBinf, METH_VARARGS, (char *)"\n"
+		"coordinateFromBinf(double value, IAxis axis) -> double\n"
+		"IntensityDataFunctions_coordinateFromBinf(double & x, double & y, IntensityData data)\n"
+		""},
 	 { (char *)"new_IntensityDataFunctions", _wrap_new_IntensityDataFunctions, METH_VARARGS, (char *)"\n"
 		"new_IntensityDataFunctions() -> IntensityDataFunctions\n"
 		"\n"
@@ -112928,105 +113322,129 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"ThreadInfo_current_batch_get", _wrap_ThreadInfo_current_batch_get, METH_VARARGS, (char *)"ThreadInfo_current_batch_get(ThreadInfo self) -> int"},
 	 { (char *)"delete_ThreadInfo", _wrap_delete_ThreadInfo, METH_VARARGS, (char *)"delete_ThreadInfo(ThreadInfo self)"},
 	 { (char *)"ThreadInfo_swigregister", ThreadInfo_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_SampleBuilderFactory", _wrap_new_SampleBuilderFactory, METH_VARARGS, (char *)"\n"
-		"new_SampleBuilderFactory() -> SampleBuilderFactory\n"
+	 { (char *)"new_SampleBuilderFactoryTemp", _wrap_new_SampleBuilderFactoryTemp, METH_VARARGS, (char *)"\n"
+		"new_SampleBuilderFactoryTemp() -> SampleBuilderFactoryTemp\n"
 		"\n"
 		"IFactory< Key, AbstractProduct >::IFactory()\n"
 		"\n"
 		""},
-	 { (char *)"SampleBuilderFactory_createItem", _wrap_SampleBuilderFactory_createItem, METH_VARARGS, (char *)"\n"
-		"SampleBuilderFactory_createItem(SampleBuilderFactory self, std::string const & item_key) -> IMultiLayerBuilder\n"
+	 { (char *)"SampleBuilderFactoryTemp_createItem", _wrap_SampleBuilderFactoryTemp_createItem, METH_VARARGS, (char *)"\n"
+		"SampleBuilderFactoryTemp_createItem(SampleBuilderFactoryTemp self, std::string const & item_key) -> IMultiLayerBuilder\n"
 		"\n"
 		"AbstractProduct* IFactory< Key, AbstractProduct >::createItem(const Key &item_key)\n"
 		"\n"
 		"Creates object by calling creation function corresponded to given identifier. \n"
 		"\n"
 		""},
-	 { (char *)"SampleBuilderFactory_registerItem", _wrap_SampleBuilderFactory_registerItem, METH_VARARGS, (char *)"\n"
+	 { (char *)"SampleBuilderFactoryTemp_registerItem", _wrap_SampleBuilderFactoryTemp_registerItem, METH_VARARGS, (char *)"\n"
 		"registerItem(std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool\n"
-		"SampleBuilderFactory_registerItem(SampleBuilderFactory self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn) -> bool\n"
+		"SampleBuilderFactoryTemp_registerItem(SampleBuilderFactoryTemp self, std::string const & item_key, IFactory< std::string,IMultiLayerBuilder >::CreateItemCallback CreateFn) -> bool\n"
 		"\n"
 		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription=\"\")\n"
 		"\n"
 		"Registers object's creation function and store object description. \n"
 		"\n"
 		""},
-	 { (char *)"delete_SampleBuilderFactory", _wrap_delete_SampleBuilderFactory, METH_VARARGS, (char *)"\n"
-		"delete_SampleBuilderFactory(SampleBuilderFactory self)\n"
+	 { (char *)"delete_SampleBuilderFactoryTemp", _wrap_delete_SampleBuilderFactoryTemp, METH_VARARGS, (char *)"\n"
+		"delete_SampleBuilderFactoryTemp(SampleBuilderFactoryTemp self)\n"
 		"\n"
 		"IFactory< Key, AbstractProduct >::~IFactory()\n"
 		"\n"
 		""},
-	 { (char *)"SampleBuilderFactory_getNumberOfRegistered", _wrap_SampleBuilderFactory_getNumberOfRegistered, METH_VARARGS, (char *)"\n"
-		"SampleBuilderFactory_getNumberOfRegistered(SampleBuilderFactory self) -> size_t\n"
+	 { (char *)"SampleBuilderFactoryTemp_getNumberOfRegistered", _wrap_SampleBuilderFactoryTemp_getNumberOfRegistered, METH_VARARGS, (char *)"\n"
+		"SampleBuilderFactoryTemp_getNumberOfRegistered(SampleBuilderFactoryTemp self) -> size_t\n"
 		"\n"
 		"size_t IFactory< Key, AbstractProduct >::getNumberOfRegistered() const\n"
 		"\n"
 		"Returns number of registered objects. \n"
 		"\n"
 		""},
-	 { (char *)"SampleBuilderFactory_begin", _wrap_SampleBuilderFactory_begin, METH_VARARGS, (char *)"\n"
-		"SampleBuilderFactory_begin(SampleBuilderFactory self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
+	 { (char *)"SampleBuilderFactoryTemp_begin", _wrap_SampleBuilderFactoryTemp_begin, METH_VARARGS, (char *)"\n"
+		"SampleBuilderFactoryTemp_begin(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
 		"\n"
 		"const_iterator IFactory< Key, AbstractProduct >::begin() const \n"
 		"\n"
 		""},
-	 { (char *)"SampleBuilderFactory_end", _wrap_SampleBuilderFactory_end, METH_VARARGS, (char *)"\n"
-		"SampleBuilderFactory_end(SampleBuilderFactory self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
+	 { (char *)"SampleBuilderFactoryTemp_end", _wrap_SampleBuilderFactoryTemp_end, METH_VARARGS, (char *)"\n"
+		"SampleBuilderFactoryTemp_end(SampleBuilderFactoryTemp self) -> IFactory< std::string,IMultiLayerBuilder >::const_iterator\n"
 		"\n"
 		"const_iterator IFactory< Key, AbstractProduct >::end() const \n"
 		"\n"
 		""},
+	 { (char *)"SampleBuilderFactoryTemp_swigregister", SampleBuilderFactoryTemp_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_SampleBuilderFactory", _wrap_new_SampleBuilderFactory, METH_VARARGS, (char *)"\n"
+		"new_SampleBuilderFactory() -> SampleBuilderFactory\n"
+		"\n"
+		"SampleBuilderFactory::SampleBuilderFactory()\n"
+		"\n"
+		""},
+	 { (char *)"SampleBuilderFactory_createSample", _wrap_SampleBuilderFactory_createSample, METH_VARARGS, (char *)"\n"
+		"SampleBuilderFactory_createSample(SampleBuilderFactory self, std::string const & name) -> MultiLayer\n"
+		"\n"
+		"MultiLayer * SampleBuilderFactory::createSample(const std::string &name)\n"
+		"\n"
+		"Retrieves a SampleBuilder from the registry, does the build, and returns the result. \n"
+		"\n"
+		""},
+	 { (char *)"delete_SampleBuilderFactory", _wrap_delete_SampleBuilderFactory, METH_VARARGS, (char *)"delete_SampleBuilderFactory(SampleBuilderFactory self)"},
 	 { (char *)"SampleBuilderFactory_swigregister", SampleBuilderFactory_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_SimulationFactory", _wrap_new_SimulationFactory, METH_VARARGS, (char *)"\n"
-		"new_SimulationFactory() -> SimulationFactory\n"
+	 { (char *)"new_SimulationFactoryTemp", _wrap_new_SimulationFactoryTemp, METH_VARARGS, (char *)"\n"
+		"new_SimulationFactoryTemp() -> SimulationFactoryTemp\n"
 		"\n"
 		"IFactory< Key, AbstractProduct >::IFactory()\n"
 		"\n"
 		""},
-	 { (char *)"SimulationFactory_createItem", _wrap_SimulationFactory_createItem, METH_VARARGS, (char *)"\n"
-		"SimulationFactory_createItem(SimulationFactory self, std::string const & item_key) -> GISASSimulation\n"
+	 { (char *)"SimulationFactoryTemp_createItem", _wrap_SimulationFactoryTemp_createItem, METH_VARARGS, (char *)"\n"
+		"SimulationFactoryTemp_createItem(SimulationFactoryTemp self, std::string const & item_key) -> GISASSimulation\n"
 		"\n"
 		"AbstractProduct* IFactory< Key, AbstractProduct >::createItem(const Key &item_key)\n"
 		"\n"
 		"Creates object by calling creation function corresponded to given identifier. \n"
 		"\n"
 		""},
-	 { (char *)"SimulationFactory_registerItem", _wrap_SimulationFactory_registerItem, METH_VARARGS, (char *)"\n"
+	 { (char *)"SimulationFactoryTemp_registerItem", _wrap_SimulationFactoryTemp_registerItem, METH_VARARGS, (char *)"\n"
 		"registerItem(std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn, std::string const & itemDescription) -> bool\n"
-		"SimulationFactory_registerItem(SimulationFactory self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool\n"
+		"SimulationFactoryTemp_registerItem(SimulationFactoryTemp self, std::string const & item_key, IFactory< std::string,GISASSimulation >::CreateItemCallback CreateFn) -> bool\n"
 		"\n"
 		"bool IFactory< Key, AbstractProduct >::registerItem(const Key &item_key, CreateItemCallback CreateFn, const std::string &itemDescription=\"\")\n"
 		"\n"
 		"Registers object's creation function and store object description. \n"
 		"\n"
 		""},
-	 { (char *)"delete_SimulationFactory", _wrap_delete_SimulationFactory, METH_VARARGS, (char *)"\n"
-		"delete_SimulationFactory(SimulationFactory self)\n"
+	 { (char *)"delete_SimulationFactoryTemp", _wrap_delete_SimulationFactoryTemp, METH_VARARGS, (char *)"\n"
+		"delete_SimulationFactoryTemp(SimulationFactoryTemp self)\n"
 		"\n"
 		"IFactory< Key, AbstractProduct >::~IFactory()\n"
 		"\n"
 		""},
-	 { (char *)"SimulationFactory_getNumberOfRegistered", _wrap_SimulationFactory_getNumberOfRegistered, METH_VARARGS, (char *)"\n"
-		"SimulationFactory_getNumberOfRegistered(SimulationFactory self) -> size_t\n"
+	 { (char *)"SimulationFactoryTemp_getNumberOfRegistered", _wrap_SimulationFactoryTemp_getNumberOfRegistered, METH_VARARGS, (char *)"\n"
+		"SimulationFactoryTemp_getNumberOfRegistered(SimulationFactoryTemp self) -> size_t\n"
 		"\n"
 		"size_t IFactory< Key, AbstractProduct >::getNumberOfRegistered() const\n"
 		"\n"
 		"Returns number of registered objects. \n"
 		"\n"
 		""},
-	 { (char *)"SimulationFactory_begin", _wrap_SimulationFactory_begin, METH_VARARGS, (char *)"\n"
-		"SimulationFactory_begin(SimulationFactory self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
+	 { (char *)"SimulationFactoryTemp_begin", _wrap_SimulationFactoryTemp_begin, METH_VARARGS, (char *)"\n"
+		"SimulationFactoryTemp_begin(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
 		"\n"
 		"const_iterator IFactory< Key, AbstractProduct >::begin() const \n"
 		"\n"
 		""},
-	 { (char *)"SimulationFactory_end", _wrap_SimulationFactory_end, METH_VARARGS, (char *)"\n"
-		"SimulationFactory_end(SimulationFactory self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
+	 { (char *)"SimulationFactoryTemp_end", _wrap_SimulationFactoryTemp_end, METH_VARARGS, (char *)"\n"
+		"SimulationFactoryTemp_end(SimulationFactoryTemp self) -> IFactory< std::string,GISASSimulation >::const_iterator\n"
 		"\n"
 		"const_iterator IFactory< Key, AbstractProduct >::end() const \n"
 		"\n"
 		""},
+	 { (char *)"SimulationFactoryTemp_swigregister", SimulationFactoryTemp_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_SimulationFactory", _wrap_new_SimulationFactory, METH_VARARGS, (char *)"\n"
+		"new_SimulationFactory() -> SimulationFactory\n"
+		"\n"
+		"SimulationFactory::SimulationFactory()\n"
+		"\n"
+		""},
+	 { (char *)"delete_SimulationFactory", _wrap_delete_SimulationFactory, METH_VARARGS, (char *)"delete_SimulationFactory(SimulationFactory self)"},
 	 { (char *)"SimulationFactory_swigregister", SimulationFactory_swigregister, METH_VARARGS, NULL},
 	 { NULL, NULL, 0, NULL }
 };
@@ -113082,6 +113500,9 @@ static void *_p_FormFactorPrism3To_p_FormFactorPolygonalPrism(void *x, int *SWIG
 static void *_p_FormFactorPrism6To_p_FormFactorPolygonalPrism(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((FormFactorPolygonalPrism *)  ((FormFactorPrism6 *) x));
 }
+static void *_p_SimulationFactoryTo_p_IFactoryT_std__string_GISASSimulation_t(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFactory< std::string,GISASSimulation > *)  ((SimulationFactory *) x));
+}
 static void *_p_FormFactorPrism6To_p_IFormFactorBorn(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactorBorn *) (FormFactorPolygonalPrism *) ((FormFactorPrism6 *) x));
 }
@@ -114706,6 +115127,9 @@ static void *_p_FormFactorLongRipple2GaussTo_p_IFormFactor(void *x, int *SWIGUNU
 static void *_p_FormFactorGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactor *) (IFormFactorBorn *) ((FormFactorGauss *) x));
 }
+static void *_p_SampleBuilderFactoryTo_p_IFactoryT_std__string_IMultiLayerBuilder_t(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFactory< std::string,IMultiLayerBuilder > *)  ((SampleBuilderFactory *) x));
+}
 static void *_p_FormFactorPrism6To_p_ISample(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISample *) (IFormFactor *)(IFormFactorBorn *)(FormFactorPolygonalPrism *) ((FormFactorPrism6 *) x));
 }
@@ -115307,8 +115731,10 @@ static swig_type_info _swigt__p_RotationX = {"_p_RotationX", "RotationX *", 0, 0
 static swig_type_info _swigt__p_RotationY = {"_p_RotationY", "RotationY *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_RotationZ = {"_p_RotationZ", "RotationZ *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SafePointerVectorT_IParticle_const_t = {"_p_SafePointerVectorT_IParticle_const_t", "SafePointerVector< IParticle const > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SampleBuilderFactory = {"_p_SampleBuilderFactory", "SampleBuilderFactory *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SimpleSelectionRule = {"_p_SimpleSelectionRule", "SimpleSelectionRule *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Simulation = {"_p_Simulation", "Simulation *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_SimulationFactory = {"_p_SimulationFactory", "SimulationFactory *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SimulationOptions = {"_p_SimulationOptions", "SimulationOptions *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SpecularSimulation = {"_p_SpecularSimulation", "SpecularSimulation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_SphericalDetector = {"_p_SphericalDetector", "SphericalDetector *", 0, 0, (void*)0, 0};
@@ -115602,8 +116028,10 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_RotationY,
   &_swigt__p_RotationZ,
   &_swigt__p_SafePointerVectorT_IParticle_const_t,
+  &_swigt__p_SampleBuilderFactory,
   &_swigt__p_SimpleSelectionRule,
   &_swigt__p_Simulation,
+  &_swigt__p_SimulationFactory,
   &_swigt__p_SimulationOptions,
   &_swigt__p_SpecularSimulation,
   &_swigt__p_SphericalDetector,
@@ -115810,8 +116238,8 @@ static swig_cast_info _swigc__p_IFTDecayFunction1D[] = {  {&_swigt__p_FTDecayFun
 static swig_cast_info _swigc__p_IFTDecayFunction2D[] = {  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IFTDecayFunction2D, 0, 0},  {&_swigt__p_IFTDecayFunction2D, 0, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IFTDecayFunction2D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDistribution1D[] = {  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_IFTDistribution1D, 0, 0},  {&_swigt__p_IFTDistribution1D, 0, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_IFTDistribution1D, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFTDistribution2D[] = {  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_IFTDistribution2D, 0, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_IFTDistribution2D, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_IFTDistribution2D, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IFactoryT_std__string_GISASSimulation_t[] = {  {&_swigt__p_IFactoryT_std__string_GISASSimulation_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IFactoryT_std__string_IMultiLayerBuilder_t[] = {  {&_swigt__p_IFactoryT_std__string_IMultiLayerBuilder_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IFactoryT_std__string_GISASSimulation_t[] = {  {&_swigt__p_SimulationFactory, _p_SimulationFactoryTo_p_IFactoryT_std__string_GISASSimulation_t, 0, 0},  {&_swigt__p_IFactoryT_std__string_GISASSimulation_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IFactoryT_std__string_IMultiLayerBuilder_t[] = {  {&_swigt__p_IFactoryT_std__string_IMultiLayerBuilder_t, 0, 0, 0},  {&_swigt__p_SampleBuilderFactory, _p_SampleBuilderFactoryTo_p_IFactoryT_std__string_IMultiLayerBuilder_t, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFitObserver[] = {  {&_swigt__p_IFitObserver, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFitParameter[] = {  {&_swigt__p_IFitParameter, 0, 0, 0},  {&_swigt__p_FitParameter, _p_FitParameterTo_p_IFitParameter, 0, 0},  {&_swigt__p_FitParameterLinked, _p_FitParameterLinkedTo_p_IFitParameter, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFitStrategy[] = {  {&_swigt__p_IFitStrategy, 0, 0, 0},  {&_swigt__p_AdjustMinimizerStrategy, _p_AdjustMinimizerStrategyTo_p_IFitStrategy, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_IFitStrategy, 0, 0},{0, 0, 0, 0}};
@@ -115897,8 +116325,10 @@ static swig_cast_info _swigc__p_RotationX[] = {  {&_swigt__p_RotationX, 0, 0, 0}
 static swig_cast_info _swigc__p_RotationY[] = {  {&_swigt__p_RotationY, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_RotationZ[] = {  {&_swigt__p_RotationZ, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SafePointerVectorT_IParticle_const_t[] = {  {&_swigt__p_SafePointerVectorT_IParticle_const_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SampleBuilderFactory[] = {  {&_swigt__p_SampleBuilderFactory, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SimpleSelectionRule[] = {  {&_swigt__p_SimpleSelectionRule, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Simulation[] = {  {&_swigt__p_Simulation, 0, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_Simulation, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_Simulation, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_SimulationFactory[] = {  {&_swigt__p_SimulationFactory, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SimulationOptions[] = {  {&_swigt__p_SimulationOptions, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SpecularSimulation[] = {  {&_swigt__p_SpecularSimulation, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_SphericalDetector[] = {  {&_swigt__p_SphericalDetector, 0, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_SphericalDetector, 0, 0},{0, 0, 0, 0}};
@@ -116192,8 +116622,10 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_RotationY,
   _swigc__p_RotationZ,
   _swigc__p_SafePointerVectorT_IParticle_const_t,
+  _swigc__p_SampleBuilderFactory,
   _swigc__p_SimpleSelectionRule,
   _swigc__p_Simulation,
+  _swigc__p_SimulationFactory,
   _swigc__p_SimulationOptions,
   _swigc__p_SpecularSimulation,
   _swigc__p_SphericalDetector,
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 7a13fe3e65c56630bdd898b91f569d9132cbaba6..537e535c25b861134e3681ea11ecc411e5c22366 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -5627,7 +5627,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/dev-tools/log/perf_history.txt b/dev-tools/log/perf_history.txt
index 78edef7fc6dba20cd358fb07a96869d6e745782a..33ff64835f69f235a3b3a5587c8b3fbf5780d322 100644
--- a/dev-tools/log/perf_history.txt
+++ b/dev-tools/log/perf_history.txt
@@ -502,3 +502,7 @@
 | date                | hostname  | sysinfo      | python | total cpu | total wall | MultiLayer | CylindersInDWBA | RotatedPyramids | CoreShell | SquareLattice | RadialParaCrystal | HexParaCrystal | SSCA   | Mesocrystal | PolMagCyl | Custom FF |
 | 2016-05-25 12:50:59 | jcnsopc22 | Linux x86_64 | 2.7    | 126.2680  | 19.0747    | 2.9620     | 0.7566          | 3.5780          | 0.5746    | 2.2319        | 0.7519            | 2.6683         | 1.0811 | 1.7840      | 1.8264    | 0.8599    |
 
+
+| date                | hostname | sysinfo      | python | total cpu | total wall | MultiLayer | CylindersInDWBA | RotatedPyramids | CoreShell | SquareLattice | RadialParaCrystal | HexParaCrystal | SSCA   | Mesocrystal | PolMagCyl | Custom FF |
+| 2016-10-12 14:58:56 | scgsun   | Linux x86_64 | 2.7    | 121.8000  | 18.9031    | 2.8314     | 0.6853          | 3.3220          | 0.5178    | 2.2989        | 0.7084            | 3.1807         | 1.0054 | 1.7599      | 1.7037    | 0.8896    |
+| 2016-10-12 15:00:12 | scgsun   | Linux x86_64 | 2.7    | 121.7560  | 19.1301    | 2.9637     | 0.6960          | 3.3558          | 0.5273    | 2.3114        | 0.7187            | 3.1900         | 1.0233 | 1.7531      | 1.7332    | 0.8575    |