diff --git a/RTCP/Run/src/util/Parset.py b/RTCP/Run/src/util/Parset.py
index 8004cd2eb5d932fec5ec20e8155af07c55df532b..992c643c1e989d1eb82b7773fe81b634dbc0a357 100644
--- a/RTCP/Run/src/util/Parset.py
+++ b/RTCP/Run/src/util/Parset.py
@@ -119,30 +119,52 @@ class Parset(dict):
       f = ropen( filename, "r" )
 
       lexer = shlex.shlex( f, filename )
+      lexer.whitespace = "" # we have to discard our own whitespace, since whitespace can be significant within values
       basic_wordchars = lexer.wordchars + ".:+-!@$%^&*/{}"
       key_wordchars   = basic_wordchars + "[]()"
       value_wordchars = basic_wordchars + "="
       token = lexer.get_token
 
+      whitespace = " \t\r\n"
+
       errormsg = lambda t: "%s%s"% (lexer.error_leader(),t)
 
-      def peek():
-        t = token()
-        if not t: return t
+      def token(skip=whitespace):
+        for t in lexer:
+          if t in skip:
+            continue
+
+          return t
+
+      def tokengen(skip=whitespace):
+        while True:
+          t = token(skip)
+          if t is None:
+            return
+
+          yield t  
+
+      def peek(skip=whitespace):
+        t = token(skip)
+        if t is None: return t
 
         lexer.push_token(t)
         return t
 
       lexer.wordchars = key_wordchars
-      for t in lexer:
+      for t in tokengen():
         # read a KEY = VALUE pair
         key = t
+
         assert token() == "=",errormsg(t)
 
         # read the value
         lexer.wordchars = value_wordchars
-        t = token()
-        if t == "[":
+        t = token(" \t") # also catch newlines for empty values
+        if t == "\n":
+          # empty value
+          value = ""
+        elif t == "[":
           # read array
           value = []
 
@@ -156,7 +178,7 @@ class Parset(dict):
             # part of a value
             cur = ""
             parentheses, brackets = 0, 0
-            for t in lexer:
+            for t in tokengen(""):
               if t == "(":
                 assert parentheses == 0, errormsg("nested parentheses not supported")
                 parentheses += 1
@@ -169,23 +191,30 @@ class Parset(dict):
               elif t == "]":
                 if not brackets:
                   # end of array
-                  value.extend(decode(cur))
+                  value.extend(decode(cur.strip()))
                   break
 
                 brackets -= 1
               elif t == ",":
                 if not brackets and not parentheses:
-                  value.extend(decode(cur))
+                  value.extend(decode(cur.strip()))
                   cur = ""
                   continue
 
               cur += t
             else:
               assert False,errormsg("unterminated array")
-
         else:
-          # t was no array
-          value = t
+          # read everything until the newline, including spaces
+          tokens = [t]
+
+          for t in tokengen(""):
+            if t == "\n":
+              break
+
+            tokens.append(t)
+
+          value = "".join(tokens).strip()
 
         # store the key,value pair
         self[key] = value
@@ -230,3 +259,12 @@ class Parset(dict):
 
     def getFloatVector(self, key):
       return map(float,self[key])
+
+if __name__ == "__main__":
+  import sys
+
+  for f in sys.argv[1:]:
+    p = Parset()
+    p.readFile( f )
+    for k in sorted(p.keys()):
+      print "%s = %s" % (k,p[k])