diff --git a/src/combinators/delay.js b/src/combinators/delay.js
index <HASH>..<HASH> 100644
--- a/src/combinators/delay.js
+++ b/src/combinators/delay.js
@@ -71,9 +71,12 @@ export const debounce = curry((n, s) => {
       emit.complete()
     }
 
-    s.subscribe({ ...emit, next, complete })
+    const subscription = s.subscribe({ ...emit, next, complete })
 
-    return () => clearTimeout(id)
+    return () => {
+      clearTimeout(id)
+      subscription.unsubscribe()
+    }
   })
 })
 
diff --git a/src/combinators/delay.test.js b/src/combinators/delay.test.js
index <HASH>..<HASH> 100644
--- a/src/combinators/delay.test.js
+++ b/src/combinators/delay.test.js
@@ -78,6 +78,16 @@ describe('delay', () => {
       debounce(1000)(s).subscribe({ error: errorSpy })
       expect(errorSpy).toHaveBeenCalledTimes(1)
     })
+
+    it('unmounts the original signal when it is unsubscribed', () => {
+      const unmount = jest.fn()
+      const s = new Signal(() => unmount)
+      const a = debounce(1000)(s).subscribe()
+
+      a.unsubscribe()
+
+      expect(unmount).toHaveBeenCalledTimes(1)
+    })
   })
 
   describe('#throttle', () => {
Fix issue where debounced signals weren't unmounted properly