diff --git a/Core/FormFactors/inc/IFormFactorDecorator.h b/Core/FormFactors/inc/IFormFactorDecorator.h
index f5984f5761fd33991b099b39eaa88c253271df29..f0bed49cc79bfe31f1b7530480f7327fc1be49ab 100644
--- a/Core/FormFactors/inc/IFormFactorDecorator.h
+++ b/Core/FormFactors/inc/IFormFactorDecorator.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      FormFactors/inc/IFormFactorDecorator.h
-//! @brief     Defines pure vurtual interface class IFormFactorDecorator.
+//! @brief     Defines pure virtual interface class IFormFactorDecorator.
 //!
 //! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
 //! @license   GNU General Public License v3 or higher (see COPYING)
diff --git a/Tests/UnitTests/TestCore/FormFactorTest.h b/Tests/UnitTests/TestCore/FormFactorTest.h
index cad066551a700801e04dbb3b8b906bcafb597766..e519a45d720532e6e87d699064d8248526b5bb51 100644
--- a/Tests/UnitTests/TestCore/FormFactorTest.h
+++ b/Tests/UnitTests/TestCore/FormFactorTest.h
@@ -15,22 +15,22 @@
 #ifndef FORMFACTORTEST_H
 #define FORMFACTORTEST_H
 
-//#include "FormFactorAnisoPyramid.h"
+#include "FormFactorAnisoPyramid.h"
 #include "FormFactorBox.h"
 #include "FormFactorCone.h"
 #include "FormFactorCone6.h"
 #include "FormFactorCylinder.h"
-//#include "FormFactorCuboctahedron.h"
-#include "FormFactorEllipsoid.h"
+#include "FormFactorCuboctahedron.h"
+#include "FormFactorEllipsoidalCylinder.h"
 #include "FormFactorFullSphere.h"
 #include "FormFactorFullSpheroid.h"
-//#include "FormFactorHemiSpheroid.h"
+#include "FormFactorHemiEllipsoid.h"
 #include "FormFactorParallelepiped.h"
 #include "FormFactorPrism3.h"
 #include "FormFactorPrism6.h"
 #include "FormFactorPyramid.h"
 #include "FormFactorSphere.h"
-//#include "FormFactorSpheroid.h"
+#include "FormFactorSpheroid.h"
 #include "FormFactorTetrahedron.h"
 
 #include "gtest/gtest.h"
@@ -42,6 +42,66 @@ class FormFactorTest : public ::testing::Test
     virtual ~FormFactorTest(){}
 };
 
+
+//Test form factor of an anisotropic pyramid
+TEST_F(FormFactorTest, AnisoPyramid)
+{
+    double length = 12.;
+    double height = 5.;
+    double width = 14.;
+    double alpha = 0.8;
+    double tga = std::tan(alpha);
+    double volume = height*(length*width
+                            - (length + width)*height/tga
+                            + 4.0/3.0*height*height/(tga*tga));
+
+    FormFactorAnisoPyramid anisopyramid(length, width, height, alpha);
+
+    EXPECT_EQ("FormFactorAnisoPyramid",anisopyramid.getName());
+    EXPECT_DOUBLE_EQ(volume, anisopyramid.getVolume());
+    EXPECT_EQ(12., anisopyramid.getLength());
+    EXPECT_EQ(14., anisopyramid.getWidth());
+    EXPECT_EQ(5., anisopyramid.getHeight());
+    EXPECT_EQ(0.8, anisopyramid.getAlpha());
+    EXPECT_EQ((int)4, anisopyramid.getNumberOfStochasticParameters());
+
+    FormFactorAnisoPyramid *anisopyramidclone = anisopyramid.clone();
+    EXPECT_EQ("FormFactorAnisoPyramid",anisopyramidclone->getName());
+    EXPECT_DOUBLE_EQ(volume, anisopyramidclone->getVolume());
+    EXPECT_EQ(12., anisopyramidclone->getLength());
+    EXPECT_EQ(14., anisopyramidclone->getWidth());
+    EXPECT_EQ(5., anisopyramidclone->getHeight());
+    EXPECT_EQ(0.8, anisopyramidclone->getAlpha());
+    EXPECT_EQ((int)4, anisopyramidclone->getNumberOfStochasticParameters());
+}
+
+//Test form factor of an hemiellipsoid
+TEST_F(FormFactorTest, HemiEllipsoid)
+{
+    double radius_a = 6.;
+    double radius_b = 7.;
+    double height = 5.;
+
+    double volume = 2.*M_PI*radius_a*radius_b*height/3.;
+
+    FormFactorHemiEllipsoid hemiellipsoid(radius_a, radius_b, height);
+
+    EXPECT_EQ("FormFactorHemiEllipsoid",hemiellipsoid.getName());
+    EXPECT_EQ(6., hemiellipsoid.getRadiusA());
+    EXPECT_EQ(7., hemiellipsoid.getRadiusB());
+    EXPECT_EQ(5., hemiellipsoid.getHeight());
+    EXPECT_DOUBLE_EQ(volume, hemiellipsoid.getVolume());
+    EXPECT_EQ((int)3, hemiellipsoid.getNumberOfStochasticParameters());
+
+    FormFactorHemiEllipsoid *hemiellipsoidclone = hemiellipsoid.clone();
+    EXPECT_EQ("FormFactorHemiEllipsoid",hemiellipsoidclone->getName());
+    EXPECT_EQ(6., hemiellipsoidclone->getRadiusA());
+    EXPECT_EQ(7., hemiellipsoidclone->getRadiusB());
+    EXPECT_EQ(5., hemiellipsoidclone->getHeight());
+    EXPECT_DOUBLE_EQ(volume, hemiellipsoidclone->getVolume());
+    EXPECT_EQ((int)3, hemiellipsoidclone->getNumberOfStochasticParameters());
+}
+
 // Test form factor of a box
 TEST_F(FormFactorTest, Box)
 {
@@ -56,25 +116,24 @@ TEST_F(FormFactorTest, Box)
     EXPECT_EQ(7., box.getWidth());
     EXPECT_EQ(5., box.getHeight());
     EXPECT_EQ(3., box.getRadius());
-    EXPECT_EQ(volume, box.getVolume());
-    EXPECT_EQ(3, box.getNumberOfStochasticParameters());
+    EXPECT_DOUBLE_EQ(volume, box.getVolume());
+    EXPECT_EQ((int)3, box.getNumberOfStochasticParameters());
 
     FormFactorBox *boxclone = box.clone();
-
     EXPECT_EQ("FormFactorBox",boxclone->getName());
     EXPECT_EQ(7., boxclone->getWidth());
     EXPECT_EQ(5., boxclone->getHeight());
     EXPECT_EQ(3., boxclone->getRadius());
-    EXPECT_EQ(volume, boxclone->getVolume());
-    EXPECT_EQ(3, boxclone->getNumberOfStochasticParameters());
+    EXPECT_DOUBLE_EQ(volume, boxclone->getVolume());
+    EXPECT_EQ((int)3, boxclone->getNumberOfStochasticParameters());
 }
 
 // Test form factor of a cone
 TEST_F(FormFactorTest, Cone)
 {
-    double radius = 3.;
+    double radius = 6.;
     double height = 5.;
-    double alpha = 0.5;
+    double alpha = 0.8;
     double tga = std::tan(alpha);
     double HdivRtga = height/tga/radius;
     double volume = M_PI/3.*tga*radius*radius*radius*
@@ -83,28 +142,27 @@ TEST_F(FormFactorTest, Cone)
     FormFactorCone cone(radius, height, alpha);
 
     EXPECT_EQ("FormFactorCone",cone.getName());
-    EXPECT_EQ(3., cone.getRadius());
+    EXPECT_EQ(6., cone.getRadius());
     EXPECT_EQ(5., cone.getHeight());
-    EXPECT_EQ(0.5, cone.getAlpha());
-    EXPECT_EQ(volume, cone.getVolume());
+    EXPECT_EQ(0.8, cone.getAlpha());
+    EXPECT_DOUBLE_EQ(volume, cone.getVolume());
     EXPECT_EQ((int)3, cone.getNumberOfStochasticParameters());
 
     FormFactorCone *coneclone = cone.clone();
-
     EXPECT_EQ("FormFactorCone",coneclone->getName());
-    EXPECT_EQ(3., coneclone->getRadius());
+    EXPECT_EQ(6., coneclone->getRadius());
     EXPECT_EQ(5., coneclone->getHeight());
-    EXPECT_EQ(0.5, coneclone->getAlpha());
-    EXPECT_EQ(volume, coneclone->getVolume());
+    EXPECT_EQ(0.8, coneclone->getAlpha());
+    EXPECT_DOUBLE_EQ(volume, coneclone->getVolume());
     EXPECT_EQ((int)3, coneclone->getNumberOfStochasticParameters());
 }
 
 // Test form factor of a cone6
 TEST_F(FormFactorTest, Cone6)
 {
-    double radius = 3.;
+    double radius = 6.;
     double height = 5.;
-    double alpha = 0.5;
+    double alpha = 0.8;
     double tga = std::tan(alpha);
     double HdivRtga = 2.*height/tga/radius/std::sqrt(3.);
     double volume = 3./4.*tga*radius*radius*radius*
@@ -113,48 +171,57 @@ TEST_F(FormFactorTest, Cone6)
     FormFactorCone6 cone6(radius, height, alpha);
 
     EXPECT_EQ("FormFactorCone6",cone6.getName());
-    EXPECT_EQ(3., cone6.getRadius());
+    EXPECT_EQ(6., cone6.getRadius());
     EXPECT_EQ(5., cone6.getHeight());
-    EXPECT_EQ(0.5, cone6.getAlpha());
-    EXPECT_EQ(volume, cone6.getVolume());
+    EXPECT_EQ(0.8, cone6.getAlpha());
+    EXPECT_DOUBLE_EQ(volume, cone6.getVolume());
     EXPECT_EQ((int)3, cone6.getNumberOfStochasticParameters());
 
     FormFactorCone6 *cone6clone = cone6.clone();
-
     EXPECT_EQ("FormFactorCone6",cone6clone->getName());
-    EXPECT_EQ(3., cone6clone->getRadius());
+    EXPECT_EQ(6., cone6clone->getRadius());
     EXPECT_EQ(5., cone6clone->getHeight());
-    EXPECT_EQ(0.5, cone6clone->getAlpha());
-    EXPECT_EQ(volume, cone6clone->getVolume());
+    EXPECT_EQ(0.8, cone6clone->getAlpha());
+    EXPECT_DOUBLE_EQ(volume, cone6clone->getVolume());
     EXPECT_EQ((int)3, cone6clone->getNumberOfStochasticParameters());
 }
 
 // Test form factor of a cuboctahedron
-//TEST_F(FormFactorTest, Cuboctahedron)
-//{
-//    double radius = 3.;
-//    double height = 4;
-//    double height_ratio = 1.;
-//    double alpha = 0.5;
-
-//    double tga = std::tan(alpha);
-//    double HdivRtga = height/half_side/tga;
-//    double ratioHdivRtga = height_ratio*height/half_side/tga;
-//double volume = 4./3.*tga*half_side*half_side*half_side*( 2.
-//         - (1. - HdivRtga)*(1. - HdivRtga)*(1. - HdivRtga)
-//           - (1. - ratioHdivRtga)*(1. - ratioHdivRtga)*(1. - ratioHdivRtga));
-
- //   FormFactorCuboctahedron cuboctahedron(radius, width, height, alpha);
-
- //   EXPECT_EQ(4., cuboctahedron.getHeight());
- //   EXPECT_EQ(3., cuboctahedron.getRadius());
- //   EXPECT_EQ(5., cuboctahedron.getWidth());
-    //EXPECT_EQ(5., cuboctahedron.getVolume());
- //   EXPECT_EQ(2, ellipsoid.getNumberOfStochasticParameters());
+TEST_F(FormFactorTest, Cuboctahedron)
+{
+    double half_side = 5.;
+    double height = 4;
+    double height_ratio = 1.;
+    double alpha = 0.8;
 
-    //FormFactorCuboctahedron *cuboctahedronclone = cuboctahedron.clone();
+    double tga = std::tan(alpha);
+    double HdivRtga = height/half_side/tga;
+    double ratioHdivRtga = height_ratio*height/half_side/tga;
+    double volume = 4./3.*tga*half_side*half_side*half_side*( 2.
+         - (1. - HdivRtga)*(1. - HdivRtga)*(1. - HdivRtga)
+           - (1. - ratioHdivRtga)*(1. - ratioHdivRtga)*(1. - ratioHdivRtga));
+
+    FormFactorCuboctahedron cuboctahedron(half_side, height,
+                                          height_ratio, alpha);
+
+    EXPECT_EQ("FormFactorCuboctahedron",cuboctahedron.getName());
+    EXPECT_EQ(4., cuboctahedron.getHeight());
+    EXPECT_EQ(5., cuboctahedron.getHalfSide());
+    EXPECT_EQ(1., cuboctahedron.getHeightRatio());
+    EXPECT_EQ(0.8, cuboctahedron.getAlpha());
+    EXPECT_DOUBLE_EQ(volume, cuboctahedron.getVolume());
+    EXPECT_EQ((int)4, cuboctahedron.getNumberOfStochasticParameters());
+
+    FormFactorCuboctahedron *cuboctahedronclone = cuboctahedron.clone();
+    EXPECT_EQ("FormFactorCuboctahedron",cuboctahedronclone->getName());
+    EXPECT_EQ(4., cuboctahedronclone->getHeight());
+    EXPECT_EQ(5., cuboctahedronclone->getHalfSide());
+    EXPECT_EQ(1., cuboctahedronclone->getHeightRatio());
+    EXPECT_EQ(0.8, cuboctahedronclone->getAlpha());
+    EXPECT_DOUBLE_EQ(volume, cuboctahedron.getVolume());
+    EXPECT_EQ((int)4, cuboctahedronclone->getNumberOfStochasticParameters());
 
-//}
+}
 
 // Test form factor of a cylinder
 TEST_F(FormFactorTest, Cylinder)
@@ -164,43 +231,46 @@ TEST_F(FormFactorTest, Cylinder)
     double volume = M_PI*radius*radius*height;
 
     FormFactorCylinder cylinder(height,radius);
-
     EXPECT_EQ("FormFactorCylinder",cylinder.getName());
     EXPECT_EQ(5., cylinder.getHeight());
     EXPECT_EQ(3., cylinder.getRadius());
-    EXPECT_EQ(volume, cylinder.getVolume());
+    EXPECT_DOUBLE_EQ(volume, cylinder.getVolume());
     EXPECT_EQ((int)2, cylinder.getNumberOfStochasticParameters());
 
     FormFactorCylinder *cylinderclone = cylinder.clone();
-
     EXPECT_EQ("FormFactorCylinder",cylinderclone->getName());
     EXPECT_EQ(5., cylinderclone->getHeight());
     EXPECT_EQ(3., cylinderclone-> getRadius());
-    EXPECT_EQ(volume, cylinderclone-> getVolume());
+    EXPECT_DOUBLE_EQ(volume, cylinderclone-> getVolume());
     EXPECT_EQ((int)2, cylinderclone-> getNumberOfStochasticParameters());
 }
 
-// Test form factor of an ellipsoid - check form factor
-//TEST_F(FormFactorTest, Ellipsoid)
-//{
-//    double radius = 3.;
-//    double width = 5.;
-//    double height = 4;
-//    double alpha = 0.5;
-    //double volume = ;
-
- //   FormFactorEllipsoid ellipsoid(radius, width, height, alpha);
-
- //   EXPECT_EQ("FormFactorEllipsoid",ellipsoid.getName());
- //   EXPECT_EQ(4., ellipsoid.getHeight());
- //   EXPECT_EQ(3., ellipsoid.getRadius());
- //   EXPECT_EQ(5., ellipsoid.getWidth());
- //   EXPECT_EQ(5., ellipsoid.getVolume());
- //   EXPECT_EQ(2, ellipsoid.getNumberOfStochasticParameters());
-
-    //FormFactorEllipsoid *ellispoidclone = ellipsoid.clone();
+// Test form factor of an ellipsoidal cylinder
+TEST_F(FormFactorTest, EllipsoidalCylinder)
+{
+    double radius = 3.;
+    double width = 5.;
+    double height = 4;
+    double volume = M_PI*radius*width*height;
+
+    FormFactorEllipsoidalCylinder ellipscyl(radius, width, height);
+
+    EXPECT_EQ("FormFactorEllipsoidalCylinder",ellipscyl.getName());
+    EXPECT_EQ(4., ellipscyl.getHeight());
+    EXPECT_EQ(3., ellipscyl.getRadius());
+    EXPECT_EQ(5., ellipscyl.getWidth());
+    EXPECT_DOUBLE_EQ(volume, ellipscyl.getVolume());
+    EXPECT_EQ((int)3, ellipscyl.getNumberOfStochasticParameters());
+
+    FormFactorEllipsoidalCylinder *ellipscylclone = ellipscyl.clone();
+    EXPECT_EQ("FormFactorEllipsoidalCylinder",ellipscylclone->getName());
+    EXPECT_EQ(4., ellipscylclone->getHeight());
+    EXPECT_EQ(3., ellipscylclone->getRadius());
+    EXPECT_EQ(5., ellipscylclone->getWidth());
+    EXPECT_DOUBLE_EQ(volume, ellipscylclone->getVolume());
+    EXPECT_EQ((int)3, ellipscylclone->getNumberOfStochasticParameters());
 
-//}
+}
 
 // Test form factor of a full sphere
 TEST_F(FormFactorTest, FullSphere)
@@ -213,14 +283,14 @@ TEST_F(FormFactorTest, FullSphere)
     EXPECT_EQ("FormFactorFullSphere",fullsphere.getName());
     EXPECT_EQ(5., fullsphere.getRadius());
     EXPECT_EQ(2.*5., fullsphere.getHeight());
-    EXPECT_EQ(volume, fullsphere.getVolume());
+    EXPECT_DOUBLE_EQ(volume, fullsphere.getVolume());
     EXPECT_EQ((int)1, fullsphere.getNumberOfStochasticParameters());
 
     FormFactorFullSphere *fullsphereclone = fullsphere.clone();
     EXPECT_EQ("FormFactorFullSphere",fullsphereclone->getName());
     EXPECT_EQ(5., fullsphereclone->getRadius());
     EXPECT_EQ(2.*5., fullsphereclone->getHeight());
-    EXPECT_EQ(volume, fullsphereclone->getVolume());
+    EXPECT_DOUBLE_EQ(volume, fullsphereclone->getVolume());
     EXPECT_EQ((int)1, fullsphereclone->getNumberOfStochasticParameters());
 }
 
@@ -229,21 +299,22 @@ TEST_F(FormFactorTest, FullSpheroid)
 {
     double radius = 3.;
     double height = 5.;
-   // double volume = 2./3.*M_PI*radius*radius*height;
+    double volume = 2./3.*M_PI*radius*radius*height;
 
     FormFactorFullSpheroid fullspheroid(radius,height);
 
     EXPECT_EQ("FormFactorFullSpheroid",fullspheroid.getName());
     EXPECT_EQ(3., fullspheroid.getRadius());
     EXPECT_EQ(5., fullspheroid.getHeight());
-   // EXPECT_EQ(volume, fullspheroid.getVolume());
+    EXPECT_DOUBLE_EQ(volume, fullspheroid.getVolume());
     EXPECT_EQ((int)2, fullspheroid.getNumberOfStochasticParameters());
 
-  //  FormFactorFullSpheroid *fullspheroidclone = fullspheroid.clone();
-  //  EXPECT_EQ(3., fullspheroidclone->getRadius());
-  //  EXPECT_EQ(5, fullspheroidclone->getHeight());
-  /*  EXPECT_EQ(volume, fullspheroidclone->getVolume());
-    EXPECT_EQ((int)2, fullspheroidclone->getNumberOfStochasticParameters());*/
+    FormFactorFullSpheroid *fullspheroidclone = fullspheroid.clone();
+    EXPECT_EQ("FormFactorFullSpheroid",fullspheroidclone->getName());
+    EXPECT_EQ(3., fullspheroidclone->getRadius());
+    EXPECT_EQ(5, fullspheroidclone->getHeight());
+    EXPECT_DOUBLE_EQ(volume, fullspheroidclone->getVolume());
+    EXPECT_EQ((int)2, fullspheroidclone->getNumberOfStochasticParameters());
 }
 
 
@@ -259,14 +330,14 @@ TEST_F(FormFactorTest, Parallelepiped)
    EXPECT_EQ("FormFactorParallelepiped",parallelepiped.getName());
    EXPECT_EQ(10., parallelepiped.getHeight());
    EXPECT_EQ(11., parallelepiped.getRadius());
-   EXPECT_EQ(volume, parallelepiped.getVolume());
+   EXPECT_DOUBLE_EQ(volume, parallelepiped.getVolume());
    EXPECT_EQ((int)2, parallelepiped.getNumberOfStochasticParameters());
 
    FormFactorParallelepiped *parallelepipedclone = parallelepiped.clone();
    EXPECT_EQ("FormFactorParallelepiped",parallelepipedclone->getName());
    EXPECT_EQ(10., parallelepipedclone-> getHeight());
    EXPECT_EQ(11., parallelepipedclone-> getRadius());
-   EXPECT_EQ(volume, parallelepipedclone-> getVolume());
+   EXPECT_DOUBLE_EQ(volume, parallelepipedclone-> getVolume());
    EXPECT_EQ((int)2, parallelepipedclone-> getNumberOfStochasticParameters());
 }
 
@@ -282,15 +353,15 @@ TEST_F(FormFactorTest, Prism3)
     EXPECT_EQ("FormFactorPrism3",prism3.getName());
     EXPECT_EQ(4., prism3.getHeight());
     EXPECT_EQ(3., prism3.getHalfSide());
-    EXPECT_EQ(volume, prism3.getVolume());
+    EXPECT_DOUBLE_EQ(volume, prism3.getVolume());
     EXPECT_EQ((int)2, prism3.getNumberOfStochasticParameters());
 
     FormFactorPrism3 *prism3clone = prism3.clone();
 
     EXPECT_EQ("FormFactorPrism3",prism3clone->getName());
-    EXPECT_EQ(double(4.), prism3clone->getHeight());
+    EXPECT_EQ(4., prism3clone->getHeight());
     EXPECT_EQ(3., prism3clone->getHalfSide());
-    EXPECT_EQ(volume, prism3clone->getVolume());
+    EXPECT_DOUBLE_EQ(volume, prism3clone->getVolume());
     EXPECT_EQ((int)2, prism3clone->getNumberOfStochasticParameters());
 }
 
@@ -306,7 +377,7 @@ TEST_F(FormFactorTest, Prism6)
     EXPECT_EQ("FormFactorPrism6",prism6.getName());
     EXPECT_EQ(4., prism6.getHeight());
     EXPECT_EQ(3., prism6.getRadius());
-    EXPECT_EQ(volume, prism6.getVolume());
+    EXPECT_DOUBLE_EQ(volume, prism6.getVolume());
     EXPECT_EQ((int)2, prism6.getNumberOfStochasticParameters());
 
     FormFactorPrism6 *prism6clone = prism6.clone();
@@ -314,7 +385,7 @@ TEST_F(FormFactorTest, Prism6)
     EXPECT_EQ("FormFactorPrism6",prism6clone->getName());
     EXPECT_EQ(4., prism6clone->getHeight());
     EXPECT_EQ(3., prism6clone->getRadius());
-    EXPECT_EQ(volume, prism6clone->getVolume());
+    EXPECT_DOUBLE_EQ(volume, prism6clone->getVolume());
     EXPECT_EQ((int)2, prism6clone->getNumberOfStochasticParameters());
 }
 
@@ -322,8 +393,8 @@ TEST_F(FormFactorTest, Prism6)
 TEST_F(FormFactorTest, Pyramid)
 {
     double height = 4.;
-    double half_side = 3.;
-    double alpha = 0.5;
+    double half_side = 5.;
+    double alpha = 0.8;
     double tga = std::tan(alpha);
     double HdivRtga = height/half_side/tga;
     double volume = 4./3.*tga*half_side*half_side*half_side*( 1.
@@ -333,17 +404,17 @@ TEST_F(FormFactorTest, Pyramid)
 
     EXPECT_EQ("FormFactorPyramid", pyramid.getName());
     EXPECT_EQ(4., pyramid.getHeight());
-    EXPECT_EQ(3., pyramid.getHalfSide());
-    EXPECT_EQ(0.5, pyramid.getAlpha());
-    EXPECT_EQ(volume, pyramid.getVolume());
+    EXPECT_EQ(5., pyramid.getHalfSide());
+    EXPECT_EQ(0.8, pyramid.getAlpha());
+    EXPECT_DOUBLE_EQ(volume, pyramid.getVolume());
     EXPECT_EQ((int)3, pyramid.getNumberOfStochasticParameters());
 
     FormFactorPyramid *pyramidclone = pyramid.clone();
     EXPECT_EQ("FormFactorPyramid", pyramidclone->getName());
     EXPECT_EQ(4., pyramidclone->getHeight());
-    EXPECT_EQ(3., pyramidclone->getHalfSide());
-    EXPECT_EQ(0.5, pyramidclone->getAlpha());
-    EXPECT_EQ(volume, pyramidclone->getVolume());
+    EXPECT_EQ(5., pyramidclone->getHalfSide());
+    EXPECT_EQ(0.8, pyramidclone->getAlpha());
+    EXPECT_DOUBLE_EQ(volume, pyramidclone->getVolume());
     EXPECT_EQ((int)3, pyramidclone->getNumberOfStochasticParameters());
 }
 
@@ -360,21 +431,48 @@ TEST_F(FormFactorTest, Sphere)
 
     EXPECT_EQ("FormFactorSphere", sphere.getName());
     EXPECT_EQ(3., sphere.getHeight());
-    EXPECT_EQ(volume, sphere.getVolume());
+    EXPECT_DOUBLE_EQ(volume, sphere.getVolume());
     EXPECT_EQ((int)2, sphere.getNumberOfStochasticParameters());
 
     FormFactorSphere *sphereclone = sphere.clone();
     EXPECT_EQ("FormFactorSphere", sphereclone->getName());
-    EXPECT_EQ(3., sphereclone->getHeight());
+    EXPECT_DOUBLE_EQ(3., sphereclone->getHeight());
     EXPECT_EQ((int)2, sphereclone->getNumberOfStochasticParameters());
 }
 
+// Test form factor of a spheroid
+TEST_F(FormFactorTest, Spheroid)
+{
+    double height = 5.;
+    double radius = 3.;
+    double flattening = 1.5;
+    double total_height =2.*flattening *radius;
+    double volume = M_PI*radius*height/flattening*(1.-height/(3.*flattening*radius));
+
+    FormFactorSpheroid spheroid(radius, height,flattening);
+
+    EXPECT_EQ("FormFactorSpheroid", spheroid.getName());
+    EXPECT_EQ(5., spheroid.getHeight());
+    EXPECT_EQ(3., spheroid.getRadius());
+    EXPECT_DOUBLE_EQ(total_height, spheroid.getHeightFullSpheroid());
+    EXPECT_DOUBLE_EQ(volume, spheroid.getVolume());
+    EXPECT_EQ((int)3, spheroid.getNumberOfStochasticParameters());
+
+    FormFactorSpheroid *spheroidclone = spheroid.clone();
+    EXPECT_EQ("FormFactorSpheroid", spheroidclone->getName());
+    EXPECT_EQ(5., spheroidclone->getHeight());
+    EXPECT_EQ(3., spheroidclone->getRadius());
+    EXPECT_DOUBLE_EQ(total_height, spheroidclone->getHeightFullSpheroid());
+    EXPECT_DOUBLE_EQ(volume, spheroidclone->getVolume());
+    EXPECT_EQ((int)3, spheroidclone->getNumberOfStochasticParameters());
+}
+
 // Test form factor of a tetrahedron
 TEST_F(FormFactorTest, Tetrahedron)
 {
-    double height = 5.;
-    double half_side = 3.;
-    double alpha = 0.5;
+    double height = 4.;
+    double half_side = 8.;
+    double alpha = 0.8;
     double tga = std::tan(alpha);
     double sqrt3HdivRtga = std::sqrt(3.)*height/half_side/tga;
     double volume = tga/3.*half_side*half_side*half_side*(
@@ -383,21 +481,22 @@ TEST_F(FormFactorTest, Tetrahedron)
     FormFactorTetrahedron tetrahedron(half_side, height, alpha);
 
     EXPECT_EQ("FormFactorTetrahedron", tetrahedron.getName());
-    EXPECT_EQ(5., tetrahedron.getHeight());
-    EXPECT_EQ(3., tetrahedron.getHalfSide());
-    EXPECT_EQ(0.5, tetrahedron.getAlpha());
-    EXPECT_EQ(volume, tetrahedron.getVolume());
+    EXPECT_EQ(4., tetrahedron.getHeight());
+    EXPECT_EQ(8., tetrahedron.getHalfSide());
+    EXPECT_EQ(0.8, tetrahedron.getAlpha());
+    EXPECT_DOUBLE_EQ(volume, tetrahedron.getVolume());
     EXPECT_EQ((int)3, tetrahedron.getNumberOfStochasticParameters());
 
     FormFactorTetrahedron *tetrahedronclone = tetrahedron.clone();
-
     EXPECT_EQ("FormFactorTetrahedron", tetrahedronclone->getName());
-    EXPECT_EQ(5., tetrahedronclone->getHeight());
-    EXPECT_EQ(3., tetrahedronclone->getHalfSide());
-    EXPECT_EQ(0.5, tetrahedronclone->getAlpha());
-    EXPECT_EQ(volume, tetrahedronclone->getVolume());
+    EXPECT_EQ(4., tetrahedronclone->getHeight());
+    EXPECT_EQ(8., tetrahedronclone->getHalfSide());
+    EXPECT_EQ(0.8, tetrahedronclone->getAlpha());
+    EXPECT_DOUBLE_EQ(volume, tetrahedronclone->getVolume());
     EXPECT_EQ((int)3, tetrahedronclone->getNumberOfStochasticParameters());
 }
 
+
+
 #endif // FORMFACTORTEST_H