diff --git a/Core/Algorithms/inc/FTDistributions.h b/Core/Algorithms/inc/FTDistributions.h
index 6a8bf3a811be906bc2dc05723e81eced93830308..f1b901fc5faf7ade03849742072caea6c6bd90dd 100644
--- a/Core/Algorithms/inc/FTDistributions.h
+++ b/Core/Algorithms/inc/FTDistributions.h
@@ -148,7 +148,7 @@ public:
     virtual double evaluate(double qx, double qy) const;
 
 private:
-    double BesselJ0(double value) const;
+    double BesselJ0(double value, void *params) const;
 };
 
 #endif /* FTDISTRIBUTIONS_H_ */
diff --git a/Core/Algorithms/src/FTDistributions.cpp b/Core/Algorithms/src/FTDistributions.cpp
index 8ad5fc276274fa59f62efa631788f6b0753e0058..a4c6194010a58055ccd54f4aa37e696018824c27 100644
--- a/Core/Algorithms/src/FTDistributions.cpp
+++ b/Core/Algorithms/src/FTDistributions.cpp
@@ -15,6 +15,7 @@
 
 #include "FTDistributions.h"
 #include "MathFunctions.h"
+#include "MemberFunctionIntegrator.h"
 
 void IFTDistribution2D::transformToStarBasis(double qX, double qY,
         double alpha, double a, double b, double& qa, double& qb) const
@@ -152,11 +153,20 @@ double FTDistribution2DCone::evaluate(double qx, double qy) const
 {
     double scaled_q = std::sqrt(qx*qx*m_coherence_length_x*m_coherence_length_x
             + qy*qy*m_coherence_length_y*m_coherence_length_y);
-
-    return 0.0;
+    if (scaled_q<Numeric::double_epsilon) {
+        return 1.0/6.0 - scaled_q*scaled_q/80.0;
+    }
+    MemberFunctionIntegrator<FTDistribution2DCone>::mem_function
+        p_member_function = &FTDistribution2DCone::BesselJ0;
+    MemberFunctionIntegrator<FTDistribution2DCone>
+                integrator(p_member_function, this);
+    double integral = integrator.integrate(0.0, scaled_q, (void*)0);
+    return (integral/scaled_q - MathFunctions::Bessel_J0(scaled_q) )
+            /scaled_q/scaled_q;
 }
 
-double FTDistribution2DCone::BesselJ0(double value) const
+double FTDistribution2DCone::BesselJ0(double value, void *params) const
 {
+    (void)params;
     return MathFunctions::Bessel_J0(value);
 }