 
     // MARK: - Test method `observeDistinct(:)`
 
-    func testObservableShouldUpdateDistinctObserverJustOnce() {
+    func testObservableShouldInformDistinctObserverWithCorrectValues() {
         // Given
-        let expectation = self.expectation(description: "Expected distinct observer to be informed just once.")
+        let variable = Variable(0)
+
+        // When
+        variable.asObservable.subscribeDistinct { newValue, oldValue in
+            self.newValue = newValue
+            self.oldValue = oldValue
+        }.add(to: &disposeBag)
+
+        // Then
+        XCTAssertEqual(newValue, 0)
+        XCTAssertNil(oldValue)
+    }
+
+    func testObservableShouldUpdateDistinctObserverWithCorrectValues() {
+        // Given
+        let variable = Variable(0)
+
+        variable.asObservable.subscribeDistinct { newValue, oldValue in
+            self.newValue = newValue
+            self.oldValue = oldValue
+        }.add(to: &disposeBag)
+
+        // When
+        for value in 1 ..< 10 {
+            variable.value = value
+
+            // Then
+            XCTAssertEqual(newValue, value)
+            XCTAssertEqual(oldValue, value - 1)
+        }
+    }
+
+    func testObservableShouldUpdateDistinctObserverJustOnceForSameValue() {
+        // Given
+        let expectation = self.expectation(description: "Expected distinct observer to be informed two times: The inital call and the new value.")
+        expectation.expectedFulfillmentCount = 2
 
         let variable = Variable(0)
-        variable.asObservable.subscribeDistinct { _, oldValue in
-            guard oldValue != nil else {
-                // Skip initial call to observer.
-                return
-            }
+        variable.asObservable.subscribeDistinct { newValue, oldValue in
+            self.newValue = newValue
+            self.oldValue = oldValue
 
             expectation.fulfill()
         }.add(to: &disposeBag)


    // MARK: - Test method `observe(filter:)`

    func testObservableShouldUpdateObserverOnlyIfFilterApplies() {
        // Given
        let filterNewValueIsEven: (Int, Int?) -> Bool = { newValue, _ in
            newValue.isEven
        }


        expectation.expectedFulfillmentCount = 5

        let variable = Variable(0)
        variable.asObservable.subscribe(filter: assertNewValueIsEven, observer: { newValue, _ in
            guard newValue.isEven else {
                XCTFail("The received value `\(newValue)` is odd!")
                return
