--- a/contrib/mul/mbl/tests/test_read_props.cxx
+++ b/contrib/mul/mbl/tests/test_read_props.cxx
@@ -4,6 +4,19 @@
 
 #include <mbl/mbl_read_props.h>
 #include <testlib/testlib_test.h>
+
+vcl_string strip_ws(vcl_string &s)
+{
+  vcl_string out;
+  vcl_string::size_type i=0;
+  while (i < s.length())
+  {
+    if (s[i] != ' ' && s[i] != '\n')
+      out += s[i];
+    i++;
+  }
+  return out;
+}
 
 void test_read_props()
 {
@@ -16,7 +29,8 @@
     vcl_istringstream ss("{}");
     mbl_read_props_type props = mbl_read_props( ss );
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 1: props[ \"a\" ] == \"\"", props[ "a" ] == "" && !ss.fail(), true);
+    TEST("Case 1: props[ \"a\" ] == \"\"",
+      props[ "a" ] == "" && !ss.fail(), true);
   }
 
 #if 0 // This one won't work because the { } should be on their own lines
@@ -25,7 +39,8 @@
     vcl_istringstream ss("{ a: a }");
     mbl_read_props_type props = mbl_read_props( ss ); 
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 2: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 2: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
   }
 #endif // 0
 
@@ -34,41 +49,48 @@
     vcl_istringstream ss("{\n  a: a\n }");
     mbl_read_props_type props = mbl_read_props( ss );
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 3: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 3: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
   }
 
   {
     vcl_cout << "\nCase 4\n";
-    vcl_istringstream ss("{\n  //comment\n a: a\n }");
-    mbl_read_props_type props = mbl_read_props( ss );
-    mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 4: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
+    vcl_istringstream ss("{\n  // comment\n a: a\n }");
+    mbl_read_props_type props = mbl_read_props( ss );
+    mbl_read_props_print(vcl_cout, props); 
+    TEST("Case 4: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
   }
 
   {
     vcl_cout << "\nCase 5\n";
-    vcl_istringstream ss("{\n  //comment\n a: a\n b: b\n }");
-    mbl_read_props_type props = mbl_read_props( ss );
-    mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 5a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 5b: props[ \"b\" ] == \"b\"", props[ "b" ] == "b" && !ss.fail(), true);
+    vcl_istringstream ss("{\n  // comment\n a: a\n b: b\n }");
+    mbl_read_props_type props = mbl_read_props( ss );
+    mbl_read_props_print(vcl_cout, props); 
+    TEST("Case 5a: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 5b: props[ \"b\" ] == \"b\"",
+      props[ "b" ] == "b" && !ss.fail(), true);
   }
 
   {
     vcl_cout << "\nCase 6\n";
-    vcl_istringstream ss("{\n  //comment\n a: a\n a: b\n }");
-    mbl_read_props_type props = mbl_read_props( ss );
-    mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 6: props[ \"a\" ] == \"b\"", props[ "a" ] == "b" && !ss.fail(), true);
+    vcl_istringstream ss("{\n  // comment\n a: a\n a: b\n }");
+    mbl_read_props_type props = mbl_read_props( ss );
+    mbl_read_props_print(vcl_cout, props); 
+    TEST("Case 6: props[ \"a\" ] == \"b\"",
+      props[ "a" ] == "b" && !ss.fail(), true);
   }
 
   {
     vcl_cout << "\nCase 7\n";
-    vcl_istringstream ss("{\n //comment\n a: a\n //comment\n b: b\n }");
-    mbl_read_props_type props = mbl_read_props( ss );
-    mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 7a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 7b: props[ \"b\" ] == \"b\"", props[ "b" ] == "b" && !ss.fail(), true);
+    vcl_istringstream ss("{\n // comment\n a: a\n // comment\n b: b\n }");
+    mbl_read_props_type props = mbl_read_props( ss );
+    mbl_read_props_print(vcl_cout, props); 
+    TEST("Case 7a: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 7b: props[ \"b\" ] == \"b\"",
+      props[ "b" ] == "b" && !ss.fail(), true);
   }
 
   {
@@ -84,8 +106,16 @@
 //    vcl_cout << props[ "b" ] << vcl_endl;
 
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 8a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 8b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 8a: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
+    vcl_istringstream ssb(props[ "b" ]);
+    vcl_string sb;
+    ssb >> sb;
+    TEST("Case 8b: props[ \"b\" ] == b.*", sb == "b" && !ss.fail(), true);
+    mbl_read_props_type propsb = mbl_read_props( ssb );
+    mbl_read_props_print(vcl_cout, propsb); 
+    TEST("Case 8c: propsb[ \"ba\" ] == \"ba\"",
+      propsb[ "ba" ] == "ba" && !ssb.fail(), true);
   }
 
   {
@@ -97,7 +127,8 @@
 
     mbl_read_props_print(vcl_cout, props); 
     TEST("Case 8.5a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 8.5b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 8.5b: props[ \"b\" ] == b_ans",
+      strip_ws(props[ "b" ]) == strip_ws(b_ans) && !ss.fail(), true);
   }
 
   {
@@ -109,7 +140,8 @@
 
     mbl_read_props_print(vcl_cout, props); 
     TEST("Case 9a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 9b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 9b: props[ \"b\" ] == b_ans",
+      strip_ws(props[ "b" ]) == strip_ws(b_ans) && !ss.fail(), true);
     TEST("Case 9c: props[ \"c\" ] == \"c\"", props[ "c" ] == "c", true);
   }
 
@@ -123,9 +155,11 @@
 
     mbl_read_props_print(vcl_cout, props); 
     TEST("Case 10a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 10b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 10b: props[ \"b\" ] == b_ans",
+      strip_ws(props[ "b" ]) == strip_ws(b_ans) && !ss.fail(), true);
     TEST("Case 10c: props[ \"c\" ] == \"c\"", props[ "c" ] == "c", true);
-    TEST("Case 10d: props[ \"d\" ] == d_ans", props[ "d" ] == d_ans && !ss.fail(), true);
+    TEST("Case 10d: props[ \"d\" ] == d_ans",
+      strip_ws(props[ "d" ]) == strip_ws(d_ans) && !ss.fail(), true);
   }
 
   {
@@ -141,8 +175,10 @@
 //    vcl_cout << props[ "b" ] << vcl_endl;
 
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 11a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 11b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 11a: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 11b: props[ \"b\" ] == b_ans",
+      strip_ws(props[ "b" ]) == strip_ws(b_ans) && !ss.fail(), true);
   }
   {
     vcl_cout << "\nCase 12\n";
@@ -157,8 +193,10 @@
 //    vcl_cout << props[ "b" ] << vcl_endl;
 
     mbl_read_props_print(vcl_cout, props); 
-    TEST("Case 12a: props[ \"a\" ] == \"a\"", props[ "a" ] == "a" && !ss.fail(), true);
-    TEST("Case 12b: props[ \"b\" ] == b_ans", props[ "b" ] == b_ans && !ss.fail(), true);
+    TEST("Case 12a: props[ \"a\" ] == \"a\"",
+      props[ "a" ] == "a" && !ss.fail(), true);
+    TEST("Case 12b: props[ \"b\" ] == b_ans",
+      strip_ws(props[ "b" ]) == strip_ws(b_ans) && !ss.fail(), true);
   }
 
   vcl_cout << "\n\n";