--- controls.js.old	Fri Dec  1 14:14:35 2006
+++ controls.js	Fri Dec  1 17:13:06 2006
@@ -83,8 +83,22 @@
 
     Element.hide(this.update);
 
-    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
+    this.eventEntryMouseOver = this.onHover.bindAsEventListener(this);
+    this.eventEntryClick = this.onClick.bindAsEventListener(this);
+
+    this.eventBlur = this.onBlur.bindAsEventListener(this);
+    this.eventKeyPress = this.onKeyPress.bindAsEventListener(this);
+    Event.observe(this.element, "blur", this.eventBlur);
+    Event.observe(this.element, "keypress", this.eventKeyPress);
+  },
+
+  destroy: function() {
+    Event.stopObserving(this.element, "blur", this.eventBlur);
+    Event.stopObserving(this.element, "keypress", this.eventKeyPress);
+    for (var i = 0; i < this.entryCount; i++) {
+      var entry = this.getEntry(i);
+      this.removeObservers(entry);
+    }
   },
 
   show: function() {
@@ -292,8 +306,13 @@
   },
 
   addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+    Event.observe(element, "mouseover", this.eventEntryMouseOver);
+    Event.observe(element, "click", this.eventEntryClick);
+  },
+
+  removeObservers: function(element) {
+    Event.stopObserving(element, "mouseover", this.eventEntryMouseOver);
+    Event.stopObserving(element, "click", this.eventEntryClick);
   },
 
   onObserverEvent: function() {
