diff --git a/lib/OpenLayers/Control.js b/lib/OpenLayers/Control.js index 6f04a645bd..dae21ee400 100644 --- a/lib/OpenLayers/Control.js +++ b/lib/OpenLayers/Control.js @@ -130,8 +130,12 @@ OpenLayers.Control = OpenLayers.Class({ // eliminate circular references if (this.handler) { this.handler.destroy(); - } - this.map = null; + this.handler = null; + } + if (this.map) { + this.map.removeControl(this); + this.map = null; + } }, /** diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index ac455ac470..a06e4948fa 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -797,8 +797,8 @@ OpenLayers.Map = OpenLayers.Class({ removeControl: function (control) { //make sure control is non-null and actually part of our map if ( (control) && (control == this.getControl(control.id)) ) { - if (!control.outsideViewport) { - this.viewPortDiv.removeChild(control.div) + if (!control.outsideViewport && control.div) { + this.viewPortDiv.removeChild(control.div); } OpenLayers.Util.removeItem(this.controls, control); } diff --git a/tests/test_Control.html b/tests/test_Control.html index 9757e1d0db..47095948b1 100644 --- a/tests/test_Control.html +++ b/tests/test_Control.html @@ -2,12 +2,38 @@