Index: ext/common.js
===================================================================
--- a/ext/common.js
+++ b/ext/common.js
@@ -10,42 +10,46 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+/* global defineNamespace */
+
 "use strict";
 
+const internal = Symbol();
+
 {
   window.ext = {};
 
-  let EventTarget = ext._EventTarget = function()
+  defineNamespace(ext, internal);
+
+  let EventTarget = ext[internal].EventTarget = function()
   {
-    this._listeners = new Set();
+    defineNamespace(this, internal);
+
+    this[internal].listeners = new Set();
   };
   EventTarget.prototype = {
     addListener(listener)
     {
-      this._listeners.add(listener);
+      this[internal].listeners.add(listener);
     },
     removeListener(listener)
     {
-      this._listeners.delete(listener);
-    },
-    _dispatch(...args)
-    {
-      let results = [];
-
-      for (let listener of this._listeners)
-        results.push(listener(...args));
-
-      return results;
+      this[internal].listeners.delete(listener);
     }
   };
 
+  ext[internal].dispatchEvent = (eventTarget, ...args) =>
+                                [...eventTarget[internal].listeners].map(
+                                  listener => listener(...args)
+                                );
+
 
   /* Message passing */
 
-  ext.onMessage = new ext._EventTarget();
+  ext.onMessage = new ext[internal].EventTarget();
 }
