diff --git a/App/src/TestMesoCrystal.cpp b/App/src/TestMesoCrystal.cpp
index e4d98743b4ec2cb9c4274d2e594235589fad1052..4c81803a276b314da17663b5ee5e8f37a196ca9e 100644
--- a/App/src/TestMesoCrystal.cpp
+++ b/App/src/TestMesoCrystal.cpp
@@ -68,14 +68,14 @@ void TestMesoCrystal::initializeSample()
 {
     delete mp_sample;
     // create mesocrystal
-    double meso_radius = 300*Units::nanometer;
+    double meso_radius = 600*Units::nanometer;
     double surface_filling_ratio = 0.25;
-    double surface_density = surface_filling_ratio/M_PI/meso_radius/meso_radius;
+    double surface_density = surface_filling_ratio/meso_radius/meso_radius;
     complex_t n_particle(1.0-1.55e-5, 1.37e-6);
     complex_t avg_n_squared_meso = 0.7886*n_particle*n_particle + 0.2114;
     complex_t n_avg = std::sqrt(surface_filling_ratio*avg_n_squared_meso + 1.0 - surface_filling_ratio);
     complex_t n_particle_adapted = std::sqrt(n_avg*n_avg + n_particle*n_particle - 1.0);
-    FormFactorCylinder ff_meso(0.2*Units::micrometer, meso_radius);
+    FormFactorLorentz ff_meso(0.2*Units::micrometer, meso_radius);
 //    MesoCrystal meso2(npc.clone(), new FormFactorPyramid(0.2*Units::micrometer, meso_radius, 84*Units::degree));
 
     // Create multilayer
@@ -97,9 +97,9 @@ void TestMesoCrystal::initializeSample()
 //    IInterferenceFunction *p_interference_funtion = new InterferenceFunction1DParaCrystal(800.0*Units::nanometer,
 //            50*Units::nanometer, 1e7*Units::nanometer);
     NanoParticleDecoration particle_decoration;
-    size_t n_phi_rotation_steps = 1;
-    size_t n_alpha_rotation_steps = 1;
-    size_t n_np_size_steps = 1;
+    size_t n_phi_rotation_steps = 13;
+    size_t n_alpha_rotation_steps = 5;
+    size_t n_np_size_steps = 3;
     double phi_step = 2*M_PI/3.0/n_phi_rotation_steps;
     double phi_start = 0.0;
     double alpha_step = 4*Units::degree/n_alpha_rotation_steps;
@@ -149,7 +149,7 @@ MesoCrystal* createMesoCrystal(double nanoparticle_radius, complex_t n_particle,
     pos_vector.push_back(position_2);
     LatticeBasis basis(particle, pos_vector);
     NanoParticleCrystal npc(basis, lat);
-    double relative_sigma_np_radius = 0.0;
+    double relative_sigma_np_radius = 0.15;
     double dw_factor = relative_sigma_np_radius*relative_sigma_np_radius*nanoparticle_radius*nanoparticle_radius/6.0;
     npc.setDWFactor(dw_factor);
     return new MesoCrystal(npc.clone(), p_meso_form_factor->clone());
diff --git a/Core/Samples/inc/FormFactorCylinder.h b/Core/Samples/inc/FormFactorCylinder.h
index fb98d84b9f37e6e94fd5f278d69ccfcd98b63f6b..d60d2b40b9bdf5d47be72b12db3899a2c9c39ecd 100644
--- a/Core/Samples/inc/FormFactorCylinder.h
+++ b/Core/Samples/inc/FormFactorCylinder.h
@@ -30,7 +30,6 @@ public:
 
 protected:
     virtual complex_t evaluate_for_q(cvector_t q) const;
-    virtual complex_t evaluate_for_complex_qz(kvector_t q, complex_t qz) const;
 
 private:
     //! copy constructor and assignment operator are hidden since there is a clone method
diff --git a/Core/Samples/inc/FormFactorGauss.h b/Core/Samples/inc/FormFactorGauss.h
index 92a6efb075a09e7ebb22f6ce5aa40c6a2aeb8231..c389b5ea6e7b5897e9de5e48d546d7b279cf7a03 100644
--- a/Core/Samples/inc/FormFactorGauss.h
+++ b/Core/Samples/inc/FormFactorGauss.h
@@ -30,7 +30,6 @@ public:
 
 protected:
     virtual complex_t evaluate_for_q(cvector_t q) const;
-    virtual complex_t evaluate_for_complex_qz(kvector_t q, complex_t qz) const;
 
 private:
     //! copy constructor and assignment operator are hidden since there is a clone method
diff --git a/Core/Samples/inc/FormFactorLorentz.h b/Core/Samples/inc/FormFactorLorentz.h
index 945f7f89e448121bfa1245a6df458dc7b3a8fd24..76b42d8be01ccdd9b8f80b458fdc15c645ce8a62 100644
--- a/Core/Samples/inc/FormFactorLorentz.h
+++ b/Core/Samples/inc/FormFactorLorentz.h
@@ -30,7 +30,6 @@ public:
 
 protected:
     virtual complex_t evaluate_for_q(cvector_t q) const;
-    virtual complex_t evaluate_for_complex_qz(kvector_t q, complex_t qz) const;
 
 private:
     //! copy constructor and assignment operator are hidden since there is a clone method
diff --git a/Core/Samples/src/FormFactorCylinder.cpp b/Core/Samples/src/FormFactorCylinder.cpp
index eb17e8cf97295677103e4f7edfa659b6f4f8c08b..86824b4714b27d854d41a5a50c3d5dabb60ab808 100644
--- a/Core/Samples/src/FormFactorCylinder.cpp
+++ b/Core/Samples/src/FormFactorCylinder.cpp
@@ -44,23 +44,6 @@ FormFactorCylinder* FormFactorCylinder::clone() const
 //    return new FormFactorCylinder(mp_height->clone(), mp_radius->clone());
 }
 
-complex_t FormFactorCylinder::evaluate_for_complex_qz(kvector_t q, complex_t qz) const
-{
-//    double R = mp_radius->getCurrent();
-//    double H = mp_height->getCurrent();
-    double R = m_radius;
-    double H = m_height;
-
-    complex_t qzH_half = qz*H/2.0;
-    complex_t z_part = H*MathFunctions::Sinc(qzH_half)*std::exp(complex_t(0.0, 1.0)*qzH_half);
-
-    double qrR = q.magxy()*R;
-    double J1_qrR_div_qrR = qrR > Numeric::double_epsilon ? MathFunctions::Bessel_J1(qrR)/qrR : 0.5;
-    double radial_part = 2*M_PI*R*R*J1_qrR_div_qrR;
-
-    return radial_part*z_part;
-}
-
 complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const
 {
 //    double R = mp_radius->getCurrent();
@@ -72,7 +55,7 @@ complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const
     complex_t z_part = H*MathFunctions::Sinc(qzH_half)*std::exp(complex_t(0.0, 1.0)*qzH_half);
 
     complex_t qrR = q.magxy()*R;
-    complex_t J1_qrR_div_qrR = std::abs(qrR) > Numeric::double_epsilon ? MathFunctions::Bessel_J1(qrR)/qrR : 0.5;
+    complex_t J1_qrR_div_qrR = std::abs(qrR) > Numeric::double_epsilon ? MathFunctions::Bessel_J1(std::abs(qrR))/qrR : 0.5;
     complex_t radial_part = 2*M_PI*R*R*J1_qrR_div_qrR;
 
     return radial_part*z_part;
diff --git a/Core/Samples/src/FormFactorGauss.cpp b/Core/Samples/src/FormFactorGauss.cpp
index 3cef83a4c0d47ef57300d84f7aaa5132d8a69ea6..306b74a1033df7356d9e1170b00121a500730fde 100644
--- a/Core/Samples/src/FormFactorGauss.cpp
+++ b/Core/Samples/src/FormFactorGauss.cpp
@@ -54,32 +54,16 @@ FormFactorGauss* FormFactorGauss::clone() const
 //    return new FormFactorGauss(mp_height->clone(), mp_radius->clone());
 }
 
-complex_t FormFactorGauss::evaluate_for_complex_qz(kvector_t q, complex_t qz) const
-{
-//    double R = mp_radius->getCurrent();
-//    double H = mp_height->getCurrent();
-    double R = m_width;
-    double H = m_height;
-
-    complex_t z_part = H*std::exp(-qz*qz*H*H/4.0/M_PI);
-
-    double qrR = q.magxy()*R;
-    double radial_part = R*R*std::exp(-qrR*qrR/4.0/M_PI);
-
-    return radial_part*z_part;
-}
-
 complex_t FormFactorGauss::evaluate_for_q(cvector_t q) const
 {
-//    double R = mp_radius->getCurrent();
+//    double R = mp_width->getCurrent();
 //    double H = mp_height->getCurrent();
     double R = m_width;
     double H = m_height;
 
-    complex_t z_part = H*std::exp(-q.z()*q.z()*H*H/4.0/M_PI);
+    complex_t z_part = H*std::exp(-q.z()*q.z()*H*H/8.0/M_PI);
 
-    complex_t qrR = q.magxy()*R;
-    complex_t radial_part = R*R*std::exp(-qrR*qrR/4.0/M_PI);
+    complex_t radial_part = R*R*std::exp(-(q.x()*q.x()+q.y()*q.y())*R*R/8.0/M_PI);
 
     return radial_part*z_part;
 }
diff --git a/Core/Samples/src/FormFactorLorentz.cpp b/Core/Samples/src/FormFactorLorentz.cpp
index 506690a8dc2b99f0dfd6dbcf405727acf1d596ec..702c09099eb04154b5c6f0df54aa7edd06532661 100644
--- a/Core/Samples/src/FormFactorLorentz.cpp
+++ b/Core/Samples/src/FormFactorLorentz.cpp
@@ -54,20 +54,6 @@ FormFactorLorentz* FormFactorLorentz::clone() const
 //    return new FormFactorLorentz(mp_height->clone(), mp_radius->clone());
 }
 
-complex_t FormFactorLorentz::evaluate_for_complex_qz(kvector_t q, complex_t qz) const
-{
-//    double R = mp_radius->getCurrent();
-//    double H = mp_height->getCurrent();
-    double R = m_width;
-    double H = m_height;
-
-    complex_t z_part = H/(1.0 + (H*qz/2.0)*(H*qz/2.0));
-
-    double radial_part = R*R/(1.0 + (R*q.x()/2.0)*(R*q.x()/2.0))/(1.0 + (R*q.y()/2.0)*(R*q.y()/2.0));
-
-    return radial_part*z_part;
-}
-
 complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const
 {
 //    double R = mp_radius->getCurrent();
@@ -75,9 +61,9 @@ complex_t FormFactorLorentz::evaluate_for_q(cvector_t q) const
     double R = m_width;
     double H = m_height;
 
-    complex_t z_part = H/(1.0 + (H*q.z()/2.0)*(H*q.z()/2.0));
+    complex_t z_part = H/std::sqrt(1.0 + (H*q.z()/2.0)*(H*q.z()/2.0));
 
-    complex_t radial_part = R*R/(1.0 + (R*q.x()/2.0)*(R*q.x()/2.0))/(1.0 + (R*q.y()/2.0)*(R*q.y()/2.0));
+    complex_t radial_part = R*R/std::sqrt(1.0 + (R*q.x()/2.0)*(R*q.x()/2.0))/std::sqrt(1.0 + (R*q.y()/2.0)*(R*q.y()/2.0));
 
     return radial_part*z_part;
 }
diff --git a/Core/Tools/inc/MathFunctions.h b/Core/Tools/inc/MathFunctions.h
index 7670c9d574f3d349cec9285305a2b8163280fcff..777315e9574adc399fb5c040874720f5b34a63c9 100644
--- a/Core/Tools/inc/MathFunctions.h
+++ b/Core/Tools/inc/MathFunctions.h
@@ -38,7 +38,7 @@ double GenerateUniformRandom();
 
 double Bessel_J1(double value);
 
-complex_t Bessel_J1(complex_t value);
+//complex_t Bessel_J1(complex_t value);
 
 double Sinc(double value);
 
@@ -81,8 +81,7 @@ inline complex_t MathFunctions::Sinc(complex_t value)  // Sin(x)/x
 	if(std::abs(value)<Numeric::double_epsilon) {
 		return complex_t(1.0, 0.0);
 	}
-    return (std::exp(complex_t(0.0, 1.0)*value) - std::exp(complex_t(0.0, -1.0)*value))
-    		/(complex_t(0.0, 2.0)*value);
+    return std::sin(value)/value;
 }
 
 inline complex_t MathFunctions::Laue(complex_t value, size_t N) // Exp(iNx/2)*Sin((N+1)x)/Sin(x)
diff --git a/Core/Tools/src/MathFunctions.cpp b/Core/Tools/src/MathFunctions.cpp
index d69d26bbd55762cc12a4e51e398f19c005d908b8..dffe15451b0966adb75882bc7d86e9f21d006850 100644
--- a/Core/Tools/src/MathFunctions.cpp
+++ b/Core/Tools/src/MathFunctions.cpp
@@ -96,81 +96,81 @@ std::vector<complex_t > MathFunctions::FastFourierTransform(const std::vector<do
     return MathFunctions::FastFourierTransform(cdata, ftCase);
 }
 
-complex_t MathFunctions::Bessel_J1(complex_t value)
-{
-    complex_t z1,z2,cr,cp,cs,cp0,cq0,cp1,cq1,ct1,ct2,cu;
-    complex_t result;
-    double a0;
-    int k,kz;
-
-    static complex_t czero(0.0, 0.0);
-    static complex_t cone(1.0, 0.0);
-    static double a1[] = {
-         0.1171875,
-        -0.1441955566406250,
-         0.6765925884246826,
-        -6.883914268109947,
-         1.215978918765359e2,
-        -3.302272294480852e3,
-         1.276412726461746e5,
-        -6.656367718817688e6,
-         4.502786003050393e8,
-        -3.833857520742790e10,
-         4.011838599133198e12,
-        -5.060568503314727e14,
-         7.572616461117958e16,
-        -1.326257285320556e19};
-    static double b1[] = {
-        -0.1025390625,
-         0.2775764465332031,
-        -1.993531733751297,
-         2.724882731126854e1,
-        -6.038440767050702e2,
-         1.971837591223663e4,
-        -8.902978767070678e5,
-         5.310411010968522e7,
-        -4.043620325107754e9,
-         3.827011346598605e11,
-        -4.406481417852278e13,
-         6.065091351222699e15,
-        -9.833883876590679e17,
-         1.855045211579828e20};
-
-    a0 = abs(value);
-    z2 = value*value;
-    z1 = value;
-    if (a0 == 0.0) {
-        result = czero;
-        return result;
-    }
-    if (real(value) < 0.0) z1 = -value;
-    if (a0 <= 12.0) {
-        result = cone;
-        cr = cone;
-        for (k=1;k<=40;k++) {
-            cr *= -0.25*z2/(k*(k+1.0));
-            result += cr;
-            if (abs(cr) < abs(result)*Numeric::double_epsilon) break;
-        }
-        result *= 0.5*z1;
-        return result;
-    }
-    else {
-        if (a0 >= 50.0) kz = 8;         // can be changed to 10
-        else if (a0 >= 35.0) kz = 10;   //   "      "     "  12
-        else kz = 12;                   //   "      "     "  14
-        cp1 = cone;
-        for (k=0;k<kz;k++) {
-            cp1 += a1[k]*pow(z1,-2.0*k-2.0);
-        }
-        cq1 = 0.375/z1;
-        for (k=0;k<kz;k++) {
-            cq1 += b1[k]*pow(z1,-2.0*k-3.0);
-        }
-        result = cu*(cp1*cos(ct2)-cq1*sin(ct2));
-        return result;
-    }
-}
+//complex_t MathFunctions::Bessel_J1(complex_t value)
+//{
+//    complex_t z1,z2,cr,cp,cs,cp0,cq0,cp1,cq1,ct1,ct2,cu;
+//    complex_t result;
+//    double a0;
+//    int k,kz;
+//
+//    static complex_t czero(0.0, 0.0);
+//    static complex_t cone(1.0, 0.0);
+//    static double a1[] = {
+//         0.1171875,
+//        -0.1441955566406250,
+//         0.6765925884246826,
+//        -6.883914268109947,
+//         1.215978918765359e2,
+//        -3.302272294480852e3,
+//         1.276412726461746e5,
+//        -6.656367718817688e6,
+//         4.502786003050393e8,
+//        -3.833857520742790e10,
+//         4.011838599133198e12,
+//        -5.060568503314727e14,
+//         7.572616461117958e16,
+//        -1.326257285320556e19};
+//    static double b1[] = {
+//        -0.1025390625,
+//         0.2775764465332031,
+//        -1.993531733751297,
+//         2.724882731126854e1,
+//        -6.038440767050702e2,
+//         1.971837591223663e4,
+//        -8.902978767070678e5,
+//         5.310411010968522e7,
+//        -4.043620325107754e9,
+//         3.827011346598605e11,
+//        -4.406481417852278e13,
+//         6.065091351222699e15,
+//        -9.833883876590679e17,
+//         1.855045211579828e20};
+//
+//    a0 = abs(value);
+//    z2 = value*value;
+//    z1 = value;
+//    if (a0 == 0.0) {
+//        result = czero;
+//        return result;
+//    }
+//    if (real(value) < 0.0) z1 = -value;
+//    if (a0 <= 12.0) {
+//        result = cone;
+//        cr = cone;
+//        for (k=1;k<=40;k++) {
+//            cr *= -0.25*z2/(k*(k+1.0));
+//            result += cr;
+//            if (abs(cr) < abs(result)*Numeric::double_epsilon) break;
+//        }
+//        result *= 0.5*z1;
+//        return result;
+//    }
+//    else {
+//        if (a0 >= 50.0) kz = 8;         // can be changed to 10
+//        else if (a0 >= 35.0) kz = 10;   //   "      "     "  12
+//        else kz = 12;                   //   "      "     "  14
+//        cp1 = cone;
+//        for (k=0;k<kz;k++) {
+//            cp1 += a1[k]*pow(z1,-2.0*k-2.0);
+//        }
+//        cq1 = 0.375/z1;
+//        for (k=0;k<kz;k++) {
+//            cq1 += b1[k]*pow(z1,-2.0*k-3.0);
+//        }
+//        result = cu*(cp1*cos(ct2)-cq1*sin(ct2));
+//        return result;
+//    }
+//}
 
 /* ************************************************************************* */
 // convolution of two real vectors of equal size