diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py
index bb60fc906d..07377d6411 100644
--- a/django/dispatch/dispatcher.py
+++ b/django/dispatch/dispatcher.py
@@ -124,6 +124,7 @@ class Signal(object):
             (r_key, _) = self.receivers[index]
             if r_key == lookup_key:
                 del self.receivers[index]
+                break
 
     def send(self, sender, **named):
         """Send signal from sender to all connected receivers.
diff --git a/tests/regressiontests/dispatch/tests/test_dispatcher.py b/tests/regressiontests/dispatch/tests/test_dispatcher.py
index baaae9cd95..adf760386c 100644
--- a/tests/regressiontests/dispatch/tests/test_dispatcher.py
+++ b/tests/regressiontests/dispatch/tests/test_dispatcher.py
@@ -103,6 +103,19 @@ class DispatcherTests(unittest.TestCase):
         a_signal.disconnect(fails)
         self._testIsClean(a_signal)
 
+    def testDisconnection(self):
+        receiver_1 = Callable()
+        receiver_2 = Callable()
+        receiver_3 = Callable()
+        a_signal.connect(receiver_1)
+        a_signal.connect(receiver_2)
+        a_signal.connect(receiver_3)
+        a_signal.disconnect(receiver_1)
+        del receiver_2
+        garbage_collect()
+        a_signal.disconnect(receiver_3)
+        self._testIsClean(a_signal)
+
 def getSuite():
     return unittest.makeSuite(DispatcherTests,'test')