diff --git a/Core/Algorithms/FitElement.h b/Core/Algorithms/FitElement.h
index 7da5670fa611be04e93f21f8900b66b8917ebd42..b95609c39bf3c4b2a15ad01f5a427ca758ee4247 100644
--- a/Core/Algorithms/FitElement.h
+++ b/Core/Algorithms/FitElement.h
@@ -21,7 +21,7 @@
 
 //! @class FitElement
 //! @ingroup fitting_internal
-//! @brief Data stucture containing real data and simulation results for single detector cell.
+//! @brief Measured ("real") and simulated scattering intensity value for one detector cell.
 //! Used for chi2/residual calculations.
 
 class BA_CORE_API_ FitElement
@@ -33,16 +33,11 @@ public:
     FitElement &operator=(const FitElement &other);
 
     size_t getIndex() const;
-
     double getSimulValue() const;
-
     double getRealValue() const;
-
     double getWeight() const;
-
     double getSquaredDifference() const;
     void setSquaredDifference(double value);
-
     double getResidual() const;
     void setResidual(double value);
 
@@ -98,4 +93,3 @@ inline void FitElement::setResidual(double value)
 }
 
 #endif
-
diff --git a/Core/PythonAPI/libBornAgainCore.py b/Core/PythonAPI/libBornAgainCore.py
index 2fb19d95c21776303f75a2a2eb77ba1def38b6eb..ae95e45d2679a9f5da5f5117f773c73002e58e10 100644
--- a/Core/PythonAPI/libBornAgainCore.py
+++ b/Core/PythonAPI/libBornAgainCore.py
@@ -21369,8 +21369,6 @@ class RealParameterWrapper(_object):
             self.this.append(this)
         except:
             self.this = this
-    __swig_destroy__ = _libBornAgainCore.delete_RealParameterWrapper
-    __del__ = lambda self: None
 
     def setValue(self, value):
         """
@@ -21439,6 +21437,8 @@ class RealParameterWrapper(_object):
         """__ne__(RealParameterWrapper self, RealParameterWrapper other) -> bool"""
         return _libBornAgainCore.RealParameterWrapper___ne__(self, other)
 
+    __swig_destroy__ = _libBornAgainCore.delete_RealParameterWrapper
+    __del__ = lambda self: None
 RealParameterWrapper_swigregister = _libBornAgainCore.RealParameterWrapper_swigregister
 RealParameterWrapper_swigregister(RealParameterWrapper)
 
diff --git a/Core/PythonAPI/libBornAgainCore_wrap.cxx b/Core/PythonAPI/libBornAgainCore_wrap.cxx
index 6e3a2d1c9e6936ee4bb0d94d55471a427945d8bb..33079209033d6706fe32f83f6eed042327ebcbe7 100644
--- a/Core/PythonAPI/libBornAgainCore_wrap.cxx
+++ b/Core/PythonAPI/libBornAgainCore_wrap.cxx
@@ -86581,27 +86581,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_RealParameterWrapper(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  RealParameterWrapper *arg1 = (RealParameterWrapper *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_RealParameterWrapper",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealParameterWrapper, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_RealParameterWrapper" "', argument " "1"" of type '" "RealParameterWrapper *""'"); 
-  }
-  arg1 = reinterpret_cast< RealParameterWrapper * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_RealParameterWrapper_setValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   RealParameterWrapper *arg1 = (RealParameterWrapper *) 0 ;
@@ -86788,6 +86767,27 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_delete_RealParameterWrapper(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  RealParameterWrapper *arg1 = (RealParameterWrapper *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_RealParameterWrapper",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_RealParameterWrapper, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_RealParameterWrapper" "', argument " "1"" of type '" "RealParameterWrapper *""'"); 
+  }
+  arg1 = reinterpret_cast< RealParameterWrapper * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *RealParameterWrapper_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
@@ -101299,12 +101299,6 @@ static PyMethodDef SwigMethods[] = {
 		"RealParameterWrapper::RealParameterWrapper(const RealParameterWrapper &other)\n"
 		"\n"
 		""},
-	 { (char *)"delete_RealParameterWrapper", _wrap_delete_RealParameterWrapper, METH_VARARGS, (char *)"\n"
-		"delete_RealParameterWrapper(RealParameterWrapper self)\n"
-		"\n"
-		"RealParameterWrapper::~RealParameterWrapper()\n"
-		"\n"
-		""},
 	 { (char *)"RealParameterWrapper_setValue", _wrap_RealParameterWrapper_setValue, METH_VARARGS, (char *)"\n"
 		"RealParameterWrapper_setValue(RealParameterWrapper self, double value) -> bool\n"
 		"\n"
@@ -101345,6 +101339,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { (char *)"RealParameterWrapper___eq__", _wrap_RealParameterWrapper___eq__, METH_VARARGS, (char *)"RealParameterWrapper___eq__(RealParameterWrapper self, RealParameterWrapper other) -> bool"},
 	 { (char *)"RealParameterWrapper___ne__", _wrap_RealParameterWrapper___ne__, METH_VARARGS, (char *)"RealParameterWrapper___ne__(RealParameterWrapper self, RealParameterWrapper other) -> bool"},
+	 { (char *)"delete_RealParameterWrapper", _wrap_delete_RealParameterWrapper, METH_VARARGS, (char *)"\n"
+		"delete_RealParameterWrapper(RealParameterWrapper self)\n"
+		"\n"
+		"RealParameterWrapper::~RealParameterWrapper()\n"
+		"\n"
+		""},
 	 { (char *)"RealParameterWrapper_swigregister", RealParameterWrapper_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_Rectangle", _wrap_new_Rectangle, METH_VARARGS, (char *)"\n"
 		"new_Rectangle(double xlow, double ylow, double xup, double yup) -> Rectangle\n"
diff --git a/Core/Tools/AttLimits.h b/Core/Tools/AttLimits.h
index 4b38f888487cf88c8c554be6a5b96fb08cf3452d..713ead8449b1e9ac6910ad9733f3017b0813189b 100644
--- a/Core/Tools/AttLimits.h
+++ b/Core/Tools/AttLimits.h
@@ -19,12 +19,11 @@
 #include "WinDllMacros.h"
 #include "Numeric.h"
 #include <iostream>
-#include <iomanip>
 
 
 //! @class AttLimits
 //! @ingroup fitting
-//! @brief Limits for fit parameters
+//! @brief Attributes and limits for a fit parameter. Currently, the only attribute is fixed/free.
 
 class BA_CORE_API_ AttLimits
 {
@@ -118,22 +117,7 @@ class BA_CORE_API_ AttLimits
     double m_lower_limit; //! minimum allowed value
     double m_upper_limit; //! maximum allowed value
 
-    //! Prints class
-    void print(std::ostream& ostr) const
-    {
-        if(isFixed()) {
-            ostr << "fixed";
-        }else if(!hasLowerLimit() && !hasUpperLimit() ) {
-            ostr << "free";
-        } else if(hasLowerLimit() && !hasUpperLimit()) {
-            ostr << "lim("  << std::fixed <<std::setprecision(2) << m_lower_limit << ",)";
-        }else if(hasUpperLimit() && !hasLowerLimit()) {
-            ostr << "lim(," << std::fixed <<std::setprecision(2) << m_upper_limit << ",)";
-        }else if(hasLowerAndUpperLimits()) {
-            ostr << "lim(" << std::fixed <<std::setprecision(2) << m_lower_limit << "," << std::fixed <<std::setprecision(2) << m_upper_limit << ")";
-
-        }
-    }
+    void print(std::ostream& ostr) const;
 };
 
 
@@ -158,7 +142,4 @@ inline bool AttLimits::operator!=(const AttLimits &other) const
     return !(*this == other);
 }
 
-
 #endif // LIMITS_H
-
-
diff --git a/Core/Tools/IObserver.cpp b/Core/Tools/IObserver.cpp
index dd0df25641278543f9a8dabf8f6a40a79edb8afe..0c53acf942a6f16bb201dfb00354970903e71aa8 100644
--- a/Core/Tools/IObserver.cpp
+++ b/Core/Tools/IObserver.cpp
@@ -26,5 +26,3 @@ void IObservable::notifyObservers()
         (*it)->notify(this);
     }
 }
-
-
diff --git a/Core/Tools/RealParameterWrapper.h b/Core/Tools/RealParameterWrapper.h
index a815c6b95d260e80478acf957942e1fcf8d5b3ce..a9b7436d7b2d0ee4d5b849294d230296b5a887ff 100644
--- a/Core/Tools/RealParameterWrapper.h
+++ b/Core/Tools/RealParameterWrapper.h
@@ -32,7 +32,6 @@ public:
     explicit RealParameterWrapper(double *par, const AttLimits &limits = AttLimits::limitless());
     RealParameterWrapper(const RealParameterWrapper& other );
     RealParameterWrapper& operator=(const RealParameterWrapper& other);
-    ~RealParameterWrapper() {}
 
     //! Sets value of wrapped parameter and emit signal
     bool setValue(double value);
@@ -95,5 +94,4 @@ inline bool RealParameterWrapper::operator!=(const RealParameterWrapper &other)
     return !(*this == other);
 }
 
-
 #endif // REALPARAMETERPROXY_H
diff --git a/Core/Tools/SafePointerVector.h b/Core/Tools/SafePointerVector.h
index 62f1748e550f13aa750bc66c5d2b5787b2d09436..e8652afb7618afc2863ccef6789b5290c0b5a6a7 100644
--- a/Core/Tools/SafePointerVector.h
+++ b/Core/Tools/SafePointerVector.h
@@ -23,7 +23,7 @@ using std::size_t;
 
 //! @class SafePointerVector
 //! @ingroup tools_internal
-//! @brief Safe handling of vectors of pointers that are owned by the vector
+//! @brief A vector of pointers, owned by *this, with methods to handle them safely.
 //!
 //! The objects pointed to must support the ICLoneable interface.
 
@@ -47,8 +47,6 @@ public:
     iterator end() { return m_pointers.end(); }
     const_iterator end() const { return m_pointers.end(); }
 
-    std::vector<const T *> getSTLVector() const;
-
     bool deleteElement(T* pointer);
 
     T *back() { return m_pointers.back(); }
@@ -64,8 +62,7 @@ template<class T> SafePointerVector<T>::SafePointerVector() : m_pointers()
 
 template<class T> SafePointerVector<T>::SafePointerVector(const SafePointerVector<T>& other)
 {
-    for (const_iterator it = other.begin();
-            it != other.end(); ++it) {
+    for (const_iterator it = other.begin(); it != other.end(); ++it) {
         m_pointers.push_back((*it)->clone());
     }
 }
@@ -80,8 +77,7 @@ template<class T> SafePointerVector<T>& SafePointerVector<T>::operator=(
 {
     if (this ==& right) return *this;
     clear();
-    for (const_iterator it = right.begin();
-            it != right.end(); ++it) {
+    for (const_iterator it = right.begin(); it != right.end(); ++it) {
         m_pointers.push_back((*it)->clone());
     }
     return *this;
@@ -117,21 +113,10 @@ inline const T* SafePointerVector<T>::operator[](size_t index) const
     return m_pointers[index];
 }
 
-template<class T>
-inline std::vector<const T *> SafePointerVector<T>::getSTLVector() const
-{
-    std::vector<const T *> result;
-    for (size_t i=0; i<m_pointers.size(); ++i) {
-        result.push_back(m_pointers[i]);
-    }
-    return result;
-}
-
 template<class T>
 inline bool SafePointerVector<T>::deleteElement(T *pointer)
 {
-    typename std::vector<T *>::iterator it = std::find(m_pointers.begin(),
-                                              m_pointers.end(), pointer);
+    iterator it = std::find(m_pointers.begin(), m_pointers.end(), pointer);
     if (it == m_pointers.end()) return false;
     m_pointers.erase(it);
     delete pointer;
@@ -147,5 +132,3 @@ template<class T> void SafePointerVector<T>::clear()
 }
 
 #endif /* SAFEPOINTERVECTOR_H_ */
-
-
diff --git a/Fit/FitKernel/FitKernel.h b/Fit/FitKernel/FitKernel.h
index da59986a3e3cf2c587071cd1249bcbd836841adf..6df72a1cecf2406f136a070ed7c41510e87b97f2 100644
--- a/Fit/FitKernel/FitKernel.h
+++ b/Fit/FitKernel/FitKernel.h
@@ -22,19 +22,15 @@
 #include "FitSuiteParameters.h"
 #include "FitSuiteStrategies.h"
 #include "ChiSquaredModule.h"
-#include "IMinimizer.h"
 #include "IObserver.h"
+
 #include <string>
-#include <boost/date_time/posix_time/posix_time.hpp>
 #include <memory>
+#include <boost/date_time/posix_time/posix_time.hpp>
 #ifndef GCCXML_SKIP_THIS
 #include <atomic>
 #endif
 
-class GISASSimulation;
-class ParameterPool;
-class FitSuite;
-
 //! @class FitKernel
 //! @ingroup fitting_internal
 //! @brief Fitting kernel for FitSuite
@@ -42,14 +38,14 @@ class FitSuite;
 class BA_CORE_API_ FitKernel
 {
  public:
-    FitKernel(FitSuite *fit_suite);
+    FitKernel(class FitSuite *fit_suite);
     virtual ~FitKernel();
 
-    //! clear all and prepare for the next fit
+    //! Resets most state variables, to get prepared for the next fit
     void clear();
 
     //! Adds pair of (simulation, real data) for consecutive simulation
-    void addSimulationAndRealData(const GISASSimulation& simulation,
+    void addSimulationAndRealData(const class GISASSimulation& simulation,
                                   const OutputData<double>& real_data,
                                   double weight);
 
@@ -62,15 +58,15 @@ class BA_CORE_API_ FitKernel
     void addFitStrategy(const IFitStrategy &strategy);
 
     //! Sets minimizer
-    void setMinimizer(IMinimizer *minimizer);
+    void setMinimizer(class IMinimizer *minimizer);
 
     //! Returns minimizer
-    IMinimizer *getMinimizer();
+    class IMinimizer *getMinimizer();
 
-    //! run fitting which may consist of several minimization rounds
+    //! Runs a fit, which may consist of several minimization rounds
     virtual void runFit();
 
-    //! run single minimization round (called by FitSuiteStrategy)
+    //! Runs a single minimization round (called by FitSuiteStrategy)
     void minimize();
 
     //! Returns reference to the kit with data
@@ -92,10 +88,13 @@ class BA_CORE_API_ FitKernel
     //! Returns the number of current strategy
     size_t getCurrentStrategyIndex() const;
 
-    //! Prints results of the screen
+    //! Prints fit results to stdout
     void printResults() const;
 
+    //! Returns current fit options
     FitOptions &getOptions();
+
+    //! Sets fit options
     void setOptions(const FitOptions &fit_options);
 
     //! Returns total wall time in seconds which was spend for run fit
@@ -120,7 +119,7 @@ private:
     FitSuiteObjects m_fit_objects;
     FitSuiteParameters m_fit_parameters;
     FitSuiteStrategies m_fit_strategies;
-    std::unique_ptr<IMinimizer>  m_minimizer;
+    std::unique_ptr<class IMinimizer> m_minimizer;
     FitSuiteChiSquaredFunction m_function_chi2;
     FitSuiteGradientFunction m_function_gradient;
     bool m_is_last_iteration;
@@ -129,9 +128,7 @@ private:
 #endif
     boost::posix_time::ptime m_start_time;
     boost::posix_time::ptime m_end_time;
-    FitSuite *m_fit_suite;
+    class FitSuite *m_fit_suite;
 };
 
 #endif // FITKERNEL_H
-
-
diff --git a/Fit/FitKernel/FitObject.h b/Fit/FitKernel/FitObject.h
index d86adb55356aff11fc3fce5d067c18da34a278e9..b4b83868d65d5d0145edf99937ada22f0e2a4939 100644
--- a/Fit/FitKernel/FitObject.h
+++ b/Fit/FitKernel/FitObject.h
@@ -88,5 +88,3 @@ private:
 };
 
 #endif // FITOBJECT_H
-
-
diff --git a/Fit/FitKernel/FitSuite.cpp b/Fit/FitKernel/FitSuite.cpp
index 1396806d5757e4d324cb12034d35aa331c2734b1..e1186483fcfca1dfdadc0a0dda4742c9888f612f 100644
--- a/Fit/FitKernel/FitSuite.cpp
+++ b/Fit/FitKernel/FitSuite.cpp
@@ -24,7 +24,11 @@
 FitSuite::FitSuite()
     : m_kernel(new FitKernel(this))
 {
+}
 
+FitSuite::~FitSuite()
+{
+    delete m_kernel;
 }
 
 void FitSuite::addSimulationAndRealData(const GISASSimulation &simulation,
diff --git a/Fit/FitKernel/FitSuite.h b/Fit/FitKernel/FitSuite.h
index 620a08161489039cd6594bf3f1f8b3828d8aeb93..f3bf303fd5a8ab6f031f72a99e8f5df4c4de9d50 100644
--- a/Fit/FitKernel/FitSuite.h
+++ b/Fit/FitKernel/FitSuite.h
@@ -17,30 +17,30 @@
 #define FITSUITE_H
 
 #include "IObserver.h"
-#include "FitKernel.h"
 #include "IHistogram.h"
 #include "OutputData.h"
-
+#include "AttLimits.h"
 
 //! @class FitSuite
 //! @ingroup fitting
-//! @brief Main class to setup and run GISAS fitting in BornAgain.
+//! @brief User interface class that wraps all fit methods.
 
 class BA_CORE_API_ FitSuite : public IObservable
 {
 public:
     FitSuite();
+    ~FitSuite();
 
     // ------------------------------------------------------------------------
     // Fitting setup
     // ------------------------------------------------------------------------
 
     //! Assigns pair of (simulation, real data) for fitting. More than one pair can be added.
-    void addSimulationAndRealData(const GISASSimulation& simulation,
+    void addSimulationAndRealData(const class GISASSimulation& simulation,
                                   const OutputData<double>& real_data, double weight=1);
 
     //! Assigns pair of (simulation, real data) for fitting. More than one pair can be added.
-    void addSimulationAndRealData(const GISASSimulation& simulation,
+    void addSimulationAndRealData(const class GISASSimulation& simulation,
                                   const IHistogram& real_data, double weight=1);
 
     //! Adds fit parameter
@@ -60,16 +60,16 @@ public:
                       const std::string& minimizer_options=std::string());
 
     //! Replaces default ChiSquaredModule with new one
-    void setChiSquaredModule(const IChiSquaredModule &chi2_module);
+    void setChiSquaredModule(const class IChiSquaredModule &chi2_module);
 
     //! Adds fit strategy
-    void addFitStrategy(const IFitStrategy &strategy);
+    void addFitStrategy(const class IFitStrategy &strategy);
 
     //! Sets minimizer
-    void setMinimizer(IMinimizer *minimizer);
+    void setMinimizer(class IMinimizer *minimizer);
 
     //! Returns minimizer
-    IMinimizer *getMinimizer();
+    class IMinimizer *getMinimizer();
 
     //! Initializes printing to standard output during the fitting.
     //! Prints also the summary when completed.
@@ -97,24 +97,24 @@ public:
 
     //! returns real data histogram
     //! @param i_item The index of fit object
-    IHistogram * getRealData(size_t i_item = 0) const;
+    IHistogram* getRealData(size_t i_item = 0) const;
 
     //! returns simulated data  histogram
     //! @param i_item The index of fit object
-    IHistogram * getSimulationData(size_t i_item = 0) const;
+    IHistogram* getSimulationData(size_t i_item = 0) const;
 
     //! returns chi2 histogram calculated for (real, simulated) data pair
     //! @param i_item The index of fit object
-    IHistogram * getChiSquaredMap(size_t i_item = 0) const;
+    IHistogram* getChiSquaredMap(size_t i_item = 0) const;
 
     //! returns FitObject (pair of simulation/real data)
-    FitSuiteObjects *getFitObjects();
+    class FitSuiteObjects* getFitObjects();
 
     //! Returns reference to fit parameters
-    FitSuiteParameters *getFitParameters();
+    class FitSuiteParameters* getFitParameters();
 
     //! Returns reference to fit parameters
-    FitSuiteStrategies *getFitStrategies();
+    class FitSuiteStrategies* getFitStrategies();
 
     //! if the last iteration is done (used by observers to print summary)
     bool isLastIteration() const;
@@ -131,28 +131,26 @@ public:
     double getChi2() const;
 
     //! Returns general setting of fit kernel
-    FitOptions &getOptions();
+    class FitOptions& getOptions();
 
     //! Sets general setting of fit kernel
     void setOptions(const FitOptions &fit_options);
 
     void interruptFitting();
-
     void resetInterrupt();
-
     bool isInterrupted();
 
     const OutputData<double> *getRealOutputData(size_t i_item = 0) const;
-
     const OutputData<double> *getSimulationOutputData(size_t i_item = 0) const;
-
     const OutputData<double> *getChiSquaredOutputData(size_t i_item = 0) const;
 
 private:
     FitSuite& operator=(const FitSuite& );
     FitSuite(const FitSuite& );
 
-    std::unique_ptr<FitKernel> m_kernel;
+    class FitKernel* m_kernel; //!< pointer to implementation
+        // do not use unique_ptr here;
+        // otherwise no instance of FitSuite can be created without knowing the size of FitKernel
 };
 
 #endif
diff --git a/Fit/FitKernel/FitSuitePrintObserver.cpp b/Fit/FitKernel/FitSuitePrintObserver.cpp
index 2bc7f62ae0875bcbae051642d7ece5f1e42dc51a..32f98b5701b351d407033db06bf07d6204c2ed21 100644
--- a/Fit/FitKernel/FitSuitePrintObserver.cpp
+++ b/Fit/FitKernel/FitSuitePrintObserver.cpp
@@ -15,13 +15,15 @@
 
 #include "FitSuitePrintObserver.h"
 #include "FitSuite.h"
+#include "FitSuiteStrategies.h"
+#include "FitSuiteParameters.h"
 
 
 FitSuitePrintObserver::FitSuitePrintObserver(int print_every_nth)
     : IFitObserver(print_every_nth)
     , m_fit_suite(0)
 {
-	m_last_call_time = boost::posix_time::second_clock::local_time();
+    m_last_call_time = boost::posix_time::second_clock::local_time();
 }
 
 void FitSuitePrintObserver::update(FitSuite *fit_suite)
diff --git a/Fit/FitKernel/IFitObserver.cpp b/Fit/FitKernel/IFitObserver.cpp
index 20371c3c579f23981fa4f1d5d5cdee6b7fdee5f9..5276b81e88ee7fcaf7003d482b752863e4e6e18e 100644
--- a/Fit/FitKernel/IFitObserver.cpp
+++ b/Fit/FitKernel/IFitObserver.cpp
@@ -15,6 +15,7 @@
 
 #include "IFitObserver.h"
 #include "FitSuite.h"
+#include "FitSuiteStrategies.h"
 
 
 IFitObserver::IFitObserver(int update_every_nth)
diff --git a/Fit/FitKernel/IFitStrategy.h b/Fit/FitKernel/IFitStrategy.h
index f1ff4d9ad1522d12d23fb04cd7f2d07149434d48..98a3016dee1bf75fcbbb39d59ae329940b882790 100644
--- a/Fit/FitKernel/IFitStrategy.h
+++ b/Fit/FitKernel/IFitStrategy.h
@@ -18,7 +18,6 @@
 
 #include "INamed.h"
 #include <iostream>
-class FitKernel;
 
 //! @class IFitStrategy
 //! @ingroup fitting_internal
@@ -35,7 +34,7 @@ public:
     virtual IFitStrategy *clone() const = 0;
 
     virtual ~IFitStrategy();
-    virtual void init(FitKernel *fit_suite);
+    virtual void init(class FitKernel *fit_suite);
     virtual void execute() = 0;
 
     friend std::ostream &operator<<(std::ostream &ostr, const IFitStrategy &m)
@@ -44,11 +43,10 @@ public:
         return ostr;
     }
 
-
 protected:
     virtual void print(std::ostream &ostr) const;
 
-    FitKernel *m_fit_kernel;
+    class FitKernel *m_fit_kernel;
     IFitStrategy(const IFitStrategy &other);
 
 private:
@@ -68,7 +66,4 @@ class BA_CORE_API_ FitStrategyDefault : public IFitStrategy
     virtual void execute();
 };
 
-
 #endif // FITSTRATEGY_H
-
-
diff --git a/Fit/PythonAPI/libBornAgainFit_wrap.cxx b/Fit/PythonAPI/libBornAgainFit_wrap.cxx
index e9ad2415dfce29b4183935f10f82f07bda034728..20db181d4eefd8e8765ebd5124f3fd7960224569 100644
--- a/Fit/PythonAPI/libBornAgainFit_wrap.cxx
+++ b/Fit/PythonAPI/libBornAgainFit_wrap.cxx
@@ -6048,12 +6048,11 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include <numpy/arrayobject.h>
 
 
-
-
 #include "ChiSquaredModule.h"
 #include "FitObject.h"
 #include "FitOptions.h"
 #include "FitParameter.h"
+#include "FitKernel.h"
 #include "FitSuite.h"
 #include "FitSuiteObjects.h"
 #include "FitSuiteParameters.h"
@@ -6071,15 +6070,10 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "MinimizerOptions.h"
 #include "FitStrategyAdjustMinimizer.h"
 
-
-
 //! file containig additional exposers
 #include "PythonFitExposer.h"
 
 
-
-
-
 struct SWIG_null_deleter {
   void operator() (void const *) const {
   }
diff --git a/Fit/StandardFits/IMinimizerFunctionalTest.cpp b/Fit/StandardFits/IMinimizerFunctionalTest.cpp
index ab276c436b85ed9400d5c8c35ca8816e696e6cc6..86f8cf2f5a3500cc54180f0deb7aecfd3f3406f6 100644
--- a/Fit/StandardFits/IMinimizerFunctionalTest.cpp
+++ b/Fit/StandardFits/IMinimizerFunctionalTest.cpp
@@ -14,11 +14,12 @@
 // ************************************************************************** //
 
 #include "Units.h"
-#include "IMinimizerFunctionalTest.h"
+#include "FitKernel.h"
 #include "SampleBuilderFactory.h"
 #include "SimulationRegistry.h"
 #include "OutputData.h"
 #include "FitSuite.h"
+#include "IMinimizerFunctionalTest.h"
 #include "MinimizerFactory.h"
 #include <memory>
 #include <boost/format.hpp>
diff --git a/Fit/StandardFits/MinimizerFunctionalTests.cpp b/Fit/StandardFits/MinimizerFunctionalTests.cpp
index 6703e989ff1c6bc426d6bcd2095094e16d5642bd..c27693d1644a7d0fb0a142bfbf0444ef77655441 100644
--- a/Fit/StandardFits/MinimizerFunctionalTests.cpp
+++ b/Fit/StandardFits/MinimizerFunctionalTests.cpp
@@ -15,6 +15,7 @@
 
 #include "MinimizerFunctionalTests.h"
 #include "FitSuite.h"
+#include "FitKernel.h"
 #include "MinimizerFactory.h"
 
 Minuit2MigradTest::Minuit2MigradTest()
@@ -56,7 +57,7 @@ std::unique_ptr<FitSuite> GSLSimulatedAnnealingTest::createFitSuite()
     minimizer->getOptions()->setValue("t_min", 1.0);
     result->setMinimizer(minimizer);
     for (size_t i = 0; i < m_parameters.size(); ++i) {
-        result->addFitParameter(m_parameters[i].m_name, m_parameters[i].m_start_value,                                    
+        result->addFitParameter(m_parameters[i].m_name, m_parameters[i].m_start_value,
                                     AttLimits::limited(4.0, 6.0), m_parameters[i].m_start_value / 100.);
     }
 
diff --git a/GUI/coregui/Views/FitWidgets/FitTools.cpp b/GUI/coregui/Views/FitWidgets/FitTools.cpp
index 627677b68dbd96fcc571ebd904e309d389abbe8c..d3f495bfbc4330ce71ecdcbd876ccfae8d014e2e 100644
--- a/GUI/coregui/Views/FitWidgets/FitTools.cpp
+++ b/GUI/coregui/Views/FitWidgets/FitTools.cpp
@@ -14,7 +14,6 @@
 //
 // ************************************************************************** //
 
-#include "FitTools.h"
 #include "JobItem.h"
 #include "FilterPropertyProxy.h"
 #include "JobModel.h"
@@ -31,6 +30,9 @@
 #include "ParameterTreeItems.h"
 #include "SessionItem.h"
 #include "RealDataWindow.h"
+
+#include "FitTools.h"
+
 #include <boost/scoped_ptr.hpp>
 #include <QHBoxLayout>
 #include <QLabel>
diff --git a/GUI/coregui/Views/FitWidgets/RunFitManager.h b/GUI/coregui/Views/FitWidgets/RunFitManager.h
index d0910a9abf97709db447af0f427dc79ded99db1f..23be3005607793df1f259aabd400c4b79d6a1a81 100644
--- a/GUI/coregui/Views/FitWidgets/RunFitManager.h
+++ b/GUI/coregui/Views/FitWidgets/RunFitManager.h
@@ -29,7 +29,6 @@ class BA_CORE_API_ RunFitManager : public QObject
     Q_OBJECT
 
 public:
-
     RunFitManager(QObject *parent);
 
     void setFitSuite(std::shared_ptr<FitSuite> suite);
@@ -37,21 +36,17 @@ public:
     void runFitting();
 
 public slots:
-
     void interruptFitting();
 
 signals:
-
     void finishedFitting();
 
     void startedFitting();
 
     void error(const QString &message);
 
-
 // only used by manager for communication with FittingWorker
 private slots:
-
     void intern_workerFinished();
 
     void intern_workerStarted();
@@ -59,15 +54,11 @@ private slots:
     void intern_error(const QString &mesg);
 
 signals:
-
     void intern_interruptFittingWorker();
 
-
 private:
-
     std::shared_ptr<FitSuite> m_fitSuite;
     std::atomic<bool> m_is_fit_running;
-
 };
 
 #endif
diff --git a/GUI/coregui/Views/FitWidgets/RunFitWidget.cpp b/GUI/coregui/Views/FitWidgets/RunFitWidget.cpp
index 0b240d0a5327b20e26b25ea90dfb43e7ce878236..2792fa52b805e53164d9bbc7bc463a1714448d1b 100644
--- a/GUI/coregui/Views/FitWidgets/RunFitWidget.cpp
+++ b/GUI/coregui/Views/FitWidgets/RunFitWidget.cpp
@@ -14,7 +14,6 @@
 //
 // ************************************************************************** //
 
-#include "RunFitWidget.h"
 #include "RunFitManager.h"
 #include "SampleBuilderFactory.h"
 #include "SimulationRegistry.h"
@@ -31,6 +30,9 @@
 #include "InstrumentItem.h"
 #include "SessionModel.h"
 #include "IntensityDataIOFactory.h"
+
+#include "RunFitWidget.h"
+
 #include <QWidget>
 #include <QPushButton>
 #include <QSlider>
diff --git a/GUI/coregui/Views/FitWidgets/RunFitWidget.h b/GUI/coregui/Views/FitWidgets/RunFitWidget.h
index d6725ae6bb860f1463d5e3fb8bd14ac190414e5b..5905f509ccd1b549269d61830521a331c03767a0 100644
--- a/GUI/coregui/Views/FitWidgets/RunFitWidget.h
+++ b/GUI/coregui/Views/FitWidgets/RunFitWidget.h
@@ -38,26 +38,19 @@ class BA_CORE_API_ RunFitWidget : public QWidget
     Q_OBJECT
 
 public:
-
     RunFitWidget(FitModel *fitModel, QWidget *parent = 0);
 
     // test only
     std::shared_ptr<FitSuite> init_test_fitsuite();
 
 public slots:
-
     void onIntervalChanged(int value);
-
     void onStartClicked();
-
     void onStopClicked();
-
     void onFittingStarted();
-
     void onFittingFinished();
 
 private:
-
     QPushButton *m_start_button;
     QPushButton *m_stop_button;
     QLabel *m_interval_label;
diff --git a/dev-tools/swig/libBornAgainCore.i b/dev-tools/swig/libBornAgainCore.i
index 71af994d0f90b11ab0cd1ec267b42597ba6ecf9a..51a42ab6783cc53adb8e330823b4025340bf235d 100644
--- a/dev-tools/swig/libBornAgainCore.i
+++ b/dev-tools/swig/libBornAgainCore.i
@@ -202,8 +202,8 @@
 #include "WavevectorInfo.h"
 %}
 
-// import headers to be exported to Python interace.
-// Note that the order of inclusion matters, as base classes must be imported before derived classes
+// The following goes verbatim from libBornAgainCore.i to libBornAgainCore_wrap.cxx.
+// Note that the order matters, as base classes must be included before derived classes.
 
 %include "AttLimits.h"
 %include "ICloneable.h"
diff --git a/dev-tools/swig/libBornAgainFit.i b/dev-tools/swig/libBornAgainFit.i
index 965b0519fa33a9ddffa6ac97fa7346aa8adc6d36..cf3161b3631ef1e05d0c731bdcdd4983ec9b5b1b 100644
--- a/dev-tools/swig/libBornAgainFit.i
+++ b/dev-tools/swig/libBornAgainFit.i
@@ -17,47 +17,19 @@
 
 %feature("autodoc");
 
-//%feature("director");
-
- // gives libBornAgainFit knowledge of the libBornAgainCore python module
- // %import "../../Core/PythonAPI/libBornAgainCore.i"
-
 %include "stdint.i"
 %include "std_complex.i"
 %include "std_string.i"
 %include "std_vector.i"
 %include "std_shared_ptr.i"
 
- // import list of shared pointers (common between Core and Fit)
 %include "shared_pointers.i"
 
 %include "doxygen_fit.i"
 %include "warnings.i"
 %include "ignores.i"
-
-
-
 %include "directors.i"
 
- //%shared_ptr(ISampleBuilder)
- //%shared_ptr(IParametrized)
- //%shared_ptr(INamed)
- //%template(SampleBuilder_t) boost::shared_ptr<ISampleBuilder>;
-
-
-
- //%shared_ptr(FitSuite)
-
-
-
-/*
-%feature("director") IObserver;
-%feature("director") IObservable;
-%feature("director") IFitObserver;
-%feature("director") IFitSuite;
-/**/
-
-// // from PythonCoreExposer.h
 %template(vdouble1d_t) std::vector<double>;
 %template(vdouble2d_t) std::vector< std::vector<double> >;
 %template(vector_integer_t) std::vector<int >;
@@ -65,20 +37,6 @@
 %template(vector_complex_t) std::vector< std::complex<double> >;
 %template(vector_string_t) std::vector<std::string>;
 
-
-
-
-
-
-
-
-// fix smart pointer problem
-//%ignore IFitObserver::notify(IObservable*);
-//%ignore IFitObserver::update(FitSuite*);
-
-
-
-
 #define SWIG_FILE_WITH_INIT
 
 %{
@@ -89,62 +47,24 @@
 %include "numpy.i"
 %init %{
 import_array();
-%} 
+%}
 
 #define GCCXML_SKIP_THIS 1
-#define GCC_DIAG_OFF(x)  
-#define GCC_DIAG_ON(x) 
-
-
+#define GCC_DIAG_OFF(x)
+#define GCC_DIAG_ON(x)
 
 #ifndef BORNAGAIN_PYTHON
 #define BORNAGAIN_PYTHON
 #endif
 
-
-
-
-
 %import "WinDllMacros.h"
 
-
-
-
- //%import "INamed.h"
- //%import "IParameterized.h"
- //%import "ISample.h"
- //%import "IMaterial.h"
- //%import "IAxis.h"
- //%import "VariableBinAxis.h"
- //%import "ICompositeSample.h"
- //%import "IClusteredParticles.h"
- //%import "IShape2D.h"
-
- //%import "IFormFactor.h"
- //%import "IFormFactorDecorator.h"
- //%import "IFormFactorBorn.h"
- //%import "IDetector2D.h"
- //%import "RealParameterWrapper.h"
- //%import "IParticle.h"
- //%import "ParameterDistribution.h"
- //%import "SafePointerVector.h"
-
- //%import "Simulation.h"
- //%import "IHistogram.h"
-
- //%import "IPixelMap.h"
- //%import "SphericalDetector.h"
-
-
- //%import "IRoughness.h"
-
 %{
-
-
 #include "ChiSquaredModule.h"
 #include "FitObject.h"
 #include "FitOptions.h"
 #include "FitParameter.h"
+#include "FitKernel.h"
 #include "FitSuite.h"
 #include "FitSuiteObjects.h"
 #include "FitSuiteParameters.h"
@@ -162,13 +82,8 @@ import_array();
 #include "MinimizerOptions.h"
 #include "FitStrategyAdjustMinimizer.h"
 
-
-
 //! file containig additional exposers
 #include "PythonFitExposer.h"
-
-
-
 %}
 
 %import(module="libBornAgainCore") "AttLimits.h"
@@ -177,34 +92,27 @@ import_array();
 %import(module="libBornAgainCore") "IParameterized.h"
 %import(module="libBornAgainCore") "IObserver.h"
 
+// The following goes verbatim from libBornAgainFit.i to libBornAgainFit_wrap.cxx.
+// Note that the order matters, as base classes must be included before derived classes.
 
 %include "IMinimizer.h"
-
 %include "IChiSquaredModule.h"
 %include "IFitObserver.h"
 %include "IFitStrategy.h"
 %include "IIntensityFunction.h"
 %include "IIntensityNormalizer.h"
-
 %include "ISquaredFunction.h"
-
-
 %include "ChiSquaredModule.h"
 %include "FitObject.h"
 %include "FitOptions.h"
 %include "FitParameter.h"
-
 %include "FitSuite.h"
 %include "FitSuiteObjects.h"
 %include "FitSuiteParameters.h"
-
 %include "MathFunctions.h"
-
 %include "MinimizerOptions.h"
 %include "MinimizerFactory.h"
-
-
 %include "FitStrategyAdjustMinimizer.h"
 
- // extends included at end because swig needs to know something about the extended classes beforehand
+ // included at end because swig needs to know something about the extended classes beforehand
 %include "extends.i"