diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js
index d1948c14e3a99859be2202a057fb32e6b7aeca3c..8b2e8c032929a00f0e6056ec1cca72f3519c0493 100644
--- a/public/javascripts/diaspora.js
+++ b/public/javascripts/diaspora.js
@@ -37,8 +37,8 @@
     }
   };
 
-  Diaspora.WidgetCollection.prototype.subscribe = function(id, callback) {
-    this.eventsContainer.bind(id, callback);
+  Diaspora.WidgetCollection.prototype.subscribe = function(id, callback, context) {
+    this.eventsContainer.bind(id, $.proxy(callback, context));
   };
 
   Diaspora.WidgetCollection.prototype.publish = function(id) {
diff --git a/public/javascripts/widgets/infinite-scroll.js b/public/javascripts/widgets/infinite-scroll.js
index 923573cdd1ac7c97963fdf884e534f8c23df1dfc..1143a37f2590dc8ceb9d5d087ed3fac5a9460a98 100644
--- a/public/javascripts/widgets/infinite-scroll.js
+++ b/public/javascripts/widgets/infinite-scroll.js
@@ -28,12 +28,7 @@
   };
 
   InfiniteScroll.prototype.start = function() {
-    var __bind = function(fn, me){
-      return function(){
-        return fn.apply(me, arguments);
-      };
-    };
-    Diaspora.widgets.subscribe("stream/reloaded", __bind(this.initialize, this));
+    Diaspora.widgets.subscribe("stream/reloaded", this.initialize);
     this.initialize();
   };
 
diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js
index daff88ca0849ce4544debb9296165e8e51159f8f..ffbf289eb59b9f3e19757dd3c8811302854c701c 100644
--- a/spec/javascripts/diaspora-spec.js
+++ b/spec/javascripts/diaspora-spec.js
@@ -58,6 +58,17 @@ describe("Diaspora", function() {
           widgets.subscribe("testing/event", function() { });
           expect(widgets.eventsContainer.data("events")["testing/event"]).toBeDefined();
         });
+
+        it("accepts a context in which the function will always be called", function() {
+           var foo = "bar";
+           widgets.subscribe("testing/context", function() { foo = this.foo; });
+           widgets.publish("testing/context");
+           expect(foo).toEqual(undefined);
+
+           widgets.subscribe("testing/context_", function() { foo = this.foo;  }, { foo: "hello" });
+           widgets.publish("testing/context_");
+           expect(foo).toEqual("hello");
+        });
       });
 
       describe("publish", function() {