diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
index 39ff8ea..2ae3ee6 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/Blog.java
@@ -16,15 +16,15 @@
 
 package org.yaml.snakeyaml.issues.issue73;
 
-import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.TreeSet;
 
-class Blog {
+public class Blog {
 
     private String name;
-    private Set<Post> posts = new HashSet<Post>();
-    public Set<Integer> numbers = new TreeSet<Integer>();
+    private Set<Post> posts = new TreeSet<Post>();
+    public Set<Integer> numbers = new LinkedHashSet<Integer>();
 
     public Blog() {
         name = "SuperBlog";
@@ -49,4 +49,24 @@
     public void setName(String name) {
         this.name = name;
     }
+
+    public void setPosts(Set<Post> posts) {
+        this.posts = posts;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        return name.equals(obj.toString());
+    }
+
+    @Override
+    public int hashCode() {
+        return name.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return "Blog '" + name + "'";
+    }
+
 }
\ No newline at end of file
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
index 963e1db..85f85e7 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/Post.java
@@ -16,7 +16,7 @@
 
 package org.yaml.snakeyaml.issues.issue73;
 
-class Post {
+class Post implements Comparable<Post> {
 
     private String title;
     private String text;
@@ -37,4 +37,8 @@
     public String getText() {
         return text;
     }
+
+    public int compareTo(Post o) {
+        return title.compareTo(o.title);
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
index 8b5a49d..de2ed00 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
@@ -20,6 +20,9 @@
 
 import junit.framework.TestCase;
 
+import org.yaml.snakeyaml.Dumper;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Loader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
@@ -31,41 +34,47 @@
         Blog blog = new Blog("Test Me!");
         blog.addPost(new Post("Title1", "text 1"));
         blog.addPost(new Post("Title2", "text text 2"));
-        blog.numbers.add(17);
         blog.numbers.add(19);
-        Yaml yaml = new Yaml();
+        blog.numbers.add(17);
+        DumperOptions options = new DumperOptions();
+        options.setAllowReadOnlyProperties(true);
+        Yaml yaml = new Yaml(new Dumper(options));
         String output = yaml.dump(blog);
-        System.out.println(output);
+        // System.out.println(output);
         assertEquals(Util.getLocalResource("issues/issue73-1.txt"), output);
     }
 
     public void testLoad() {
+        Loader loader = new Loader();
+        loader.setBeanAccess(BeanAccess.FIELD);
+        Yaml yaml = new Yaml(loader);
         String doc = Util.getLocalResource("issues/issue73-1.txt");
-        Blog blog = (Blog) constructYamlParser().load(doc);
-        System.out.println(blog);
+        Blog blog = (Blog) yaml.load(doc);
+        // System.out.println(blog);
+        assertEquals("Test Me!", blog.getName());
+        assertEquals(2, blog.numbers.size());
+        assertEquals(2, blog.getPosts().size());
+        for (Post post : blog.getPosts()) {
+            assertEquals(Post.class, post.getClass());
+        }
     }
 
     public void testYaml() {
-        String serialized = "!!org.yaml.snakeyaml.issues.issue73.Blog\n" + "posts:\n"
-                + "  - text: Dummy\n" + "    title: Test\n" + "  - text: Creative\n"
-                + "    title: Highly\n";
-
-        Yaml yaml2 = constructYamlParser();
-        Blog rehydrated = (Blog) yaml2.load(serialized);
+        String serialized = Util.getLocalResource("issues/issue73-2.txt");
+        // System.out.println(serialized);
+        JavaBeanLoader<Blog> beanLoader = new JavaBeanLoader<Blog>(Blog.class, BeanAccess.FIELD);
+        Blog rehydrated = beanLoader.load(serialized);
 
         checkTestBlog(rehydrated);
     }
 
-    protected Yaml constructYamlParser() {
-        Loader loader = new Loader();
-        loader.setBeanAccess(BeanAccess.FIELD);
-
-        Yaml yaml = new Yaml(loader);
-        return yaml;
-    }
-
     protected void checkTestBlog(Blog blog) {
         Set<Post> posts = blog.getPosts();
         assertEquals("Blog contains 2 posts", 2, posts.size());
+        for (Post post : posts) {
+            assertEquals(Post.class, post.getClass());
+        }
+        assertEquals("No tags!", blog.getName());
+        assertEquals(0, blog.numbers.size());
     }
 }
diff --git a/src/test/resources/issues/issue73-1.txt b/src/test/resources/issues/issue73-1.txt
index 7b8437b..67be3af 100644
--- a/src/test/resources/issues/issue73-1.txt
+++ b/src/test/resources/issues/issue73-1.txt
@@ -1,4 +1,9 @@
 !!org.yaml.snakeyaml.issues.issue73.Blog
 name: Test Me!
-numbers: !!set {17: null, 19: null}
+numbers: !!set {19: null, 17: null}
+posts: !!set
+  ? {text: text 1, title: Title1}
+  : null
+  ? {text: text text 2, title: Title2}
+  : null
 
diff --git a/src/test/resources/issues/issue73-2.txt b/src/test/resources/issues/issue73-2.txt
new file mode 100644
index 0000000..ade8322
--- /dev/null
+++ b/src/test/resources/issues/issue73-2.txt
@@ -0,0 +1,7 @@
+name: No tags!
+posts:
+  - text: Dummy
+    title: Test
+  - text: Creative
+    title: Highly
+
