diff --git a/modules/base/pymod/stutil.py b/modules/base/pymod/stutil.py
index 474861c88e9e6586e947cfae7af348d85fb6ee54..1c485127ec202785126186195892dc96264e97a6 100644
--- a/modules/base/pymod/stutil.py
+++ b/modules/base/pymod/stutil.py
@@ -45,7 +45,7 @@ def Mean(xs):
   """
   if len(xs)==0:
     raise RuntimeError("Can't calculate mean of empty sequence")
-  return sum(xs)/len(xs)
+  return float(sum(xs))/len(xs)
 
 @FloatValueExtract
 def Median(xs):
@@ -86,7 +86,7 @@ def Correl(xs, ys):
   
     sum[(xi-<x>)*(yi-<y>)]
   r=----------------------
-          (n-1)*sx*sy
+          sx*sy
           
   where <x>, <y> are the mean of dataset xs and ys, and, sx and sy are the 
   standard deviations.
@@ -103,9 +103,9 @@ def Correl(xs, ys):
     cross_term+=(x-mean_x)*(y-mean_y)
     sigma_x+=(x-mean_x)**2
     sigma_y+=(y-mean_y)**2
-  sigma_x=math.sqrt(sigma_x/len(xs))
-  sigma_y=math.sqrt(sigma_y/len(ys))  
-  return cross_term/((len(xs)-1)*sigma_x*sigma_y)
+  sigma_x=math.sqrt(sigma_x)
+  sigma_y=math.sqrt(sigma_y)
+  return cross_term/(sigma_x*sigma_y)
 
 def Histogram(xs, bounds, num_bins):
   bins=[0 for i in range(num_bins)]
diff --git a/modules/base/tests/CMakeLists.txt b/modules/base/tests/CMakeLists.txt
index be13a37fffbbb6a8a52fd62c535ff856266c5726..d18e16f0765d8c2cd562338655b90f6ed9e97750 100644
--- a/modules/base/tests/CMakeLists.txt
+++ b/modules/base/tests/CMakeLists.txt
@@ -2,6 +2,7 @@ set(OST_BASE_UNIT_TESTS
   test_generic_property.cc
   test_string_ref.cc
   test_pod_vector.cc
+  test_stutil.py
   tests.cc
 )
 
diff --git a/modules/base/tests/test_stutil.py b/modules/base/tests/test_stutil.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c64f0e6b4f071f484f6220195b03a8faa446ddd
--- /dev/null
+++ b/modules/base/tests/test_stutil.py
@@ -0,0 +1,82 @@
+import unittest
+from ost import stutil
+
+class TestStUtils(unittest.TestCase):
+
+  def setUp(self):
+    self.data1 = [0,1,2,3,4,5,6,-5,-4,-3,-2,-1,1]
+    self.data2 = [1,2,3,4,5,6,7,8,9,10,11,12,13]
+    self.data3 = [0.1,0.5,0.7,2.4,0.5,4.1,0.9,-1.1,-0.5,0.7,-1.4,-7.5,8.5]
+
+    self.mean = 0.5384615385
+    self.mean2 = 0.6076923077
+    self.median = 1
+    self.median2 = 0.5
+    self.stddev = 3.3192998478
+    self.stddev2 = 3.4192805223
+    self.minimum = -5
+    self.minimum2 = -7.5
+    self.maximum = 6
+    self.maximum2 = 8.5
+    self.correl = -0.39639313
+    self.correl2 = -0.0619291504
+
+
+  def isSimilar(self, value, reference, accuracy):
+    if abs(value - reference) <= accuracy:
+      return True
+    return False
+
+  def testMean(self):
+    assert self.isSimilar(stutil.Mean(self.data1), self.mean, 0.001), \
+           "Mean (%f) does not correspond to precalculated mean (%f)" % \
+           (stutil.Mean(self.data1), self.mean)
+    assert self.isSimilar(stutil.Mean(self.data3), self.mean2, 0.001), \
+           "Mean (%f) does not correspond to precalculated mean (%f)" % \
+           (stutil.Mean(self.data3), self.mean2)
+
+  def testMedian(self):
+    assert self.isSimilar(stutil.Median(self.data1), self.median, 0.001), \
+           "Median (%f) does not correspond to precalculated median (%f)" % \
+           (stutil.Median(self.data1), self.median)
+    assert self.isSimilar(stutil.Median(self.data3), self.median2, 0.001), \
+           "Median (%f) does not correspond to precalculated median (%f)" % \
+           (stutil.Median(self.data3), self.median2)
+
+  def testStddev(self):
+    assert self.isSimilar(stutil.StdDev(self.data1), self.stddev, 0.001), \
+           "StdDev (%f) does not correspond to precalculated StdDev (%f)" % \
+           (stutil.StdDev(self.data1), self.stddev)
+    assert self.isSimilar(stutil.StdDev(self.data3), self.stddev2, 0.001), \
+           "StdDev (%f) does not correspond to precalculated StdDev (%f)" % \
+           (stutil.StdDev(self.data3), self.stddev2)
+
+  def testMinimum(self):
+    assert self.isSimilar(stutil.Min(self.data1), self.minimum, 0.001), \
+           "Minimum (%f) does not correspond to precalculated minimum (%f)" % \
+           (stutil.Min(self.data1), self.minimum)
+    assert self.isSimilar(stutil.Min(self.data3), self.minimum2, 0.001), \
+           "Minimum (%f) does not correspond to precalculated minimum (%f)" % \
+           (stutil.Min(self.data3), self.minimum2)
+
+  def testMaximum(self):
+    assert self.isSimilar(stutil.Max(self.data1), self.maximum, 0.001), \
+           "Maximum (%f) does not correspond to precalculated maximum (%f)" % \
+           (stutil.Max(self.data1), self.maximum)
+    assert self.isSimilar(stutil.Max(self.data3), self.maximum2, 0.001), \
+           "Maximum (%f) does not correspond to precalculated maximum (%f)" % \
+           (stutil.Max(self.data3), self.maximum2)
+
+  def testCorrel(self):
+    assert self.isSimilar(stutil.Correl(self.data1, self.data2), self.correl, 0.001), \
+           "Correl (%f) does not correspond to precalculated correl (%f)" % \
+           (stutil.Correl(self.data1, self.data2), self.correl)
+    assert self.isSimilar(stutil.Correl(self.data3, self.data2), self.correl2, 0.001), \
+           "Correl (%f) does not correspond to precalculated correl (%f)" % \
+           (stutil.Correl(self.data3, self.data2), self.correl2)
+
+if __name__ == "__main__":
+  try:
+    unittest.main()
+  except Exception, e:
+    print e
\ No newline at end of file