diff --git a/lib/async.js b/lib/async.js
index <HASH>..<HASH> 100644
--- a/lib/async.js
+++ b/lib/async.js
@@ -39,20 +39,18 @@
     };
 
     function only_once(fn) {
-        var called = false;
         return function() {
-            if (called) throw new Error("Callback was already called.");
-            called = true;
+            if (fn === null) throw new Error("Callback was already called.");
             fn.apply(this, arguments);
+            fn = null;
         };
     }
 
     function _once(fn) {
-        var called = false;
         return function() {
-            if (called) return;
-            called = true;
+            if (fn === null) return;
             fn.apply(this, arguments);
+            fn = null;
         };
     }
once: ensure fn is gced