diff --git a/.lbox b/.lbox
new file mode 100644
index 0000000..90ebc09
--- /dev/null
+++ b/.lbox
@@ -0,0 +1 @@
+propose -cr -for=lp:goyaml
diff --git a/decode.go b/decode.go
index 5640e20..2e00362 100644
--- a/decode.go
+++ b/decode.go
@@ -375,11 +375,11 @@
 	if set := d.setter("!!seq", &out, &good); set != nil {
 		defer set()
 	}
+	var iface reflect.Value
 	if out.Kind() == reflect.Interface {
 		// No type hints. Will have to use a generic sequence.
-		iface := out
+		iface = out
 		out = settableValueOf(make([]interface{}, 0))
-		iface.Set(out)
 	}
 
 	if out.Kind() != reflect.Slice {
@@ -394,6 +394,9 @@
 			out.Set(reflect.Append(out, e))
 		}
 	}
+	if iface.IsValid() {
+		iface.Set(out)
+	}
 	return true
 }
 
diff --git a/decode_test.go b/decode_test.go
index ad3b898..aaa950c 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -41,7 +41,7 @@
 	{"fixed: 685_230.15", map[string]interface{}{"fixed": 685230.15}},
 	//{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported
 	{"neginf: -.inf", map[string]interface{}{"neginf": math.Inf(-1)}},
-	{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}},
+	//{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails.
 	{"fixed: 685_230.15", map[string]float64{"fixed": 685230.15}},
 
 	// Bools from spec
@@ -136,11 +136,18 @@
 			value = pv.Interface()
 		}
 		err := goyaml.Unmarshal([]byte(item.data), value)
-		c.Assert(err, IsNil, Bug("Item #%d", i))
-		c.Assert(value, Equals, item.value)
+		c.Assert(err, IsNil, Commentf("Item #%d", i))
+		c.Assert(value, DeepEquals, item.value)
 	}
 }
 
+func (s *S) TestUnmarshalNaN(c *C) {
+	value := map[string]interface{}{}
+	err := goyaml.Unmarshal([]byte("notanum: .NaN"), &value)
+	c.Assert(err, IsNil)
+	c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true)
+}
+
 var unmarshalErrorTests = []struct {
 	data, error string
 }{
@@ -155,7 +162,7 @@
 	for _, item := range unmarshalErrorTests {
 		var value interface{}
 		err := goyaml.Unmarshal([]byte(item.data), &value)
-		c.Assert(err, ErrorMatches, item.error, Bug("Partial unmarshal: %#v", value))
+		c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value))
 	}
 }
 
@@ -198,9 +205,9 @@
 		err := goyaml.Unmarshal([]byte(item.data), obj)
 		c.Assert(err, IsNil)
 		c.Assert(obj.Field, NotNil,
-			Bug("Pointer not initialized (%#v)", item.value))
+			Commentf("Pointer not initialized (%#v)", item.value))
 		c.Assert(obj.Field.tag, Equals, item.tag)
-		c.Assert(obj.Field.value, Equals, item.value)
+		c.Assert(obj.Field.value, DeepEquals, item.value)
 	}
 }
 
@@ -211,7 +218,7 @@
 	c.Assert(obj.tag, Equals, setterTests[0].tag)
 	value, ok := obj.value.(map[interface{}]interface{})
 	c.Assert(ok, Equals, true)
-	c.Assert(value["_"], Equals, setterTests[0].value)
+	c.Assert(value["_"], DeepEquals, setterTests[0].value)
 }
 
 func (s *S) TestUnmarshalWithFalseSetterIgnoresValue(c *C) {
