diff --git a/modules/base/pymod/table.py b/modules/base/pymod/table.py
index 284c0419ff0aadc8cc86cf64828698811829cc9b..0f902e3e13ed19a2eefe0397e8be457b9a62da96 100644
--- a/modules/base/pymod/table.py
+++ b/modules/base/pymod/table.py
@@ -426,8 +426,9 @@ class Table(object):
       self._AddRowsFromDict(data, overwrite)
     else:
       if len(data)!=len(self.col_names):
+        print data, self.col_names
         msg='data array must have %d elements, not %d'
-        raise ValueError(msg % (len(self.col_names), len(self.data)))
+        raise ValueError(msg % (len(self.col_names), len(data)))
       new_row = [self._Coerce(v, t) for v, t in zip(data, self.col_types)]
       
       # fully overwrite existing row with new data
@@ -529,6 +530,7 @@ class Table(object):
   @staticmethod
   def _LoadOST(stream_or_filename):
     fieldname_pattern=re.compile(r'(?P<name>[^[]+)(\[(?P<type>\w+)\])?')
+    values_pattern=re.compile("([^\" ]+|\"[^\"]*\")+")
     if not hasattr(stream_or_filename, 'read'):
       stream=open(stream_or_filename, 'r')
     else:
@@ -556,7 +558,7 @@ class Table(object):
         tab=Table(fieldnames, fieldtypes)
         header=True
         continue
-      tab.AddRow(line.split())
+      tab.AddRow([x.strip('"') for x in values_pattern.findall(line)])
     if num_lines==0:
       raise IOError("Cannot read table from empty stream")
     return tab
diff --git a/modules/base/tests/test_table.py b/modules/base/tests/test_table.py
index 3edf226be0acae3acf79ce89e909cad4bbbeaaab..ca6da29208d776b29753ee325ebc1faf565793f9 100644
--- a/modules/base/tests/test_table.py
+++ b/modules/base/tests/test_table.py
@@ -757,6 +757,18 @@ class TestTable(unittest.TestCase):
     in_stream = open(os.path.join('testfiles','emptytable.csv'), 'r')
     self.assertRaises(IOError, Table.Load, in_stream)
     
+  def testSaveLoadTableOSTWithSpaces(self):
+    tab = self.CreateTestTable()
+    tab.AddRow(['hello spaces',10, 10.1], overwrite=None)
+    self.CompareDataFromDict(tab, {'first': ['x','foo',None,'hello spaces'], 'second': [3,None,9,10], 'third': [None,2.2,3.3,10.1]})
+
+    # write to disc
+    tab.Save("saveloadtable_withspaces_filename_out.tab")
+
+    # read from disc
+    tab_loaded_fname = Table.Load('saveloadtable_withspaces_filename_out.tab')
+    self.CompareDataFromDict(tab_loaded_fname, {'first': ['x','foo',None,'hello spaces'], 'second': [3,None,9,10], 'third': [None,2.2,3.3,10.1]})
+
   def testSaveLoadTableCSV(self):
     tab = self.CreateTestTable()
     self.CompareDataFromDict(tab, {'first': ['x','foo',None], 'second': [3,None,9], 'third': [None,2.2,3.3]})