<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,5 @@
+* Make `Event.stopObserving` return element in all cases. [#810 state:resolved] (Yaffle, Tobie Langel)
+
 * String#startsWith, String#endsWith performance optimization (Yaffle, Tobie Langel, kangax)
 
 * Rewrite String#camelize using String#replace with a replacement function (Phred, John-David Dalton, Samuel Lebeau, kangax)</diff>
      <filename>CHANGELOG</filename>
    </modified>
    <modified>
      <diff>@@ -617,44 +617,38 @@
   function stopObserving(element, eventName, handler) {
     element = $(element);
 
-    var registry = Element.retrieve(element, 'prototype_event_registry');
-
-    if (Object.isUndefined(registry)) return element;
+    var registry, responders, responder;
 
-    if (eventName &amp;&amp; !handler) {
-      // If an event name is passed without a handler, we stop observing all
-      // handlers of that type.
-      var responders = registry.get(eventName);
+    registry = Element.retrieve(element, 'prototype_event_registry')
+    if (!registry) return element;
 
-      if (Object.isUndefined(responders)) return element;
-
-      responders.each( function(r) {
-        Element.stopObserving(element, eventName, r.handler);
-      });
-      return element;
-    } else if (!eventName) {
-      // If both the event name and the handler are omitted, we stop observing
-      // _all_ handlers on the element.
+    if (!eventName) {
+      // We stop observing all events.
+      // e.g.: $(element).stopObserving();
       registry.each( function(pair) {
-        var eventName = pair.key, responders = pair.value;
-
-        responders.each( function(r) {
-          Element.stopObserving(element, eventName, r.handler);
-        });
+        var eventName = pair.key;
+        stopObserving(element, eventName);
       });
       return element;
     }
 
-    var responders = registry.get(eventName);
+    responders = registry.get(eventName);
+    if (!responders) return element;
 
-    // Fail gracefully if there are no responders assigned.
-    if (!responders) return;
+    if (!handler) {
+      // We stop observing all handlers for the given eventName.
+      // e.g.: $(element).stopObserving('click');
+      responders.each(function(r) {
+        stopObserving(element, eventName, r.handler);
+      });
+      return element;
+    }
 
-    var responder = responders.find( function(r) { return r.handler === handler; });
+    responder = responders.find(function(r) {
+      return r.handler === handler;
+    });
     if (!responder) return element;
 
-    var actualEventName = _getDOMEventName(eventName);
-
     if (eventName.include(':')) {
       // Custom event.
       if (element.removeEventListener)
@@ -665,6 +659,7 @@
       }
     } else {
       // Ordinary event.
+      var actualEventName = _getDOMEventName(eventName);
       if (element.removeEventListener)
         element.removeEventListener(actualEventName, responder, false);
       else
@@ -672,7 +667,6 @@
     }
 
     registry.set(eventName, responders.without(responder));
-
     return element;
   }
 </diff>
      <filename>src/dom/event.js</filename>
    </modified>
    <modified>
      <diff>@@ -184,6 +184,8 @@ new Test.Unit.Runner({
     span.observe(&quot;test:somethingHappened&quot;, observer);
     this.assertEqual(span, span.stopObserving(&quot;test:somethingHappened&quot;));
 
+    this.assertEqual(span, span.stopObserving(&quot;test:somethingOtherHappened&quot;, observer));
+
     span.observe(&quot;test:somethingHappened&quot;, observer);
     this.assertEqual(span, span.stopObserving());
     this.assertEqual(span, span.stopObserving()); // assert it again, after there are no observers</diff>
      <filename>test/unit/event_test.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>2d3e4232303d81fc1b13e6347b299b43599200fa</id>
    </parent>
  </parents>
  <author>
    <name>Tobie Langel</name>
    <email>tobie.langel@gmail.com</email>
  </author>
  <url>http://github.com/staaky/prototype/commit/28d79933ada4be490c9e5d951f9589ea572f10bd</url>
  <id>28d79933ada4be490c9e5d951f9589ea572f10bd</id>
  <committed-date>2009-10-22T08:35:00-07:00</committed-date>
  <authored-date>2009-10-22T08:35:00-07:00</authored-date>
  <message>Make Event.stopObserving return element in all cases.</message>
  <tree>731e4fb56f839620098d8ed58c29c7d14fd69402</tree>
  <committer>
    <name>Tobie Langel</name>
    <email>tobie.langel@gmail.com</email>
  </committer>
</commit>
