diff --git a/src/lime/_internal/backend/html5/HTML5Window.hx b/src/lime/_internal/backend/html5/HTML5Window.hx
index 636275a5f..185972d97 100644
--- a/src/lime/_internal/backend/html5/HTML5Window.hx
+++ b/src/lime/_internal/backend/html5/HTML5Window.hx
@@ -250,6 +250,45 @@ class HTML5Window
public function close():Void
{
+ var element = parent.element;
+ if (element != null)
+ {
+ if (canvas != null)
+ {
+ if (element != cast canvas)
+ {
+ element.removeChild(canvas);
+ }
+ canvas = null;
+ }
+ else if (div != null)
+ {
+ element.removeChild(div);
+ div = null;
+ }
+
+ var events = ["mousedown", "mouseenter", "mouseleave", "mousemove", "mouseup", "wheel"];
+
+ for (event in events)
+ {
+ element.removeEventListener(event, handleMouseEvent, true);
+ }
+
+ element.removeEventListener("contextmenu", handleContextMenuEvent, true);
+
+ element.removeEventListener("dragstart", handleDragEvent, true);
+ element.removeEventListener("dragover", handleDragEvent, true);
+ element.removeEventListener("drop", handleDragEvent, true);
+
+ element.removeEventListener("touchstart", handleTouchEvent, true);
+ element.removeEventListener("touchmove", handleTouchEvent, true);
+ element.removeEventListener("touchend", handleTouchEvent, true);
+ element.removeEventListener("touchcancel", handleTouchEvent, true);
+
+ element.removeEventListener("gamepadconnected", handleGamepadEvent, true);
+ element.removeEventListener("gamepaddisconnected", handleGamepadEvent, true);
+ }
+
parent.application.__removeWindow(parent);
}