diff --git a/modules/base/pymod/table.py b/modules/base/pymod/table.py
index 12509583a90ae6e483cffe2d817d718dae450729..43a94db670535e5dfed9b2f964229c7c34133875 100644
--- a/modules/base/pymod/table.py
+++ b/modules/base/pymod/table.py
@@ -508,6 +508,21 @@ class Table:
       return sign*cmp(lhs[key_index], rhs[key_index])
     self.rows=sorted(self.rows, _key_cmp)
     
+  def GetUnique(self, col, ignore_nan=True):
+    """
+    Extract a list of all unique values from one column
+    """
+    idx = self.GetColIndex(col)
+    seen = {}
+    result = []
+    for row in self.rows:
+      item = row[idx]
+      if item!=None or ignore_nan==False:
+        if item in seen: continue
+        seen[item] = 1
+        result.append(item)
+    return result
+    
   def Zip(self, *args):
     """
     Allows to conveniently iterate over a selection of columns, e.g.
diff --git a/modules/base/tests/test_table.py b/modules/base/tests/test_table.py
index f83b9512c5803fae95c96cb1f2bc84a0b6050f36..f41418193b943e309bb0930c2448e4e84bab4e5d 100644
--- a/modules/base/tests/test_table.py
+++ b/modules/base/tests/test_table.py
@@ -1130,6 +1130,17 @@ class TestTable(unittest.TestCase):
     self.assertFalse(tab.IsEmpty('a', ignore_nan=False))
     self.assertFalse(tab.IsEmpty('b', ignore_nan=False))
     self.assertFalse(tab.IsEmpty('c', ignore_nan=False))
+    
+  def testUnique(self):
+    tab = self.CreateTestTable()
+    tab.AddRow(['foo',4, 3.3])
+    tab.AddRow([None,5, 6.3])
+    self.assertEquals(tab.GetUnique('first'), ['x','foo'])
+    self.assertEquals(tab.GetUnique('first', ignore_nan=False), ['x','foo', None])
+    self.assertEquals(tab.GetUnique('second'), [3,9,4,5])
+    self.assertEquals(tab.GetUnique('second', ignore_nan=False), [3,None,9,4,5])
+    self.assertEquals(tab.GetUnique('third'), [2.2, 3.3, 6.3])
+    self.assertEquals(tab.GetUnique('third', ignore_nan=False), [None, 2.2, 3.3, 6.3])
       
 if __name__ == "__main__":
   try: