                     expect(update?.newValue).toEventually(equal(self.customValue))
                 }
 
+                then("receives initial update") {
+                    let key = DefaultsKey<Serializable?>("test", defaultValue: self.defaultValue)
+
+                    var update: DefaultsObserver<Serializable?>.Update?
+                    let observer = defaults.observe(key: key, options: [.initial, .old, .new]) { receivedUpdate in
+                        update = receivedUpdate
+                    }
+
+                    expect(update?.oldValue).toEventually(equal(self.defaultValue))
+                    expect(update?.newValue).toEventually(equal(self.defaultValue))
+                }
+
+                then("receives nil update") {
+                    let key = DefaultsKey<Serializable?>("test", defaultValue: self.defaultValue)
+
+                    var update: DefaultsObserver<Serializable?>.Update?
+                    let observer = defaults.observe(key: key) { receivedUpdate in
+                        update = receivedUpdate
+                    }
+                    defaults[key] = self.defaultValue
+                    defaults[key] = nil
+
+                    expect(update).toEventuallyNot(beNil())
+                    expect(update?.oldValue).toEventually(equal(self.defaultValue))
+                    expect(update?.newValue).toEventually(equal(self.defaultValue))
+                }
+
                 then("remove observer on dispose") {
                     let key = DefaultsKey<Serializable?>("test", defaultValue: self.defaultValue)
 

                    expect(update?.newValue).toEventually(equal(self.customValue))
                }

                then("remove observer on dispose") {
                    let key = DefaultsKey<Serializable?>("test")


                    expect(update?.newValue).toEventually(equal(self.customValue))
                }

                then("receives initial update") {
                    let key = DefaultsKey<Serializable>("test", defaultValue: self.defaultValue)

                    var update: DefaultsObserver<Serializable>.Update?
                    let observer = defaults.observe(key: key, options: [.initial, .old, .new]) { receivedUpdate in
                        update = receivedUpdate
                    }

                    expect(update?.oldValue).toEventually(equal(self.defaultValue))
                    expect(update?.newValue).toEventually(equal(self.defaultValue))
                }

                then("remove observer on dispose") {
                    let key = DefaultsKey<Serializable>("test", defaultValue: self.defaultValue)

