diff --git a/Code/Mantid/Framework/Geometry/CMakeLists.txt b/Code/Mantid/Framework/Geometry/CMakeLists.txt
index ebca772966b9ef736b20af219f20199c8774370f..728d7896d36581e1250df6ce03354723ed1afaf7 100644
--- a/Code/Mantid/Framework/Geometry/CMakeLists.txt
+++ b/Code/Mantid/Framework/Geometry/CMakeLists.txt
@@ -193,6 +193,7 @@ set ( TEST_FILES
 	test/ComponentParserTest.h
 	test/ComponentTest.h
 	test/ConeTest.h
+	test/ConventionalCellTest.h
 	test/ConvexPolygonTest.h
 	test/CylinderTest.h
 	test/DetectorGroupTest.h
@@ -203,9 +204,6 @@ set ( TEST_FILES
 	test/IMDDimensionFactoryTest.h
 	test/IMDDimensionTest.h
 	test/IndexingUtilsTest.h
-        test/ReducedCellTest.h
-        test/ConventionalCellTest.h
-        test/ScalarUtilsTest.h
 	test/InstrumentDefinitionParserTest.h
 	test/InstrumentRayTracerTest.h
 	test/InstrumentTest.h
@@ -217,8 +215,8 @@ set ( TEST_FILES
 	test/MDHistoDimensionBuilderTest.h
 	test/MDHistoDimensionTest.h
 	test/MDImplicitFunctionTest.h
+	test/MDPlaneImplicitFunctionTest.h
 	test/MDPlaneTest.h
-        test/MDPlaneImplicitFunctionTest.h
 	test/MapSupportTest.h
 	test/MaterialTest.h
 	test/MathSupportTest.h
@@ -238,10 +236,12 @@ set ( TEST_FILES
 	test/ParameterMapTest.h
 	test/ParametrizedComponentTest.h
 	test/PlaneTest.h
+	test/PointGroupTest.h
 	test/PolygonEdgeTest.h
 	test/QuadrilateralTest.h
 	test/RectangularDetectorPixelTest.h
 	test/RectangularDetectorTest.h
+	test/ReducedCellTest.h
 	test/ReferenceFrameTest.h
 	test/ReflectionConditionTest.h
 	test/RotCounterTest.h
@@ -252,6 +252,7 @@ set ( TEST_FILES
 	test/RulesSurfPointTest.h
 	test/RulesTest.h
 	test/RulesUnionTest.h
+	test/ScalarUtilsTest.h
 	test/ShapeFactoryTest.h
 	test/SphereTest.h
 	test/SurfaceFactoryTest.h
diff --git a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h
index d523bde9a65a567e70893af4cd218b81ee7fb946..fb6e5551f7040770e2d8cea5730865b303f874e9 100644
--- a/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h
+++ b/Code/Mantid/Framework/Geometry/inc/MantidGeometry/Crystal/PointGroup.h
@@ -134,7 +134,12 @@ namespace Geometry
     virtual std::string getName() { return "-31m (Trigonal - Rhombohedral)"; }
     /// Return true if the hkls are equivalent.
     virtual bool isEquivalent(V3D hkl, V3D hkl2) 
-     { double h=hkl[0];double k=hkl[1];double l=hkl[2]; return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l)) || (hkl2 == V3D(k,h,-l)) || (hkl2 == V3D(h-k,-k,-l)) || (hkl2 == V3D(-h,-h+k,-l)) || (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l)) || (hkl2 == V3D(-k,-h,l)) || (hkl2 == V3D(-h+k,k,l)) || (hkl2 == V3D(h,h-k,l)); }
+     { double h=hkl[0];double k=hkl[1];double l=hkl[2];
+     return (hkl2 == V3D(h,k,l)) || (hkl2 == V3D(-k,h-k,l)) || (hkl2 == V3D(-h+k,-h,l))
+         || (hkl2 == V3D(-k,-h,-l)) || (hkl2 == V3D(-h+k,k,-l)) || (hkl2 == V3D(h,h-k,-l))
+         || (hkl2 == V3D(-h,-k,-l)) || (hkl2 == V3D(k,-h+k,-l)) || (hkl2 == V3D(h-k,h,-l))
+         || (hkl2 == V3D(k,h,l)) || (hkl2 == V3D(h-k,-k,l)) || (hkl2 == V3D(-h,-h+k,l));
+     }
   };
 
   //------------------------------------------------------------------------
diff --git a/Code/Mantid/Framework/Geometry/test/PointGroupTest.h b/Code/Mantid/Framework/Geometry/test/PointGroupTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..cae8f5ebb404d77526e6d5e0b76d80e3bc0b4999
--- /dev/null
+++ b/Code/Mantid/Framework/Geometry/test/PointGroupTest.h
@@ -0,0 +1,108 @@
+#ifndef MANTID_GEOMETRY_POINTGROUPTEST_H_
+#define MANTID_GEOMETRY_POINTGROUPTEST_H_
+
+#include <cxxtest/TestSuite.h>
+#include "MantidKernel/Timer.h"
+#include "MantidKernel/Strings.h"
+#include "MantidKernel/System.h"
+#include <iostream>
+#include <iomanip>
+
+#include "MantidGeometry/Crystal/PointGroup.h"
+#include "/usr/lib/gcc/x86_64-redhat-linux/4.4.4/include/stdarg.h"
+
+using namespace Mantid;
+using namespace Mantid::Geometry;
+
+class PointGroupTest : public CxxTest::TestSuite
+{
+public:
+
+  void check_point_group(std::string name, V3D hkl, size_t numEquiv, V3D * equiv)
+  {
+    std::vector<PointGroup_sptr> pgs = getAllPointGroups();
+    for (size_t i=0; i<pgs.size(); i++)
+    {
+      if (pgs[i]->getName().substr(0, name.size()) == name)
+      {
+        for (size_t j=0; j<numEquiv; j++)
+        {
+          //std::cout << j << std::endl;
+          if (!pgs[i]->isEquivalent(hkl, equiv[j]))
+          {
+            TSM_ASSERT( name + " : " + hkl.toString() + " is not equivalent to " +  equiv[j].toString(), false);
+          }
+        }
+        return;
+      }
+    }
+    TSM_ASSERT("Point group not found", false);
+  }
+
+  void test_all_point_groups()
+  {
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,-3)};
+    check_point_group("-1", V3D(1,2,3), 2, equiv); }
+    { V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,-3), V3D(-1,2,-3), V3D(1,-2,3)  };
+    check_point_group("1 2/m 1", V3D(1,2,3), 4, equiv); }
+    { V3D equiv[] = {V3D(1,2,3), V3D(-1,-2,3), V3D(-1,-2,-3), V3D(1,2,-3)  };
+    check_point_group("1 1 2/m", V3D(1,2,3), 4, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(1,-2,3), V3D(-1,2,3)};
+    check_point_group("mmm", V3D(1,2,3), 8, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3)};
+    check_point_group("4/m", V3D(1,2,3), 8, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3), V3D(-2,1,3), V3D(2,-1,3), V3D(-1,2,-3), V3D(1,-2,-3), V3D(2,1,-3), V3D(-2,-1,-3), V3D(-1,-2,-3), V3D(1,2,-3), V3D(2,-1,-3), V3D(-2,1,-3), V3D(1,-2,3), V3D(-1,2,3),V3D(-2,-1,3), V3D(2,1,3)};
+    check_point_group("4/mmm", V3D(1,2,3), 16, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3), V3D(-1+2,-1,3), V3D(-1,-2,-3), V3D(2,-1+2,-3), V3D(1-2,1,-3)};
+    check_point_group("-3", V3D(1,2,3), 6, equiv); }
+    { V3D equiv[] = {
+        V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),
+        V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3),
+        V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),
+        V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)};
+    check_point_group("-31m", V3D(1,2,3), 12, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3)};
+    check_point_group("-3m1", V3D(1,2,3), 12, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3)};
+    check_point_group("6/m", V3D(1,2,3), 12, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-2,1-2,3),V3D(-1+2,-1,3),V3D(-1,-2,3),V3D(2,-1+2,3),V3D(1-2,1,3),V3D(2,1,-3),V3D(1-2,-2,-3),V3D(-1,-1+2,-3),V3D(-2,-1,-3),V3D(-1+2,2,-3),V3D(1,1-2,-3),V3D(-1,-2,-3),V3D(2,-1+2,-3),V3D(1-2,1,-3),V3D(1,2,-3),V3D(-2,1-2,-3),V3D(-1+2,-1,-3),V3D(-2,-1,3),V3D(-1+2,2,3),V3D(1,1-2,3),V3D(2,1,3),V3D(1-2,-2,3),V3D(-1,-1+2,3)};
+    check_point_group("6/mmm", V3D(1,2,3), 24, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1)};
+    check_point_group("m-3", V3D(1,2,3), 24, equiv); }
+    { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),V3D(3,1,2),V3D(3,-1,-2),V3D(-3,-1,2),V3D(-3,1,-2),V3D(2,3,1),V3D(-2,3,-1),V3D(2,-3,-1),V3D(-2,-3,1),V3D(2,1,-3),V3D(-2,-1,-3),V3D(2,-1,3),V3D(-2,1,3),V3D(1,3,-2),V3D(-1,3,2),V3D(-1,-3,-2),V3D(1,-3,2),V3D(3,2,-1),V3D(3,-2,1),V3D(-3,2,1),V3D(-3,-2,-1),V3D(-1,-2,-3),V3D(1,2,-3),V3D(1,-2,3),V3D(-1,2,3),V3D(-3,-1,-2),V3D(-3,1,2),V3D(3,1,-2),V3D(3,-1,2),V3D(-2,-3,-1),V3D(2,-3,1),V3D(-2,3,1),V3D(2,3,-1),V3D(-2,-1,3),V3D(2,1,3),V3D(-2,1,-3),V3D(2,-1,-3),V3D(-1,-3,2),V3D(1,-3,-2),V3D(1,3,2),V3D(-1,3,-2),V3D(-3,-2,1),V3D(-3,2,-1),V3D(3,-2,-1),V3D(3,2,1)};
+    check_point_group("m-3m", V3D(1,2,3), 48, equiv); }
+
+    if (false)
+    {
+      { V3D equiv[] = {V3D(1,2,3)};
+      check_point_group("1", V3D(1,2,3), 1, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,2,-3)};
+      check_point_group("2", V3D(1,2,3), 2, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(1,2,-3)};
+      check_point_group("m", V3D(1,2,3), 2, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-1,2,-3),V3D(1,-2,-3),};
+      check_point_group("222", V3D(1,2,3), 4, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(1,-2,3),V3D(-1,2,3),};
+      check_point_group("mm2", V3D(1,2,3), 4, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),};
+      check_point_group("4", V3D(1,2,3), 4, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3),};
+      check_point_group("-4", V3D(1,2,3), 4, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),  V3D(-1,2,-3),V3D(1,-2,-3),V3D(2,1,-3),V3D(-2,-1,-3),};
+      check_point_group("422", V3D(1,2,3), 8, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),  V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),};
+      check_point_group("4mm", V3D(1,2,3), 8, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(-2,1,3),V3D(2,-1,3),  V3D(1,-2,3),V3D(-1,2,3),V3D(-2,-1,3),V3D(2,1,3),};
+      check_point_group("4mm", V3D(1,2,3), 8, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3),  V3D(-1,2,-3),V3D(1,-2,-3),V3D(-2,-1,3),V3D(2,1,3),};
+      check_point_group("-42m", V3D(1,2,3), 8, equiv); }
+      { V3D equiv[] = {V3D(1,2,3),V3D(-1,-2,3),V3D(2,-1,-3),V3D(-2,1,-3),  V3D(1,-2,3),V3D(-1,2,3),V3D(2,1,-3),V3D(-2,-1,-3),};
+      check_point_group("-4m2", V3D(1,2,3), 8, equiv); }
+    }
+  }
+
+
+};
+
+
+#endif /* MANTID_GEOMETRY_POINTGROUPTEST_H_ */