diff --git a/modules/base/pymod/table.py b/modules/base/pymod/table.py
index c770fdc9e8432e0ddb18894ba67891f179cbea1a..4d6f3bdd45a6cf0535813f2e576698fca75c9cee 100644
--- a/modules/base/pymod/table.py
+++ b/modules/base/pymod/table.py
@@ -508,6 +508,25 @@ class Table:
       return sign*cmp(lhs[key_index], rhs[key_index])
     self.rows=sorted(self.rows, _key_cmp)
     
+  def Zip(self, *args):
+    """
+    Allows to conveniently iterate over a selection of columns, e.g.
+    
+    .. code-block::python
+    
+      tab=Table.Load('...')
+      for col1, col in tab.Zip('col1', 'col2'):
+        print col1, col2
+    
+    is a shortcut for
+    
+    .. code-block::python
+    
+      tab=Table.Load('...')
+      for col1, col2 in zip(tab['col1'], tab['col2']):
+        print col1, col2
+    """
+    return zip(*[self[arg] for arg in args])
 
   def Plot(self, x, y=None, z=None, style='.', x_title=None, y_title=None,
            z_title=None, x_range=None, y_range=None, z_range=None,
diff --git a/modules/base/tests/test_table.py b/modules/base/tests/test_table.py
index 56d7ba134768f4f811b11d113b449b953be3a258..463853d0c5d7922c842e378beff12fcd6de8880c 100644
--- a/modules/base/tests/test_table.py
+++ b/modules/base/tests/test_table.py
@@ -100,7 +100,16 @@ class TestTable(unittest.TestCase):
                        ref,
                        "data (%s) in col (%s), row (%i) different from expected value (%s)" \
                        %(row[idx], col_name, i, ref))
-              
+  def testZip(self):
+    tab=Table(['col1', 'col2', 'col3'], 'sss')
+    tab.AddRow(['a', 'b', 'c'])
+    tab.AddRow(['x', 'y', 'z'])
+    z=tab.Zip('col1', 'col3')
+    self.assertEqual(len(z), 2)
+    self.assertEqual(z[0][0], 'a')
+    self.assertEqual(z[0][1], 'c')
+    self.assertEqual(z[1][0], 'x')
+    self.assertEqual(z[1][1], 'z')
   def CompareColTypes(self, t, col_names, ref_types):
     '''
     Compare the types of n columns specified by their names with reference